Chromium Code Reviews| Index: chrome/browser/metrics/chrome_metrics_service_client.cc |
| diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc |
| index ed4fe07e3de76fd0b621c1c19d21b31f16e43770..06bcd97b00f6730052616e841a27e4afe96d48b3 100644 |
| --- a/chrome/browser/metrics/chrome_metrics_service_client.cc |
| +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc |
| @@ -15,6 +15,7 @@ |
| #include "base/logging.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/metrics/histogram.h" |
| +#include "base/metrics/persistent_histogram_allocator.h" |
| #include "base/path_service.h" |
| #include "base/rand_util.h" |
| #include "base/strings/string16.h" |
| @@ -138,6 +139,11 @@ bool ShouldClearSavedMetrics() { |
| } |
| void RegisterInstallerFileMetricsPreferences(PrefRegistrySimple* registry) { |
| + base::GlobalHistogramAllocator* allocator = |
| + base::GlobalHistogramAllocator::GetEvenIfDisabled(); |
| + if (allocator) |
| + metrics::FileMetricsProvider::RegisterPrefs(registry, allocator->Name()); |
| + |
| #if defined(OS_WIN) |
| metrics::FileMetricsProvider::RegisterPrefs( |
| registry, installer::kSetupHistogramAllocatorName); |
| @@ -146,22 +152,50 @@ void RegisterInstallerFileMetricsPreferences(PrefRegistrySimple* registry) { |
| void RegisterInstallerFileMetricsProvider( |
| metrics::MetricsService* metrics_service) { |
| -#if defined(OS_WIN) |
| - std::unique_ptr<metrics::FileMetricsProvider> file_metrics( |
| + // Create an object to monitor files of metrics and include them in reports. |
| + std::unique_ptr<metrics::FileMetricsProvider> file_metrics_provider( |
| new metrics::FileMetricsProvider( |
| content::BrowserThread::GetBlockingPool() |
| ->GetTaskRunnerWithShutdownBehavior( |
| base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN), |
| g_browser_process->local_state())); |
| + |
| + // Build the pathname for browser's persistent metrics file. Set it as the |
| + // destination for the GlobalHistogramAllocator during process exit and add |
| + // it to the file-metrics-provider so one written from a previous run will |
| + // be loaded. |
|
Alexei Svitkine (slow)
2016/05/09 21:24:10
In this CL, these files are not yet being created
bcwhite
2016/05/10 15:42:40
Right. It used to be part but was removed because
|
| + base::FilePath metrics_file; |
| + if (base::PathService::Get(chrome::DIR_USER_DATA, &metrics_file)) { |
| + base::GlobalHistogramAllocator* allocator = |
| + base::GlobalHistogramAllocator::GetEvenIfDisabled(); |
| + if (allocator) { |
| + const char* allocator_name = allocator->Name(); |
| + metrics_file = metrics_file.AppendASCII(allocator_name) |
| + .AddExtension(FILE_PATH_LITERAL(".pma")); |
|
Alexei Svitkine (slow)
2016/05/09 21:24:10
Didn't we have this extension as a constant somewh
bcwhite
2016/05/10 15:42:40
Yes. It's in another CL still in review. But I'm
|
| + allocator->SetPersistentLocation(metrics_file); |
| + |
| + file_metrics_provider->RegisterFile( |
| + metrics_file, |
| + metrics::FileMetricsProvider::FILE_HISTOGRAMS_ATOMIC, |
| + metrics::FileMetricsProvider::ASSOCIATE_PREVIOUS_RUN, |
| + allocator_name); |
| + } |
| + } |
| + |
| +#if defined(OS_WIN) |
| + // Read metrics file from setup.exe. |
| base::FilePath program_dir; |
| base::PathService::Get(base::DIR_EXE, &program_dir); |
| - file_metrics->RegisterFile( |
| + file_metrics_provider->RegisterFile( |
| program_dir.AppendASCII(installer::kSetupHistogramAllocatorName) |
| - .AddExtension(L".pma"), |
| + .AddExtension(FILE_PATH_LITERAL(".pma")), |
| metrics::FileMetricsProvider::FILE_HISTOGRAMS_ATOMIC, |
| + metrics::FileMetricsProvider::ASSOCIATE_CURRENT_RUN, |
| installer::kSetupHistogramAllocatorName); |
| - metrics_service->RegisterMetricsProvider(std::move(file_metrics)); |
| #endif |
| + |
| + // Give the new provider to the metrics service. |
| + metrics_service->RegisterMetricsProvider(std::move(file_metrics_provider)); |
| } |
| } // namespace |