xref: /aosp_15_r20/external/cronet/components/metrics/structured/structured_metrics_client.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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()19 StructuredMetricsClient* StructuredMetricsClient::Get() {
20   static base::NoDestructor<StructuredMetricsClient> client;
21   return client.get();
22 }
23 
24 // static
Record(Event && event)25 void StructuredMetricsClient::Record(Event&& event) {
26   StructuredMetricsClient::Get()->RecordEvent(std::move(event));
27 }
28 
RecordEvent(Event && event)29 void 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)40 void StructuredMetricsClient::SetDelegate(RecordingDelegate* delegate) {
41   delegate_ = delegate;
42 }
43 
UnsetDelegate()44 void StructuredMetricsClient::UnsetDelegate() {
45   delegate_ = nullptr;
46 }
47 
48 }  // namespace metrics::structured
49