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

Side by Side Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 1559023002: [tracing] Make memory-infra unregristration DCHECK stricter Base URL: https://chromium.googlesource.com/chromium/src.git@mdm_delete_async
Patch Set: +browsertests Created 4 years, 11 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/trace_event/memory_dump_manager.h" 5 #include "base/trace_event/memory_dump_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 void RegisterDumpProvider( 50 void RegisterDumpProvider(
51 MemoryDumpProvider* mdp, 51 MemoryDumpProvider* mdp,
52 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 52 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
53 const MemoryDumpProvider::Options& options) { 53 const MemoryDumpProvider::Options& options) {
54 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); 54 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance();
55 mdm->set_dumper_registrations_ignored_for_testing(false); 55 mdm->set_dumper_registrations_ignored_for_testing(false);
56 mdm->RegisterDumpProvider(mdp, "TestDumpProvider", task_runner, options); 56 mdm->RegisterDumpProvider(mdp, "TestDumpProvider", task_runner, options);
57 mdm->set_dumper_registrations_ignored_for_testing(true); 57 mdm->set_dumper_registrations_ignored_for_testing(true);
58 } 58 }
59 59
60 void RegisterDumpProvider(MemoryDumpProvider* mdp) { 60 void RegisterDumpProviderOnCurrentThread(MemoryDumpProvider* mdp) {
61 RegisterDumpProvider(mdp, nullptr, MemoryDumpProvider::Options()); 61 RegisterDumpProvider(mdp, ThreadTaskRunnerHandle::Get(),
62 MemoryDumpProvider::Options());
62 } 63 }
63 64
64 void OnTraceDataCollected(Closure quit_closure, 65 void OnTraceDataCollected(Closure quit_closure,
65 trace_event::TraceResultBuffer* buffer, 66 trace_event::TraceResultBuffer* buffer,
66 const scoped_refptr<RefCountedString>& json, 67 const scoped_refptr<RefCountedString>& json,
67 bool has_more_events) { 68 bool has_more_events) {
68 buffer->AddFragment(json->data()); 69 buffer->AddFragment(json->data());
69 if (!has_more_events) 70 if (!has_more_events)
70 quit_closure.Run(); 71 quit_closure.Run();
71 } 72 }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 185
185 // We want our singleton torn down after each test. 186 // We want our singleton torn down after each test.
186 ShadowingAtExitManager at_exit_manager_; 187 ShadowingAtExitManager at_exit_manager_;
187 }; 188 };
188 189
189 // Basic sanity checks. Registers a memory dump provider and checks that it is 190 // Basic sanity checks. Registers a memory dump provider and checks that it is
190 // called, but only when memory-infra is enabled. 191 // called, but only when memory-infra is enabled.
191 TEST_F(MemoryDumpManagerTest, SingleDumper) { 192 TEST_F(MemoryDumpManagerTest, SingleDumper) {
192 InitializeMemoryDumpManager(false /* is_coordinator */); 193 InitializeMemoryDumpManager(false /* is_coordinator */);
193 MockMemoryDumpProvider mdp; 194 MockMemoryDumpProvider mdp;
194 RegisterDumpProvider(&mdp); 195 RegisterDumpProviderOnCurrentThread(&mdp);
195 196
196 // Check that the dumper is not called if the memory category is not enabled. 197 // Check that the dumper is not called if the memory category is not enabled.
197 EnableTracingWithLegacyCategories("foobar-but-not-memory"); 198 EnableTracingWithLegacyCategories("foobar-but-not-memory");
198 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 199 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0);
199 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 200 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
200 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 201 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
201 MemoryDumpLevelOfDetail::DETAILED); 202 MemoryDumpLevelOfDetail::DETAILED);
202 DisableTracing(); 203 DisableTracing();
203 204
204 // Now repeat enabling the memory category and check that the dumper is 205 // Now repeat enabling the memory category and check that the dumper is
(...skipping 20 matching lines...) Expand all
225 } 226 }
226 DisableTracing(); 227 DisableTracing();
227 } 228 }
228 229
229 // Checks that requesting dumps with high level of detail actually propagates 230 // Checks that requesting dumps with high level of detail actually propagates
230 // the level of the detail properly to OnMemoryDump() call on dump providers. 231 // the level of the detail properly to OnMemoryDump() call on dump providers.
231 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { 232 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) {
232 InitializeMemoryDumpManager(false /* is_coordinator */); 233 InitializeMemoryDumpManager(false /* is_coordinator */);
233 MockMemoryDumpProvider mdp; 234 MockMemoryDumpProvider mdp;
234 235
235 RegisterDumpProvider(&mdp); 236 RegisterDumpProviderOnCurrentThread(&mdp);
236 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 237 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
237 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 238 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
238 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); 239 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true));
239 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 240 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
240 MemoryDumpLevelOfDetail::DETAILED); 241 MemoryDumpLevelOfDetail::DETAILED);
241 DisableTracing(); 242 DisableTracing();
242 mdm_->UnregisterDumpProvider(&mdp); 243 mdm_->UnregisterDumpProvider(&mdp);
243 244
244 // Check that requesting dumps with low level of detail actually propagates to 245 // Check that requesting dumps with low level of detail actually propagates to
245 // OnMemoryDump() call on dump providers. 246 // OnMemoryDump() call on dump providers.
246 RegisterDumpProvider(&mdp); 247 RegisterDumpProviderOnCurrentThread(&mdp);
247 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 248 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
248 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 249 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
249 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); 250 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true));
250 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 251 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
251 MemoryDumpLevelOfDetail::LIGHT); 252 MemoryDumpLevelOfDetail::LIGHT);
252 DisableTracing(); 253 DisableTracing();
253 mdm_->UnregisterDumpProvider(&mdp); 254 mdm_->UnregisterDumpProvider(&mdp);
254 } 255 }
255 256
256 // Checks that the SharedSessionState object is acqually shared over time. 257 // Checks that the SharedSessionState object is acqually shared over time.
257 TEST_F(MemoryDumpManagerTest, SharedSessionState) { 258 TEST_F(MemoryDumpManagerTest, SharedSessionState) {
258 InitializeMemoryDumpManager(false /* is_coordinator */); 259 InitializeMemoryDumpManager(false /* is_coordinator */);
259 MockMemoryDumpProvider mdp1; 260 MockMemoryDumpProvider mdp1;
260 MockMemoryDumpProvider mdp2; 261 MockMemoryDumpProvider mdp2;
261 RegisterDumpProvider(&mdp1); 262 RegisterDumpProviderOnCurrentThread(&mdp1);
262 RegisterDumpProvider(&mdp2); 263 RegisterDumpProviderOnCurrentThread(&mdp2);
263 264
264 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 265 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
265 const MemoryDumpSessionState* session_state = mdm_->session_state().get(); 266 const MemoryDumpSessionState* session_state = mdm_->session_state().get();
266 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 267 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2);
267 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 268 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
268 .Times(2) 269 .Times(2)
269 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, 270 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
270 ProcessMemoryDump* pmd) -> bool { 271 ProcessMemoryDump* pmd) -> bool {
271 EXPECT_EQ(session_state, pmd->session_state().get()); 272 EXPECT_EQ(session_state, pmd->session_state().get());
272 return true; 273 return true;
(...skipping 14 matching lines...) Expand all
287 DisableTracing(); 288 DisableTracing();
288 } 289 }
289 290
290 // Checks that the (Un)RegisterDumpProvider logic behaves sanely. 291 // Checks that the (Un)RegisterDumpProvider logic behaves sanely.
291 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { 292 TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
292 InitializeMemoryDumpManager(false /* is_coordinator */); 293 InitializeMemoryDumpManager(false /* is_coordinator */);
293 MockMemoryDumpProvider mdp1; 294 MockMemoryDumpProvider mdp1;
294 MockMemoryDumpProvider mdp2; 295 MockMemoryDumpProvider mdp2;
295 296
296 // Enable only mdp1. 297 // Enable only mdp1.
297 RegisterDumpProvider(&mdp1); 298 RegisterDumpProviderOnCurrentThread(&mdp1);
298 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 299 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
299 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 300 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
300 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 301 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
301 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); 302 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
302 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 303 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
303 MemoryDumpLevelOfDetail::DETAILED); 304 MemoryDumpLevelOfDetail::DETAILED);
304 DisableTracing(); 305 DisableTracing();
305 306
306 // Invert: enable mdp1 and disable mdp2. 307 // Invert: enable mdp1 and disable mdp2.
307 mdm_->UnregisterDumpProvider(&mdp1); 308 mdm_->UnregisterDumpProvider(&mdp1);
308 RegisterDumpProvider(&mdp2); 309 RegisterDumpProviderOnCurrentThread(&mdp2);
309 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 310 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
310 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 311 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
311 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 312 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
312 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 313 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
313 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 314 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
314 MemoryDumpLevelOfDetail::DETAILED); 315 MemoryDumpLevelOfDetail::DETAILED);
315 DisableTracing(); 316 DisableTracing();
316 317
317 // Enable both mdp1 and mdp2. 318 // Enable both mdp1 and mdp2.
318 RegisterDumpProvider(&mdp1); 319 RegisterDumpProviderOnCurrentThread(&mdp1);
319 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 320 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
320 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 321 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
321 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 322 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
322 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 323 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
323 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 324 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
324 MemoryDumpLevelOfDetail::DETAILED); 325 MemoryDumpLevelOfDetail::DETAILED);
325 DisableTracing(); 326 DisableTracing();
326 } 327 }
327 328
328 // Checks that the dump provider invocations depend only on the current 329 // Checks that the dump provider invocations depend only on the current
329 // registration state and not on previous registrations and dumps. 330 // registration state and not on previous registrations and dumps.
330 TEST_F(MemoryDumpManagerTest, RegistrationConsistency) { 331 TEST_F(MemoryDumpManagerTest, RegistrationConsistency) {
331 InitializeMemoryDumpManager(false /* is_coordinator */); 332 InitializeMemoryDumpManager(false /* is_coordinator */);
332 MockMemoryDumpProvider mdp; 333 MockMemoryDumpProvider mdp;
333 334
334 RegisterDumpProvider(&mdp); 335 RegisterDumpProviderOnCurrentThread(&mdp);
335 336
336 { 337 {
337 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 338 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
338 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 339 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
339 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 340 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
340 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 341 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
341 MemoryDumpLevelOfDetail::DETAILED); 342 MemoryDumpLevelOfDetail::DETAILED);
342 DisableTracing(); 343 DisableTracing();
343 } 344 }
344 345
345 mdm_->UnregisterDumpProvider(&mdp); 346 mdm_->UnregisterDumpProvider(&mdp);
346 347
347 { 348 {
348 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 349 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
349 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 350 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
350 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 351 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
351 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 352 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
352 MemoryDumpLevelOfDetail::DETAILED); 353 MemoryDumpLevelOfDetail::DETAILED);
353 DisableTracing(); 354 DisableTracing();
354 } 355 }
355 356
356 RegisterDumpProvider(&mdp); 357 RegisterDumpProviderOnCurrentThread(&mdp);
357 mdm_->UnregisterDumpProvider(&mdp); 358 mdm_->UnregisterDumpProvider(&mdp);
358 359
359 { 360 {
360 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 361 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
361 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 362 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
362 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 363 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
363 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 364 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
364 MemoryDumpLevelOfDetail::DETAILED); 365 MemoryDumpLevelOfDetail::DETAILED);
365 DisableTracing(); 366 DisableTracing();
366 } 367 }
367 368
368 RegisterDumpProvider(&mdp); 369 RegisterDumpProviderOnCurrentThread(&mdp);
369 mdm_->UnregisterDumpProvider(&mdp); 370 mdm_->UnregisterDumpProvider(&mdp);
370 RegisterDumpProvider(&mdp); 371 RegisterDumpProviderOnCurrentThread(&mdp);
371 372
372 { 373 {
373 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 374 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
374 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 375 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
375 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 376 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
376 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 377 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
377 MemoryDumpLevelOfDetail::DETAILED); 378 MemoryDumpLevelOfDetail::DETAILED);
378 DisableTracing(); 379 DisableTracing();
379 } 380 }
380 } 381 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 DisableTracing(); 439 DisableTracing();
439 } 440 }
440 441
441 // Checks that providers get disabled after 3 consecutive failures, but not 442 // Checks that providers get disabled after 3 consecutive failures, but not
442 // otherwise (e.g., if interleaved). 443 // otherwise (e.g., if interleaved).
443 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { 444 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
444 InitializeMemoryDumpManager(false /* is_coordinator */); 445 InitializeMemoryDumpManager(false /* is_coordinator */);
445 MockMemoryDumpProvider mdp1; 446 MockMemoryDumpProvider mdp1;
446 MockMemoryDumpProvider mdp2; 447 MockMemoryDumpProvider mdp2;
447 448
448 RegisterDumpProvider(&mdp1); 449 RegisterDumpProviderOnCurrentThread(&mdp1);
449 RegisterDumpProvider(&mdp2); 450 RegisterDumpProviderOnCurrentThread(&mdp2);
450 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 451 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
451 452
452 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); 453 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount();
453 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps); 454 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps);
454 455
455 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 456 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
456 .Times(GetMaxConsecutiveFailuresCount()) 457 .Times(GetMaxConsecutiveFailuresCount())
457 .WillRepeatedly(Return(false)); 458 .WillRepeatedly(Return(false));
458 459
459 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 460 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
(...skipping 12 matching lines...) Expand all
472 DisableTracing(); 473 DisableTracing();
473 } 474 }
474 475
475 // Sneakily registers an extra memory dump provider while an existing one is 476 // Sneakily registers an extra memory dump provider while an existing one is
476 // dumping and expect it to take part in the already active tracing session. 477 // dumping and expect it to take part in the already active tracing session.
477 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { 478 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) {
478 InitializeMemoryDumpManager(false /* is_coordinator */); 479 InitializeMemoryDumpManager(false /* is_coordinator */);
479 MockMemoryDumpProvider mdp1; 480 MockMemoryDumpProvider mdp1;
480 MockMemoryDumpProvider mdp2; 481 MockMemoryDumpProvider mdp2;
481 482
482 RegisterDumpProvider(&mdp1); 483 RegisterDumpProviderOnCurrentThread(&mdp1);
483 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 484 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
484 485
485 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); 486 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4);
486 487
487 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 488 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
488 .Times(4) 489 .Times(4)
489 .WillOnce(Return(true)) 490 .WillOnce(Return(true))
490 .WillOnce( 491 .WillOnce(
491 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 492 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
492 RegisterDumpProvider(&mdp2); 493 RegisterDumpProviderOnCurrentThread(&mdp2);
493 return true; 494 return true;
494 })) 495 }))
495 .WillRepeatedly(Return(true)); 496 .WillRepeatedly(Return(true));
496 497
497 // Depending on the insertion order (before or after mdp1), mdp2 might be 498 // Depending on the insertion order (before or after mdp1), mdp2 might be
498 // called also immediately after it gets registered. 499 // called also immediately after it gets registered.
499 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 500 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
500 .Times(Between(2, 3)) 501 .Times(Between(2, 3))
501 .WillRepeatedly(Return(true)); 502 .WillRepeatedly(Return(true));
502 503
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 ASSERT_TRUE(last_callback_success_); 640 ASSERT_TRUE(last_callback_success_);
640 641
641 DisableTracing(); 642 DisableTracing();
642 } 643 }
643 644
644 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when 645 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when
645 // tracing is not enabled. 646 // tracing is not enabled.
646 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { 647 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) {
647 InitializeMemoryDumpManager(false /* is_coordinator */); 648 InitializeMemoryDumpManager(false /* is_coordinator */);
648 MockMemoryDumpProvider mdp1; 649 MockMemoryDumpProvider mdp1;
649 RegisterDumpProvider(&mdp1); 650 RegisterDumpProviderOnCurrentThread(&mdp1);
650 651
651 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 652 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0);
652 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 653 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
653 654
654 last_callback_success_ = true; 655 last_callback_success_ = true;
655 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 656 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
656 MemoryDumpLevelOfDetail::DETAILED); 657 MemoryDumpLevelOfDetail::DETAILED);
657 EXPECT_FALSE(last_callback_success_); 658 EXPECT_FALSE(last_callback_success_);
658 } 659 }
659 660
660 // Checks that is the MemoryDumpManager is initialized after tracing already 661 // Checks that is the MemoryDumpManager is initialized after tracing already
661 // began, it will still late-join the party (real use case: startup tracing). 662 // began, it will still late-join the party (real use case: startup tracing).
662 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) { 663 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) {
663 MockMemoryDumpProvider mdp; 664 MockMemoryDumpProvider mdp;
664 RegisterDumpProvider(&mdp); 665 RegisterDumpProviderOnCurrentThread(&mdp);
665 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 666 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
666 667
667 // First check that a RequestGlobalDump() issued before the MemoryDumpManager 668 // First check that a RequestGlobalDump() issued before the MemoryDumpManager
668 // initialization gets NACK-ed cleanly. 669 // initialization gets NACK-ed cleanly.
669 { 670 {
670 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 671 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
671 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 672 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0);
672 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 673 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
673 MemoryDumpLevelOfDetail::DETAILED); 674 MemoryDumpLevelOfDetail::DETAILED);
674 EXPECT_FALSE(last_callback_success_); 675 EXPECT_FALSE(last_callback_success_);
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 950 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2);
950 for (int i = 0; i < 2; ++i) { 951 for (int i = 0; i < 2; ++i) {
951 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 952 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
952 MemoryDumpLevelOfDetail::DETAILED); 953 MemoryDumpLevelOfDetail::DETAILED);
953 } 954 }
954 DisableTracing(); 955 DisableTracing();
955 } 956 }
956 957
957 } // namespace trace_event 958 } // namespace trace_event
958 } // namespace base 959 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | components/tracing/child_trace_message_filter_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698