xref: /aosp_15_r20/external/cronet/components/metrics/metrics_logs_event_manager.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2022 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/metrics_logs_event_manager.h"
6 
7 namespace metrics {
8 
9 // static
10 bool MetricsLogsEventManager::ScopedNotifyLogType::instance_exists_ = false;
11 
ScopedNotifyLogType(MetricsLogsEventManager * logs_event_manager,MetricsLog::LogType log_type)12 MetricsLogsEventManager::ScopedNotifyLogType::ScopedNotifyLogType(
13     MetricsLogsEventManager* logs_event_manager,
14     MetricsLog::LogType log_type)
15     : logs_event_manager_(logs_event_manager) {
16   DCHECK(!instance_exists_);
17   instance_exists_ = true;
18   if (logs_event_manager_)
19     logs_event_manager_->NotifyLogType(log_type);
20 }
21 
~ScopedNotifyLogType()22 MetricsLogsEventManager::ScopedNotifyLogType::~ScopedNotifyLogType() {
23   DCHECK(instance_exists_);
24   if (logs_event_manager_)
25     logs_event_manager_->NotifyLogType(std::nullopt);
26   instance_exists_ = false;
27 }
28 
29 MetricsLogsEventManager::MetricsLogsEventManager() = default;
30 MetricsLogsEventManager::~MetricsLogsEventManager() = default;
31 
AddObserver(Observer * observer)32 void MetricsLogsEventManager::AddObserver(Observer* observer) {
33   observers_.AddObserver(observer);
34 }
35 
RemoveObserver(Observer * observer)36 void MetricsLogsEventManager::RemoveObserver(Observer* observer) {
37   observers_.RemoveObserver(observer);
38 }
39 
NotifyLogCreated(base::StringPiece log_hash,base::StringPiece log_data,base::StringPiece log_timestamp,CreateReason reason)40 void MetricsLogsEventManager::NotifyLogCreated(base::StringPiece log_hash,
41                                                base::StringPiece log_data,
42                                                base::StringPiece log_timestamp,
43                                                CreateReason reason) {
44   for (Observer& observer : observers_)
45     observer.OnLogCreated(log_hash, log_data, log_timestamp, reason);
46 }
47 
NotifyLogEvent(LogEvent event,base::StringPiece log_hash,base::StringPiece message)48 void MetricsLogsEventManager::NotifyLogEvent(LogEvent event,
49                                              base::StringPiece log_hash,
50                                              base::StringPiece message) {
51   for (Observer& observer : observers_)
52     observer.OnLogEvent(event, log_hash, message);
53 }
54 
NotifyLogType(std::optional<MetricsLog::LogType> log_type)55 void MetricsLogsEventManager::NotifyLogType(
56     std::optional<MetricsLog::LogType> log_type) {
57   for (Observer& observer : observers_)
58     observer.OnLogType(log_type);
59 }
60 
61 }  // namespace metrics
62