• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <string_view>
8 
9 namespace metrics {
10 
11 // static
12 bool MetricsLogsEventManager::ScopedNotifyLogType::instance_exists_ = false;
13 
ScopedNotifyLogType(MetricsLogsEventManager * logs_event_manager,MetricsLog::LogType log_type)14 MetricsLogsEventManager::ScopedNotifyLogType::ScopedNotifyLogType(
15     MetricsLogsEventManager* logs_event_manager,
16     MetricsLog::LogType log_type)
17     : logs_event_manager_(logs_event_manager) {
18   DCHECK(!instance_exists_);
19   instance_exists_ = true;
20   if (logs_event_manager_)
21     logs_event_manager_->NotifyLogType(log_type);
22 }
23 
~ScopedNotifyLogType()24 MetricsLogsEventManager::ScopedNotifyLogType::~ScopedNotifyLogType() {
25   DCHECK(instance_exists_);
26   if (logs_event_manager_)
27     logs_event_manager_->NotifyLogType(std::nullopt);
28   instance_exists_ = false;
29 }
30 
31 MetricsLogsEventManager::MetricsLogsEventManager() = default;
32 MetricsLogsEventManager::~MetricsLogsEventManager() = default;
33 
AddObserver(Observer * observer)34 void MetricsLogsEventManager::AddObserver(Observer* observer) {
35   observers_.AddObserver(observer);
36 }
37 
RemoveObserver(Observer * observer)38 void MetricsLogsEventManager::RemoveObserver(Observer* observer) {
39   observers_.RemoveObserver(observer);
40 }
41 
NotifyLogCreated(std::string_view log_hash,std::string_view log_data,std::string_view log_timestamp,CreateReason reason)42 void MetricsLogsEventManager::NotifyLogCreated(std::string_view log_hash,
43                                                std::string_view log_data,
44                                                std::string_view log_timestamp,
45                                                CreateReason reason) {
46   for (Observer& observer : observers_)
47     observer.OnLogCreated(log_hash, log_data, log_timestamp, reason);
48 }
49 
NotifyLogEvent(LogEvent event,std::string_view log_hash,std::string_view message)50 void MetricsLogsEventManager::NotifyLogEvent(LogEvent event,
51                                              std::string_view log_hash,
52                                              std::string_view message) {
53   for (Observer& observer : observers_)
54     observer.OnLogEvent(event, log_hash, message);
55 }
56 
NotifyLogType(std::optional<MetricsLog::LogType> log_type)57 void MetricsLogsEventManager::NotifyLogType(
58     std::optional<MetricsLog::LogType> log_type) {
59   for (Observer& observer : observers_)
60     observer.OnLogType(log_type);
61 }
62 
63 }  // namespace metrics
64