| Index: base/trace_event/memory_dump_manager_unittest.cc
|
| diff --git a/base/trace_event/memory_dump_manager_unittest.cc b/base/trace_event/memory_dump_manager_unittest.cc
|
| index 8146b04178a3f4d2a359a26d917ce4c6912147d5..6ddf1162d576bb37464eb519510d0e7305ad3647 100644
|
| --- a/base/trace_event/memory_dump_manager_unittest.cc
|
| +++ b/base/trace_event/memory_dump_manager_unittest.cc
|
| @@ -29,6 +29,7 @@
|
| #include "base/trace_event/memory_dump_provider.h"
|
| #include "base/trace_event/memory_dump_scheduler.h"
|
| #include "base/trace_event/memory_infra_background_whitelist.h"
|
| +#include "base/trace_event/memory_tracing_frontend.h"
|
| #include "base/trace_event/process_memory_dump.h"
|
| #include "base/trace_event/trace_buffer.h"
|
| #include "base/trace_event/trace_config_memory_test_util.h"
|
| @@ -229,6 +230,7 @@ class MemoryDumpManagerTest : public testing::Test {
|
| void TearDown() override {
|
| MemoryDumpManager::SetInstanceForTesting(nullptr);
|
| delegate_ = nullptr;
|
| + tracing_frontend_ = nullptr;
|
| mdm_.reset();
|
| message_loop_.reset();
|
| TraceLog::DeleteForTesting();
|
| @@ -249,6 +251,8 @@ class MemoryDumpManagerTest : public testing::Test {
|
| mdm_->set_dumper_registrations_ignored_for_testing(true);
|
| delegate_ = new MemoryDumpManagerDelegateForTesting(is_coordinator);
|
| mdm_->Initialize(base::WrapUnique(delegate_));
|
| + auto* trace_log = TraceLog::GetInstance();
|
| + tracing_frontend_ = new MemoryTracingFrontend(trace_log, mdm_.get());
|
| }
|
|
|
| void RequestGlobalDumpAndWait(MemoryDumpType dump_type,
|
| @@ -284,6 +288,7 @@ class MemoryDumpManagerTest : public testing::Test {
|
| const MemoryDumpProvider::Options kDefaultOptions;
|
| std::unique_ptr<MemoryDumpManager> mdm_;
|
| MemoryDumpManagerDelegateForTesting* delegate_;
|
| + MemoryTracingFrontend* tracing_frontend_;
|
| bool last_callback_success_;
|
|
|
| private:
|
| @@ -996,64 +1001,6 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) {
|
| DisableTracing();
|
| }
|
|
|
| -// Tests against race conditions that might arise when disabling tracing in the
|
| -// middle of a global memory dump.
|
| -// Flaky on iOS, see crbug.com/706961
|
| -#if defined(OS_IOS)
|
| -#define MAYBE_DisableTracingWhileDumping DISABLED_DisableTracingWhileDumping
|
| -#else
|
| -#define MAYBE_DisableTracingWhileDumping DisableTracingWhileDumping
|
| -#endif
|
| -TEST_F(MemoryDumpManagerTest, MAYBE_DisableTracingWhileDumping) {
|
| - base::WaitableEvent tracing_disabled_event(
|
| - WaitableEvent::ResetPolicy::AUTOMATIC,
|
| - WaitableEvent::InitialState::NOT_SIGNALED);
|
| - InitializeMemoryDumpManager(false /* is_coordinator */);
|
| -
|
| - // Register a bound dump provider.
|
| - std::unique_ptr<Thread> mdp_thread(new Thread("test thread"));
|
| - mdp_thread->Start();
|
| - MockMemoryDumpProvider mdp_with_affinity;
|
| - RegisterDumpProvider(&mdp_with_affinity, mdp_thread->task_runner(),
|
| - kDefaultOptions);
|
| -
|
| - // Register also an unbound dump provider. Unbound dump providers are always
|
| - // invoked after bound ones.
|
| - MockMemoryDumpProvider unbound_mdp;
|
| - RegisterDumpProvider(&unbound_mdp, nullptr, kDefaultOptions);
|
| -
|
| - EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
|
| - EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
|
| - EXPECT_CALL(mdp_with_affinity, OnMemoryDump(_, _))
|
| - .Times(1)
|
| - .WillOnce(
|
| - Invoke([&tracing_disabled_event](const MemoryDumpArgs&,
|
| - ProcessMemoryDump* pmd) -> bool {
|
| - tracing_disabled_event.Wait();
|
| -
|
| - // At this point tracing has been disabled and the
|
| - // MemoryDumpManager.dump_thread_ has been shut down.
|
| - return true;
|
| - }));
|
| -
|
| - // |unbound_mdp| should never be invoked because the thread for unbound dump
|
| - // providers has been shutdown in the meanwhile.
|
| - EXPECT_CALL(unbound_mdp, OnMemoryDump(_, _)).Times(0);
|
| -
|
| - last_callback_success_ = true;
|
| - RunLoop run_loop;
|
| - MemoryDumpCallback callback =
|
| - Bind(&MemoryDumpManagerTest::DumpCallbackAdapter, Unretained(this),
|
| - ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure());
|
| - mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
|
| - MemoryDumpLevelOfDetail::DETAILED, callback);
|
| - DisableTracing();
|
| - tracing_disabled_event.Signal();
|
| - run_loop.Run();
|
| -
|
| - EXPECT_FALSE(last_callback_success_);
|
| -}
|
| -
|
| // Tests against race conditions that can happen if tracing is disabled before
|
| // the CreateProcessDump() call. Real-world regression: crbug.com/580295 .
|
| TEST_F(MemoryDumpManagerTest, DisableTracingRightBeforeStartOfDump) {
|
|
|