| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_STORAGE_BLOBFS_VERIFICATION_METRICS_H_ |
| #define SRC_STORAGE_BLOBFS_VERIFICATION_METRICS_H_ |
| |
| #include <lib/zx/time.h> |
| #include <zircon/compiler.h> |
| |
| #include <mutex> |
| |
| #include <fs/ticker.h> |
| |
| namespace blobfs { |
| |
| // The |VerificationMetrics| class tracks blobfs metrics related to Merkle verification of blobs, |
| // both on blob reads and on blob writes. |
| // |
| // This class is thread-safe. Blobfs can update these metrics both from the blobfs main thread (when |
| // reading blobs that cannot be paged, and when writing new blobs), and the userpager thread (when |
| // reading blobs that support paging). |
| class VerificationMetrics { |
| public: |
| VerificationMetrics() = default; |
| VerificationMetrics(const VerificationMetrics&) = delete; |
| VerificationMetrics& operator=(const VerificationMetrics&) = delete; |
| |
| // Increments aggregate information about Merkle verification of blobs |
| // since mounting. |
| void Increment(uint64_t data_size, uint64_t merkle_size, fs::Duration duration); |
| |
| struct Snapshot { |
| uint64_t blobs_verified; |
| uint64_t data_size; |
| uint64_t merkle_size; |
| zx_ticks_t verification_time; |
| }; |
| |
| // Returns a snapshot of the metrics. |
| Snapshot Get(); |
| |
| private: |
| uint64_t blobs_verified_ __TA_GUARDED(mutex_) = 0; |
| uint64_t blobs_verified_total_size_data_ __TA_GUARDED(mutex_) = 0; |
| uint64_t blobs_verified_total_size_merkle_ __TA_GUARDED(mutex_) = 0; |
| zx::ticks total_verification_time_ticks_ __TA_GUARDED(mutex_) = {}; |
| |
| std::mutex mutex_; |
| }; |
| |
| } // namespace blobfs |
| |
| #endif // SRC_STORAGE_BLOBFS_VERIFICATION_METRICS_H_ |