| 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.
|
| + 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"));
|
| + 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
|
|
|