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

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

Issue 2592543002: Make memory-infra tests register / unregister with thread safety (Closed)
Patch Set: fix tests. Created 4 years 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 <memory> 9 #include <memory>
10 #include <vector> 10 #include <vector>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 MemoryDumpProvider* mdp, 65 MemoryDumpProvider* mdp,
66 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 66 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
67 const MemoryDumpProvider::Options& options, 67 const MemoryDumpProvider::Options& options,
68 const char* name = kMDPName) { 68 const char* name = kMDPName) {
69 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); 69 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance();
70 mdm->set_dumper_registrations_ignored_for_testing(false); 70 mdm->set_dumper_registrations_ignored_for_testing(false);
71 mdm->RegisterDumpProvider(mdp, name, std::move(task_runner), options); 71 mdm->RegisterDumpProvider(mdp, name, std::move(task_runner), options);
72 mdm->set_dumper_registrations_ignored_for_testing(true); 72 mdm->set_dumper_registrations_ignored_for_testing(true);
73 } 73 }
74 74
75 void RegisterDumpProvider(MemoryDumpProvider* mdp) { 75 void RegisterDumpProvider(
76 RegisterDumpProvider(mdp, nullptr, MemoryDumpProvider::Options()); 76 MemoryDumpProvider* mdp,
77 scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
78 RegisterDumpProvider(mdp, task_runner, MemoryDumpProvider::Options());
77 } 79 }
78 80
79 void RegisterDumpProviderWithSequencedTaskRunner( 81 void RegisterDumpProviderWithSequencedTaskRunner(
80 MemoryDumpProvider* mdp, 82 MemoryDumpProvider* mdp,
81 scoped_refptr<base::SequencedTaskRunner> task_runner, 83 scoped_refptr<base::SequencedTaskRunner> task_runner,
82 const MemoryDumpProvider::Options& options) { 84 const MemoryDumpProvider::Options& options) {
83 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); 85 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance();
84 mdm->set_dumper_registrations_ignored_for_testing(false); 86 mdm->set_dumper_registrations_ignored_for_testing(false);
85 mdm->RegisterDumpProviderWithSequencedTaskRunner(mdp, kMDPName, task_runner, 87 mdm->RegisterDumpProviderWithSequencedTaskRunner(mdp, kMDPName, task_runner,
86 options); 88 options);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 294
293 // We want our singleton torn down after each test. 295 // We want our singleton torn down after each test.
294 ShadowingAtExitManager at_exit_manager_; 296 ShadowingAtExitManager at_exit_manager_;
295 }; 297 };
296 298
297 // Basic sanity checks. Registers a memory dump provider and checks that it is 299 // Basic sanity checks. Registers a memory dump provider and checks that it is
298 // called, but only when memory-infra is enabled. 300 // called, but only when memory-infra is enabled.
299 TEST_F(MemoryDumpManagerTest, SingleDumper) { 301 TEST_F(MemoryDumpManagerTest, SingleDumper) {
300 InitializeMemoryDumpManager(false /* is_coordinator */); 302 InitializeMemoryDumpManager(false /* is_coordinator */);
301 MockMemoryDumpProvider mdp; 303 MockMemoryDumpProvider mdp;
302 RegisterDumpProvider(&mdp); 304 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
303 305
304 // Check that the dumper is not called if the memory category is not enabled. 306 // Check that the dumper is not called if the memory category is not enabled.
305 EnableTracingWithLegacyCategories("foobar-but-not-memory"); 307 EnableTracingWithLegacyCategories("foobar-but-not-memory");
306 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 308 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0);
307 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 309 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
308 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 310 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
309 MemoryDumpLevelOfDetail::DETAILED); 311 MemoryDumpLevelOfDetail::DETAILED);
310 DisableTracing(); 312 DisableTracing();
311 313
312 // Now repeat enabling the memory category and check that the dumper is 314 // Now repeat enabling the memory category and check that the dumper is
(...skipping 20 matching lines...) Expand all
333 } 335 }
334 DisableTracing(); 336 DisableTracing();
335 } 337 }
336 338
337 // Checks that requesting dumps with high level of detail actually propagates 339 // Checks that requesting dumps with high level of detail actually propagates
338 // the level of the detail properly to OnMemoryDump() call on dump providers. 340 // the level of the detail properly to OnMemoryDump() call on dump providers.
339 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { 341 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) {
340 InitializeMemoryDumpManager(false /* is_coordinator */); 342 InitializeMemoryDumpManager(false /* is_coordinator */);
341 MockMemoryDumpProvider mdp; 343 MockMemoryDumpProvider mdp;
342 344
343 RegisterDumpProvider(&mdp); 345 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
344 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 346 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
345 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 347 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
346 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); 348 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true));
347 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 349 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
348 MemoryDumpLevelOfDetail::DETAILED); 350 MemoryDumpLevelOfDetail::DETAILED);
349 DisableTracing(); 351 DisableTracing();
350 mdm_->UnregisterDumpProvider(&mdp); 352 mdm_->UnregisterDumpProvider(&mdp);
351 353
352 // Check that requesting dumps with low level of detail actually propagates to 354 // Check that requesting dumps with low level of detail actually propagates to
353 // OnMemoryDump() call on dump providers. 355 // OnMemoryDump() call on dump providers.
354 RegisterDumpProvider(&mdp); 356 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
355 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 357 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
356 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 358 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
357 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); 359 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true));
358 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 360 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
359 MemoryDumpLevelOfDetail::LIGHT); 361 MemoryDumpLevelOfDetail::LIGHT);
360 DisableTracing(); 362 DisableTracing();
361 mdm_->UnregisterDumpProvider(&mdp); 363 mdm_->UnregisterDumpProvider(&mdp);
362 } 364 }
363 365
364 // Checks that the SharedSessionState object is acqually shared over time. 366 // Checks that the SharedSessionState object is acqually shared over time.
365 TEST_F(MemoryDumpManagerTest, SharedSessionState) { 367 TEST_F(MemoryDumpManagerTest, SharedSessionState) {
366 InitializeMemoryDumpManager(false /* is_coordinator */); 368 InitializeMemoryDumpManager(false /* is_coordinator */);
367 MockMemoryDumpProvider mdp1; 369 MockMemoryDumpProvider mdp1;
368 MockMemoryDumpProvider mdp2; 370 MockMemoryDumpProvider mdp2;
369 RegisterDumpProvider(&mdp1); 371 RegisterDumpProvider(&mdp1, nullptr);
370 RegisterDumpProvider(&mdp2); 372 RegisterDumpProvider(&mdp2, nullptr);
371 373
372 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 374 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
373 const MemoryDumpSessionState* session_state = 375 const MemoryDumpSessionState* session_state =
374 mdm_->session_state_for_testing().get(); 376 mdm_->session_state_for_testing().get();
375 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 377 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2);
376 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 378 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
377 .Times(2) 379 .Times(2)
378 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, 380 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
379 ProcessMemoryDump* pmd) -> bool { 381 ProcessMemoryDump* pmd) -> bool {
380 EXPECT_EQ(session_state, pmd->session_state().get()); 382 EXPECT_EQ(session_state, pmd->session_state().get());
(...skipping 15 matching lines...) Expand all
396 DisableTracing(); 398 DisableTracing();
397 } 399 }
398 400
399 // Checks that the (Un)RegisterDumpProvider logic behaves sanely. 401 // Checks that the (Un)RegisterDumpProvider logic behaves sanely.
400 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { 402 TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
401 InitializeMemoryDumpManager(false /* is_coordinator */); 403 InitializeMemoryDumpManager(false /* is_coordinator */);
402 MockMemoryDumpProvider mdp1; 404 MockMemoryDumpProvider mdp1;
403 MockMemoryDumpProvider mdp2; 405 MockMemoryDumpProvider mdp2;
404 406
405 // Enable only mdp1. 407 // Enable only mdp1.
406 RegisterDumpProvider(&mdp1); 408 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get());
407 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 409 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
408 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 410 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
409 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 411 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
410 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); 412 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
411 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 413 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
412 MemoryDumpLevelOfDetail::DETAILED); 414 MemoryDumpLevelOfDetail::DETAILED);
413 DisableTracing(); 415 DisableTracing();
414 416
415 // Invert: enable mdp1 and disable mdp2. 417 // Invert: enable mdp1 and disable mdp2.
416 mdm_->UnregisterDumpProvider(&mdp1); 418 mdm_->UnregisterDumpProvider(&mdp1);
417 RegisterDumpProvider(&mdp2); 419 RegisterDumpProvider(&mdp2, nullptr);
418 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 420 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
419 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 421 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
420 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 422 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
421 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 423 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
422 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 424 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
423 MemoryDumpLevelOfDetail::DETAILED); 425 MemoryDumpLevelOfDetail::DETAILED);
424 DisableTracing(); 426 DisableTracing();
425 427
426 // Enable both mdp1 and mdp2. 428 // Enable both mdp1 and mdp2.
427 RegisterDumpProvider(&mdp1); 429 RegisterDumpProvider(&mdp1, nullptr);
428 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 430 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
429 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 431 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
430 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 432 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
431 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 433 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
432 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 434 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
433 MemoryDumpLevelOfDetail::DETAILED); 435 MemoryDumpLevelOfDetail::DETAILED);
434 DisableTracing(); 436 DisableTracing();
435 } 437 }
436 438
437 // Checks that the dump provider invocations depend only on the current 439 // Checks that the dump provider invocations depend only on the current
438 // registration state and not on previous registrations and dumps. 440 // registration state and not on previous registrations and dumps.
439 TEST_F(MemoryDumpManagerTest, RegistrationConsistency) { 441 TEST_F(MemoryDumpManagerTest, RegistrationConsistency) {
440 InitializeMemoryDumpManager(false /* is_coordinator */); 442 InitializeMemoryDumpManager(false /* is_coordinator */);
441 MockMemoryDumpProvider mdp; 443 MockMemoryDumpProvider mdp;
442 444
443 RegisterDumpProvider(&mdp); 445 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
444 446
445 { 447 {
446 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 448 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
447 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 449 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
448 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 450 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
449 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 451 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
450 MemoryDumpLevelOfDetail::DETAILED); 452 MemoryDumpLevelOfDetail::DETAILED);
451 DisableTracing(); 453 DisableTracing();
452 } 454 }
453 455
454 mdm_->UnregisterDumpProvider(&mdp); 456 mdm_->UnregisterDumpProvider(&mdp);
455 457
456 { 458 {
457 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 459 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
458 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 460 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
459 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 461 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
460 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 462 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
461 MemoryDumpLevelOfDetail::DETAILED); 463 MemoryDumpLevelOfDetail::DETAILED);
462 DisableTracing(); 464 DisableTracing();
463 } 465 }
464 466
465 RegisterDumpProvider(&mdp); 467 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
466 mdm_->UnregisterDumpProvider(&mdp); 468 mdm_->UnregisterDumpProvider(&mdp);
467 469
468 { 470 {
469 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 471 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
470 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 472 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
471 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 473 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
472 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 474 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
473 MemoryDumpLevelOfDetail::DETAILED); 475 MemoryDumpLevelOfDetail::DETAILED);
474 DisableTracing(); 476 DisableTracing();
475 } 477 }
476 478
477 RegisterDumpProvider(&mdp); 479 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
478 mdm_->UnregisterDumpProvider(&mdp); 480 mdm_->UnregisterDumpProvider(&mdp);
479 RegisterDumpProvider(&mdp); 481 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
480 482
481 { 483 {
482 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 484 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
483 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 485 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
484 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 486 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
485 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 487 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
486 MemoryDumpLevelOfDetail::DETAILED); 488 MemoryDumpLevelOfDetail::DETAILED);
487 DisableTracing(); 489 DisableTracing();
488 } 490 }
489 } 491 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 DisableTracing(); 593 DisableTracing();
592 } 594 }
593 595
594 // Checks that providers get disabled after 3 consecutive failures, but not 596 // Checks that providers get disabled after 3 consecutive failures, but not
595 // otherwise (e.g., if interleaved). 597 // otherwise (e.g., if interleaved).
596 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { 598 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
597 InitializeMemoryDumpManager(false /* is_coordinator */); 599 InitializeMemoryDumpManager(false /* is_coordinator */);
598 MockMemoryDumpProvider mdp1; 600 MockMemoryDumpProvider mdp1;
599 MockMemoryDumpProvider mdp2; 601 MockMemoryDumpProvider mdp2;
600 602
601 RegisterDumpProvider(&mdp1); 603 RegisterDumpProvider(&mdp1, nullptr);
602 RegisterDumpProvider(&mdp2); 604 RegisterDumpProvider(&mdp2, nullptr);
603 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 605 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
604 606
605 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); 607 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount();
606 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps); 608 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps);
607 609
608 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 610 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
609 .Times(GetMaxConsecutiveFailuresCount()) 611 .Times(GetMaxConsecutiveFailuresCount())
610 .WillRepeatedly(Return(false)); 612 .WillRepeatedly(Return(false));
611 613
612 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 614 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
(...skipping 12 matching lines...) Expand all
625 DisableTracing(); 627 DisableTracing();
626 } 628 }
627 629
628 // Sneakily registers an extra memory dump provider while an existing one is 630 // Sneakily registers an extra memory dump provider while an existing one is
629 // dumping and expect it to take part in the already active tracing session. 631 // dumping and expect it to take part in the already active tracing session.
630 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { 632 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) {
631 InitializeMemoryDumpManager(false /* is_coordinator */); 633 InitializeMemoryDumpManager(false /* is_coordinator */);
632 MockMemoryDumpProvider mdp1; 634 MockMemoryDumpProvider mdp1;
633 MockMemoryDumpProvider mdp2; 635 MockMemoryDumpProvider mdp2;
634 636
635 RegisterDumpProvider(&mdp1); 637 RegisterDumpProvider(&mdp1, nullptr);
636 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 638 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
637 639
638 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); 640 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4);
639 641
640 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 642 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
641 .Times(4) 643 .Times(4)
642 .WillOnce(Return(true)) 644 .WillOnce(Return(true))
643 .WillOnce( 645 .WillOnce(
644 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 646 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
645 RegisterDumpProvider(&mdp2); 647 RegisterDumpProvider(&mdp2, nullptr);
646 return true; 648 return true;
647 })) 649 }))
648 .WillRepeatedly(Return(true)); 650 .WillRepeatedly(Return(true));
649 651
650 // Depending on the insertion order (before or after mdp1), mdp2 might be 652 // Depending on the insertion order (before or after mdp1), mdp2 might be
651 // called also immediately after it gets registered. 653 // called also immediately after it gets registered.
652 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 654 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
653 .Times(Between(2, 3)) 655 .Times(Between(2, 3))
654 .WillRepeatedly(Return(true)); 656 .WillRepeatedly(Return(true));
655 657
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 ASSERT_TRUE(last_callback_success_); 860 ASSERT_TRUE(last_callback_success_);
859 861
860 DisableTracing(); 862 DisableTracing();
861 } 863 }
862 864
863 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when 865 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when
864 // tracing is not enabled. 866 // tracing is not enabled.
865 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { 867 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) {
866 InitializeMemoryDumpManager(false /* is_coordinator */); 868 InitializeMemoryDumpManager(false /* is_coordinator */);
867 MockMemoryDumpProvider mdp1; 869 MockMemoryDumpProvider mdp1;
868 RegisterDumpProvider(&mdp1); 870 RegisterDumpProvider(&mdp1, nullptr);
869 871
870 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 872 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0);
871 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 873 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
872 874
873 last_callback_success_ = true; 875 last_callback_success_ = true;
874 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 876 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
875 MemoryDumpLevelOfDetail::DETAILED); 877 MemoryDumpLevelOfDetail::DETAILED);
876 EXPECT_FALSE(last_callback_success_); 878 EXPECT_FALSE(last_callback_success_);
877 } 879 }
878 880
879 // Checks that is the MemoryDumpManager is initialized after tracing already 881 // Checks that is the MemoryDumpManager is initialized after tracing already
880 // began, it will still late-join the party (real use case: startup tracing). 882 // began, it will still late-join the party (real use case: startup tracing).
881 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) { 883 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) {
882 MockMemoryDumpProvider mdp; 884 MockMemoryDumpProvider mdp;
883 RegisterDumpProvider(&mdp); 885 RegisterDumpProvider(&mdp, nullptr);
884 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 886 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
885 887
886 // First check that a RequestGlobalDump() issued before the MemoryDumpManager 888 // First check that a RequestGlobalDump() issued before the MemoryDumpManager
887 // initialization gets NACK-ed cleanly. 889 // initialization gets NACK-ed cleanly.
888 { 890 {
889 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 891 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
890 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 892 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0);
891 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 893 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
892 MemoryDumpLevelOfDetail::DETAILED); 894 MemoryDumpLevelOfDetail::DETAILED);
893 EXPECT_FALSE(last_callback_success_); 895 EXPECT_FALSE(last_callback_success_);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 base::WaitableEvent tracing_disabled_event( 1058 base::WaitableEvent tracing_disabled_event(
1057 WaitableEvent::ResetPolicy::AUTOMATIC, 1059 WaitableEvent::ResetPolicy::AUTOMATIC,
1058 WaitableEvent::InitialState::NOT_SIGNALED); 1060 WaitableEvent::InitialState::NOT_SIGNALED);
1059 InitializeMemoryDumpManager(false /* is_coordinator */); 1061 InitializeMemoryDumpManager(false /* is_coordinator */);
1060 1062
1061 std::unique_ptr<Thread> mdp_thread(new Thread("test thread")); 1063 std::unique_ptr<Thread> mdp_thread(new Thread("test thread"));
1062 mdp_thread->Start(); 1064 mdp_thread->Start();
1063 1065
1064 // Create both same-thread MDP and another MDP with dedicated thread 1066 // Create both same-thread MDP and another MDP with dedicated thread
1065 MockMemoryDumpProvider mdp1; 1067 MockMemoryDumpProvider mdp1;
1066 RegisterDumpProvider(&mdp1); 1068 RegisterDumpProvider(&mdp1, nullptr);
1067 MockMemoryDumpProvider mdp2; 1069 MockMemoryDumpProvider mdp2;
1068 RegisterDumpProvider(&mdp2, mdp_thread->task_runner(), kDefaultOptions); 1070 RegisterDumpProvider(&mdp2, mdp_thread->task_runner(), kDefaultOptions);
1069 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1071 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1070 1072
1071 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)) 1073 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _))
1072 .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args, 1074 .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args,
1073 const MemoryDumpCallback& callback) { 1075 const MemoryDumpCallback& callback) {
1074 DisableTracing(); 1076 DisableTracing();
1075 delegate_->CreateProcessDump(args, callback); 1077 delegate_->CreateProcessDump(args, callback);
1076 })); 1078 }));
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1208 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1207 MemoryDumpLevelOfDetail::DETAILED); 1209 MemoryDumpLevelOfDetail::DETAILED);
1208 } 1210 }
1209 DisableTracing(); 1211 DisableTracing();
1210 } 1212 }
1211 1213
1212 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) { 1214 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) {
1213 InitializeMemoryDumpManager(false /* is_coordinator */); 1215 InitializeMemoryDumpManager(false /* is_coordinator */);
1214 SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); 1216 SetDumpProviderWhitelistForTesting(kTestMDPWhitelist);
1215 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider); 1217 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider);
1216 RegisterDumpProvider(mdp1.get()); 1218 RegisterDumpProvider(mdp1.get(), nullptr);
1217 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider); 1219 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider);
1218 RegisterDumpProvider(mdp2.get(), nullptr, kDefaultOptions, 1220 RegisterDumpProvider(mdp2.get(), nullptr, kDefaultOptions,
1219 kWhitelistedMDPName); 1221 kWhitelistedMDPName);
1220 1222
1221 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0); 1223 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0);
1222 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true)); 1224 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true));
1223 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 1225 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
1224 1226
1225 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1227 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1226 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 1228 EXPECT_FALSE(IsPeriodicDumpingEnabled());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 MemoryDumpLevelOfDetail::DETAILED); 1261 MemoryDumpLevelOfDetail::DETAILED);
1260 EXPECT_FALSE(last_callback_success_); 1262 EXPECT_FALSE(last_callback_success_);
1261 1263
1262 ASSERT_TRUE(IsPeriodicDumpingEnabled()); 1264 ASSERT_TRUE(IsPeriodicDumpingEnabled());
1263 run_loop.Run(); 1265 run_loop.Run();
1264 DisableTracing(); 1266 DisableTracing();
1265 } 1267 }
1266 1268
1267 } // namespace trace_event 1269 } // namespace trace_event
1268 } // namespace base 1270 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698