Index: chrome/browser/metrics/leak_detector_controller_unittest.cc |
diff --git a/chrome/browser/metrics/leak_detector_controller_unittest.cc b/chrome/browser/metrics/leak_detector_controller_unittest.cc |
index 4da0b5d33ad241be0e8602f02a8cc934288b0e4f..85d252a79ce8e672fcbf55d1fc2589af33d0c99c 100644 |
--- a/chrome/browser/metrics/leak_detector_controller_unittest.cc |
+++ b/chrome/browser/metrics/leak_detector_controller_unittest.cc |
@@ -69,6 +69,52 @@ TEST(LeakDetectorControllerTest, SingleReport) { |
ASSERT_EQ(0U, stored_reports.size()); |
} |
+TEST(LeakDetectorControllerTest, SingleReportHistory) { |
+ LeakReport report; |
+ report.alloc_breakdown_history.resize(3); |
+ report.alloc_breakdown_history[0].counts_by_size = {100, 200, 300}; |
+ report.alloc_breakdown_history[0].count_for_call_stack = 15; |
+ report.alloc_breakdown_history[1].counts_by_size = {150, 250, 350, 650}; |
+ report.alloc_breakdown_history[1].count_for_call_stack = 30; |
+ report.alloc_breakdown_history[2].counts_by_size = {200, 300, 400, 700, 800}; |
+ report.alloc_breakdown_history[2].count_for_call_stack = 45; |
+ |
+ TestLeakDetectorController* controller = &g_instance.Get(); |
+ controller->OnLeakFound(report); |
+ |
+ std::vector<MemoryLeakReportProto> stored_reports; |
+ controller->GetLeakReports(&stored_reports); |
+ ASSERT_EQ(1U, stored_reports.size()); |
+ |
+ const auto& history = stored_reports[0].alloc_breakdown_history(); |
+ ASSERT_EQ(3, history.size()); |
+ |
+ ASSERT_EQ(3, history.Get(0).counts_by_size().size()); |
+ EXPECT_EQ(100U, history.Get(0).counts_by_size(0)); |
+ EXPECT_EQ(200U, history.Get(0).counts_by_size(1)); |
+ EXPECT_EQ(300U, history.Get(0).counts_by_size(2)); |
+ EXPECT_EQ(15U, history.Get(0).count_for_call_stack()); |
+ |
+ ASSERT_EQ(4, history.Get(1).counts_by_size_size()); |
+ EXPECT_EQ(150U, history.Get(1).counts_by_size(0)); |
+ EXPECT_EQ(250U, history.Get(1).counts_by_size(1)); |
+ EXPECT_EQ(350U, history.Get(1).counts_by_size(2)); |
+ EXPECT_EQ(650U, history.Get(1).counts_by_size(3)); |
+ EXPECT_EQ(30U, history.Get(1).count_for_call_stack()); |
+ |
+ ASSERT_EQ(5, history.Get(2).counts_by_size_size()); |
+ EXPECT_EQ(200U, history.Get(2).counts_by_size(0)); |
+ EXPECT_EQ(300U, history.Get(2).counts_by_size(1)); |
+ EXPECT_EQ(400U, history.Get(2).counts_by_size(2)); |
+ EXPECT_EQ(700U, history.Get(2).counts_by_size(3)); |
+ EXPECT_EQ(800U, history.Get(2).counts_by_size(4)); |
+ EXPECT_EQ(45U, history.Get(2).count_for_call_stack()); |
+ |
+ // No more reports. |
+ controller->GetLeakReports(&stored_reports); |
+ ASSERT_EQ(0U, stored_reports.size()); |
+} |
+ |
TEST(LeakDetectorControllerTest, MultipleReportsSeparately) { |
TestLeakDetectorController* controller = &g_instance.Get(); |
std::vector<MemoryLeakReportProto> stored_reports; |