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

Side by Side Diff: content/browser/tracing/background_tracing_manager_browsertest.cc

Issue 1089253003: Re-land first pass BackgroundTracingManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Split into multiple files in content/public/browser. Created 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 "base/bind.h"
6 #include "content/browser/tracing/background_tracing_manager_impl.h"
7 #include "content/public/test/content_browser_test.h"
8 #include "content/public/test/content_browser_test_utils.h"
9 #include "content/public/test/test_utils.h"
10
11 namespace content {
12
13 class BackgroundTracingManagerBrowserTest : public ContentBrowserTest {
14 public:
15 BackgroundTracingManagerBrowserTest() {}
16
17 private:
18 DISALLOW_COPY_AND_ASSIGN(BackgroundTracingManagerBrowserTest);
19 };
20
21 class BackgroundTracingManagerTestSink : public BackgroundTracingUploadSink {
22 public:
23 BackgroundTracingManagerTestSink(const base::Closure& callback)
24 : callback_(callback), receive_count_(0) {}
25
26 void Upload(const std::string& file_contents,
27 base::Callback<void()> done_callback) override {
28 receive_count_ += 1;
29 done_callback.Run();
30 callback_.Run();
31 }
32
33 bool RequiresAnonymizedData() const override { return true; }
34
35 int get_receive_count() const { return receive_count_; }
36
37 private:
38 ~BackgroundTracingManagerTestSink() override {}
39
40 base::Closure callback_;
41 int receive_count_;
42 };
43
44 void StartedFinalizingCallback(base::Closure callback,
45 bool expected,
46 bool value) {
47 EXPECT_EQ(expected, value);
48 if (!callback.is_null())
49 callback.Run();
50 }
51
52 scoped_refptr<content::BackgroundTracingPreemptiveConfig>
53 CreatePreemptiveConfig() {
54 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
55 new content::BackgroundTracingPreemptiveConfig();
56
57 config->AddNamedTriggerRule("test");
58
59 return config;
60 }
61
62 void SetupBackgroundTracingManager() {
63 content::BackgroundTracingManagerImpl::GetInstance()
64 ->InvalidateTriggerHandlesForTesting();
65 }
66
67 void DisableScenarioWhenIdle() {
68 BackgroundTracingManager::GetInstance()->SetActiveScenario(NULL, NULL);
69 }
70
71 // This tests that the endpoint receives the final trace data.
72 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
73 ReceiveTraceFinalContentsOnTrigger) {
74 {
75 SetupBackgroundTracingManager();
76
77 base::RunLoop run_loop;
78 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
79 new BackgroundTracingManagerTestSink(run_loop.QuitClosure());
80
81 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
82 CreatePreemptiveConfig();
83
84 content::BackgroundTracingManager::TriggerHandle handle =
85 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
86 "test");
87
88 BackgroundTracingManager::GetInstance()->SetActiveScenario(config,
89 endpoint);
90
91 BackgroundTracingManager::GetInstance()->WhenIdle(
92 base::Bind(&DisableScenarioWhenIdle));
93
94 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
95 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
96
97 run_loop.Run();
98
99 EXPECT_TRUE(endpoint->get_receive_count() == 1);
100 }
101 }
102
103 // This tests triggering more than once still only gathers once.
104 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
105 CallTriggersMoreThanOnceOnlyGatherOnce) {
106 {
107 SetupBackgroundTracingManager();
108
109 base::RunLoop run_loop;
110 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
111 new BackgroundTracingManagerTestSink(run_loop.QuitClosure());
112
113 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
114 CreatePreemptiveConfig();
115
116 content::BackgroundTracingManager::TriggerHandle handle =
117 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
118 "test");
119
120 BackgroundTracingManager::GetInstance()->SetActiveScenario(config,
121 endpoint);
122
123 BackgroundTracingManager::GetInstance()->WhenIdle(
124 base::Bind(&DisableScenarioWhenIdle));
125
126 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
127 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
128 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
129 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), false));
130
131 run_loop.Run();
132
133 EXPECT_TRUE(endpoint->get_receive_count() == 1);
134 }
135 }
136
137 // This tests multiple triggers still only gathers once.
138 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
139 CallMultipleTriggersOnlyGatherOnce) {
140 {
141 SetupBackgroundTracingManager();
142
143 base::RunLoop run_loop;
144 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
145 new BackgroundTracingManagerTestSink(run_loop.QuitClosure());
146
147 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
148 new content::BackgroundTracingPreemptiveConfig();
149
150 config->AddNamedTriggerRule("test1");
151 config->AddNamedTriggerRule("test2");
152
153 content::BackgroundTracingManager::TriggerHandle handle1 =
154 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
155 "test1");
156 content::BackgroundTracingManager::TriggerHandle handle2 =
157 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
158 "test2");
159
160 BackgroundTracingManager::GetInstance()->SetActiveScenario(config,
161 endpoint);
162
163 BackgroundTracingManager::GetInstance()->WhenIdle(
164 base::Bind(&DisableScenarioWhenIdle));
165
166 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
167 handle1, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
168 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
169 handle2,
170 base::Bind(&StartedFinalizingCallback, base::Closure(), false));
171
172 run_loop.Run();
173
174 EXPECT_TRUE(endpoint->get_receive_count() == 1);
175 }
176 }
177
178 // This tests that you can't trigger without a scenario set.
179 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
180 CannotTriggerWithoutScenarioSet) {
181 {
182 SetupBackgroundTracingManager();
183
184 base::RunLoop run_loop;
185 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
186 new BackgroundTracingManagerTestSink(base::Closure());
187
188 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
189 CreatePreemptiveConfig();
190
191 content::BackgroundTracingManager::TriggerHandle handle =
192 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
193 "test");
194
195 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
196 handle,
197 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false));
198
199 run_loop.Run();
200
201 EXPECT_TRUE(endpoint->get_receive_count() == 0);
202 }
203 }
204
205 // This tests that no trace is triggered with a handle that isn't specified
206 // in the config.
207 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
208 DoesNotTriggerWithWrongHandle) {
209 {
210 SetupBackgroundTracingManager();
211
212 base::RunLoop run_loop;
213 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
214 new BackgroundTracingManagerTestSink(base::Closure());
215
216 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
217 CreatePreemptiveConfig();
218
219 content::BackgroundTracingManager::TriggerHandle handle =
220 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
221 "does_not_exist");
222
223 BackgroundTracingManager::GetInstance()->SetActiveScenario(config,
224 endpoint);
225
226 BackgroundTracingManager::GetInstance()->WhenIdle(
227 base::Bind(&DisableScenarioWhenIdle));
228
229 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
230 handle,
231 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false));
232
233 run_loop.Run();
234
235 EXPECT_TRUE(endpoint->get_receive_count() == 0);
236 }
237 }
238
239 // This tests that no trace is triggered with an invalid handle.
240 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
241 DoesNotTriggerWithInvalidHandle) {
242 {
243 SetupBackgroundTracingManager();
244
245 base::RunLoop run_loop;
246 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
247 new BackgroundTracingManagerTestSink(base::Closure());
248
249 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
250 CreatePreemptiveConfig();
251
252 content::BackgroundTracingManager::TriggerHandle handle =
253 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
254 "test");
255
256 content::BackgroundTracingManagerImpl::GetInstance()
257 ->InvalidateTriggerHandlesForTesting();
258
259 BackgroundTracingManager::GetInstance()->SetActiveScenario(config,
260 endpoint);
261
262 BackgroundTracingManager::GetInstance()->WhenIdle(
263 base::Bind(&DisableScenarioWhenIdle));
264
265 BackgroundTracingManager::GetInstance()->DidTriggerHappen(
266 handle,
267 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false));
268
269 run_loop.Run();
270
271 EXPECT_TRUE(endpoint->get_receive_count() == 0);
272 }
273 }
274
275 // This tests that reactive mode configs will fail.
276 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
277 DoesNotAllowPreemptiveConfigThatsNotManual) {
278 {
279 SetupBackgroundTracingManager();
280
281 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
282 new BackgroundTracingManagerTestSink(base::Closure());
283
284 scoped_refptr<content::BackgroundTracingPreemptiveConfig> config =
285 new content::BackgroundTracingPreemptiveConfig();
286
287 config->AddHistogramTriggerRule("fake", 0);
288
289 bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario(
290 config, endpoint);
291
292 EXPECT_FALSE(result);
293 }
294 }
295
296 // This tests that reactive mode configs will fail.
297 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
298 DoesNotAllowReactiveConfig) {
299 {
300 SetupBackgroundTracingManager();
301
302 scoped_refptr<BackgroundTracingManagerTestSink> endpoint =
303 new BackgroundTracingManagerTestSink(base::Closure());
304
305 scoped_refptr<content::BackgroundTracingReactiveConfig> config =
306 new content::BackgroundTracingReactiveConfig();
307
308 bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario(
309 config, endpoint);
310
311 EXPECT_FALSE(result);
312 }
313 }
314
315 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/tracing/background_tracing_manager_impl.h » ('j') | content/content_browser.gypi » ('J')

Powered by Google App Engine
This is Rietveld 408576698