1 // Copyright 2021 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/metrics/structured/structured_metrics_client.h" 6 7 #include <utility> 8 9 #include "base/no_destructor.h" 10 #include "base/system/sys_info.h" 11 #include "components/metrics/structured/event.h" 12 13 namespace metrics::structured { 14 15 StructuredMetricsClient::StructuredMetricsClient() = default; 16 StructuredMetricsClient::~StructuredMetricsClient() = default; 17 18 // static Get()19StructuredMetricsClient* StructuredMetricsClient::Get() { 20 static base::NoDestructor<StructuredMetricsClient> client; 21 return client.get(); 22 } 23 24 // static Record(Event && event)25void StructuredMetricsClient::Record(Event&& event) { 26 StructuredMetricsClient::Get()->RecordEvent(std::move(event)); 27 } 28 RecordEvent(Event && event)29void StructuredMetricsClient::RecordEvent(Event&& event) { 30 // Records uptime if event sequence type and it has not been explicitly set. 31 if (event.IsEventSequenceType() && !event.has_system_uptime()) { 32 event.SetRecordedTimeSinceBoot(base::SysInfo::Uptime()); 33 } 34 35 if (delegate_ && delegate_->IsReadyToRecord()) { 36 delegate_->RecordEvent(std::move(event)); 37 } 38 } 39 SetDelegate(RecordingDelegate * delegate)40void StructuredMetricsClient::SetDelegate(RecordingDelegate* delegate) { 41 delegate_ = delegate; 42 } 43 UnsetDelegate()44void StructuredMetricsClient::UnsetDelegate() { 45 delegate_ = nullptr; 46 } 47 48 } // namespace metrics::structured 49