Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1167)

Unified Diff: components/metrics/metrics_service.cc

Issue 2918533003: Send metrics with embedded system profiles after system startup. (Closed)
Patch Set: addressed final review comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/metrics/metrics_service.h ('k') | components/metrics/metrics_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/metrics/metrics_service.cc
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index f489d16019e897f326b09e2effe5c263ffd1a411..6a44e35b51e90cf0bfb41295c5bcd7ad8be92fb1 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -625,6 +625,12 @@ void MetricsService::OpenNewLog() {
FROM_HERE, base::Bind(&MetricsService::StartInitTask,
self_ptr_factory_.GetWeakPtr()),
base::TimeDelta::FromSeconds(kInitializationDelaySeconds));
+
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&MetricsService::PrepareProviderMetricsTask,
+ self_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(2 * kInitializationDelaySeconds));
}
}
@@ -971,6 +977,37 @@ void MetricsService::RecordCurrentStabilityHistograms() {
provider->RecordInitialHistogramSnapshots(&histogram_snapshot_manager_);
}
+bool MetricsService::PrepareProviderMetricsLog() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ // Create a new log. This will have some defaut values injected in it but
+ // those will be overwritten when an embedded profile is extracted.
+ std::unique_ptr<MetricsLog> log = CreateLog(MetricsLog::INDEPENDENT_LOG);
+
+ for (auto& provider : metrics_providers_) {
+ if (log->LoadIndependentMetrics(provider.get())) {
+ log_manager_.PauseCurrentLog();
+ log_manager_.BeginLoggingWithLog(std::move(log));
+ log_manager_.FinishCurrentLog(log_store());
+ log_manager_.ResumePausedLog();
+ return true;
+ }
+ }
+ return false;
+}
+
+void MetricsService::PrepareProviderMetricsTask() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ bool found = PrepareProviderMetricsLog();
+ base::TimeDelta next_check = found ? base::TimeDelta::FromSeconds(5)
+ : base::TimeDelta::FromMinutes(15);
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&MetricsService::PrepareProviderMetricsTask,
+ self_ptr_factory_.GetWeakPtr()),
+ next_check);
+}
+
void MetricsService::LogCleanShutdown(bool end_completed) {
DCHECK(thread_checker_.CalledOnValidThread());
// Redundant setting to assure that we always reset this value at shutdown
« no previous file with comments | « components/metrics/metrics_service.h ('k') | components/metrics/metrics_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698