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

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

Issue 2819413002: [memory-infra] Remove MemoryDumpManagerDelegate (Closed)
Patch Set: Created 3 years, 8 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 <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // TODO (fmeawad): we should keep the results for verification, but currently 121 // TODO (fmeawad): we should keep the results for verification, but currently
122 // all results are empty. 122 // all results are empty.
123 void ProcessDumpCallbackAdapter( 123 void ProcessDumpCallbackAdapter(
124 GlobalMemoryDumpCallback callback, 124 GlobalMemoryDumpCallback callback,
125 uint64_t dump_guid, 125 uint64_t dump_guid,
126 bool success, 126 bool success,
127 const base::Optional<base::trace_event::MemoryDumpCallbackResult>&) { 127 const base::Optional<base::trace_event::MemoryDumpCallbackResult>&) {
128 callback.Run(dump_guid, success); 128 callback.Run(dump_guid, success);
129 } 129 }
130 130
131 // Testing MemoryDumpManagerDelegate which, by default, short-circuits dump 131 class GlobalMemoryDumpHandler {
Primiano Tucci (use gerrit) 2017/04/19 15:44:34 I'd keep a comment saing: this mocks the ReqGlobal
ssid 2017/04/20 01:18:21 Done.
132 // requests locally to the MemoryDumpManager instead of performing IPC dances.
133 class MemoryDumpManagerDelegateForTesting : public MemoryDumpManagerDelegate {
134 public: 132 public:
135 MemoryDumpManagerDelegateForTesting(bool is_coordinator) 133 MOCK_METHOD2(RequestGlobalMemoryDump,
136 : is_coordinator_(is_coordinator) { 134 void(const MemoryDumpRequestArgs& args,
135 const GlobalMemoryDumpCallback& callback));
136
137 GlobalMemoryDumpHandler() {
137 ON_CALL(*this, RequestGlobalMemoryDump(_, _)) 138 ON_CALL(*this, RequestGlobalMemoryDump(_, _))
138 .WillByDefault(Invoke([this](const MemoryDumpRequestArgs& args, 139 .WillByDefault(Invoke([this](const MemoryDumpRequestArgs& args,
139 const GlobalMemoryDumpCallback& callback) { 140 const GlobalMemoryDumpCallback& callback) {
140 ProcessMemoryDumpCallback process_callback = 141 ProcessMemoryDumpCallback process_callback =
141 Bind(&ProcessDumpCallbackAdapter, callback); 142 Bind(&ProcessDumpCallbackAdapter, callback);
142 CreateProcessDump(args, process_callback); 143 MemoryDumpManager::GetInstance()->CreateProcessDump(args,
144 process_callback);
143 })); 145 }));
144 } 146 }
145
146 MOCK_METHOD2(RequestGlobalMemoryDump,
147 void(const MemoryDumpRequestArgs& args,
148 const GlobalMemoryDumpCallback& callback));
149
150 bool IsCoordinator() const override { return is_coordinator_; }
151
152 // Promote the CreateProcessDump to public so it can be used by test fixtures.
153 using MemoryDumpManagerDelegate::CreateProcessDump;
154
155 private:
156 bool is_coordinator_;
157 }; 147 };
158 148
159 class MockMemoryDumpProvider : public MemoryDumpProvider { 149 class MockMemoryDumpProvider : public MemoryDumpProvider {
160 public: 150 public:
161 MOCK_METHOD0(Destructor, void()); 151 MOCK_METHOD0(Destructor, void());
162 MOCK_METHOD2(OnMemoryDump, 152 MOCK_METHOD2(OnMemoryDump,
163 bool(const MemoryDumpArgs& args, ProcessMemoryDump* pmd)); 153 bool(const MemoryDumpArgs& args, ProcessMemoryDump* pmd));
164 MOCK_METHOD1(PollFastMemoryTotal, void(uint64_t* memory_total)); 154 MOCK_METHOD1(PollFastMemoryTotal, void(uint64_t* memory_total));
165 MOCK_METHOD0(SuspendFastMemoryPolling, void()); 155 MOCK_METHOD0(SuspendFastMemoryPolling, void());
166 156
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 void SetUp() override { 227 void SetUp() override {
238 last_callback_success_ = false; 228 last_callback_success_ = false;
239 message_loop_.reset(new MessageLoop()); 229 message_loop_.reset(new MessageLoop());
240 mdm_.reset(new MemoryDumpManager()); 230 mdm_.reset(new MemoryDumpManager());
241 MemoryDumpManager::SetInstanceForTesting(mdm_.get()); 231 MemoryDumpManager::SetInstanceForTesting(mdm_.get());
242 ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance()); 232 ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance());
243 } 233 }
244 234
245 void TearDown() override { 235 void TearDown() override {
246 MemoryDumpManager::SetInstanceForTesting(nullptr); 236 MemoryDumpManager::SetInstanceForTesting(nullptr);
247 delegate_ = nullptr;
248 mdm_.reset(); 237 mdm_.reset();
249 message_loop_.reset(); 238 message_loop_.reset();
250 TraceLog::DeleteForTesting(); 239 TraceLog::DeleteForTesting();
251 } 240 }
252 241
253 // Turns a Closure into a GlobalMemoryDumpCallback, keeping track of the 242 // Turns a Closure into a GlobalMemoryDumpCallback, keeping track of the
254 // callback result and taking care of posting the closure on the correct task 243 // callback result and taking care of posting the closure on the correct task
255 // runner. 244 // runner.
256 void GlobalDumpCallbackAdapter( 245 void GlobalDumpCallbackAdapter(
257 scoped_refptr<SingleThreadTaskRunner> task_runner, 246 scoped_refptr<SingleThreadTaskRunner> task_runner,
258 Closure closure, 247 Closure closure,
259 uint64_t dump_guid, 248 uint64_t dump_guid,
260 bool success) { 249 bool success) {
261 last_callback_success_ = success; 250 last_callback_success_ = success;
262 task_runner->PostTask(FROM_HERE, closure); 251 task_runner->PostTask(FROM_HERE, closure);
263 } 252 }
264 253
265 protected: 254 protected:
266 void InitializeMemoryDumpManager(bool is_coordinator) { 255 void InitializeMemoryDumpManager(bool is_coordinator) {
267 mdm_->set_dumper_registrations_ignored_for_testing(true); 256 mdm_->set_dumper_registrations_ignored_for_testing(true);
268 delegate_ = new MemoryDumpManagerDelegateForTesting(is_coordinator); 257 mdm_->Initialize(
269 mdm_->Initialize(base::WrapUnique(delegate_)); 258 BindRepeating(&GlobalMemoryDumpHandler::RequestGlobalMemoryDump,
259 Unretained(&global_dump_handler_)),
260 is_coordinator);
270 } 261 }
271 262
272 void RequestGlobalDumpAndWait(MemoryDumpType dump_type, 263 void RequestGlobalDumpAndWait(MemoryDumpType dump_type,
273 MemoryDumpLevelOfDetail level_of_detail) { 264 MemoryDumpLevelOfDetail level_of_detail) {
274 RunLoop run_loop; 265 RunLoop run_loop;
275 GlobalMemoryDumpCallback callback = Bind( 266 GlobalMemoryDumpCallback callback = Bind(
276 &MemoryDumpManagerTest::GlobalDumpCallbackAdapter, Unretained(this), 267 &MemoryDumpManagerTest::GlobalDumpCallbackAdapter, Unretained(this),
277 ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure()); 268 ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure());
278 mdm_->RequestGlobalDump(dump_type, level_of_detail, callback); 269 mdm_->RequestGlobalDump(dump_type, level_of_detail, callback);
279 run_loop.Run(); 270 run_loop.Run();
(...skipping 14 matching lines...) Expand all
294 bool IsPeriodicDumpingEnabled() const { 285 bool IsPeriodicDumpingEnabled() const {
295 return MemoryDumpScheduler::GetInstance()->is_enabled_for_testing(); 286 return MemoryDumpScheduler::GetInstance()->is_enabled_for_testing();
296 } 287 }
297 288
298 int GetMaxConsecutiveFailuresCount() const { 289 int GetMaxConsecutiveFailuresCount() const {
299 return MemoryDumpManager::kMaxConsecutiveFailuresCount; 290 return MemoryDumpManager::kMaxConsecutiveFailuresCount;
300 } 291 }
301 292
302 const MemoryDumpProvider::Options kDefaultOptions; 293 const MemoryDumpProvider::Options kDefaultOptions;
303 std::unique_ptr<MemoryDumpManager> mdm_; 294 std::unique_ptr<MemoryDumpManager> mdm_;
304 MemoryDumpManagerDelegateForTesting* delegate_; 295 GlobalMemoryDumpHandler global_dump_handler_;
305 bool last_callback_success_; 296 bool last_callback_success_;
306 297
307 private: 298 private:
308 std::unique_ptr<MessageLoop> message_loop_; 299 std::unique_ptr<MessageLoop> message_loop_;
309 300
310 // We want our singleton torn down after each test. 301 // We want our singleton torn down after each test.
311 ShadowingAtExitManager at_exit_manager_; 302 ShadowingAtExitManager at_exit_manager_;
312 }; 303 };
313 304
314 // Basic sanity checks. Registers a memory dump provider and checks that it is 305 // Basic sanity checks. Registers a memory dump provider and checks that it is
315 // called, but only when memory-infra is enabled. 306 // called, but only when memory-infra is enabled.
316 TEST_F(MemoryDumpManagerTest, SingleDumper) { 307 TEST_F(MemoryDumpManagerTest, SingleDumper) {
317 InitializeMemoryDumpManager(false /* is_coordinator */); 308 InitializeMemoryDumpManager(false /* is_coordinator */);
318 MockMemoryDumpProvider mdp; 309 MockMemoryDumpProvider mdp;
319 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 310 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
320 311
321 // Check that the dumper is not called if the memory category is not enabled. 312 // Check that the dumper is not called if the memory category is not enabled.
322 EnableTracingWithLegacyCategories("foobar-but-not-memory"); 313 EnableTracingWithLegacyCategories("foobar-but-not-memory");
323 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 314 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(0);
324 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 315 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
325 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 316 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
326 MemoryDumpLevelOfDetail::DETAILED); 317 MemoryDumpLevelOfDetail::DETAILED);
327 DisableTracing(); 318 DisableTracing();
328 319
329 // Now repeat enabling the memory category and check that the dumper is 320 // Now repeat enabling the memory category and check that the dumper is
330 // invoked this time. 321 // invoked this time.
331 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 322 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
332 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(3); 323 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3);
333 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true)); 324 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true));
334 for (int i = 0; i < 3; ++i) { 325 for (int i = 0; i < 3; ++i) {
335 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 326 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
336 MemoryDumpLevelOfDetail::DETAILED); 327 MemoryDumpLevelOfDetail::DETAILED);
337 } 328 }
338 DisableTracing(); 329 DisableTracing();
339 330
340 mdm_->UnregisterDumpProvider(&mdp); 331 mdm_->UnregisterDumpProvider(&mdp);
341 332
342 // Finally check the unregister logic: the delegate will be invoked but not 333 // Finally check the unregister logic: the global dump handler will be invoked
343 // the dump provider, as it has been unregistered. 334 // but not the dump provider, as it has been unregistered.
344 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 335 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
345 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(3); 336 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3);
346 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 337 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
347 338
348 for (int i = 0; i < 3; ++i) { 339 for (int i = 0; i < 3; ++i) {
349 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 340 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
350 MemoryDumpLevelOfDetail::DETAILED); 341 MemoryDumpLevelOfDetail::DETAILED);
351 } 342 }
352 DisableTracing(); 343 DisableTracing();
353 } 344 }
354 345
355 // Checks that requesting dumps with high level of detail actually propagates 346 // Checks that requesting dumps with high level of detail actually propagates
356 // the level of the detail properly to OnMemoryDump() call on dump providers. 347 // the level of the detail properly to OnMemoryDump() call on dump providers.
357 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { 348 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) {
358 InitializeMemoryDumpManager(false /* is_coordinator */); 349 InitializeMemoryDumpManager(false /* is_coordinator */);
359 MockMemoryDumpProvider mdp; 350 MockMemoryDumpProvider mdp;
360 351
361 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 352 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
362 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 353 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
363 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 354 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
364 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); 355 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true));
365 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 356 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
366 MemoryDumpLevelOfDetail::DETAILED); 357 MemoryDumpLevelOfDetail::DETAILED);
367 DisableTracing(); 358 DisableTracing();
368 mdm_->UnregisterDumpProvider(&mdp); 359 mdm_->UnregisterDumpProvider(&mdp);
369 360
370 // Check that requesting dumps with low level of detail actually propagates to 361 // Check that requesting dumps with low level of detail actually propagates to
371 // OnMemoryDump() call on dump providers. 362 // OnMemoryDump() call on dump providers.
372 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 363 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
373 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 364 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
374 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 365 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
375 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); 366 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true));
376 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 367 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
377 MemoryDumpLevelOfDetail::LIGHT); 368 MemoryDumpLevelOfDetail::LIGHT);
378 DisableTracing(); 369 DisableTracing();
379 mdm_->UnregisterDumpProvider(&mdp); 370 mdm_->UnregisterDumpProvider(&mdp);
380 } 371 }
381 372
382 // Checks that the SharedSessionState object is acqually shared over time. 373 // Checks that the SharedSessionState object is acqually shared over time.
383 TEST_F(MemoryDumpManagerTest, SharedSessionState) { 374 TEST_F(MemoryDumpManagerTest, SharedSessionState) {
384 InitializeMemoryDumpManager(false /* is_coordinator */); 375 InitializeMemoryDumpManager(false /* is_coordinator */);
385 MockMemoryDumpProvider mdp1; 376 MockMemoryDumpProvider mdp1;
386 MockMemoryDumpProvider mdp2; 377 MockMemoryDumpProvider mdp2;
387 RegisterDumpProvider(&mdp1, nullptr); 378 RegisterDumpProvider(&mdp1, nullptr);
388 RegisterDumpProvider(&mdp2, nullptr); 379 RegisterDumpProvider(&mdp2, nullptr);
389 380
390 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 381 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
391 const MemoryDumpSessionState* session_state = 382 const MemoryDumpSessionState* session_state =
392 mdm_->session_state_for_testing().get(); 383 mdm_->session_state_for_testing().get();
393 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 384 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2);
394 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 385 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
395 .Times(2) 386 .Times(2)
396 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, 387 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
397 ProcessMemoryDump* pmd) -> bool { 388 ProcessMemoryDump* pmd) -> bool {
398 EXPECT_EQ(session_state, pmd->session_state().get()); 389 EXPECT_EQ(session_state, pmd->session_state().get());
399 return true; 390 return true;
400 })); 391 }));
401 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 392 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
402 .Times(2) 393 .Times(2)
403 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, 394 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
(...skipping 12 matching lines...) Expand all
416 407
417 // Checks that the (Un)RegisterDumpProvider logic behaves sanely. 408 // Checks that the (Un)RegisterDumpProvider logic behaves sanely.
418 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { 409 TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
419 InitializeMemoryDumpManager(false /* is_coordinator */); 410 InitializeMemoryDumpManager(false /* is_coordinator */);
420 MockMemoryDumpProvider mdp1; 411 MockMemoryDumpProvider mdp1;
421 MockMemoryDumpProvider mdp2; 412 MockMemoryDumpProvider mdp2;
422 413
423 // Enable only mdp1. 414 // Enable only mdp1.
424 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get()); 415 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get());
425 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 416 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
426 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 417 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
427 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 418 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
428 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); 419 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
429 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 420 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
430 MemoryDumpLevelOfDetail::DETAILED); 421 MemoryDumpLevelOfDetail::DETAILED);
431 DisableTracing(); 422 DisableTracing();
432 423
433 // Invert: enable mdp1 and disable mdp2. 424 // Invert: enable mdp1 and disable mdp2.
434 mdm_->UnregisterDumpProvider(&mdp1); 425 mdm_->UnregisterDumpProvider(&mdp1);
435 RegisterDumpProvider(&mdp2, nullptr); 426 RegisterDumpProvider(&mdp2, nullptr);
436 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 427 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
437 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 428 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
438 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 429 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
439 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 430 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
440 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 431 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
441 MemoryDumpLevelOfDetail::DETAILED); 432 MemoryDumpLevelOfDetail::DETAILED);
442 DisableTracing(); 433 DisableTracing();
443 434
444 // Enable both mdp1 and mdp2. 435 // Enable both mdp1 and mdp2.
445 RegisterDumpProvider(&mdp1, nullptr); 436 RegisterDumpProvider(&mdp1, nullptr);
446 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 437 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
447 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 438 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
448 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 439 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
449 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 440 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
450 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 441 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
451 MemoryDumpLevelOfDetail::DETAILED); 442 MemoryDumpLevelOfDetail::DETAILED);
452 DisableTracing(); 443 DisableTracing();
453 } 444 }
454 445
455 // Checks that the dump provider invocations depend only on the current 446 // Checks that the dump provider invocations depend only on the current
456 // registration state and not on previous registrations and dumps. 447 // registration state and not on previous registrations and dumps.
457 // Flaky on iOS, see crbug.com/706874 448 // Flaky on iOS, see crbug.com/706874
458 #if defined(OS_IOS) 449 #if defined(OS_IOS)
459 #define MAYBE_RegistrationConsistency DISABLED_RegistrationConsistency 450 #define MAYBE_RegistrationConsistency DISABLED_RegistrationConsistency
460 #else 451 #else
461 #define MAYBE_RegistrationConsistency RegistrationConsistency 452 #define MAYBE_RegistrationConsistency RegistrationConsistency
462 #endif 453 #endif
463 TEST_F(MemoryDumpManagerTest, MAYBE_RegistrationConsistency) { 454 TEST_F(MemoryDumpManagerTest, MAYBE_RegistrationConsistency) {
464 InitializeMemoryDumpManager(false /* is_coordinator */); 455 InitializeMemoryDumpManager(false /* is_coordinator */);
465 MockMemoryDumpProvider mdp; 456 MockMemoryDumpProvider mdp;
466 457
467 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 458 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
468 459
469 { 460 {
470 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 461 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
471 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 462 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
472 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 463 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
473 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 464 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
474 MemoryDumpLevelOfDetail::DETAILED); 465 MemoryDumpLevelOfDetail::DETAILED);
475 DisableTracing(); 466 DisableTracing();
476 } 467 }
477 468
478 mdm_->UnregisterDumpProvider(&mdp); 469 mdm_->UnregisterDumpProvider(&mdp);
479 470
480 { 471 {
481 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 472 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
482 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 473 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
483 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 474 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
484 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 475 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
485 MemoryDumpLevelOfDetail::DETAILED); 476 MemoryDumpLevelOfDetail::DETAILED);
486 DisableTracing(); 477 DisableTracing();
487 } 478 }
488 479
489 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 480 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
490 mdm_->UnregisterDumpProvider(&mdp); 481 mdm_->UnregisterDumpProvider(&mdp);
491 482
492 { 483 {
493 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 484 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
494 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 485 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
495 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 486 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
496 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 487 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
497 MemoryDumpLevelOfDetail::DETAILED); 488 MemoryDumpLevelOfDetail::DETAILED);
498 DisableTracing(); 489 DisableTracing();
499 } 490 }
500 491
501 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 492 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
502 mdm_->UnregisterDumpProvider(&mdp); 493 mdm_->UnregisterDumpProvider(&mdp);
503 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 494 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
504 495
505 { 496 {
506 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 497 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
507 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 498 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
508 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 499 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
509 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 500 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
510 MemoryDumpLevelOfDetail::DETAILED); 501 MemoryDumpLevelOfDetail::DETAILED);
511 DisableTracing(); 502 DisableTracing();
512 } 503 }
513 } 504 }
514 505
515 // Checks that the MemoryDumpManager respects the thread affinity when a 506 // Checks that the MemoryDumpManager respects the thread affinity when a
516 // MemoryDumpProvider specifies a task_runner(). The test starts creating 8 507 // MemoryDumpProvider specifies a task_runner(). The test starts creating 8
(...skipping 22 matching lines...) Expand all
539 .WillRepeatedly(Invoke( 530 .WillRepeatedly(Invoke(
540 [task_runner](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 531 [task_runner](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
541 EXPECT_TRUE(task_runner->RunsTasksOnCurrentThread()); 532 EXPECT_TRUE(task_runner->RunsTasksOnCurrentThread());
542 return true; 533 return true;
543 })); 534 }));
544 } 535 }
545 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 536 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
546 537
547 while (!threads.empty()) { 538 while (!threads.empty()) {
548 last_callback_success_ = false; 539 last_callback_success_ = false;
549 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 540 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
550 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 541 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
551 MemoryDumpLevelOfDetail::DETAILED); 542 MemoryDumpLevelOfDetail::DETAILED);
552 EXPECT_TRUE(last_callback_success_); 543 EXPECT_TRUE(last_callback_success_);
553 544
554 // Unregister a MDP and destroy one thread at each iteration to check the 545 // Unregister a MDP and destroy one thread at each iteration to check the
555 // live unregistration logic. The unregistration needs to happen on the same 546 // live unregistration logic. The unregistration needs to happen on the same
556 // thread the MDP belongs to. 547 // thread the MDP belongs to.
557 { 548 {
558 RunLoop run_loop; 549 RunLoop run_loop;
559 Closure unregistration = 550 Closure unregistration =
(...skipping 24 matching lines...) Expand all
584 RegisterDumpProviderWithSequencedTaskRunner(&mdps[0], task_runner1, 575 RegisterDumpProviderWithSequencedTaskRunner(&mdps[0], task_runner1,
585 kDefaultOptions); 576 kDefaultOptions);
586 RegisterDumpProviderWithSequencedTaskRunner(&mdps[1], task_runner2, 577 RegisterDumpProviderWithSequencedTaskRunner(&mdps[1], task_runner2,
587 kDefaultOptions); 578 kDefaultOptions);
588 RegisterDumpProviderWithSequencedTaskRunner(&mdps[2], task_runner2, 579 RegisterDumpProviderWithSequencedTaskRunner(&mdps[2], task_runner2,
589 kDefaultOptions); 580 kDefaultOptions);
590 // |mdps[0]| should be disabled permanently after first dump. 581 // |mdps[0]| should be disabled permanently after first dump.
591 EXPECT_CALL(mdps[0], OnMemoryDump(_, _)).Times(0); 582 EXPECT_CALL(mdps[0], OnMemoryDump(_, _)).Times(0);
592 EXPECT_CALL(mdps[1], OnMemoryDump(_, _)).Times(2); 583 EXPECT_CALL(mdps[1], OnMemoryDump(_, _)).Times(2);
593 EXPECT_CALL(mdps[2], OnMemoryDump(_, _)).Times(2); 584 EXPECT_CALL(mdps[2], OnMemoryDump(_, _)).Times(2);
594 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 585 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2);
595 586
596 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 587 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
597 588
598 task_runner1->set_enabled(false); 589 task_runner1->set_enabled(false);
599 last_callback_success_ = false; 590 last_callback_success_ = false;
600 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 591 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
601 MemoryDumpLevelOfDetail::DETAILED); 592 MemoryDumpLevelOfDetail::DETAILED);
602 // Tasks should be individually posted even if |mdps[1]| and |mdps[2]| belong 593 // Tasks should be individually posted even if |mdps[1]| and |mdps[2]| belong
603 // to same task runner. 594 // to same task runner.
604 EXPECT_EQ(1u, task_runner1->no_of_post_tasks()); 595 EXPECT_EQ(1u, task_runner1->no_of_post_tasks());
(...skipping 15 matching lines...) Expand all
620 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { 611 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
621 InitializeMemoryDumpManager(false /* is_coordinator */); 612 InitializeMemoryDumpManager(false /* is_coordinator */);
622 MockMemoryDumpProvider mdp1; 613 MockMemoryDumpProvider mdp1;
623 MockMemoryDumpProvider mdp2; 614 MockMemoryDumpProvider mdp2;
624 615
625 RegisterDumpProvider(&mdp1, nullptr); 616 RegisterDumpProvider(&mdp1, nullptr);
626 RegisterDumpProvider(&mdp2, nullptr); 617 RegisterDumpProvider(&mdp2, nullptr);
627 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 618 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
628 619
629 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); 620 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount();
630 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps); 621 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
622 .Times(kNumDumps);
631 623
632 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 624 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
633 .Times(GetMaxConsecutiveFailuresCount()) 625 .Times(GetMaxConsecutiveFailuresCount())
634 .WillRepeatedly(Return(false)); 626 .WillRepeatedly(Return(false));
635 627
636 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 628 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
637 .WillOnce(Return(false)) 629 .WillOnce(Return(false))
638 .WillOnce(Return(true)) 630 .WillOnce(Return(true))
639 .WillOnce(Return(false)) 631 .WillOnce(Return(false))
640 .WillOnce(Return(false)) 632 .WillOnce(Return(false))
(...skipping 11 matching lines...) Expand all
652 // Sneakily registers an extra memory dump provider while an existing one is 644 // Sneakily registers an extra memory dump provider while an existing one is
653 // dumping and expect it to take part in the already active tracing session. 645 // dumping and expect it to take part in the already active tracing session.
654 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { 646 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) {
655 InitializeMemoryDumpManager(false /* is_coordinator */); 647 InitializeMemoryDumpManager(false /* is_coordinator */);
656 MockMemoryDumpProvider mdp1; 648 MockMemoryDumpProvider mdp1;
657 MockMemoryDumpProvider mdp2; 649 MockMemoryDumpProvider mdp2;
658 650
659 RegisterDumpProvider(&mdp1, nullptr); 651 RegisterDumpProvider(&mdp1, nullptr);
660 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 652 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
661 653
662 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); 654 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(4);
663 655
664 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 656 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
665 .Times(4) 657 .Times(4)
666 .WillOnce(Return(true)) 658 .WillOnce(Return(true))
667 .WillOnce( 659 .WillOnce(
668 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 660 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
669 RegisterDumpProvider(&mdp2, nullptr); 661 RegisterDumpProvider(&mdp2, nullptr);
670 return true; 662 return true;
671 })) 663 }))
672 .WillRepeatedly(Return(true)); 664 .WillRepeatedly(Return(true));
(...skipping 15 matching lines...) Expand all
688 // Like RegisterDumperWhileDumping, but unregister the dump provider instead. 680 // Like RegisterDumperWhileDumping, but unregister the dump provider instead.
689 TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileDumping) { 681 TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileDumping) {
690 InitializeMemoryDumpManager(false /* is_coordinator */); 682 InitializeMemoryDumpManager(false /* is_coordinator */);
691 MockMemoryDumpProvider mdp1; 683 MockMemoryDumpProvider mdp1;
692 MockMemoryDumpProvider mdp2; 684 MockMemoryDumpProvider mdp2;
693 685
694 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get(), kDefaultOptions); 686 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get(), kDefaultOptions);
695 RegisterDumpProvider(&mdp2, ThreadTaskRunnerHandle::Get(), kDefaultOptions); 687 RegisterDumpProvider(&mdp2, ThreadTaskRunnerHandle::Get(), kDefaultOptions);
696 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 688 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
697 689
698 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); 690 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(4);
699 691
700 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 692 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
701 .Times(4) 693 .Times(4)
702 .WillOnce(Return(true)) 694 .WillOnce(Return(true))
703 .WillOnce( 695 .WillOnce(
704 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 696 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
705 MemoryDumpManager::GetInstance()->UnregisterDumpProvider(&mdp2); 697 MemoryDumpManager::GetInstance()->UnregisterDumpProvider(&mdp2);
706 return true; 698 return true;
707 })) 699 }))
708 .WillRepeatedly(Return(true)); 700 .WillRepeatedly(Return(true));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 750
759 // OnMemoryDump is called once for the provider that dumps first, and zero 751 // OnMemoryDump is called once for the provider that dumps first, and zero
760 // times for the other provider. 752 // times for the other provider.
761 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) 753 EXPECT_CALL(*mdp, OnMemoryDump(_, _))
762 .Times(AtMost(1)) 754 .Times(AtMost(1))
763 .WillOnce(Invoke(on_dump)); 755 .WillOnce(Invoke(on_dump));
764 } 756 }
765 757
766 last_callback_success_ = false; 758 last_callback_success_ = false;
767 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 759 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
768 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 760 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
769 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 761 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
770 MemoryDumpLevelOfDetail::DETAILED); 762 MemoryDumpLevelOfDetail::DETAILED);
771 ASSERT_EQ(1, on_memory_dump_call_count); 763 ASSERT_EQ(1, on_memory_dump_call_count);
772 ASSERT_TRUE(last_callback_success_); 764 ASSERT_TRUE(last_callback_success_);
773 765
774 DisableTracing(); 766 DisableTracing();
775 } 767 }
776 768
777 TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) { 769 TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) {
778 InitializeMemoryDumpManager(false /* is_coordinator */); 770 InitializeMemoryDumpManager(false /* is_coordinator */);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 852
861 // OnMemoryDump is called once for the provider that dumps first, and zero 853 // OnMemoryDump is called once for the provider that dumps first, and zero
862 // times for the other provider. 854 // times for the other provider.
863 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) 855 EXPECT_CALL(*mdp, OnMemoryDump(_, _))
864 .Times(AtMost(1)) 856 .Times(AtMost(1))
865 .WillOnce(Invoke(on_dump)); 857 .WillOnce(Invoke(on_dump));
866 } 858 }
867 859
868 last_callback_success_ = false; 860 last_callback_success_ = false;
869 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 861 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
870 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 862 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
871 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 863 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
872 MemoryDumpLevelOfDetail::DETAILED); 864 MemoryDumpLevelOfDetail::DETAILED);
873 ASSERT_EQ(1, on_memory_dump_call_count); 865 ASSERT_EQ(1, on_memory_dump_call_count);
874 ASSERT_TRUE(last_callback_success_); 866 ASSERT_TRUE(last_callback_success_);
875 867
876 DisableTracing(); 868 DisableTracing();
877 } 869 }
878 870
879 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when 871 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when
880 // tracing is not enabled. 872 // tracing is not enabled.
881 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { 873 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) {
882 InitializeMemoryDumpManager(false /* is_coordinator */); 874 InitializeMemoryDumpManager(false /* is_coordinator */);
883 MockMemoryDumpProvider mdp1; 875 MockMemoryDumpProvider mdp1;
884 RegisterDumpProvider(&mdp1, nullptr); 876 RegisterDumpProvider(&mdp1, nullptr);
885 877
886 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 878 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(0);
887 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 879 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
888 880
889 last_callback_success_ = true; 881 last_callback_success_ = true;
890 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 882 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
891 MemoryDumpLevelOfDetail::DETAILED); 883 MemoryDumpLevelOfDetail::DETAILED);
892 EXPECT_FALSE(last_callback_success_); 884 EXPECT_FALSE(last_callback_success_);
893 } 885 }
894 886
895 // Checks that is the MemoryDumpManager is initialized after tracing already 887 // Checks that is the MemoryDumpManager is initialized after tracing already
896 // began, it will still late-join the party (real use case: startup tracing). 888 // began, it will still late-join the party (real use case: startup tracing).
897 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) { 889 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) {
898 MockMemoryDumpProvider mdp; 890 MockMemoryDumpProvider mdp;
899 RegisterDumpProvider(&mdp, nullptr); 891 RegisterDumpProvider(&mdp, nullptr);
900 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 892 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
901 893
902 // First check that a RequestGlobalDump() issued before the MemoryDumpManager 894 // First check that a RequestGlobalDump() issued before the MemoryDumpManager
903 // initialization gets NACK-ed cleanly. 895 // initialization gets NACK-ed cleanly.
904 { 896 {
905 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 897 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
906 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 898 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
907 MemoryDumpLevelOfDetail::DETAILED); 899 MemoryDumpLevelOfDetail::DETAILED);
908 EXPECT_FALSE(last_callback_success_); 900 EXPECT_FALSE(last_callback_success_);
909 } 901 }
910 902
911 // Now late-initialize the MemoryDumpManager and check that the 903 // Now late-initialize the MemoryDumpManager and check that the
912 // RequestGlobalDump completes successfully. 904 // RequestGlobalDump completes successfully.
913 { 905 {
914 InitializeMemoryDumpManager(false /* is_coordinator */); 906 InitializeMemoryDumpManager(false /* is_coordinator */);
915 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1); 907 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1);
916 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 908 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
917 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 909 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
918 MemoryDumpLevelOfDetail::DETAILED); 910 MemoryDumpLevelOfDetail::DETAILED);
919 EXPECT_TRUE(last_callback_success_); 911 EXPECT_TRUE(last_callback_success_);
920 } 912 }
921 DisableTracing(); 913 DisableTracing();
922 } 914 }
923 915
924 // This test (and the MemoryDumpManagerTestCoordinator below) crystallizes the 916 // This test (and the MemoryDumpManagerTestCoordinator below) crystallizes the
925 // expectations of the chrome://tracing UI and chrome telemetry w.r.t. periodic 917 // expectations of the chrome://tracing UI and chrome telemetry w.r.t. periodic
926 // dumps in memory-infra, handling gracefully the transition between the legacy 918 // dumps in memory-infra, handling gracefully the transition between the legacy
927 // and the new-style (JSON-based) TraceConfig. 919 // and the new-style (JSON-based) TraceConfig.
928 TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) { 920 TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) {
929 InitializeMemoryDumpManager(false /* is_coordinator */); 921 InitializeMemoryDumpManager(false /* is_coordinator */);
930 MemoryDumpManagerDelegateForTesting& delegate = *delegate_;
931 922
932 // Don't trigger the default behavior of the mock delegate in this test, 923 // Don't trigger the default behavior of the global dump handler in this test,
933 // which would short-circuit the dump request to the actual 924 // which would short-circuit the dump request to the actual
934 // CreateProcessDump(). 925 // CreateProcessDump().
935 // We don't want to create any dump in this test, only check whether the dumps 926 // We don't want to create any dump in this test, only check whether the dumps
936 // are requested or not. 927 // are requested or not.
937 ON_CALL(delegate, RequestGlobalMemoryDump(_, _)).WillByDefault(Return()); 928 ON_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
929 .WillByDefault(Return());
938 930
939 // Enabling memory-infra in a non-coordinator process should not trigger any 931 // Enabling memory-infra in a non-coordinator process should not trigger any
940 // periodic dumps. 932 // periodic dumps.
941 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 933 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
942 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 934 EXPECT_FALSE(IsPeriodicDumpingEnabled());
943 DisableTracing(); 935 DisableTracing();
944 936
945 // Enabling memory-infra with the new (JSON) TraceConfig in a non-coordinator 937 // Enabling memory-infra with the new (JSON) TraceConfig in a non-coordinator
946 // process with a fully defined trigger config should NOT enable any periodic 938 // process with a fully defined trigger config should NOT enable any periodic
947 // dumps. 939 // dumps.
948 EnableTracingWithTraceConfig( 940 EnableTracingWithTraceConfig(
949 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(1, 5)); 941 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(1, 5));
950 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 942 EXPECT_FALSE(IsPeriodicDumpingEnabled());
951 DisableTracing(); 943 DisableTracing();
952 } 944 }
953 945
954 TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) { 946 TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) {
955 InitializeMemoryDumpManager(true /* is_coordinator */); 947 InitializeMemoryDumpManager(true /* is_coordinator */);
956 MemoryDumpManagerDelegateForTesting& delegate = *delegate_; 948 ON_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
957 ON_CALL(delegate, RequestGlobalMemoryDump(_, _)).WillByDefault(Return()); 949 .WillByDefault(Return());
958 950
959 // Enabling memory-infra with the legacy TraceConfig (category filter) in 951 // Enabling memory-infra with the legacy TraceConfig (category filter) in
960 // a coordinator process should enable periodic dumps. 952 // a coordinator process should enable periodic dumps.
961 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 953 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
962 EXPECT_TRUE(IsPeriodicDumpingEnabled()); 954 EXPECT_TRUE(IsPeriodicDumpingEnabled());
963 DisableTracing(); 955 DisableTracing();
964 956
965 // Enabling memory-infra with the new (JSON) TraceConfig in a coordinator 957 // Enabling memory-infra with the new (JSON) TraceConfig in a coordinator
966 // process without specifying any "memory_dump_config" section should enable 958 // process without specifying any "memory_dump_config" section should enable
967 // periodic dumps. This is to preserve the behavior chrome://tracing UI, that 959 // periodic dumps. This is to preserve the behavior chrome://tracing UI, that
(...skipping 17 matching lines...) Expand all
985 // be performed in the correct order. 977 // be performed in the correct order.
986 RunLoop run_loop; 978 RunLoop run_loop;
987 auto test_task_runner = ThreadTaskRunnerHandle::Get(); 979 auto test_task_runner = ThreadTaskRunnerHandle::Get();
988 auto quit_closure = run_loop.QuitClosure(); 980 auto quit_closure = run_loop.QuitClosure();
989 981
990 const int kHeavyDumpRate = 5; 982 const int kHeavyDumpRate = 5;
991 const int kLightDumpPeriodMs = 1; 983 const int kLightDumpPeriodMs = 1;
992 const int kHeavyDumpPeriodMs = kHeavyDumpRate * kLightDumpPeriodMs; 984 const int kHeavyDumpPeriodMs = kHeavyDumpRate * kLightDumpPeriodMs;
993 // The expected sequence with light=1ms, heavy=5ms is H,L,L,L,L,H,... 985 // The expected sequence with light=1ms, heavy=5ms is H,L,L,L,L,H,...
994 testing::InSequence sequence; 986 testing::InSequence sequence;
995 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsDetailedDump(), _)); 987 EXPECT_CALL(global_dump_handler_,
996 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) 988 RequestGlobalMemoryDump(IsDetailedDump(), _));
989 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _))
997 .Times(kHeavyDumpRate - 1); 990 .Times(kHeavyDumpRate - 1);
998 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsDetailedDump(), _)); 991 EXPECT_CALL(global_dump_handler_,
999 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) 992 RequestGlobalMemoryDump(IsDetailedDump(), _));
993 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _))
1000 .Times(kHeavyDumpRate - 2); 994 .Times(kHeavyDumpRate - 2);
1001 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) 995 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _))
1002 .WillOnce(Invoke([test_task_runner, quit_closure]( 996 .WillOnce(Invoke([test_task_runner, quit_closure](
1003 const MemoryDumpRequestArgs& args, 997 const MemoryDumpRequestArgs& args,
1004 const GlobalMemoryDumpCallback& callback) { 998 const GlobalMemoryDumpCallback& callback) {
1005 test_task_runner->PostTask(FROM_HERE, quit_closure); 999 test_task_runner->PostTask(FROM_HERE, quit_closure);
1006 })); 1000 }));
1007 1001
1008 // Swallow all the final spurious calls until tracing gets disabled. 1002 // Swallow all the final spurious calls until tracing gets disabled.
1009 EXPECT_CALL(delegate, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); 1003 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
1004 .Times(AnyNumber());
1010 1005
1011 EnableTracingWithTraceConfig( 1006 EnableTracingWithTraceConfig(
1012 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers( 1007 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(
1013 kLightDumpPeriodMs, kHeavyDumpPeriodMs)); 1008 kLightDumpPeriodMs, kHeavyDumpPeriodMs));
1014 run_loop.Run(); 1009 run_loop.Run();
1015 DisableTracing(); 1010 DisableTracing();
1016 } 1011 }
1017 1012
1018 // Tests against race conditions that might arise when disabling tracing in the 1013 // Tests against race conditions that might arise when disabling tracing in the
1019 // middle of a global memory dump. 1014 // middle of a global memory dump.
(...skipping 15 matching lines...) Expand all
1035 MockMemoryDumpProvider mdp_with_affinity; 1030 MockMemoryDumpProvider mdp_with_affinity;
1036 RegisterDumpProvider(&mdp_with_affinity, mdp_thread->task_runner(), 1031 RegisterDumpProvider(&mdp_with_affinity, mdp_thread->task_runner(),
1037 kDefaultOptions); 1032 kDefaultOptions);
1038 1033
1039 // Register also an unbound dump provider. Unbound dump providers are always 1034 // Register also an unbound dump provider. Unbound dump providers are always
1040 // invoked after bound ones. 1035 // invoked after bound ones.
1041 MockMemoryDumpProvider unbound_mdp; 1036 MockMemoryDumpProvider unbound_mdp;
1042 RegisterDumpProvider(&unbound_mdp, nullptr, kDefaultOptions); 1037 RegisterDumpProvider(&unbound_mdp, nullptr, kDefaultOptions);
1043 1038
1044 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1039 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1045 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 1040 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
1046 EXPECT_CALL(mdp_with_affinity, OnMemoryDump(_, _)) 1041 EXPECT_CALL(mdp_with_affinity, OnMemoryDump(_, _))
1047 .Times(1) 1042 .Times(1)
1048 .WillOnce( 1043 .WillOnce(
1049 Invoke([&tracing_disabled_event](const MemoryDumpArgs&, 1044 Invoke([&tracing_disabled_event](const MemoryDumpArgs&,
1050 ProcessMemoryDump* pmd) -> bool { 1045 ProcessMemoryDump* pmd) -> bool {
1051 tracing_disabled_event.Wait(); 1046 tracing_disabled_event.Wait();
1052 1047
1053 // At this point tracing has been disabled and the 1048 // At this point tracing has been disabled and the
1054 // MemoryDumpManager.dump_thread_ has been shut down. 1049 // MemoryDumpManager.dump_thread_ has been shut down.
1055 return true; 1050 return true;
(...skipping 28 matching lines...) Expand all
1084 std::unique_ptr<Thread> mdp_thread(new Thread("test thread")); 1079 std::unique_ptr<Thread> mdp_thread(new Thread("test thread"));
1085 mdp_thread->Start(); 1080 mdp_thread->Start();
1086 1081
1087 // Create both same-thread MDP and another MDP with dedicated thread 1082 // Create both same-thread MDP and another MDP with dedicated thread
1088 MockMemoryDumpProvider mdp1; 1083 MockMemoryDumpProvider mdp1;
1089 RegisterDumpProvider(&mdp1, nullptr); 1084 RegisterDumpProvider(&mdp1, nullptr);
1090 MockMemoryDumpProvider mdp2; 1085 MockMemoryDumpProvider mdp2;
1091 RegisterDumpProvider(&mdp2, mdp_thread->task_runner(), kDefaultOptions); 1086 RegisterDumpProvider(&mdp2, mdp_thread->task_runner(), kDefaultOptions);
1092 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1087 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1093 1088
1094 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)) 1089 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
1095 .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args, 1090 .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args,
1096 const GlobalMemoryDumpCallback& callback) { 1091 const GlobalMemoryDumpCallback& callback) {
1097 DisableTracing(); 1092 DisableTracing();
1098 ProcessMemoryDumpCallback process_callback = 1093 ProcessMemoryDumpCallback process_callback =
1099 Bind(&ProcessDumpCallbackAdapter, callback); 1094 Bind(&ProcessDumpCallbackAdapter, callback);
1100 delegate_->CreateProcessDump(args, process_callback); 1095 mdm_->CreateProcessDump(args, process_callback);
1101 })); 1096 }));
1102 1097
1103 // If tracing is disabled for current session CreateProcessDump() should NOT 1098 // If tracing is disabled for current session CreateProcessDump() should NOT
1104 // request dumps from providers. Real-world regression: crbug.com/600570 . 1099 // request dumps from providers. Real-world regression: crbug.com/600570 .
1105 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 1100 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
1106 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); 1101 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
1107 1102
1108 last_callback_success_ = true; 1103 last_callback_success_ = true;
1109 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1104 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1110 MemoryDumpLevelOfDetail::DETAILED); 1105 MemoryDumpLevelOfDetail::DETAILED);
(...skipping 14 matching lines...) Expand all
1125 MockMemoryDumpProvider mdp2; 1120 MockMemoryDumpProvider mdp2;
1126 options.target_pid = 123; 1121 options.target_pid = 123;
1127 RegisterDumpProvider(&mdp2, nullptr, options); 1122 RegisterDumpProvider(&mdp2, nullptr, options);
1128 1123
1129 // Another provider with out-of-process dumping. 1124 // Another provider with out-of-process dumping.
1130 MockMemoryDumpProvider mdp3; 1125 MockMemoryDumpProvider mdp3;
1131 options.target_pid = 456; 1126 options.target_pid = 456;
1132 RegisterDumpProvider(&mdp3, nullptr, options); 1127 RegisterDumpProvider(&mdp3, nullptr, options);
1133 1128
1134 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1129 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1135 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 1130 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
1136 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); 1131 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
1137 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); 1132 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
1138 EXPECT_CALL(mdp3, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); 1133 EXPECT_CALL(mdp3, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
1139 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1134 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1140 MemoryDumpLevelOfDetail::DETAILED); 1135 MemoryDumpLevelOfDetail::DETAILED);
1141 DisableTracing(); 1136 DisableTracing();
1142 1137
1143 // Flush the trace into JSON. 1138 // Flush the trace into JSON.
1144 trace_event::TraceResultBuffer buffer; 1139 trace_event::TraceResultBuffer buffer;
1145 TraceResultBuffer::SimpleOutput trace_output; 1140 TraceResultBuffer::SimpleOutput trace_output;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) 1214 EXPECT_CALL(*mdp, OnMemoryDump(_, _))
1220 .Times(1) 1215 .Times(1)
1221 .WillOnce(Invoke(self_unregister_from_another_thread)); 1216 .WillOnce(Invoke(self_unregister_from_another_thread));
1222 EXPECT_CALL(*mdp, Destructor()) 1217 EXPECT_CALL(*mdp, Destructor())
1223 .Times(1) 1218 .Times(1)
1224 .WillOnce(Invoke([&thread_ref]() { 1219 .WillOnce(Invoke([&thread_ref]() {
1225 EXPECT_EQ(thread_ref, PlatformThread::CurrentRef()); 1220 EXPECT_EQ(thread_ref, PlatformThread::CurrentRef());
1226 })); 1221 }));
1227 1222
1228 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1223 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1229 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 1224 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2);
1230 for (int i = 0; i < 2; ++i) { 1225 for (int i = 0; i < 2; ++i) {
1231 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1226 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1232 MemoryDumpLevelOfDetail::DETAILED); 1227 MemoryDumpLevelOfDetail::DETAILED);
1233 } 1228 }
1234 DisableTracing(); 1229 DisableTracing();
1235 } 1230 }
1236 1231
1237 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) { 1232 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) {
1238 InitializeMemoryDumpManager(false /* is_coordinator */); 1233 InitializeMemoryDumpManager(false /* is_coordinator */);
1239 SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); 1234 SetDumpProviderWhitelistForTesting(kTestMDPWhitelist);
1240 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider); 1235 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider);
1241 RegisterDumpProvider(mdp1.get(), nullptr); 1236 RegisterDumpProvider(mdp1.get(), nullptr);
1242 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider); 1237 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider);
1243 RegisterDumpProvider(mdp2.get(), nullptr, kDefaultOptions, 1238 RegisterDumpProvider(mdp2.get(), nullptr, kDefaultOptions,
1244 kWhitelistedMDPName); 1239 kWhitelistedMDPName);
1245 1240
1246 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0); 1241 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0);
1247 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true)); 1242 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true));
1248 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 1243 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
1249 1244
1250 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1245 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1251 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 1246 EXPECT_FALSE(IsPeriodicDumpingEnabled());
1252 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1247 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1253 MemoryDumpLevelOfDetail::BACKGROUND); 1248 MemoryDumpLevelOfDetail::BACKGROUND);
1254 DisableTracing(); 1249 DisableTracing();
1255 } 1250 }
1256 1251
1257 TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) { 1252 TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) {
1258 InitializeMemoryDumpManager(true /* is_coordinator */); 1253 InitializeMemoryDumpManager(true /* is_coordinator */);
1259 1254
1260 RunLoop run_loop; 1255 RunLoop run_loop;
1261 auto test_task_runner = ThreadTaskRunnerHandle::Get(); 1256 auto test_task_runner = ThreadTaskRunnerHandle::Get();
1262 auto quit_closure = run_loop.QuitClosure(); 1257 auto quit_closure = run_loop.QuitClosure();
1263 1258
1264 testing::InSequence sequence; 1259 testing::InSequence sequence;
1265 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _)) 1260 EXPECT_CALL(global_dump_handler_,
1261 RequestGlobalMemoryDump(IsBackgroundDump(), _))
1266 .Times(5); 1262 .Times(5);
1267 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _)) 1263 EXPECT_CALL(global_dump_handler_,
1264 RequestGlobalMemoryDump(IsBackgroundDump(), _))
1268 .WillOnce(Invoke([test_task_runner, quit_closure]( 1265 .WillOnce(Invoke([test_task_runner, quit_closure](
1269 const MemoryDumpRequestArgs& args, 1266 const MemoryDumpRequestArgs& args,
1270 const GlobalMemoryDumpCallback& callback) { 1267 const GlobalMemoryDumpCallback& callback) {
1271 test_task_runner->PostTask(FROM_HERE, quit_closure); 1268 test_task_runner->PostTask(FROM_HERE, quit_closure);
1272 })); 1269 }));
1273 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); 1270 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
1271 .Times(AnyNumber());
1274 1272
1275 EnableTracingWithTraceConfig( 1273 EnableTracingWithTraceConfig(
1276 TraceConfigMemoryTestUtil::GetTraceConfig_BackgroundTrigger( 1274 TraceConfigMemoryTestUtil::GetTraceConfig_BackgroundTrigger(
1277 1 /* period_ms */)); 1275 1 /* period_ms */));
1278 1276
1279 // Only background mode dumps should be allowed with the trace config. 1277 // Only background mode dumps should be allowed with the trace config.
1280 last_callback_success_ = false; 1278 last_callback_success_ = false;
1281 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1279 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1282 MemoryDumpLevelOfDetail::LIGHT); 1280 MemoryDumpLevelOfDetail::LIGHT);
1283 EXPECT_FALSE(last_callback_success_); 1281 EXPECT_FALSE(last_callback_success_);
(...skipping 19 matching lines...) Expand all
1303 thread.Start(); 1301 thread.Start();
1304 RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions, 1302 RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions,
1305 "BlacklistTestDumpProvider"); 1303 "BlacklistTestDumpProvider");
1306 // Unregistering on wrong thread should not crash. 1304 // Unregistering on wrong thread should not crash.
1307 mdm_->UnregisterDumpProvider(&mdp1); 1305 mdm_->UnregisterDumpProvider(&mdp1);
1308 thread.Stop(); 1306 thread.Stop();
1309 } 1307 }
1310 1308
1311 } // namespace trace_event 1309 } // namespace trace_event
1312 } // namespace base 1310 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698