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

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: Addressed comments, updated LeakDetector with default constructor 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
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 using LeakReport = LeakDetector::LeakReport;
17
18 TEST(LeakDetectorControllerTest, SingleReport) {
19 LeakReport report;
20 report.alloc_size_bytes = 8;
21 report.call_stack = {1, 2, 3, 4};
22
23 LeakDetectorController controller;
24 controller.OnLeakFound(report);
25
26 std::vector<MemoryLeakReportProto> stored_reports;
27 controller.GetLeakReports(&stored_reports);
28 ASSERT_EQ(1U, stored_reports.size());
29
30 EXPECT_EQ(8U, stored_reports[0].size_bytes());
31 ASSERT_EQ(4U, stored_reports[0].call_stack().size());
32 EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
33 EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
34 EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
35 EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
36
37 // No more reports.
38 controller.GetLeakReports(&stored_reports);
39 ASSERT_EQ(0U, stored_reports.size());
40 }
41
42 TEST(LeakDetectorControllerTest, MultipleReportsSeparately) {
43 LeakDetectorController controller;
44 std::vector<MemoryLeakReportProto> stored_reports;
45
46 // Pass in first report.
47 LeakReport report;
48 report.alloc_size_bytes = 8;
49 report.call_stack = {1, 2, 3, 4};
50
51 controller.OnLeakFound(report);
52 controller.GetLeakReports(&stored_reports);
53 ASSERT_EQ(1U, stored_reports.size());
54
55 EXPECT_EQ(8U, stored_reports[0].size_bytes());
56 ASSERT_EQ(4U, stored_reports[0].call_stack().size());
57 EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
58 EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
59 EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
60 EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
61
62 controller.GetLeakReports(&stored_reports);
63 ASSERT_EQ(0U, stored_reports.size());
64
65 // Pass in second report.
66 report.alloc_size_bytes = 16;
67 report.call_stack = {5, 6, 7, 8, 9, 10};
68 controller.OnLeakFound(report);
69
70 controller.GetLeakReports(&stored_reports);
71 ASSERT_EQ(1U, stored_reports.size());
72
73 EXPECT_EQ(16U, stored_reports[0].size_bytes());
74 ASSERT_EQ(6U, stored_reports[0].call_stack().size());
75 EXPECT_EQ(5U, stored_reports[0].call_stack().Get(0));
76 EXPECT_EQ(6U, stored_reports[0].call_stack().Get(1));
77 EXPECT_EQ(7U, stored_reports[0].call_stack().Get(2));
78 EXPECT_EQ(8U, stored_reports[0].call_stack().Get(3));
79 EXPECT_EQ(9U, stored_reports[0].call_stack().Get(4));
80 EXPECT_EQ(10U, stored_reports[0].call_stack().Get(5));
81
82 controller.GetLeakReports(&stored_reports);
83 ASSERT_EQ(0U, stored_reports.size());
84
85 // Pass in third report.
86 report.alloc_size_bytes = 24;
87 report.call_stack = {9, 10, 11, 12, 13, 14, 15, 16};
88 controller.OnLeakFound(report);
89
90 controller.GetLeakReports(&stored_reports);
91 ASSERT_EQ(1U, stored_reports.size());
92
93 EXPECT_EQ(24U, stored_reports[0].size_bytes());
94 ASSERT_EQ(8U, stored_reports[0].call_stack().size());
95 EXPECT_EQ(9U, stored_reports[0].call_stack().Get(0));
96 EXPECT_EQ(10U, stored_reports[0].call_stack().Get(1));
97 EXPECT_EQ(11U, stored_reports[0].call_stack().Get(2));
98 EXPECT_EQ(12U, stored_reports[0].call_stack().Get(3));
99 EXPECT_EQ(13U, stored_reports[0].call_stack().Get(4));
100 EXPECT_EQ(14U, stored_reports[0].call_stack().Get(5));
101 EXPECT_EQ(15U, stored_reports[0].call_stack().Get(6));
102 EXPECT_EQ(16U, stored_reports[0].call_stack().Get(7));
103
104 controller.GetLeakReports(&stored_reports);
105 ASSERT_EQ(0U, stored_reports.size());
106 }
107
108 TEST(LeakDetectorControllerTest, MultipleReportsTogether) {
109 LeakReport report1, report2, report3;
110 report1.alloc_size_bytes = 8;
111 report1.call_stack = {1, 2, 3, 4};
112 report2.alloc_size_bytes = 16;
113 report2.call_stack = {5, 6, 7, 8, 9, 10};
114 report3.alloc_size_bytes = 24;
115 report3.call_stack = {9, 10, 11, 12, 13, 14, 15, 16};
116
117 LeakDetectorController controller;
118 controller.OnLeakFound(report1);
119 controller.OnLeakFound(report2);
120 controller.OnLeakFound(report3);
121
122 std::vector<MemoryLeakReportProto> stored_reports;
123
124 controller.GetLeakReports(&stored_reports);
125 ASSERT_EQ(3U, stored_reports.size());
126
127 EXPECT_EQ(8U, stored_reports[0].size_bytes());
128 ASSERT_EQ(4U, stored_reports[0].call_stack().size());
129 EXPECT_EQ(1U, stored_reports[0].call_stack().Get(0));
130 EXPECT_EQ(2U, stored_reports[0].call_stack().Get(1));
131 EXPECT_EQ(3U, stored_reports[0].call_stack().Get(2));
132 EXPECT_EQ(4U, stored_reports[0].call_stack().Get(3));
133
134 EXPECT_EQ(16U, stored_reports[1].size_bytes());
135 ASSERT_EQ(6U, stored_reports[1].call_stack().size());
136 EXPECT_EQ(5U, stored_reports[1].call_stack().Get(0));
137 EXPECT_EQ(6U, stored_reports[1].call_stack().Get(1));
138 EXPECT_EQ(7U, stored_reports[1].call_stack().Get(2));
139 EXPECT_EQ(8U, stored_reports[1].call_stack().Get(3));
140 EXPECT_EQ(9U, stored_reports[1].call_stack().Get(4));
141 EXPECT_EQ(10U, stored_reports[1].call_stack().Get(5));
142
143 EXPECT_EQ(24U, stored_reports[2].size_bytes());
144 ASSERT_EQ(8U, stored_reports[2].call_stack().size());
145 EXPECT_EQ(9U, stored_reports[2].call_stack().Get(0));
146 EXPECT_EQ(10U, stored_reports[2].call_stack().Get(1));
147 EXPECT_EQ(11U, stored_reports[2].call_stack().Get(2));
148 EXPECT_EQ(12U, stored_reports[2].call_stack().Get(3));
149 EXPECT_EQ(13U, stored_reports[2].call_stack().Get(4));
150 EXPECT_EQ(14U, stored_reports[2].call_stack().Get(5));
151 EXPECT_EQ(15U, stored_reports[2].call_stack().Get(6));
152 EXPECT_EQ(16U, stored_reports[2].call_stack().Get(7));
153
154 controller.GetLeakReports(&stored_reports);
155 ASSERT_EQ(0U, stored_reports.size());
156 }
157
158 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698