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

Side by Side Diff: chrome/browser/metrics/leak_detector_controller_unittest.cc

Issue 1681263003: metrics: Add leak detector controller in Chrome OS metrics system (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add content/public/browser to GN deps Created 4 years, 10 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/metrics/leak_detector_controller.h"
6
7 #include <set>
8
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "components/metrics/proto/memory_leak_report.pb.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace metrics {
15
16 // Test class for LeakDetectorController that exposes protected methods.
17 class TestLeakDetectorController : public LeakDetectorController {
18 public:
19 using LeakDetectorController::OnLeakFound;
20
21 TestLeakDetectorController() {}
22
23 private:
24 DISALLOW_COPY_AND_ASSIGN(TestLeakDetectorController);
25 };
26
27 using LeakReport = LeakDetector::LeakReport;
28
29 TEST(LeakDetectorControllerTest, SingleReport) {
30 LeakReport report;
31 report.alloc_size_bytes = 8;
32 report.call_stack = {1, 2, 3, 4};
33
34 TestLeakDetectorController controller;
35 controller.OnLeakFound(report);
36
37 std::vector<MemoryLeakReportProto> stored_reports;
38 controller.GetLeakReports(&stored_reports);
39 ASSERT_EQ(1U, stored_reports.size());
40
41 EXPECT_EQ(8U, stored_reports[0].size_bytes());
42 ASSERT_EQ(4, stored_reports[0].call_stack().size());
43 EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
44 EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
45 EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
46 EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
47
48 // No more reports.
49 controller.GetLeakReports(&stored_reports);
50 ASSERT_EQ(0U, stored_reports.size());
51 }
52
53 TEST(LeakDetectorControllerTest, MultipleReportsSeparately) {
54 TestLeakDetectorController controller;
55 std::vector<MemoryLeakReportProto> stored_reports;
56
57 // Pass in first report.
58 LeakReport report;
59 report.alloc_size_bytes = 8;
60 report.call_stack = {1, 2, 3, 4};
61
62 controller.OnLeakFound(report);
63 controller.GetLeakReports(&stored_reports);
64 ASSERT_EQ(1U, stored_reports.size());
65
66 EXPECT_EQ(8U, stored_reports[0].size_bytes());
67 ASSERT_EQ(4, stored_reports[0].call_stack().size());
68 EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
69 EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
70 EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
71 EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
72
73 controller.GetLeakReports(&stored_reports);
74 ASSERT_EQ(0U, stored_reports.size());
75
76 // Pass in second report.
77 report.alloc_size_bytes = 16;
78 report.call_stack = {5, 6, 7, 8, 9, 10};
79 controller.OnLeakFound(report);
80
81 controller.GetLeakReports(&stored_reports);
82 ASSERT_EQ(1U, stored_reports.size());
83
84 EXPECT_EQ(16U, stored_reports[0].size_bytes());
85 ASSERT_EQ(6, stored_reports[0].call_stack().size());
86 EXPECT_EQ(5U, stored_reports[0].call_stack().Get(0));
87 EXPECT_EQ(6U, stored_reports[0].call_stack().Get(1));
88 EXPECT_EQ(7U, stored_reports[0].call_stack().Get(2));
89 EXPECT_EQ(8U, stored_reports[0].call_stack().Get(3));
90 EXPECT_EQ(9U, stored_reports[0].call_stack().Get(4));
91 EXPECT_EQ(10U, stored_reports[0].call_stack().Get(5));
92
93 controller.GetLeakReports(&stored_reports);
94 ASSERT_EQ(0U, stored_reports.size());
95
96 // Pass in third report.
97 report.alloc_size_bytes = 24;
98 report.call_stack = {9, 10, 11, 12, 13, 14, 15, 16};
99 controller.OnLeakFound(report);
100
101 controller.GetLeakReports(&stored_reports);
102 ASSERT_EQ(1U, stored_reports.size());
103
104 EXPECT_EQ(24U, stored_reports[0].size_bytes());
105 ASSERT_EQ(8, stored_reports[0].call_stack().size());
106 EXPECT_EQ(9U, stored_reports[0].call_stack().Get(0));
107 EXPECT_EQ(10U, stored_reports[0].call_stack().Get(1));
108 EXPECT_EQ(11U, stored_reports[0].call_stack().Get(2));
109 EXPECT_EQ(12U, stored_reports[0].call_stack().Get(3));
110 EXPECT_EQ(13U, stored_reports[0].call_stack().Get(4));
111 EXPECT_EQ(14U, stored_reports[0].call_stack().Get(5));
112 EXPECT_EQ(15U, stored_reports[0].call_stack().Get(6));
113 EXPECT_EQ(16U, stored_reports[0].call_stack().Get(7));
114
115 controller.GetLeakReports(&stored_reports);
116 ASSERT_EQ(0U, stored_reports.size());
117 }
118
119 TEST(LeakDetectorControllerTest, MultipleReportsTogether) {
120 LeakReport report1, report2, report3;
121 report1.alloc_size_bytes = 8;
122 report1.call_stack = {1, 2, 3, 4};
123 report2.alloc_size_bytes = 16;
124 report2.call_stack = {5, 6, 7, 8, 9, 10};
125 report3.alloc_size_bytes = 24;
126 report3.call_stack = {9, 10, 11, 12, 13, 14, 15, 16};
127
128 TestLeakDetectorController controller;
129 controller.OnLeakFound(report1);
130 controller.OnLeakFound(report2);
131 controller.OnLeakFound(report3);
132
133 std::vector<MemoryLeakReportProto> stored_reports;
134
135 controller.GetLeakReports(&stored_reports);
136 ASSERT_EQ(3U, stored_reports.size());
137
138 EXPECT_EQ(8U, stored_reports[0].size_bytes());
139 ASSERT_EQ(4, stored_reports[0].call_stack().size());
140 EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
141 EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
142 EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
143 EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
144
145 EXPECT_EQ(16U, stored_reports[1].size_bytes());
146 ASSERT_EQ(6, stored_reports[1].call_stack().size());
147 EXPECT_EQ(5U, stored_reports[1].call_stack().Get(0));
148 EXPECT_EQ(6U, stored_reports[1].call_stack().Get(1));
149 EXPECT_EQ(7U, stored_reports[1].call_stack().Get(2));
150 EXPECT_EQ(8U, stored_reports[1].call_stack().Get(3));
151 EXPECT_EQ(9U, stored_reports[1].call_stack().Get(4));
152 EXPECT_EQ(10U, stored_reports[1].call_stack().Get(5));
153
154 EXPECT_EQ(24U, stored_reports[2].size_bytes());
155 ASSERT_EQ(8, stored_reports[2].call_stack().size());
156 EXPECT_EQ(9U, stored_reports[2].call_stack().Get(0));
157 EXPECT_EQ(10U, stored_reports[2].call_stack().Get(1));
158 EXPECT_EQ(11U, stored_reports[2].call_stack().Get(2));
159 EXPECT_EQ(12U, stored_reports[2].call_stack().Get(3));
160 EXPECT_EQ(13U, stored_reports[2].call_stack().Get(4));
161 EXPECT_EQ(14U, stored_reports[2].call_stack().Get(5));
162 EXPECT_EQ(15U, stored_reports[2].call_stack().Get(6));
163 EXPECT_EQ(16U, stored_reports[2].call_stack().Get(7));
164
165 controller.GetLeakReports(&stored_reports);
166 ASSERT_EQ(0U, stored_reports.size());
167 }
168
169 } // namespace metrics
OLDNEW
« 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