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

Unified Diff: chrome/browser/metrics/subprocess_metrics_provider_unittest.cc

Issue 2023253002: Merge subprocess metrics into global StatisticsRecorder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: improved comment about when merges occur Created 4 years, 7 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 | « chrome/browser/metrics/subprocess_metrics_provider.cc ('k') | components/metrics/metrics_provider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/metrics/subprocess_metrics_provider_unittest.cc
diff --git a/chrome/browser/metrics/subprocess_metrics_provider_unittest.cc b/chrome/browser/metrics/subprocess_metrics_provider_unittest.cc
index 7a6e92632ccdcbff93169fa3abdb22df6fc82564..43f697ee7298484d25acbda83c9adb187b30b955 100644
--- a/chrome/browser/metrics/subprocess_metrics_provider_unittest.cc
+++ b/chrome/browser/metrics/subprocess_metrics_provider_unittest.cc
@@ -12,6 +12,7 @@
#include "base/metrics/histogram_snapshot_manager.h"
#include "base/metrics/persistent_histogram_allocator.h"
#include "base/metrics/persistent_memory_allocator.h"
+#include "base/metrics/statistics_recorder.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
@@ -59,19 +60,18 @@ class SubprocessMetricsProviderTest : public testing::Test {
// Get this first so it isn't created inside a persistent allocator.
base::PersistentHistogramAllocator::GetCreateHistogramResultHistogram();
- // RecordHistogramSnapshots needs to be called beause it uses a histogram
+ // MergeHistogramDeltas needs to be called beause it uses a histogram
// macro which caches a pointer to a histogram. If not done before setting
// a persistent global allocator, then it would point into memory that
- // will go away. The easiest way to call it is through an existing utility
- // method.
- GetSnapshotHistogramCount();
+ // will go away.
+ provider_.MergeHistogramDeltas();
+
+ // Create a dedicated StatisticsRecorder for this test.
+ test_recorder_.reset(new base::StatisticsRecorder());
// Create a global allocator using a block of memory from the heap.
base::GlobalHistogramAllocator::CreateWithLocalMemory(TEST_MEMORY_SIZE,
0, "");
-
- // Enable metrics reporting by default.
- provider_.OnRecordingEnabled();
}
~SubprocessMetricsProviderTest() override {
@@ -80,24 +80,26 @@ class SubprocessMetricsProviderTest : public testing::Test {
SubprocessMetricsProvider* provider() { return &provider_; }
- std::unique_ptr<base::PersistentHistogramAllocator> GetDuplicateAllocator() {
- base::GlobalHistogramAllocator* global_allocator =
- base::GlobalHistogramAllocator::Get();
-
- // Just wrap around the data segment in-use by the global allocator.
+ std::unique_ptr<base::PersistentHistogramAllocator> CreateDuplicateAllocator(
+ base::PersistentHistogramAllocator* allocator) {
+ // Just wrap around the data segment in-use by the passed allocator.
return WrapUnique(new base::PersistentHistogramAllocator(
WrapUnique(new base::PersistentMemoryAllocator(
- const_cast<void*>(global_allocator->data()),
- global_allocator->length(), 0, 0, "", false))));
+ const_cast<void*>(allocator->data()), allocator->length(),
+ 0, 0, "", false))));
}
size_t GetSnapshotHistogramCount() {
+ // Merge the data from the allocator into the StatisticsRecorder.
+ provider_.MergeHistogramDeltas();
+
+ // Flatten what is known to see what has changed since the last time.
HistogramFlattenerDeltaRecorder flattener;
base::HistogramSnapshotManager snapshot_manager(&flattener);
- snapshot_manager.StartDeltas();
- provider_.RecordHistogramSnapshots(&snapshot_manager);
- snapshot_manager.FinishDeltas();
- provider_.OnDidCreateMetricsLog();
+ // "true" to the begin() includes histograms held in persistent storage.
+ snapshot_manager.PrepareDeltas(
+ base::StatisticsRecorder::begin(true), base::StatisticsRecorder::end(),
+ base::Histogram::kNoFlags, base::Histogram::kNoFlags);
return flattener.GetRecordedDeltaHistogramNames().size();
}
@@ -116,6 +118,7 @@ class SubprocessMetricsProviderTest : public testing::Test {
private:
SubprocessMetricsProvider provider_;
+ std::unique_ptr<base::StatisticsRecorder> test_recorder_;
DISALLOW_COPY_AND_ASSIGN(SubprocessMetricsProviderTest);
};
@@ -123,11 +126,17 @@ class SubprocessMetricsProviderTest : public testing::Test {
TEST_F(SubprocessMetricsProviderTest, SnapshotMetrics) {
base::HistogramBase* foo = base::Histogram::FactoryGet("foo", 1, 100, 10, 0);
base::HistogramBase* bar = base::Histogram::FactoryGet("bar", 1, 100, 10, 0);
+ base::HistogramBase* baz = base::Histogram::FactoryGet("baz", 1, 100, 10, 0);
foo->Add(42);
bar->Add(84);
- // Register an allocator that duplicates the global allocator.
- RegisterSubprocessAllocator(123, GetDuplicateAllocator());
+ // Detach the global allocator but keep it around until this method exits
+ // so that the memory holding histogram data doesn't get released. Register
+ // a new allocator that duplicates the global one.
+ std::unique_ptr<base::GlobalHistogramAllocator> global_allocator(
+ base::GlobalHistogramAllocator::ReleaseForTesting());
+ RegisterSubprocessAllocator(123,
+ CreateDuplicateAllocator(global_allocator.get()));
// Recording should find the two histograms created in persistent memory.
EXPECT_EQ(2U, GetSnapshotHistogramCount());
@@ -136,13 +145,12 @@ TEST_F(SubprocessMetricsProviderTest, SnapshotMetrics) {
EXPECT_EQ(0U, GetSnapshotHistogramCount());
// Create a new histogram and update existing ones. Should now report 3 items.
- base::HistogramBase* baz = base::Histogram::FactoryGet("baz", 1, 100, 10, 0);
baz->Add(1969);
foo->Add(10);
bar->Add(20);
EXPECT_EQ(3U, GetSnapshotHistogramCount());
- // Ensure that deregistering still keeps allocator around for final report.
+ // Ensure that deregistering does a final merge of the data.
foo->Add(10);
bar->Add(20);
DeregisterSubprocessAllocator(123);
@@ -153,48 +161,3 @@ TEST_F(SubprocessMetricsProviderTest, SnapshotMetrics) {
bar->Add(20);
EXPECT_EQ(0U, GetSnapshotHistogramCount());
}
-
-TEST_F(SubprocessMetricsProviderTest, EnableDisable) {
- base::HistogramBase* foo = base::Histogram::FactoryGet("foo", 1, 100, 10, 0);
- base::HistogramBase* bar = base::Histogram::FactoryGet("bar", 1, 100, 10, 0);
-
- // Simulate some "normal" operation...
- RegisterSubprocessAllocator(123, GetDuplicateAllocator());
- foo->Add(42);
- bar->Add(84);
- EXPECT_EQ(2U, GetSnapshotHistogramCount());
- foo->Add(42);
- bar->Add(84);
- EXPECT_EQ(2U, GetSnapshotHistogramCount());
-
- // Ensure that disable/enable reporting won't affect "live" allocators.
- DisableRecording();
- EnableRecording();
- foo->Add(42);
- bar->Add(84);
- EXPECT_EQ(2U, GetSnapshotHistogramCount());
-
- // Ensure that allocators are released when reporting is disabled.
- DisableRecording();
- DeregisterSubprocessAllocator(123);
- EnableRecording();
- foo->Add(42);
- bar->Add(84);
- EXPECT_EQ(0U, GetSnapshotHistogramCount());
-
- // Ensure that allocators added when reporting disabled will work if enabled.
- DisableRecording();
- RegisterSubprocessAllocator(123, GetDuplicateAllocator());
- EnableRecording();
- foo->Add(42);
- bar->Add(84);
- EXPECT_EQ(2U, GetSnapshotHistogramCount());
-
- // Ensure that last-chance allocators are released if reporting is disabled.
- DeregisterSubprocessAllocator(123);
- DisableRecording();
- EnableRecording();
- foo->Add(42);
- bar->Add(84);
- EXPECT_EQ(0U, GetSnapshotHistogramCount());
-}
« no previous file with comments | « chrome/browser/metrics/subprocess_metrics_provider.cc ('k') | components/metrics/metrics_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698