blob: 27f753efb4f2b918e2b26bdd7f0e4e53f230ca66 [file] [log] [blame]
// Copyright 2021 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.
#include "sysmem_metrics.h"
#include "src/devices/sysmem/metrics/metrics.cb.h"
SysmemMetrics::SysmemMetrics()
: metrics_buffer_(cobalt::MetricsBuffer::Create(sysmem_metrics::kProjectId)),
unused_page_check_(
metrics_buffer_->CreateMetricBuffer(sysmem_metrics::kUnusedPageCheckOldMetricId)) {}
cobalt::MetricsBuffer& SysmemMetrics::metrics_buffer() { return *metrics_buffer_; }
void SysmemMetrics::LogUnusedPageCheck(sysmem_metrics::UnusedPageCheckMetricDimensionEvent event) {
unused_page_check_.LogEvent({event});
}
void SysmemMetrics::LogUnusedPageCheckCounts(uint32_t succeeded_count, uint32_t failed_count) {
if (succeeded_count) {
unused_page_check_pending_success_count_ += succeeded_count;
}
if (failed_count) {
unused_page_check_.LogEventCount(
{sysmem_metrics::UnusedPageCheckOldMetricDimensionEvent_PatternCheckFailed}, failed_count);
}
zx::time now = zx::clock::get_monotonic();
if ((now >= unused_page_check_last_flush_time_ + kUnusedPageCheckFlushSuccessPeriod) &&
unused_page_check_pending_success_count_) {
unused_page_check_.LogEventCount(
{sysmem_metrics::UnusedPageCheckOldMetricDimensionEvent_PatternCheckOk},
unused_page_check_pending_success_count_);
unused_page_check_pending_success_count_ = 0;
unused_page_check_last_flush_time_ = now;
}
}