delegating_provider.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/metrics/delegating_provider.h"
  5. #include "base/barrier_closure.h"
  6. #include "base/notreached.h"
  7. namespace metrics {
  8. DelegatingProvider::DelegatingProvider() = default;
  9. DelegatingProvider::~DelegatingProvider() = default;
  10. void DelegatingProvider::RegisterMetricsProvider(
  11. std::unique_ptr<MetricsProvider> provider) {
  12. metrics_providers_.push_back(std::move(provider));
  13. }
  14. const std::vector<std::unique_ptr<MetricsProvider>>&
  15. DelegatingProvider::GetProviders() {
  16. return metrics_providers_;
  17. }
  18. void DelegatingProvider::Init() {
  19. for (auto& provider : metrics_providers_)
  20. provider->Init();
  21. }
  22. void DelegatingProvider::AsyncInit(base::OnceClosure done_callback) {
  23. base::RepeatingClosure barrier =
  24. base::BarrierClosure(metrics_providers_.size(), std::move(done_callback));
  25. for (auto& provider : metrics_providers_) {
  26. provider->AsyncInit(barrier);
  27. }
  28. }
  29. void DelegatingProvider::OnDidCreateMetricsLog() {
  30. for (auto& provider : metrics_providers_)
  31. provider->OnDidCreateMetricsLog();
  32. }
  33. void DelegatingProvider::OnRecordingEnabled() {
  34. for (auto& provider : metrics_providers_)
  35. provider->OnRecordingEnabled();
  36. }
  37. void DelegatingProvider::OnRecordingDisabled() {
  38. for (auto& provider : metrics_providers_)
  39. provider->OnRecordingDisabled();
  40. }
  41. void DelegatingProvider::OnClientStateCleared() {
  42. for (auto& provider : metrics_providers_)
  43. provider->OnClientStateCleared();
  44. }
  45. void DelegatingProvider::OnAppEnterBackground() {
  46. for (auto& provider : metrics_providers_)
  47. provider->OnAppEnterBackground();
  48. }
  49. bool DelegatingProvider::HasIndependentMetrics() {
  50. // These are collected seperately for each provider.
  51. NOTREACHED();
  52. return false;
  53. }
  54. void DelegatingProvider::ProvideSystemProfileMetrics(
  55. SystemProfileProto* system_profile_proto) {
  56. // ProvideSystemProfileMetricsWithLogCreationTime() should be called instead.
  57. NOTREACHED();
  58. }
  59. void DelegatingProvider::ProvideSystemProfileMetricsWithLogCreationTime(
  60. base::TimeTicks log_creation_time,
  61. SystemProfileProto* system_profile_proto) {
  62. for (auto& provider : metrics_providers_) {
  63. provider->ProvideSystemProfileMetricsWithLogCreationTime(
  64. log_creation_time, system_profile_proto);
  65. }
  66. }
  67. bool DelegatingProvider::HasPreviousSessionData() {
  68. // All providers are queried (rather than stopping after the first "true"
  69. // response) in case they do any kind of setup work in preparation for
  70. // the later call to RecordInitialHistogramSnapshots().
  71. bool has_stability_metrics = false;
  72. for (auto& provider : metrics_providers_)
  73. has_stability_metrics |= provider->HasPreviousSessionData();
  74. return has_stability_metrics;
  75. }
  76. void DelegatingProvider::ProvidePreviousSessionData(
  77. ChromeUserMetricsExtension* uma_proto) {
  78. for (const auto& provider : metrics_providers_)
  79. provider->ProvidePreviousSessionData(uma_proto);
  80. }
  81. void DelegatingProvider::ProvideCurrentSessionData(
  82. ChromeUserMetricsExtension* uma_proto) {
  83. for (const auto& provider : metrics_providers_)
  84. provider->ProvideCurrentSessionData(uma_proto);
  85. }
  86. void DelegatingProvider::ProvideCurrentSessionUKMData() {
  87. for (const auto& provider : metrics_providers_)
  88. provider->ProvideCurrentSessionUKMData();
  89. }
  90. void DelegatingProvider::ClearSavedStabilityMetrics() {
  91. for (auto& provider : metrics_providers_)
  92. provider->ClearSavedStabilityMetrics();
  93. }
  94. void DelegatingProvider::RecordHistogramSnapshots(
  95. base::HistogramSnapshotManager* snapshot_manager) {
  96. for (auto& provider : metrics_providers_)
  97. provider->RecordHistogramSnapshots(snapshot_manager);
  98. }
  99. void DelegatingProvider::RecordInitialHistogramSnapshots(
  100. base::HistogramSnapshotManager* snapshot_manager) {
  101. for (auto& provider : metrics_providers_)
  102. provider->RecordInitialHistogramSnapshots(snapshot_manager);
  103. }
  104. } // namespace metrics