OLD | NEW |
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> |
| 8 |
7 #include <vector> | 9 #include <vector> |
8 | 10 |
9 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
10 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
11 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
12 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
13 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
14 #include "base/synchronization/waitable_event.h" | 16 #include "base/synchronization/waitable_event.h" |
15 #include "base/test/test_io_thread.h" | 17 #include "base/test/test_io_thread.h" |
16 #include "base/test/trace_event_analyzer.h" | 18 #include "base/test/trace_event_analyzer.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 MemoryDumpManagerDelegateForTesting() { | 78 MemoryDumpManagerDelegateForTesting() { |
77 ON_CALL(*this, RequestGlobalMemoryDump(_, _)) | 79 ON_CALL(*this, RequestGlobalMemoryDump(_, _)) |
78 .WillByDefault(Invoke( | 80 .WillByDefault(Invoke( |
79 this, &MemoryDumpManagerDelegateForTesting::CreateProcessDump)); | 81 this, &MemoryDumpManagerDelegateForTesting::CreateProcessDump)); |
80 } | 82 } |
81 | 83 |
82 MOCK_METHOD2(RequestGlobalMemoryDump, | 84 MOCK_METHOD2(RequestGlobalMemoryDump, |
83 void(const MemoryDumpRequestArgs& args, | 85 void(const MemoryDumpRequestArgs& args, |
84 const MemoryDumpCallback& callback)); | 86 const MemoryDumpCallback& callback)); |
85 | 87 |
86 uint64 GetTracingProcessId() const override { | 88 uint64_t GetTracingProcessId() const override { |
87 NOTREACHED(); | 89 NOTREACHED(); |
88 return MemoryDumpManager::kInvalidTracingProcessId; | 90 return MemoryDumpManager::kInvalidTracingProcessId; |
89 } | 91 } |
90 }; | 92 }; |
91 | 93 |
92 class MockMemoryDumpProvider : public MemoryDumpProvider { | 94 class MockMemoryDumpProvider : public MemoryDumpProvider { |
93 public: | 95 public: |
94 MOCK_METHOD2(OnMemoryDump, | 96 MOCK_METHOD2(OnMemoryDump, |
95 bool(const MemoryDumpArgs& args, ProcessMemoryDump* pmd)); | 97 bool(const MemoryDumpArgs& args, ProcessMemoryDump* pmd)); |
96 }; | 98 }; |
(...skipping 16 matching lines...) Expand all Loading... |
113 mdm_.reset(); | 115 mdm_.reset(); |
114 delegate_.reset(); | 116 delegate_.reset(); |
115 message_loop_.reset(); | 117 message_loop_.reset(); |
116 TraceLog::DeleteForTesting(); | 118 TraceLog::DeleteForTesting(); |
117 } | 119 } |
118 | 120 |
119 // Turns a Closure into a MemoryDumpCallback, keeping track of the callback | 121 // Turns a Closure into a MemoryDumpCallback, keeping track of the callback |
120 // result and taking care of posting the closure on the correct task runner. | 122 // result and taking care of posting the closure on the correct task runner. |
121 void DumpCallbackAdapter(scoped_refptr<SingleThreadTaskRunner> task_runner, | 123 void DumpCallbackAdapter(scoped_refptr<SingleThreadTaskRunner> task_runner, |
122 Closure closure, | 124 Closure closure, |
123 uint64 dump_guid, | 125 uint64_t dump_guid, |
124 bool success) { | 126 bool success) { |
125 last_callback_success_ = success; | 127 last_callback_success_ = success; |
126 task_runner->PostTask(FROM_HERE, closure); | 128 task_runner->PostTask(FROM_HERE, closure); |
127 } | 129 } |
128 | 130 |
129 protected: | 131 protected: |
130 void InitializeMemoryDumpManager(bool is_coordinator) { | 132 void InitializeMemoryDumpManager(bool is_coordinator) { |
131 mdm_->set_dumper_registrations_ignored_for_testing(true); | 133 mdm_->set_dumper_registrations_ignored_for_testing(true); |
132 mdm_->Initialize(delegate_.get(), is_coordinator); | 134 mdm_->Initialize(delegate_.get(), is_coordinator); |
133 } | 135 } |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 DisableTracing(); | 368 DisableTracing(); |
367 } | 369 } |
368 } | 370 } |
369 | 371 |
370 // Checks that the MemoryDumpManager respects the thread affinity when a | 372 // Checks that the MemoryDumpManager respects the thread affinity when a |
371 // MemoryDumpProvider specifies a task_runner(). The test starts creating 8 | 373 // MemoryDumpProvider specifies a task_runner(). The test starts creating 8 |
372 // threads and registering a MemoryDumpProvider on each of them. At each | 374 // threads and registering a MemoryDumpProvider on each of them. At each |
373 // iteration, one thread is removed, to check the live unregistration logic. | 375 // iteration, one thread is removed, to check the live unregistration logic. |
374 TEST_F(MemoryDumpManagerTest, RespectTaskRunnerAffinity) { | 376 TEST_F(MemoryDumpManagerTest, RespectTaskRunnerAffinity) { |
375 InitializeMemoryDumpManager(false /* is_coordinator */); | 377 InitializeMemoryDumpManager(false /* is_coordinator */); |
376 const uint32 kNumInitialThreads = 8; | 378 const uint32_t kNumInitialThreads = 8; |
377 | 379 |
378 std::vector<scoped_ptr<Thread>> threads; | 380 std::vector<scoped_ptr<Thread>> threads; |
379 std::vector<scoped_ptr<MockMemoryDumpProvider>> mdps; | 381 std::vector<scoped_ptr<MockMemoryDumpProvider>> mdps; |
380 | 382 |
381 // Create the threads and setup the expectations. Given that at each iteration | 383 // Create the threads and setup the expectations. Given that at each iteration |
382 // we will pop out one thread/MemoryDumpProvider, each MDP is supposed to be | 384 // we will pop out one thread/MemoryDumpProvider, each MDP is supposed to be |
383 // invoked a number of times equal to its index. | 385 // invoked a number of times equal to its index. |
384 for (uint32 i = kNumInitialThreads; i > 0; --i) { | 386 for (uint32_t i = kNumInitialThreads; i > 0; --i) { |
385 threads.push_back(make_scoped_ptr(new Thread("test thread"))); | 387 threads.push_back(make_scoped_ptr(new Thread("test thread"))); |
386 auto thread = threads.back().get(); | 388 auto thread = threads.back().get(); |
387 thread->Start(); | 389 thread->Start(); |
388 scoped_refptr<SingleThreadTaskRunner> task_runner = thread->task_runner(); | 390 scoped_refptr<SingleThreadTaskRunner> task_runner = thread->task_runner(); |
389 mdps.push_back(make_scoped_ptr(new MockMemoryDumpProvider())); | 391 mdps.push_back(make_scoped_ptr(new MockMemoryDumpProvider())); |
390 auto mdp = mdps.back().get(); | 392 auto mdp = mdps.back().get(); |
391 RegisterDumpProvider(mdp, task_runner, kDefaultOptions); | 393 RegisterDumpProvider(mdp, task_runner, kDefaultOptions); |
392 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) | 394 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) |
393 .Times(i) | 395 .Times(i) |
394 .WillRepeatedly(Invoke( | 396 .WillRepeatedly(Invoke( |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
870 ASSERT_EQ(1u, trace_analyzer::CountMatches(events, Query::EventPidIs(123))); | 872 ASSERT_EQ(1u, trace_analyzer::CountMatches(events, Query::EventPidIs(123))); |
871 ASSERT_EQ(1u, trace_analyzer::CountMatches(events, Query::EventPidIs(456))); | 873 ASSERT_EQ(1u, trace_analyzer::CountMatches(events, Query::EventPidIs(456))); |
872 ASSERT_EQ(1u, trace_analyzer::CountMatches( | 874 ASSERT_EQ(1u, trace_analyzer::CountMatches( |
873 events, Query::EventPidIs(GetCurrentProcId()))); | 875 events, Query::EventPidIs(GetCurrentProcId()))); |
874 ASSERT_EQ(events[0]->id, events[1]->id); | 876 ASSERT_EQ(events[0]->id, events[1]->id); |
875 ASSERT_EQ(events[0]->id, events[2]->id); | 877 ASSERT_EQ(events[0]->id, events[2]->id); |
876 } | 878 } |
877 | 879 |
878 } // namespace trace_event | 880 } // namespace trace_event |
879 } // namespace base | 881 } // namespace base |
OLD | NEW |