Index: content/browser/browser_main_runner.cc |
diff --git a/content/browser/browser_main_runner.cc b/content/browser/browser_main_runner.cc |
index 96a3454f1499edbb0211afbcdb1ba8024cb6e2bc..1ec4fd7ecc6e0ccd4cdb60193632040869cb76b1 100644 |
--- a/content/browser/browser_main_runner.cc |
+++ b/content/browser/browser_main_runner.cc |
@@ -11,6 +11,7 @@ |
#include "base/macros.h" |
#include "base/metrics/histogram.h" |
#include "base/metrics/histogram_macros.h" |
+#include "base/metrics/persistent_histogram_allocator.h" |
#include "base/metrics/statistics_recorder.h" |
#include "base/profiler/scoped_profile.h" |
#include "base/profiler/scoped_tracker.h" |
@@ -60,6 +61,15 @@ class BrowserMainRunnerImpl : public BrowserMainRunner { |
} |
int Initialize(const MainFunctionParams& parameters) override { |
+ // Create persistent/shared memory and allow histograms to be stored in it. |
+ // Memory that is not actualy used won't be physically mapped by the system. |
+ // BrowserMetrics usage peaked around 1.9MiB as of 2016-02-20. |
+ base::GlobalHistogramAllocator::CreateWithLocalMemory( |
+ 3 << 20, // 3 MiB |
+ 0x935DDD43, // SHA1(BrowserMetrics) |
+ "BrowserMetrics"); |
+ base::GlobalHistogramAllocator::Disable(); // Enabled by experiment only. |
+ |
SCOPED_UMA_HISTOGRAM_LONG_TIMER( |
"Startup.BrowserMainRunnerImplInitializeLongTime"); |
@@ -224,6 +234,14 @@ class BrowserMainRunnerImpl : public BrowserMainRunner { |
notification_service_.reset(NULL); |
+ // Dump all the persistent metrics to a file for upload during the next |
+ // run of the browser. Get() will return null if the allocator is not |
+ // enabled and so skip writing the data. |
+ base::GlobalHistogramAllocator* allocator = |
+ base::GlobalHistogramAllocator::Get(); |
+ if (allocator) |
+ allocator->WriteToPersistentLocation(); |
+ |
is_shutdown_ = true; |
} |
} |