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

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

Issue 2047163002: Move leak_detector_controller to its own directory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update include paths Created 4 years, 6 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/leak_detector_controller.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
deleted file mode 100644
index a2b92c41bf439f4f02c64ecc90572f54dc5456d5..0000000000000000000000000000000000000000
--- a/chrome/browser/metrics/leak_detector_controller_unittest.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/metrics/leak_detector_controller.h"
-
-#include <set>
-
-#include "base/lazy_instance.h"
-#include "base/macros.h"
-#include "components/metrics/proto/memory_leak_report.pb.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace metrics {
-
-namespace {
-
-// Converts a vector of values into a protobuf RepeatedField. Although there is
-// no hard requirement, T should be a POD type since that is what RepeatedField
-// is used for in protobuf classes.
-template <typename T>
-void InitializeRepeatedField(const std::vector<T>& input,
- ::google::protobuf::RepeatedField<T>* output) {
- *output = ::google::protobuf::RepeatedField<T>(input.begin(), input.end());
-}
-
-} // namespace
-
-// Test class for LeakDetectorController that exposes protected methods.
-class TestLeakDetectorController : public LeakDetectorController {
- public:
- using LeakDetectorController::OnLeaksFound;
-
- TestLeakDetectorController() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestLeakDetectorController);
-};
-
-// Use a global instance of the test class because LeakDetectorController
-// initializes class LeakDetector, which can only be initialized once, enforced
-// by an internal CHECK. Multiple initializations of LeakDetectorController in
-// the same process will result in multiple initializations of class
-// LeakDetector.
-//
-// See src/components/metrics/leak_detector/leak_detector.h for more info.
-base::LazyInstance<TestLeakDetectorController> g_instance =
- LAZY_INSTANCE_INITIALIZER;
-
-TEST(LeakDetectorControllerTest, SingleReport) {
- MemoryLeakReportProto report;
- report.set_size_bytes(8);
- InitializeRepeatedField({1, 2, 3, 4}, report.mutable_call_stack());
-
- TestLeakDetectorController* controller = &g_instance.Get();
- controller->OnLeaksFound({report});
-
- std::vector<MemoryLeakReportProto> stored_reports;
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(1U, stored_reports.size());
-
- const MemoryLeakReportProto& proto = stored_reports[0];
- EXPECT_EQ(8U, proto.size_bytes());
- ASSERT_EQ(4, proto.call_stack().size());
- EXPECT_EQ(1U, proto.call_stack().Get(0));
- EXPECT_EQ(2U, proto.call_stack().Get(1));
- EXPECT_EQ(3U, proto.call_stack().Get(2));
- EXPECT_EQ(4U, proto.call_stack().Get(3));
-
- // Check that default leak detector parameters are stored in the leak report.
- // Default values are listed in leak_detector_controller.cc.
- EXPECT_DOUBLE_EQ(1.0f / 256, proto.params().sampling_rate());
- EXPECT_EQ(4U, proto.params().max_stack_depth());
- EXPECT_EQ(32U * 1024 * 1024, proto.params().analysis_interval_bytes());
- EXPECT_EQ(4U, proto.params().size_suspicion_threshold());
- EXPECT_EQ(4U, proto.params().call_stack_suspicion_threshold());
-
- // No more reports.
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(0U, stored_reports.size());
-}
-
-TEST(LeakDetectorControllerTest, SingleReportHistory) {
- MemoryLeakReportProto report;
-
- auto entry = report.add_alloc_breakdown_history();
- InitializeRepeatedField({100, 200, 300}, entry->mutable_counts_by_size());
- entry->set_count_for_call_stack(15);
-
- entry = report.add_alloc_breakdown_history();
- InitializeRepeatedField({150, 250, 350, 650},
- entry->mutable_counts_by_size());
- entry->set_count_for_call_stack(30);
-
- entry = report.add_alloc_breakdown_history();
- InitializeRepeatedField({200, 300, 400, 700, 800},
- entry->mutable_counts_by_size());
- entry->set_count_for_call_stack(45);
-
- TestLeakDetectorController* controller = &g_instance.Get();
- controller->OnLeaksFound({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;
-
- // Pass in first report.
- MemoryLeakReportProto report1;
- report1.set_size_bytes(8);
- InitializeRepeatedField({1, 2, 3, 4}, report1.mutable_call_stack());
-
- controller->OnLeaksFound({report1});
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(1U, stored_reports.size());
-
- EXPECT_EQ(8U, stored_reports[0].size_bytes());
- ASSERT_EQ(4, stored_reports[0].call_stack().size());
- EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
- EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
- EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
- EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(0U, stored_reports.size());
-
- // Pass in second report.
- MemoryLeakReportProto report2;
- report2.set_size_bytes(16);
- InitializeRepeatedField({5, 6, 7, 8, 9, 10}, report2.mutable_call_stack());
- controller->OnLeaksFound({report2});
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(1U, stored_reports.size());
-
- EXPECT_EQ(16U, stored_reports[0].size_bytes());
- ASSERT_EQ(6, stored_reports[0].call_stack().size());
- EXPECT_EQ(5U, stored_reports[0].call_stack().Get(0));
- EXPECT_EQ(6U, stored_reports[0].call_stack().Get(1));
- EXPECT_EQ(7U, stored_reports[0].call_stack().Get(2));
- EXPECT_EQ(8U, stored_reports[0].call_stack().Get(3));
- EXPECT_EQ(9U, stored_reports[0].call_stack().Get(4));
- EXPECT_EQ(10U, stored_reports[0].call_stack().Get(5));
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(0U, stored_reports.size());
-
- // Pass in third report.
- MemoryLeakReportProto report3;
- report3.set_size_bytes(24);
- InitializeRepeatedField({9, 10, 11, 12, 13, 14, 15, 16},
- report3.mutable_call_stack());
- controller->OnLeaksFound({report3});
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(1U, stored_reports.size());
-
- EXPECT_EQ(24U, stored_reports[0].size_bytes());
- ASSERT_EQ(8, stored_reports[0].call_stack().size());
- EXPECT_EQ(9U, stored_reports[0].call_stack().Get(0));
- EXPECT_EQ(10U, stored_reports[0].call_stack().Get(1));
- EXPECT_EQ(11U, stored_reports[0].call_stack().Get(2));
- EXPECT_EQ(12U, stored_reports[0].call_stack().Get(3));
- EXPECT_EQ(13U, stored_reports[0].call_stack().Get(4));
- EXPECT_EQ(14U, stored_reports[0].call_stack().Get(5));
- EXPECT_EQ(15U, stored_reports[0].call_stack().Get(6));
- EXPECT_EQ(16U, stored_reports[0].call_stack().Get(7));
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(0U, stored_reports.size());
-}
-
-TEST(LeakDetectorControllerTest, MultipleReportsTogether) {
- std::vector<MemoryLeakReportProto> reports(3);
- reports[0].set_size_bytes(8);
- InitializeRepeatedField({1, 2, 3, 4}, reports[0].mutable_call_stack());
- reports[1].set_size_bytes(16);
- InitializeRepeatedField({5, 6, 7, 8, 9, 10}, reports[1].mutable_call_stack());
- reports[2].set_size_bytes(24);
- InitializeRepeatedField({9, 10, 11, 12, 13, 14, 15, 16},
- reports[2].mutable_call_stack());
-
- TestLeakDetectorController* controller = &g_instance.Get();
- controller->OnLeaksFound(reports);
-
- std::vector<MemoryLeakReportProto> stored_reports;
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(3U, stored_reports.size());
-
- EXPECT_EQ(8U, stored_reports[0].size_bytes());
- ASSERT_EQ(4, stored_reports[0].call_stack().size());
- EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
- EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
- EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
- EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
-
- EXPECT_EQ(16U, stored_reports[1].size_bytes());
- ASSERT_EQ(6, stored_reports[1].call_stack().size());
- EXPECT_EQ(5U, stored_reports[1].call_stack().Get(0));
- EXPECT_EQ(6U, stored_reports[1].call_stack().Get(1));
- EXPECT_EQ(7U, stored_reports[1].call_stack().Get(2));
- EXPECT_EQ(8U, stored_reports[1].call_stack().Get(3));
- EXPECT_EQ(9U, stored_reports[1].call_stack().Get(4));
- EXPECT_EQ(10U, stored_reports[1].call_stack().Get(5));
-
- EXPECT_EQ(24U, stored_reports[2].size_bytes());
- ASSERT_EQ(8, stored_reports[2].call_stack().size());
- EXPECT_EQ(9U, stored_reports[2].call_stack().Get(0));
- EXPECT_EQ(10U, stored_reports[2].call_stack().Get(1));
- EXPECT_EQ(11U, stored_reports[2].call_stack().Get(2));
- EXPECT_EQ(12U, stored_reports[2].call_stack().Get(3));
- EXPECT_EQ(13U, stored_reports[2].call_stack().Get(4));
- EXPECT_EQ(14U, stored_reports[2].call_stack().Get(5));
- EXPECT_EQ(15U, stored_reports[2].call_stack().Get(6));
- EXPECT_EQ(16U, stored_reports[2].call_stack().Get(7));
-
- controller->GetLeakReports(&stored_reports);
- ASSERT_EQ(0U, stored_reports.size());
-}
-
-} // namespace metrics
« no previous file with comments | « chrome/browser/metrics/leak_detector_controller.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698