| 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> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 // Turns a Closure into a MemoryDumpCallback, keeping track of the callback | 237 // Turns a Closure into a MemoryDumpCallback, keeping track of the callback |
| 238 // result and taking care of posting the closure on the correct task runner. | 238 // result and taking care of posting the closure on the correct task runner. |
| 239 void DumpCallbackAdapter(scoped_refptr<SingleThreadTaskRunner> task_runner, | 239 void DumpCallbackAdapter(scoped_refptr<SingleThreadTaskRunner> task_runner, |
| 240 Closure closure, | 240 Closure closure, |
| 241 uint64_t dump_guid, | 241 uint64_t dump_guid, |
| 242 bool success) { | 242 bool success) { |
| 243 last_callback_success_ = success; | 243 last_callback_success_ = success; |
| 244 task_runner->PostTask(FROM_HERE, closure); | 244 task_runner->PostTask(FROM_HERE, closure); |
| 245 } | 245 } |
| 246 | 246 |
| 247 void PollFastMemoryTotal(uint64_t* memory_total) { | |
| 248 mdm_->PollFastMemoryTotal(memory_total); | |
| 249 } | |
| 250 | |
| 251 protected: | 247 protected: |
| 252 void InitializeMemoryDumpManager(bool is_coordinator) { | 248 void InitializeMemoryDumpManager(bool is_coordinator) { |
| 253 mdm_->set_dumper_registrations_ignored_for_testing(true); | 249 mdm_->set_dumper_registrations_ignored_for_testing(true); |
| 254 delegate_ = new MemoryDumpManagerDelegateForTesting(is_coordinator); | 250 delegate_ = new MemoryDumpManagerDelegateForTesting(is_coordinator); |
| 255 mdm_->Initialize(base::WrapUnique(delegate_)); | 251 mdm_->Initialize(base::WrapUnique(delegate_)); |
| 256 } | 252 } |
| 257 | 253 |
| 258 void RequestGlobalDumpAndWait(MemoryDumpType dump_type, | 254 void RequestGlobalDumpAndWait(MemoryDumpType dump_type, |
| 259 MemoryDumpLevelOfDetail level_of_detail) { | 255 MemoryDumpLevelOfDetail level_of_detail) { |
| 260 RunLoop run_loop; | 256 RunLoop run_loop; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 271 } | 267 } |
| 272 | 268 |
| 273 void EnableTracingWithTraceConfig(const std::string& trace_config) { | 269 void EnableTracingWithTraceConfig(const std::string& trace_config) { |
| 274 TraceLog::GetInstance()->SetEnabled(TraceConfig(trace_config), | 270 TraceLog::GetInstance()->SetEnabled(TraceConfig(trace_config), |
| 275 TraceLog::RECORDING_MODE); | 271 TraceLog::RECORDING_MODE); |
| 276 } | 272 } |
| 277 | 273 |
| 278 void DisableTracing() { TraceLog::GetInstance()->SetDisabled(); } | 274 void DisableTracing() { TraceLog::GetInstance()->SetDisabled(); } |
| 279 | 275 |
| 280 bool IsPeriodicDumpingEnabled() const { | 276 bool IsPeriodicDumpingEnabled() const { |
| 281 return MemoryDumpScheduler::GetInstance() | 277 return MemoryDumpScheduler::GetInstance()->IsEnabledForTesting(); |
| 282 ->IsPeriodicTimerRunningForTesting(); | |
| 283 } | 278 } |
| 284 | 279 |
| 285 int GetMaxConsecutiveFailuresCount() const { | 280 int GetMaxConsecutiveFailuresCount() const { |
| 286 return MemoryDumpManager::kMaxConsecutiveFailuresCount; | 281 return MemoryDumpManager::kMaxConsecutiveFailuresCount; |
| 287 } | 282 } |
| 288 | 283 |
| 289 const MemoryDumpProvider::Options kDefaultOptions; | 284 const MemoryDumpProvider::Options kDefaultOptions; |
| 290 std::unique_ptr<MemoryDumpManager> mdm_; | 285 std::unique_ptr<MemoryDumpManager> mdm_; |
| 291 MemoryDumpManagerDelegateForTesting* delegate_; | 286 MemoryDumpManagerDelegateForTesting* delegate_; |
| 292 bool last_callback_success_; | 287 bool last_callback_success_; |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 EXPECT_CALL(*mdp1, PollFastMemoryTotal(_)) | 796 EXPECT_CALL(*mdp1, PollFastMemoryTotal(_)) |
| 802 .Times(testing::AtLeast(kPollsToQuit)) | 797 .Times(testing::AtLeast(kPollsToQuit)) |
| 803 .WillRepeatedly(Invoke(poll_function1)); | 798 .WillRepeatedly(Invoke(poll_function1)); |
| 804 | 799 |
| 805 // Depending on the order of PostTask calls the mdp2 might be registered after | 800 // Depending on the order of PostTask calls the mdp2 might be registered after |
| 806 // all polls or in between polls. | 801 // all polls or in between polls. |
| 807 EXPECT_CALL(*mdp2, PollFastMemoryTotal(_)) | 802 EXPECT_CALL(*mdp2, PollFastMemoryTotal(_)) |
| 808 .Times(Between(0, kPollsToQuit - 1)) | 803 .Times(Between(0, kPollsToQuit - 1)) |
| 809 .WillRepeatedly(Return()); | 804 .WillRepeatedly(Return()); |
| 810 | 805 |
| 811 MemoryDumpScheduler::SetPollingIntervalForTesting(1); | 806 // TODO here MemoryDumpScheduler::SetPollingIntervalForTesting(1); |
| 812 EnableTracingWithTraceConfig( | 807 EnableTracingWithTraceConfig( |
| 813 TraceConfigMemoryTestUtil::GetTraceConfig_PeakDetectionTrigger(3)); | 808 TraceConfigMemoryTestUtil::GetTraceConfig_PeakDetectionTrigger(3)); |
| 814 | 809 |
| 815 int last_poll_to_request_dump = -2; | 810 int last_poll_to_request_dump = -2; |
| 816 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)) | 811 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)) |
| 817 .Times(testing::AtLeast(2)) | 812 .Times(testing::AtLeast(2)) |
| 818 .WillRepeatedly(Invoke([&last_poll_to_request_dump, &call_count]( | 813 .WillRepeatedly(Invoke([&last_poll_to_request_dump, &call_count]( |
| 819 const MemoryDumpRequestArgs& args, | 814 const MemoryDumpRequestArgs& args, |
| 820 const MemoryDumpCallback& callback) -> void { | 815 const MemoryDumpCallback& callback) -> void { |
| 821 // Minimum number of polls between dumps must be 3 (polling interval is | 816 // Minimum number of polls between dumps must be 3 (polling interval is |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1302 thread.Start(); | 1297 thread.Start(); |
| 1303 RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions, | 1298 RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions, |
| 1304 "BlacklistTestDumpProvider"); | 1299 "BlacklistTestDumpProvider"); |
| 1305 // Unregistering on wrong thread should not crash. | 1300 // Unregistering on wrong thread should not crash. |
| 1306 mdm_->UnregisterDumpProvider(&mdp1); | 1301 mdm_->UnregisterDumpProvider(&mdp1); |
| 1307 thread.Stop(); | 1302 thread.Stop(); |
| 1308 } | 1303 } |
| 1309 | 1304 |
| 1310 } // namespace trace_event | 1305 } // namespace trace_event |
| 1311 } // namespace base | 1306 } // namespace base |
| OLD | NEW |