| 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
|
|
|