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

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

Issue 2819413002: [memory-infra] Remove MemoryDumpManagerDelegate (Closed)
Patch Set: rebase. 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
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | content/child/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // This mocks the RequestGlobalDumpFunction which is typically handled by
132 // requests locally to the MemoryDumpManager instead of performing IPC dances. 132 // process_local_dump_manager_impl.cc, by short-circuiting dump requests locally
133 class MemoryDumpManagerDelegateForTesting : public MemoryDumpManagerDelegate { 133 // to the MemoryDumpManager without an actual service.
134 class GlobalMemoryDumpHandler {
134 public: 135 public:
135 MemoryDumpManagerDelegateForTesting(bool is_coordinator) 136 MOCK_METHOD2(RequestGlobalMemoryDump,
136 : is_coordinator_(is_coordinator) { 137 void(const MemoryDumpRequestArgs& args,
138 const GlobalMemoryDumpCallback& callback));
139
140 GlobalMemoryDumpHandler() {
137 ON_CALL(*this, RequestGlobalMemoryDump(_, _)) 141 ON_CALL(*this, RequestGlobalMemoryDump(_, _))
138 .WillByDefault(Invoke([this](const MemoryDumpRequestArgs& args, 142 .WillByDefault(Invoke([this](const MemoryDumpRequestArgs& args,
139 const GlobalMemoryDumpCallback& callback) { 143 const GlobalMemoryDumpCallback& callback) {
140 ProcessMemoryDumpCallback process_callback = 144 ProcessMemoryDumpCallback process_callback =
141 Bind(&ProcessDumpCallbackAdapter, callback); 145 Bind(&ProcessDumpCallbackAdapter, callback);
142 CreateProcessDump(args, process_callback); 146 MemoryDumpManager::GetInstance()->CreateProcessDump(args,
147 process_callback);
143 })); 148 }));
144 } 149 }
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 }; 150 };
158 151
159 class MockMemoryDumpProvider : public MemoryDumpProvider { 152 class MockMemoryDumpProvider : public MemoryDumpProvider {
160 public: 153 public:
161 MOCK_METHOD0(Destructor, void()); 154 MOCK_METHOD0(Destructor, void());
162 MOCK_METHOD2(OnMemoryDump, 155 MOCK_METHOD2(OnMemoryDump,
163 bool(const MemoryDumpArgs& args, ProcessMemoryDump* pmd)); 156 bool(const MemoryDumpArgs& args, ProcessMemoryDump* pmd));
164 MOCK_METHOD1(PollFastMemoryTotal, void(uint64_t* memory_total)); 157 MOCK_METHOD1(PollFastMemoryTotal, void(uint64_t* memory_total));
165 MOCK_METHOD0(SuspendFastMemoryPolling, void()); 158 MOCK_METHOD0(SuspendFastMemoryPolling, void());
166 159
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 void SetUp() override { 230 void SetUp() override {
238 last_callback_success_ = false; 231 last_callback_success_ = false;
239 message_loop_.reset(new MessageLoop()); 232 message_loop_.reset(new MessageLoop());
240 mdm_.reset(new MemoryDumpManager()); 233 mdm_.reset(new MemoryDumpManager());
241 MemoryDumpManager::SetInstanceForTesting(mdm_.get()); 234 MemoryDumpManager::SetInstanceForTesting(mdm_.get());
242 ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance()); 235 ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance());
243 } 236 }
244 237
245 void TearDown() override { 238 void TearDown() override {
246 MemoryDumpManager::SetInstanceForTesting(nullptr); 239 MemoryDumpManager::SetInstanceForTesting(nullptr);
247 delegate_ = nullptr;
248 mdm_.reset(); 240 mdm_.reset();
249 message_loop_.reset(); 241 message_loop_.reset();
250 TraceLog::DeleteForTesting(); 242 TraceLog::DeleteForTesting();
251 } 243 }
252 244
253 // Turns a Closure into a GlobalMemoryDumpCallback, keeping track of the 245 // Turns a Closure into a GlobalMemoryDumpCallback, keeping track of the
254 // callback result and taking care of posting the closure on the correct task 246 // callback result and taking care of posting the closure on the correct task
255 // runner. 247 // runner.
256 void GlobalDumpCallbackAdapter( 248 void GlobalDumpCallbackAdapter(
257 scoped_refptr<SingleThreadTaskRunner> task_runner, 249 scoped_refptr<SingleThreadTaskRunner> task_runner,
258 Closure closure, 250 Closure closure,
259 uint64_t dump_guid, 251 uint64_t dump_guid,
260 bool success) { 252 bool success) {
261 last_callback_success_ = success; 253 last_callback_success_ = success;
262 task_runner->PostTask(FROM_HERE, closure); 254 task_runner->PostTask(FROM_HERE, closure);
263 } 255 }
264 256
265 protected: 257 protected:
266 void InitializeMemoryDumpManager(bool is_coordinator) { 258 void InitializeMemoryDumpManager(bool is_coordinator) {
267 mdm_->set_dumper_registrations_ignored_for_testing(true); 259 mdm_->set_dumper_registrations_ignored_for_testing(true);
268 delegate_ = new MemoryDumpManagerDelegateForTesting(is_coordinator); 260 mdm_->Initialize(
269 mdm_->Initialize(base::WrapUnique(delegate_)); 261 BindRepeating(&GlobalMemoryDumpHandler::RequestGlobalMemoryDump,
262 Unretained(&global_dump_handler_)),
263 is_coordinator);
270 } 264 }
271 265
272 void RequestGlobalDumpAndWait(MemoryDumpType dump_type, 266 void RequestGlobalDumpAndWait(MemoryDumpType dump_type,
273 MemoryDumpLevelOfDetail level_of_detail) { 267 MemoryDumpLevelOfDetail level_of_detail) {
274 RunLoop run_loop; 268 RunLoop run_loop;
275 GlobalMemoryDumpCallback callback = Bind( 269 GlobalMemoryDumpCallback callback = Bind(
276 &MemoryDumpManagerTest::GlobalDumpCallbackAdapter, Unretained(this), 270 &MemoryDumpManagerTest::GlobalDumpCallbackAdapter, Unretained(this),
277 ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure()); 271 ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure());
278 mdm_->RequestGlobalDump(dump_type, level_of_detail, callback); 272 mdm_->RequestGlobalDump(dump_type, level_of_detail, callback);
279 run_loop.Run(); 273 run_loop.Run();
(...skipping 14 matching lines...) Expand all
294 bool IsPeriodicDumpingEnabled() const { 288 bool IsPeriodicDumpingEnabled() const {
295 return MemoryDumpScheduler::GetInstance()->is_enabled_for_testing(); 289 return MemoryDumpScheduler::GetInstance()->is_enabled_for_testing();
296 } 290 }
297 291
298 int GetMaxConsecutiveFailuresCount() const { 292 int GetMaxConsecutiveFailuresCount() const {
299 return MemoryDumpManager::kMaxConsecutiveFailuresCount; 293 return MemoryDumpManager::kMaxConsecutiveFailuresCount;
300 } 294 }
301 295
302 const MemoryDumpProvider::Options kDefaultOptions; 296 const MemoryDumpProvider::Options kDefaultOptions;
303 std::unique_ptr<MemoryDumpManager> mdm_; 297 std::unique_ptr<MemoryDumpManager> mdm_;
304 MemoryDumpManagerDelegateForTesting* delegate_; 298 GlobalMemoryDumpHandler global_dump_handler_;
305 bool last_callback_success_; 299 bool last_callback_success_;
306 300
307 private: 301 private:
308 std::unique_ptr<MessageLoop> message_loop_; 302 std::unique_ptr<MessageLoop> message_loop_;
309 303
310 // We want our singleton torn down after each test. 304 // We want our singleton torn down after each test.
311 ShadowingAtExitManager at_exit_manager_; 305 ShadowingAtExitManager at_exit_manager_;
312 }; 306 };
313 307
314 // Basic sanity checks. Registers a memory dump provider and checks that it is 308 // Basic sanity checks. Registers a memory dump provider and checks that it is
315 // called, but only when memory-infra is enabled. 309 // called, but only when memory-infra is enabled.
316 TEST_F(MemoryDumpManagerTest, SingleDumper) { 310 TEST_F(MemoryDumpManagerTest, SingleDumper) {
317 InitializeMemoryDumpManager(false /* is_coordinator */); 311 InitializeMemoryDumpManager(false /* is_coordinator */);
318 MockMemoryDumpProvider mdp; 312 MockMemoryDumpProvider mdp;
319 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 313 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
320 314
321 // Check that the dumper is not called if the memory category is not enabled. 315 // Check that the dumper is not called if the memory category is not enabled.
322 EnableTracingWithLegacyCategories("foobar-but-not-memory"); 316 EnableTracingWithLegacyCategories("foobar-but-not-memory");
323 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 317 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(0);
324 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 318 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
325 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 319 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
326 MemoryDumpLevelOfDetail::DETAILED); 320 MemoryDumpLevelOfDetail::DETAILED);
327 DisableTracing(); 321 DisableTracing();
328 322
329 // Now repeat enabling the memory category and check that the dumper is 323 // Now repeat enabling the memory category and check that the dumper is
330 // invoked this time. 324 // invoked this time.
331 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 325 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
332 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(3); 326 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3);
333 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true)); 327 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true));
334 for (int i = 0; i < 3; ++i) { 328 for (int i = 0; i < 3; ++i) {
335 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 329 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
336 MemoryDumpLevelOfDetail::DETAILED); 330 MemoryDumpLevelOfDetail::DETAILED);
337 } 331 }
338 DisableTracing(); 332 DisableTracing();
339 333
340 mdm_->UnregisterDumpProvider(&mdp); 334 mdm_->UnregisterDumpProvider(&mdp);
341 335
342 // Finally check the unregister logic: the delegate will be invoked but not 336 // Finally check the unregister logic: the global dump handler will be invoked
343 // the dump provider, as it has been unregistered. 337 // but not the dump provider, as it has been unregistered.
344 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 338 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
345 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(3); 339 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3);
346 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 340 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
347 341
348 for (int i = 0; i < 3; ++i) { 342 for (int i = 0; i < 3; ++i) {
349 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 343 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
350 MemoryDumpLevelOfDetail::DETAILED); 344 MemoryDumpLevelOfDetail::DETAILED);
351 } 345 }
352 DisableTracing(); 346 DisableTracing();
353 } 347 }
354 348
355 // Checks that requesting dumps with high level of detail actually propagates 349 // Checks that requesting dumps with high level of detail actually propagates
356 // the level of the detail properly to OnMemoryDump() call on dump providers. 350 // the level of the detail properly to OnMemoryDump() call on dump providers.
357 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { 351 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) {
358 InitializeMemoryDumpManager(false /* is_coordinator */); 352 InitializeMemoryDumpManager(false /* is_coordinator */);
359 MockMemoryDumpProvider mdp; 353 MockMemoryDumpProvider mdp;
360 354
361 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 355 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
362 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 356 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
363 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 357 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
364 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); 358 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true));
365 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 359 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
366 MemoryDumpLevelOfDetail::DETAILED); 360 MemoryDumpLevelOfDetail::DETAILED);
367 DisableTracing(); 361 DisableTracing();
368 mdm_->UnregisterDumpProvider(&mdp); 362 mdm_->UnregisterDumpProvider(&mdp);
369 363
370 // Check that requesting dumps with low level of detail actually propagates to 364 // Check that requesting dumps with low level of detail actually propagates to
371 // OnMemoryDump() call on dump providers. 365 // OnMemoryDump() call on dump providers.
372 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 366 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
373 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 367 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
374 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 368 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
375 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); 369 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true));
376 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 370 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
377 MemoryDumpLevelOfDetail::LIGHT); 371 MemoryDumpLevelOfDetail::LIGHT);
378 DisableTracing(); 372 DisableTracing();
379 mdm_->UnregisterDumpProvider(&mdp); 373 mdm_->UnregisterDumpProvider(&mdp);
380 } 374 }
381 375
382 // Checks that the SharedSessionState object is acqually shared over time. 376 // Checks that the SharedSessionState object is acqually shared over time.
383 TEST_F(MemoryDumpManagerTest, SharedSessionState) { 377 TEST_F(MemoryDumpManagerTest, SharedSessionState) {
384 InitializeMemoryDumpManager(false /* is_coordinator */); 378 InitializeMemoryDumpManager(false /* is_coordinator */);
385 MockMemoryDumpProvider mdp1; 379 MockMemoryDumpProvider mdp1;
386 MockMemoryDumpProvider mdp2; 380 MockMemoryDumpProvider mdp2;
387 RegisterDumpProvider(&mdp1, nullptr); 381 RegisterDumpProvider(&mdp1, nullptr);
388 RegisterDumpProvider(&mdp2, nullptr); 382 RegisterDumpProvider(&mdp2, nullptr);
389 383
390 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 384 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
391 const MemoryDumpSessionState* session_state = 385 const MemoryDumpSessionState* session_state =
392 mdm_->session_state_for_testing().get(); 386 mdm_->session_state_for_testing().get();
393 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 387 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2);
394 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 388 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
395 .Times(2) 389 .Times(2)
396 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, 390 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
397 ProcessMemoryDump* pmd) -> bool { 391 ProcessMemoryDump* pmd) -> bool {
398 EXPECT_EQ(session_state, pmd->session_state().get()); 392 EXPECT_EQ(session_state, pmd->session_state().get());
399 return true; 393 return true;
400 })); 394 }));
401 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 395 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
402 .Times(2) 396 .Times(2)
403 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, 397 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
(...skipping 12 matching lines...) Expand all
416 410
417 // Checks that the (Un)RegisterDumpProvider logic behaves sanely. 411 // Checks that the (Un)RegisterDumpProvider logic behaves sanely.
418 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { 412 TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
419 InitializeMemoryDumpManager(false /* is_coordinator */); 413 InitializeMemoryDumpManager(false /* is_coordinator */);
420 MockMemoryDumpProvider mdp1; 414 MockMemoryDumpProvider mdp1;
421 MockMemoryDumpProvider mdp2; 415 MockMemoryDumpProvider mdp2;
422 416
423 // Enable only mdp1. 417 // Enable only mdp1.
424 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get()); 418 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get());
425 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 419 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
426 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 420 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
427 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 421 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
428 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); 422 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
429 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 423 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
430 MemoryDumpLevelOfDetail::DETAILED); 424 MemoryDumpLevelOfDetail::DETAILED);
431 DisableTracing(); 425 DisableTracing();
432 426
433 // Invert: enable mdp1 and disable mdp2. 427 // Invert: enable mdp1 and disable mdp2.
434 mdm_->UnregisterDumpProvider(&mdp1); 428 mdm_->UnregisterDumpProvider(&mdp1);
435 RegisterDumpProvider(&mdp2, nullptr); 429 RegisterDumpProvider(&mdp2, nullptr);
436 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 430 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
437 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 431 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
438 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 432 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
439 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 433 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
440 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 434 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
441 MemoryDumpLevelOfDetail::DETAILED); 435 MemoryDumpLevelOfDetail::DETAILED);
442 DisableTracing(); 436 DisableTracing();
443 437
444 // Enable both mdp1 and mdp2. 438 // Enable both mdp1 and mdp2.
445 RegisterDumpProvider(&mdp1, nullptr); 439 RegisterDumpProvider(&mdp1, nullptr);
446 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 440 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
447 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 441 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
448 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); 442 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true));
449 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); 443 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true));
450 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 444 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
451 MemoryDumpLevelOfDetail::DETAILED); 445 MemoryDumpLevelOfDetail::DETAILED);
452 DisableTracing(); 446 DisableTracing();
453 } 447 }
454 448
455 // Checks that the dump provider invocations depend only on the current 449 // Checks that the dump provider invocations depend only on the current
456 // registration state and not on previous registrations and dumps. 450 // registration state and not on previous registrations and dumps.
457 // Flaky on iOS, see crbug.com/706874 451 // Flaky on iOS, see crbug.com/706874
458 #if defined(OS_IOS) 452 #if defined(OS_IOS)
459 #define MAYBE_RegistrationConsistency DISABLED_RegistrationConsistency 453 #define MAYBE_RegistrationConsistency DISABLED_RegistrationConsistency
460 #else 454 #else
461 #define MAYBE_RegistrationConsistency RegistrationConsistency 455 #define MAYBE_RegistrationConsistency RegistrationConsistency
462 #endif 456 #endif
463 TEST_F(MemoryDumpManagerTest, MAYBE_RegistrationConsistency) { 457 TEST_F(MemoryDumpManagerTest, MAYBE_RegistrationConsistency) {
464 InitializeMemoryDumpManager(false /* is_coordinator */); 458 InitializeMemoryDumpManager(false /* is_coordinator */);
465 MockMemoryDumpProvider mdp; 459 MockMemoryDumpProvider mdp;
466 460
467 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 461 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
468 462
469 { 463 {
470 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 464 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
471 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 465 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
472 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 466 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
473 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 467 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
474 MemoryDumpLevelOfDetail::DETAILED); 468 MemoryDumpLevelOfDetail::DETAILED);
475 DisableTracing(); 469 DisableTracing();
476 } 470 }
477 471
478 mdm_->UnregisterDumpProvider(&mdp); 472 mdm_->UnregisterDumpProvider(&mdp);
479 473
480 { 474 {
481 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 475 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
482 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 476 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
483 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 477 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
484 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 478 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
485 MemoryDumpLevelOfDetail::DETAILED); 479 MemoryDumpLevelOfDetail::DETAILED);
486 DisableTracing(); 480 DisableTracing();
487 } 481 }
488 482
489 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 483 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
490 mdm_->UnregisterDumpProvider(&mdp); 484 mdm_->UnregisterDumpProvider(&mdp);
491 485
492 { 486 {
493 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 487 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
494 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 488 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
495 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 489 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
496 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 490 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
497 MemoryDumpLevelOfDetail::DETAILED); 491 MemoryDumpLevelOfDetail::DETAILED);
498 DisableTracing(); 492 DisableTracing();
499 } 493 }
500 494
501 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 495 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
502 mdm_->UnregisterDumpProvider(&mdp); 496 mdm_->UnregisterDumpProvider(&mdp);
503 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); 497 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
504 498
505 { 499 {
506 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 500 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
507 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); 501 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true));
508 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 502 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
509 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 503 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
510 MemoryDumpLevelOfDetail::DETAILED); 504 MemoryDumpLevelOfDetail::DETAILED);
511 DisableTracing(); 505 DisableTracing();
512 } 506 }
513 } 507 }
514 508
515 // Checks that the MemoryDumpManager respects the thread affinity when a 509 // Checks that the MemoryDumpManager respects the thread affinity when a
516 // MemoryDumpProvider specifies a task_runner(). The test starts creating 8 510 // MemoryDumpProvider specifies a task_runner(). The test starts creating 8
(...skipping 22 matching lines...) Expand all
539 .WillRepeatedly(Invoke( 533 .WillRepeatedly(Invoke(
540 [task_runner](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 534 [task_runner](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
541 EXPECT_TRUE(task_runner->RunsTasksOnCurrentThread()); 535 EXPECT_TRUE(task_runner->RunsTasksOnCurrentThread());
542 return true; 536 return true;
543 })); 537 }));
544 } 538 }
545 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 539 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
546 540
547 while (!threads.empty()) { 541 while (!threads.empty()) {
548 last_callback_success_ = false; 542 last_callback_success_ = false;
549 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 543 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
550 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 544 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
551 MemoryDumpLevelOfDetail::DETAILED); 545 MemoryDumpLevelOfDetail::DETAILED);
552 EXPECT_TRUE(last_callback_success_); 546 EXPECT_TRUE(last_callback_success_);
553 547
554 // Unregister a MDP and destroy one thread at each iteration to check the 548 // 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 549 // live unregistration logic. The unregistration needs to happen on the same
556 // thread the MDP belongs to. 550 // thread the MDP belongs to.
557 { 551 {
558 RunLoop run_loop; 552 RunLoop run_loop;
559 Closure unregistration = 553 Closure unregistration =
(...skipping 24 matching lines...) Expand all
584 RegisterDumpProviderWithSequencedTaskRunner(&mdps[0], task_runner1, 578 RegisterDumpProviderWithSequencedTaskRunner(&mdps[0], task_runner1,
585 kDefaultOptions); 579 kDefaultOptions);
586 RegisterDumpProviderWithSequencedTaskRunner(&mdps[1], task_runner2, 580 RegisterDumpProviderWithSequencedTaskRunner(&mdps[1], task_runner2,
587 kDefaultOptions); 581 kDefaultOptions);
588 RegisterDumpProviderWithSequencedTaskRunner(&mdps[2], task_runner2, 582 RegisterDumpProviderWithSequencedTaskRunner(&mdps[2], task_runner2,
589 kDefaultOptions); 583 kDefaultOptions);
590 // |mdps[0]| should be disabled permanently after first dump. 584 // |mdps[0]| should be disabled permanently after first dump.
591 EXPECT_CALL(mdps[0], OnMemoryDump(_, _)).Times(0); 585 EXPECT_CALL(mdps[0], OnMemoryDump(_, _)).Times(0);
592 EXPECT_CALL(mdps[1], OnMemoryDump(_, _)).Times(2); 586 EXPECT_CALL(mdps[1], OnMemoryDump(_, _)).Times(2);
593 EXPECT_CALL(mdps[2], OnMemoryDump(_, _)).Times(2); 587 EXPECT_CALL(mdps[2], OnMemoryDump(_, _)).Times(2);
594 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 588 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2);
595 589
596 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 590 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
597 591
598 task_runner1->set_enabled(false); 592 task_runner1->set_enabled(false);
599 last_callback_success_ = false; 593 last_callback_success_ = false;
600 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 594 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
601 MemoryDumpLevelOfDetail::DETAILED); 595 MemoryDumpLevelOfDetail::DETAILED);
602 // Tasks should be individually posted even if |mdps[1]| and |mdps[2]| belong 596 // Tasks should be individually posted even if |mdps[1]| and |mdps[2]| belong
603 // to same task runner. 597 // to same task runner.
604 EXPECT_EQ(1u, task_runner1->no_of_post_tasks()); 598 EXPECT_EQ(1u, task_runner1->no_of_post_tasks());
(...skipping 15 matching lines...) Expand all
620 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { 614 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
621 InitializeMemoryDumpManager(false /* is_coordinator */); 615 InitializeMemoryDumpManager(false /* is_coordinator */);
622 MockMemoryDumpProvider mdp1; 616 MockMemoryDumpProvider mdp1;
623 MockMemoryDumpProvider mdp2; 617 MockMemoryDumpProvider mdp2;
624 618
625 RegisterDumpProvider(&mdp1, nullptr); 619 RegisterDumpProvider(&mdp1, nullptr);
626 RegisterDumpProvider(&mdp2, nullptr); 620 RegisterDumpProvider(&mdp2, nullptr);
627 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 621 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
628 622
629 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); 623 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount();
630 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps); 624 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
625 .Times(kNumDumps);
631 626
632 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 627 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
633 .Times(GetMaxConsecutiveFailuresCount()) 628 .Times(GetMaxConsecutiveFailuresCount())
634 .WillRepeatedly(Return(false)); 629 .WillRepeatedly(Return(false));
635 630
636 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) 631 EXPECT_CALL(mdp2, OnMemoryDump(_, _))
637 .WillOnce(Return(false)) 632 .WillOnce(Return(false))
638 .WillOnce(Return(true)) 633 .WillOnce(Return(true))
639 .WillOnce(Return(false)) 634 .WillOnce(Return(false))
640 .WillOnce(Return(false)) 635 .WillOnce(Return(false))
(...skipping 11 matching lines...) Expand all
652 // Sneakily registers an extra memory dump provider while an existing one is 647 // 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. 648 // dumping and expect it to take part in the already active tracing session.
654 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { 649 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) {
655 InitializeMemoryDumpManager(false /* is_coordinator */); 650 InitializeMemoryDumpManager(false /* is_coordinator */);
656 MockMemoryDumpProvider mdp1; 651 MockMemoryDumpProvider mdp1;
657 MockMemoryDumpProvider mdp2; 652 MockMemoryDumpProvider mdp2;
658 653
659 RegisterDumpProvider(&mdp1, nullptr); 654 RegisterDumpProvider(&mdp1, nullptr);
660 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 655 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
661 656
662 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); 657 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(4);
663 658
664 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 659 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
665 .Times(4) 660 .Times(4)
666 .WillOnce(Return(true)) 661 .WillOnce(Return(true))
667 .WillOnce( 662 .WillOnce(
668 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 663 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
669 RegisterDumpProvider(&mdp2, nullptr); 664 RegisterDumpProvider(&mdp2, nullptr);
670 return true; 665 return true;
671 })) 666 }))
672 .WillRepeatedly(Return(true)); 667 .WillRepeatedly(Return(true));
(...skipping 15 matching lines...) Expand all
688 // Like RegisterDumperWhileDumping, but unregister the dump provider instead. 683 // Like RegisterDumperWhileDumping, but unregister the dump provider instead.
689 TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileDumping) { 684 TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileDumping) {
690 InitializeMemoryDumpManager(false /* is_coordinator */); 685 InitializeMemoryDumpManager(false /* is_coordinator */);
691 MockMemoryDumpProvider mdp1; 686 MockMemoryDumpProvider mdp1;
692 MockMemoryDumpProvider mdp2; 687 MockMemoryDumpProvider mdp2;
693 688
694 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get(), kDefaultOptions); 689 RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get(), kDefaultOptions);
695 RegisterDumpProvider(&mdp2, ThreadTaskRunnerHandle::Get(), kDefaultOptions); 690 RegisterDumpProvider(&mdp2, ThreadTaskRunnerHandle::Get(), kDefaultOptions);
696 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 691 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
697 692
698 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); 693 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(4);
699 694
700 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) 695 EXPECT_CALL(mdp1, OnMemoryDump(_, _))
701 .Times(4) 696 .Times(4)
702 .WillOnce(Return(true)) 697 .WillOnce(Return(true))
703 .WillOnce( 698 .WillOnce(
704 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { 699 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool {
705 MemoryDumpManager::GetInstance()->UnregisterDumpProvider(&mdp2); 700 MemoryDumpManager::GetInstance()->UnregisterDumpProvider(&mdp2);
706 return true; 701 return true;
707 })) 702 }))
708 .WillRepeatedly(Return(true)); 703 .WillRepeatedly(Return(true));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 753
759 // OnMemoryDump is called once for the provider that dumps first, and zero 754 // OnMemoryDump is called once for the provider that dumps first, and zero
760 // times for the other provider. 755 // times for the other provider.
761 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) 756 EXPECT_CALL(*mdp, OnMemoryDump(_, _))
762 .Times(AtMost(1)) 757 .Times(AtMost(1))
763 .WillOnce(Invoke(on_dump)); 758 .WillOnce(Invoke(on_dump));
764 } 759 }
765 760
766 last_callback_success_ = false; 761 last_callback_success_ = false;
767 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 762 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
768 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 763 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
769 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 764 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
770 MemoryDumpLevelOfDetail::DETAILED); 765 MemoryDumpLevelOfDetail::DETAILED);
771 ASSERT_EQ(1, on_memory_dump_call_count); 766 ASSERT_EQ(1, on_memory_dump_call_count);
772 ASSERT_TRUE(last_callback_success_); 767 ASSERT_TRUE(last_callback_success_);
773 768
774 DisableTracing(); 769 DisableTracing();
775 } 770 }
776 771
777 TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) { 772 TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) {
778 InitializeMemoryDumpManager(false /* is_coordinator */); 773 InitializeMemoryDumpManager(false /* is_coordinator */);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 855
861 // OnMemoryDump is called once for the provider that dumps first, and zero 856 // OnMemoryDump is called once for the provider that dumps first, and zero
862 // times for the other provider. 857 // times for the other provider.
863 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) 858 EXPECT_CALL(*mdp, OnMemoryDump(_, _))
864 .Times(AtMost(1)) 859 .Times(AtMost(1))
865 .WillOnce(Invoke(on_dump)); 860 .WillOnce(Invoke(on_dump));
866 } 861 }
867 862
868 last_callback_success_ = false; 863 last_callback_success_ = false;
869 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 864 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
870 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 865 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
871 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 866 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
872 MemoryDumpLevelOfDetail::DETAILED); 867 MemoryDumpLevelOfDetail::DETAILED);
873 ASSERT_EQ(1, on_memory_dump_call_count); 868 ASSERT_EQ(1, on_memory_dump_call_count);
874 ASSERT_TRUE(last_callback_success_); 869 ASSERT_TRUE(last_callback_success_);
875 870
876 DisableTracing(); 871 DisableTracing();
877 } 872 }
878 873
879 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when 874 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when
880 // tracing is not enabled. 875 // tracing is not enabled.
881 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { 876 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) {
882 InitializeMemoryDumpManager(false /* is_coordinator */); 877 InitializeMemoryDumpManager(false /* is_coordinator */);
883 MockMemoryDumpProvider mdp1; 878 MockMemoryDumpProvider mdp1;
884 RegisterDumpProvider(&mdp1, nullptr); 879 RegisterDumpProvider(&mdp1, nullptr);
885 880
886 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); 881 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(0);
887 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 882 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
888 883
889 last_callback_success_ = true; 884 last_callback_success_ = true;
890 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 885 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
891 MemoryDumpLevelOfDetail::DETAILED); 886 MemoryDumpLevelOfDetail::DETAILED);
892 EXPECT_FALSE(last_callback_success_); 887 EXPECT_FALSE(last_callback_success_);
893 } 888 }
894 889
895 // Checks that is the MemoryDumpManager is initialized after tracing already 890 // Checks that is the MemoryDumpManager is initialized after tracing already
896 // began, it will still late-join the party (real use case: startup tracing). 891 // began, it will still late-join the party (real use case: startup tracing).
897 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) { 892 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) {
898 MockMemoryDumpProvider mdp; 893 MockMemoryDumpProvider mdp;
899 RegisterDumpProvider(&mdp, nullptr); 894 RegisterDumpProvider(&mdp, nullptr);
900 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 895 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
901 896
902 // First check that a RequestGlobalDump() issued before the MemoryDumpManager 897 // First check that a RequestGlobalDump() issued before the MemoryDumpManager
903 // initialization gets NACK-ed cleanly. 898 // initialization gets NACK-ed cleanly.
904 { 899 {
905 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); 900 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
906 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 901 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
907 MemoryDumpLevelOfDetail::DETAILED); 902 MemoryDumpLevelOfDetail::DETAILED);
908 EXPECT_FALSE(last_callback_success_); 903 EXPECT_FALSE(last_callback_success_);
909 } 904 }
910 905
911 // Now late-initialize the MemoryDumpManager and check that the 906 // Now late-initialize the MemoryDumpManager and check that the
912 // RequestGlobalDump completes successfully. 907 // RequestGlobalDump completes successfully.
913 { 908 {
914 InitializeMemoryDumpManager(false /* is_coordinator */); 909 InitializeMemoryDumpManager(false /* is_coordinator */);
915 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1); 910 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1);
916 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 911 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
917 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 912 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
918 MemoryDumpLevelOfDetail::DETAILED); 913 MemoryDumpLevelOfDetail::DETAILED);
919 EXPECT_TRUE(last_callback_success_); 914 EXPECT_TRUE(last_callback_success_);
920 } 915 }
921 DisableTracing(); 916 DisableTracing();
922 } 917 }
923 918
924 // This test (and the MemoryDumpManagerTestCoordinator below) crystallizes the 919 // This test (and the MemoryDumpManagerTestCoordinator below) crystallizes the
925 // expectations of the chrome://tracing UI and chrome telemetry w.r.t. periodic 920 // 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 921 // dumps in memory-infra, handling gracefully the transition between the legacy
927 // and the new-style (JSON-based) TraceConfig. 922 // and the new-style (JSON-based) TraceConfig.
928 TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) { 923 TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) {
929 InitializeMemoryDumpManager(false /* is_coordinator */); 924 InitializeMemoryDumpManager(false /* is_coordinator */);
930 MemoryDumpManagerDelegateForTesting& delegate = *delegate_;
931 925
932 // Don't trigger the default behavior of the mock delegate in this test, 926 // 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 927 // which would short-circuit the dump request to the actual
934 // CreateProcessDump(). 928 // CreateProcessDump().
935 // We don't want to create any dump in this test, only check whether the dumps 929 // We don't want to create any dump in this test, only check whether the dumps
936 // are requested or not. 930 // are requested or not.
937 ON_CALL(delegate, RequestGlobalMemoryDump(_, _)).WillByDefault(Return()); 931 ON_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
932 .WillByDefault(Return());
938 933
939 // Enabling memory-infra in a non-coordinator process should not trigger any 934 // Enabling memory-infra in a non-coordinator process should not trigger any
940 // periodic dumps. 935 // periodic dumps.
941 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 936 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
942 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 937 EXPECT_FALSE(IsPeriodicDumpingEnabled());
943 DisableTracing(); 938 DisableTracing();
944 939
945 // Enabling memory-infra with the new (JSON) TraceConfig in a non-coordinator 940 // 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 941 // process with a fully defined trigger config should NOT enable any periodic
947 // dumps. 942 // dumps.
948 EnableTracingWithTraceConfig( 943 EnableTracingWithTraceConfig(
949 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(1, 5)); 944 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(1, 5));
950 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 945 EXPECT_FALSE(IsPeriodicDumpingEnabled());
951 DisableTracing(); 946 DisableTracing();
952 } 947 }
953 948
954 TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) { 949 TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) {
955 InitializeMemoryDumpManager(true /* is_coordinator */); 950 InitializeMemoryDumpManager(true /* is_coordinator */);
956 MemoryDumpManagerDelegateForTesting& delegate = *delegate_; 951 ON_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
957 ON_CALL(delegate, RequestGlobalMemoryDump(_, _)).WillByDefault(Return()); 952 .WillByDefault(Return());
958 953
959 // Enabling memory-infra with the legacy TraceConfig (category filter) in 954 // Enabling memory-infra with the legacy TraceConfig (category filter) in
960 // a coordinator process should enable periodic dumps. 955 // a coordinator process should enable periodic dumps.
961 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 956 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
962 EXPECT_TRUE(IsPeriodicDumpingEnabled()); 957 EXPECT_TRUE(IsPeriodicDumpingEnabled());
963 DisableTracing(); 958 DisableTracing();
964 959
965 // Enabling memory-infra with the new (JSON) TraceConfig in a coordinator 960 // Enabling memory-infra with the new (JSON) TraceConfig in a coordinator
966 // process without specifying any "memory_dump_config" section should enable 961 // process without specifying any "memory_dump_config" section should enable
967 // periodic dumps. This is to preserve the behavior chrome://tracing UI, that 962 // 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. 980 // be performed in the correct order.
986 RunLoop run_loop; 981 RunLoop run_loop;
987 auto test_task_runner = ThreadTaskRunnerHandle::Get(); 982 auto test_task_runner = ThreadTaskRunnerHandle::Get();
988 auto quit_closure = run_loop.QuitClosure(); 983 auto quit_closure = run_loop.QuitClosure();
989 984
990 const int kHeavyDumpRate = 5; 985 const int kHeavyDumpRate = 5;
991 const int kLightDumpPeriodMs = 1; 986 const int kLightDumpPeriodMs = 1;
992 const int kHeavyDumpPeriodMs = kHeavyDumpRate * kLightDumpPeriodMs; 987 const int kHeavyDumpPeriodMs = kHeavyDumpRate * kLightDumpPeriodMs;
993 // The expected sequence with light=1ms, heavy=5ms is H,L,L,L,L,H,... 988 // The expected sequence with light=1ms, heavy=5ms is H,L,L,L,L,H,...
994 testing::InSequence sequence; 989 testing::InSequence sequence;
995 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsDetailedDump(), _)); 990 EXPECT_CALL(global_dump_handler_,
996 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) 991 RequestGlobalMemoryDump(IsDetailedDump(), _));
992 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _))
997 .Times(kHeavyDumpRate - 1); 993 .Times(kHeavyDumpRate - 1);
998 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsDetailedDump(), _)); 994 EXPECT_CALL(global_dump_handler_,
999 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) 995 RequestGlobalMemoryDump(IsDetailedDump(), _));
996 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _))
1000 .Times(kHeavyDumpRate - 2); 997 .Times(kHeavyDumpRate - 2);
1001 EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) 998 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _))
1002 .WillOnce(Invoke([test_task_runner, quit_closure]( 999 .WillOnce(Invoke([test_task_runner, quit_closure](
1003 const MemoryDumpRequestArgs& args, 1000 const MemoryDumpRequestArgs& args,
1004 const GlobalMemoryDumpCallback& callback) { 1001 const GlobalMemoryDumpCallback& callback) {
1005 test_task_runner->PostTask(FROM_HERE, quit_closure); 1002 test_task_runner->PostTask(FROM_HERE, quit_closure);
1006 })); 1003 }));
1007 1004
1008 // Swallow all the final spurious calls until tracing gets disabled. 1005 // Swallow all the final spurious calls until tracing gets disabled.
1009 EXPECT_CALL(delegate, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); 1006 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
1007 .Times(AnyNumber());
1010 1008
1011 EnableTracingWithTraceConfig( 1009 EnableTracingWithTraceConfig(
1012 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers( 1010 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(
1013 kLightDumpPeriodMs, kHeavyDumpPeriodMs)); 1011 kLightDumpPeriodMs, kHeavyDumpPeriodMs));
1014 run_loop.Run(); 1012 run_loop.Run();
1015 DisableTracing(); 1013 DisableTracing();
1016 } 1014 }
1017 1015
1018 // Tests against race conditions that can happen if tracing is disabled before 1016 // Tests against race conditions that can happen if tracing is disabled before
1019 // the CreateProcessDump() call. Real-world regression: crbug.com/580295 . 1017 // the CreateProcessDump() call. Real-world regression: crbug.com/580295 .
1020 TEST_F(MemoryDumpManagerTest, DisableTracingRightBeforeStartOfDump) { 1018 TEST_F(MemoryDumpManagerTest, DisableTracingRightBeforeStartOfDump) {
1021 base::WaitableEvent tracing_disabled_event( 1019 base::WaitableEvent tracing_disabled_event(
1022 WaitableEvent::ResetPolicy::AUTOMATIC, 1020 WaitableEvent::ResetPolicy::AUTOMATIC,
1023 WaitableEvent::InitialState::NOT_SIGNALED); 1021 WaitableEvent::InitialState::NOT_SIGNALED);
1024 InitializeMemoryDumpManager(false /* is_coordinator */); 1022 InitializeMemoryDumpManager(false /* is_coordinator */);
1025 1023
1026 std::unique_ptr<Thread> mdp_thread(new Thread("test thread")); 1024 std::unique_ptr<Thread> mdp_thread(new Thread("test thread"));
1027 mdp_thread->Start(); 1025 mdp_thread->Start();
1028 1026
1029 // Create both same-thread MDP and another MDP with dedicated thread 1027 // Create both same-thread MDP and another MDP with dedicated thread
1030 MockMemoryDumpProvider mdp1; 1028 MockMemoryDumpProvider mdp1;
1031 RegisterDumpProvider(&mdp1, nullptr); 1029 RegisterDumpProvider(&mdp1, nullptr);
1032 MockMemoryDumpProvider mdp2; 1030 MockMemoryDumpProvider mdp2;
1033 RegisterDumpProvider(&mdp2, mdp_thread->task_runner(), kDefaultOptions); 1031 RegisterDumpProvider(&mdp2, mdp_thread->task_runner(), kDefaultOptions);
1034 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1032 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1035 1033
1036 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)) 1034 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
1037 .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args, 1035 .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args,
1038 const GlobalMemoryDumpCallback& callback) { 1036 const GlobalMemoryDumpCallback& callback) {
1039 DisableTracing(); 1037 DisableTracing();
1040 ProcessMemoryDumpCallback process_callback = 1038 ProcessMemoryDumpCallback process_callback =
1041 Bind(&ProcessDumpCallbackAdapter, callback); 1039 Bind(&ProcessDumpCallbackAdapter, callback);
1042 delegate_->CreateProcessDump(args, process_callback); 1040 mdm_->CreateProcessDump(args, process_callback);
1043 })); 1041 }));
1044 1042
1045 // If tracing is disabled for current session CreateProcessDump() should NOT 1043 // If tracing is disabled for current session CreateProcessDump() should NOT
1046 // request dumps from providers. Real-world regression: crbug.com/600570 . 1044 // request dumps from providers. Real-world regression: crbug.com/600570 .
1047 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); 1045 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
1048 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); 1046 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
1049 1047
1050 last_callback_success_ = true; 1048 last_callback_success_ = true;
1051 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1049 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1052 MemoryDumpLevelOfDetail::DETAILED); 1050 MemoryDumpLevelOfDetail::DETAILED);
(...skipping 14 matching lines...) Expand all
1067 MockMemoryDumpProvider mdp2; 1065 MockMemoryDumpProvider mdp2;
1068 options.target_pid = 123; 1066 options.target_pid = 123;
1069 RegisterDumpProvider(&mdp2, nullptr, options); 1067 RegisterDumpProvider(&mdp2, nullptr, options);
1070 1068
1071 // Another provider with out-of-process dumping. 1069 // Another provider with out-of-process dumping.
1072 MockMemoryDumpProvider mdp3; 1070 MockMemoryDumpProvider mdp3;
1073 options.target_pid = 456; 1071 options.target_pid = 456;
1074 RegisterDumpProvider(&mdp3, nullptr, options); 1072 RegisterDumpProvider(&mdp3, nullptr, options);
1075 1073
1076 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1074 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1077 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 1075 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
1078 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); 1076 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
1079 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); 1077 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
1080 EXPECT_CALL(mdp3, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); 1078 EXPECT_CALL(mdp3, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
1081 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1079 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1082 MemoryDumpLevelOfDetail::DETAILED); 1080 MemoryDumpLevelOfDetail::DETAILED);
1083 DisableTracing(); 1081 DisableTracing();
1084 1082
1085 // Flush the trace into JSON. 1083 // Flush the trace into JSON.
1086 trace_event::TraceResultBuffer buffer; 1084 trace_event::TraceResultBuffer buffer;
1087 TraceResultBuffer::SimpleOutput trace_output; 1085 TraceResultBuffer::SimpleOutput trace_output;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 EXPECT_CALL(*mdp, OnMemoryDump(_, _)) 1159 EXPECT_CALL(*mdp, OnMemoryDump(_, _))
1162 .Times(1) 1160 .Times(1)
1163 .WillOnce(Invoke(self_unregister_from_another_thread)); 1161 .WillOnce(Invoke(self_unregister_from_another_thread));
1164 EXPECT_CALL(*mdp, Destructor()) 1162 EXPECT_CALL(*mdp, Destructor())
1165 .Times(1) 1163 .Times(1)
1166 .WillOnce(Invoke([&thread_ref]() { 1164 .WillOnce(Invoke([&thread_ref]() {
1167 EXPECT_EQ(thread_ref, PlatformThread::CurrentRef()); 1165 EXPECT_EQ(thread_ref, PlatformThread::CurrentRef());
1168 })); 1166 }));
1169 1167
1170 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1168 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1171 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 1169 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2);
1172 for (int i = 0; i < 2; ++i) { 1170 for (int i = 0; i < 2; ++i) {
1173 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1171 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1174 MemoryDumpLevelOfDetail::DETAILED); 1172 MemoryDumpLevelOfDetail::DETAILED);
1175 } 1173 }
1176 DisableTracing(); 1174 DisableTracing();
1177 } 1175 }
1178 1176
1179 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) { 1177 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) {
1180 InitializeMemoryDumpManager(false /* is_coordinator */); 1178 InitializeMemoryDumpManager(false /* is_coordinator */);
1181 SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); 1179 SetDumpProviderWhitelistForTesting(kTestMDPWhitelist);
1182 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider); 1180 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider);
1183 RegisterDumpProvider(mdp1.get(), nullptr); 1181 RegisterDumpProvider(mdp1.get(), nullptr);
1184 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider); 1182 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider);
1185 RegisterDumpProvider(mdp2.get(), nullptr, kDefaultOptions, 1183 RegisterDumpProvider(mdp2.get(), nullptr, kDefaultOptions,
1186 kWhitelistedMDPName); 1184 kWhitelistedMDPName);
1187 1185
1188 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0); 1186 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0);
1189 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true)); 1187 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true));
1190 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); 1188 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1);
1191 1189
1192 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1190 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1193 EXPECT_FALSE(IsPeriodicDumpingEnabled()); 1191 EXPECT_FALSE(IsPeriodicDumpingEnabled());
1194 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1192 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1195 MemoryDumpLevelOfDetail::BACKGROUND); 1193 MemoryDumpLevelOfDetail::BACKGROUND);
1196 DisableTracing(); 1194 DisableTracing();
1197 } 1195 }
1198 1196
1199 TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) { 1197 TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) {
1200 InitializeMemoryDumpManager(true /* is_coordinator */); 1198 InitializeMemoryDumpManager(true /* is_coordinator */);
1201 1199
1202 RunLoop run_loop; 1200 RunLoop run_loop;
1203 auto test_task_runner = ThreadTaskRunnerHandle::Get(); 1201 auto test_task_runner = ThreadTaskRunnerHandle::Get();
1204 auto quit_closure = run_loop.QuitClosure(); 1202 auto quit_closure = run_loop.QuitClosure();
1205 1203
1206 testing::InSequence sequence; 1204 testing::InSequence sequence;
1207 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _)) 1205 EXPECT_CALL(global_dump_handler_,
1206 RequestGlobalMemoryDump(IsBackgroundDump(), _))
1208 .Times(5); 1207 .Times(5);
1209 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _)) 1208 EXPECT_CALL(global_dump_handler_,
1209 RequestGlobalMemoryDump(IsBackgroundDump(), _))
1210 .WillOnce(Invoke([test_task_runner, quit_closure]( 1210 .WillOnce(Invoke([test_task_runner, quit_closure](
1211 const MemoryDumpRequestArgs& args, 1211 const MemoryDumpRequestArgs& args,
1212 const GlobalMemoryDumpCallback& callback) { 1212 const GlobalMemoryDumpCallback& callback) {
1213 test_task_runner->PostTask(FROM_HERE, quit_closure); 1213 test_task_runner->PostTask(FROM_HERE, quit_closure);
1214 })); 1214 }));
1215 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); 1215 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
1216 .Times(AnyNumber());
1216 1217
1217 EnableTracingWithTraceConfig( 1218 EnableTracingWithTraceConfig(
1218 TraceConfigMemoryTestUtil::GetTraceConfig_BackgroundTrigger( 1219 TraceConfigMemoryTestUtil::GetTraceConfig_BackgroundTrigger(
1219 1 /* period_ms */)); 1220 1 /* period_ms */));
1220 1221
1221 // Only background mode dumps should be allowed with the trace config. 1222 // Only background mode dumps should be allowed with the trace config.
1222 last_callback_success_ = false; 1223 last_callback_success_ = false;
1223 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1224 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1224 MemoryDumpLevelOfDetail::LIGHT); 1225 MemoryDumpLevelOfDetail::LIGHT);
1225 EXPECT_FALSE(last_callback_success_); 1226 EXPECT_FALSE(last_callback_success_);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1258 1259
1259 DisableTracing(); 1260 DisableTracing();
1260 1261
1261 const TraceConfig& trace_config = 1262 const TraceConfig& trace_config =
1262 TraceConfig(TraceConfigMemoryTestUtil::GetTraceConfig_NoTriggers()); 1263 TraceConfig(TraceConfigMemoryTestUtil::GetTraceConfig_NoTriggers());
1263 const TraceConfig::MemoryDumpConfig& memory_dump_config = 1264 const TraceConfig::MemoryDumpConfig& memory_dump_config =
1264 trace_config.memory_dump_config(); 1265 trace_config.memory_dump_config();
1265 1266
1266 mdm_->Enable(memory_dump_config); 1267 mdm_->Enable(memory_dump_config);
1267 1268
1268 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(3); 1269 EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3);
1269 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true)); 1270 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true));
1270 last_callback_success_ = true; 1271 last_callback_success_ = true;
1271 for (int i = 0; i < 3; ++i) 1272 for (int i = 0; i < 3; ++i)
1272 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1273 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1273 MemoryDumpLevelOfDetail::DETAILED); 1274 MemoryDumpLevelOfDetail::DETAILED);
1274 // The callback result should actually be false since (for the moment at 1275 // The callback result should actually be false since (for the moment at
1275 // least) a true result means that as well as the dump generally being 1276 // least) a true result means that as well as the dump generally being
1276 // successful we also managed to add the dump to the trace. 1277 // successful we also managed to add the dump to the trace.
1277 EXPECT_FALSE(last_callback_success_); 1278 EXPECT_FALSE(last_callback_success_);
1278 1279
1279 mdm_->Disable(); 1280 mdm_->Disable();
1280 1281
1281 mdm_->UnregisterDumpProvider(&mdp); 1282 mdm_->UnregisterDumpProvider(&mdp);
1282 } 1283 }
1283 1284
1284 } // namespace trace_event 1285 } // namespace trace_event
1285 } // namespace base 1286 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | content/child/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698