OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/trace_event/memory_dump_manager.h" | 5 #include "base/trace_event/memory_dump_manager.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 void RegisterDumpProvider( | 50 void RegisterDumpProvider( |
51 MemoryDumpProvider* mdp, | 51 MemoryDumpProvider* mdp, |
52 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 52 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
53 const MemoryDumpProvider::Options& options) { | 53 const MemoryDumpProvider::Options& options) { |
54 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); | 54 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); |
55 mdm->set_dumper_registrations_ignored_for_testing(false); | 55 mdm->set_dumper_registrations_ignored_for_testing(false); |
56 mdm->RegisterDumpProvider(mdp, "TestDumpProvider", task_runner, options); | 56 mdm->RegisterDumpProvider(mdp, "TestDumpProvider", task_runner, options); |
57 mdm->set_dumper_registrations_ignored_for_testing(true); | 57 mdm->set_dumper_registrations_ignored_for_testing(true); |
58 } | 58 } |
59 | 59 |
60 void RegisterDumpProvider(MemoryDumpProvider* mdp) { | 60 void RegisterDumpProviderOnCurrentThread(MemoryDumpProvider* mdp) { |
61 RegisterDumpProvider(mdp, nullptr, MemoryDumpProvider::Options()); | 61 RegisterDumpProvider(mdp, ThreadTaskRunnerHandle::Get(), |
| 62 MemoryDumpProvider::Options()); |
62 } | 63 } |
63 | 64 |
64 void OnTraceDataCollected(Closure quit_closure, | 65 void OnTraceDataCollected(Closure quit_closure, |
65 trace_event::TraceResultBuffer* buffer, | 66 trace_event::TraceResultBuffer* buffer, |
66 const scoped_refptr<RefCountedString>& json, | 67 const scoped_refptr<RefCountedString>& json, |
67 bool has_more_events) { | 68 bool has_more_events) { |
68 buffer->AddFragment(json->data()); | 69 buffer->AddFragment(json->data()); |
69 if (!has_more_events) | 70 if (!has_more_events) |
70 quit_closure.Run(); | 71 quit_closure.Run(); |
71 } | 72 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 | 185 |
185 // We want our singleton torn down after each test. | 186 // We want our singleton torn down after each test. |
186 ShadowingAtExitManager at_exit_manager_; | 187 ShadowingAtExitManager at_exit_manager_; |
187 }; | 188 }; |
188 | 189 |
189 // Basic sanity checks. Registers a memory dump provider and checks that it is | 190 // Basic sanity checks. Registers a memory dump provider and checks that it is |
190 // called, but only when memory-infra is enabled. | 191 // called, but only when memory-infra is enabled. |
191 TEST_F(MemoryDumpManagerTest, SingleDumper) { | 192 TEST_F(MemoryDumpManagerTest, SingleDumper) { |
192 InitializeMemoryDumpManager(false /* is_coordinator */); | 193 InitializeMemoryDumpManager(false /* is_coordinator */); |
193 MockMemoryDumpProvider mdp; | 194 MockMemoryDumpProvider mdp; |
194 RegisterDumpProvider(&mdp); | 195 RegisterDumpProviderOnCurrentThread(&mdp); |
195 | 196 |
196 // Check that the dumper is not called if the memory category is not enabled. | 197 // Check that the dumper is not called if the memory category is not enabled. |
197 EnableTracingWithLegacyCategories("foobar-but-not-memory"); | 198 EnableTracingWithLegacyCategories("foobar-but-not-memory"); |
198 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); | 199 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); |
199 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); | 200 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); |
200 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 201 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
201 MemoryDumpLevelOfDetail::DETAILED); | 202 MemoryDumpLevelOfDetail::DETAILED); |
202 DisableTracing(); | 203 DisableTracing(); |
203 | 204 |
204 // Now repeat enabling the memory category and check that the dumper is | 205 // Now repeat enabling the memory category and check that the dumper is |
(...skipping 20 matching lines...) Expand all Loading... |
225 } | 226 } |
226 DisableTracing(); | 227 DisableTracing(); |
227 } | 228 } |
228 | 229 |
229 // Checks that requesting dumps with high level of detail actually propagates | 230 // Checks that requesting dumps with high level of detail actually propagates |
230 // the level of the detail properly to OnMemoryDump() call on dump providers. | 231 // the level of the detail properly to OnMemoryDump() call on dump providers. |
231 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { | 232 TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { |
232 InitializeMemoryDumpManager(false /* is_coordinator */); | 233 InitializeMemoryDumpManager(false /* is_coordinator */); |
233 MockMemoryDumpProvider mdp; | 234 MockMemoryDumpProvider mdp; |
234 | 235 |
235 RegisterDumpProvider(&mdp); | 236 RegisterDumpProviderOnCurrentThread(&mdp); |
236 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 237 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
237 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 238 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
238 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); | 239 EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); |
239 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 240 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
240 MemoryDumpLevelOfDetail::DETAILED); | 241 MemoryDumpLevelOfDetail::DETAILED); |
241 DisableTracing(); | 242 DisableTracing(); |
242 mdm_->UnregisterDumpProvider(&mdp); | 243 mdm_->UnregisterDumpProvider(&mdp); |
243 | 244 |
244 // Check that requesting dumps with low level of detail actually propagates to | 245 // Check that requesting dumps with low level of detail actually propagates to |
245 // OnMemoryDump() call on dump providers. | 246 // OnMemoryDump() call on dump providers. |
246 RegisterDumpProvider(&mdp); | 247 RegisterDumpProviderOnCurrentThread(&mdp); |
247 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 248 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
248 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 249 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
249 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); | 250 EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); |
250 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 251 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
251 MemoryDumpLevelOfDetail::LIGHT); | 252 MemoryDumpLevelOfDetail::LIGHT); |
252 DisableTracing(); | 253 DisableTracing(); |
253 mdm_->UnregisterDumpProvider(&mdp); | 254 mdm_->UnregisterDumpProvider(&mdp); |
254 } | 255 } |
255 | 256 |
256 // Checks that the SharedSessionState object is acqually shared over time. | 257 // Checks that the SharedSessionState object is acqually shared over time. |
257 TEST_F(MemoryDumpManagerTest, SharedSessionState) { | 258 TEST_F(MemoryDumpManagerTest, SharedSessionState) { |
258 InitializeMemoryDumpManager(false /* is_coordinator */); | 259 InitializeMemoryDumpManager(false /* is_coordinator */); |
259 MockMemoryDumpProvider mdp1; | 260 MockMemoryDumpProvider mdp1; |
260 MockMemoryDumpProvider mdp2; | 261 MockMemoryDumpProvider mdp2; |
261 RegisterDumpProvider(&mdp1); | 262 RegisterDumpProviderOnCurrentThread(&mdp1); |
262 RegisterDumpProvider(&mdp2); | 263 RegisterDumpProviderOnCurrentThread(&mdp2); |
263 | 264 |
264 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 265 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
265 const MemoryDumpSessionState* session_state = mdm_->session_state().get(); | 266 const MemoryDumpSessionState* session_state = mdm_->session_state().get(); |
266 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); | 267 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); |
267 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) | 268 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) |
268 .Times(2) | 269 .Times(2) |
269 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, | 270 .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&, |
270 ProcessMemoryDump* pmd) -> bool { | 271 ProcessMemoryDump* pmd) -> bool { |
271 EXPECT_EQ(session_state, pmd->session_state().get()); | 272 EXPECT_EQ(session_state, pmd->session_state().get()); |
272 return true; | 273 return true; |
(...skipping 14 matching lines...) Expand all Loading... |
287 DisableTracing(); | 288 DisableTracing(); |
288 } | 289 } |
289 | 290 |
290 // Checks that the (Un)RegisterDumpProvider logic behaves sanely. | 291 // Checks that the (Un)RegisterDumpProvider logic behaves sanely. |
291 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { | 292 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { |
292 InitializeMemoryDumpManager(false /* is_coordinator */); | 293 InitializeMemoryDumpManager(false /* is_coordinator */); |
293 MockMemoryDumpProvider mdp1; | 294 MockMemoryDumpProvider mdp1; |
294 MockMemoryDumpProvider mdp2; | 295 MockMemoryDumpProvider mdp2; |
295 | 296 |
296 // Enable only mdp1. | 297 // Enable only mdp1. |
297 RegisterDumpProvider(&mdp1); | 298 RegisterDumpProviderOnCurrentThread(&mdp1); |
298 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 299 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
299 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 300 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
300 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); | 301 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); |
301 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); | 302 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); |
302 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 303 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
303 MemoryDumpLevelOfDetail::DETAILED); | 304 MemoryDumpLevelOfDetail::DETAILED); |
304 DisableTracing(); | 305 DisableTracing(); |
305 | 306 |
306 // Invert: enable mdp1 and disable mdp2. | 307 // Invert: enable mdp1 and disable mdp2. |
307 mdm_->UnregisterDumpProvider(&mdp1); | 308 mdm_->UnregisterDumpProvider(&mdp1); |
308 RegisterDumpProvider(&mdp2); | 309 RegisterDumpProviderOnCurrentThread(&mdp2); |
309 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 310 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
310 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 311 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
311 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); | 312 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); |
312 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); | 313 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); |
313 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 314 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
314 MemoryDumpLevelOfDetail::DETAILED); | 315 MemoryDumpLevelOfDetail::DETAILED); |
315 DisableTracing(); | 316 DisableTracing(); |
316 | 317 |
317 // Enable both mdp1 and mdp2. | 318 // Enable both mdp1 and mdp2. |
318 RegisterDumpProvider(&mdp1); | 319 RegisterDumpProviderOnCurrentThread(&mdp1); |
319 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 320 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
320 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 321 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
321 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); | 322 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); |
322 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); | 323 EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); |
323 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 324 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
324 MemoryDumpLevelOfDetail::DETAILED); | 325 MemoryDumpLevelOfDetail::DETAILED); |
325 DisableTracing(); | 326 DisableTracing(); |
326 } | 327 } |
327 | 328 |
328 // Checks that the dump provider invocations depend only on the current | 329 // Checks that the dump provider invocations depend only on the current |
329 // registration state and not on previous registrations and dumps. | 330 // registration state and not on previous registrations and dumps. |
330 TEST_F(MemoryDumpManagerTest, RegistrationConsistency) { | 331 TEST_F(MemoryDumpManagerTest, RegistrationConsistency) { |
331 InitializeMemoryDumpManager(false /* is_coordinator */); | 332 InitializeMemoryDumpManager(false /* is_coordinator */); |
332 MockMemoryDumpProvider mdp; | 333 MockMemoryDumpProvider mdp; |
333 | 334 |
334 RegisterDumpProvider(&mdp); | 335 RegisterDumpProviderOnCurrentThread(&mdp); |
335 | 336 |
336 { | 337 { |
337 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 338 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
338 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); | 339 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); |
339 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 340 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
340 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 341 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
341 MemoryDumpLevelOfDetail::DETAILED); | 342 MemoryDumpLevelOfDetail::DETAILED); |
342 DisableTracing(); | 343 DisableTracing(); |
343 } | 344 } |
344 | 345 |
345 mdm_->UnregisterDumpProvider(&mdp); | 346 mdm_->UnregisterDumpProvider(&mdp); |
346 | 347 |
347 { | 348 { |
348 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 349 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
349 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); | 350 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); |
350 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 351 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
351 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 352 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
352 MemoryDumpLevelOfDetail::DETAILED); | 353 MemoryDumpLevelOfDetail::DETAILED); |
353 DisableTracing(); | 354 DisableTracing(); |
354 } | 355 } |
355 | 356 |
356 RegisterDumpProvider(&mdp); | 357 RegisterDumpProviderOnCurrentThread(&mdp); |
357 mdm_->UnregisterDumpProvider(&mdp); | 358 mdm_->UnregisterDumpProvider(&mdp); |
358 | 359 |
359 { | 360 { |
360 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 361 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
361 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); | 362 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); |
362 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 363 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
363 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 364 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
364 MemoryDumpLevelOfDetail::DETAILED); | 365 MemoryDumpLevelOfDetail::DETAILED); |
365 DisableTracing(); | 366 DisableTracing(); |
366 } | 367 } |
367 | 368 |
368 RegisterDumpProvider(&mdp); | 369 RegisterDumpProviderOnCurrentThread(&mdp); |
369 mdm_->UnregisterDumpProvider(&mdp); | 370 mdm_->UnregisterDumpProvider(&mdp); |
370 RegisterDumpProvider(&mdp); | 371 RegisterDumpProviderOnCurrentThread(&mdp); |
371 | 372 |
372 { | 373 { |
373 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); | 374 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1); |
374 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); | 375 EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); |
375 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 376 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
376 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 377 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
377 MemoryDumpLevelOfDetail::DETAILED); | 378 MemoryDumpLevelOfDetail::DETAILED); |
378 DisableTracing(); | 379 DisableTracing(); |
379 } | 380 } |
380 } | 381 } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 DisableTracing(); | 439 DisableTracing(); |
439 } | 440 } |
440 | 441 |
441 // Checks that providers get disabled after 3 consecutive failures, but not | 442 // Checks that providers get disabled after 3 consecutive failures, but not |
442 // otherwise (e.g., if interleaved). | 443 // otherwise (e.g., if interleaved). |
443 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { | 444 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { |
444 InitializeMemoryDumpManager(false /* is_coordinator */); | 445 InitializeMemoryDumpManager(false /* is_coordinator */); |
445 MockMemoryDumpProvider mdp1; | 446 MockMemoryDumpProvider mdp1; |
446 MockMemoryDumpProvider mdp2; | 447 MockMemoryDumpProvider mdp2; |
447 | 448 |
448 RegisterDumpProvider(&mdp1); | 449 RegisterDumpProviderOnCurrentThread(&mdp1); |
449 RegisterDumpProvider(&mdp2); | 450 RegisterDumpProviderOnCurrentThread(&mdp2); |
450 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 451 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
451 | 452 |
452 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); | 453 const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); |
453 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps); | 454 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(kNumDumps); |
454 | 455 |
455 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) | 456 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) |
456 .Times(GetMaxConsecutiveFailuresCount()) | 457 .Times(GetMaxConsecutiveFailuresCount()) |
457 .WillRepeatedly(Return(false)); | 458 .WillRepeatedly(Return(false)); |
458 | 459 |
459 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) | 460 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) |
(...skipping 12 matching lines...) Expand all Loading... |
472 DisableTracing(); | 473 DisableTracing(); |
473 } | 474 } |
474 | 475 |
475 // Sneakily registers an extra memory dump provider while an existing one is | 476 // Sneakily registers an extra memory dump provider while an existing one is |
476 // dumping and expect it to take part in the already active tracing session. | 477 // dumping and expect it to take part in the already active tracing session. |
477 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { | 478 TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { |
478 InitializeMemoryDumpManager(false /* is_coordinator */); | 479 InitializeMemoryDumpManager(false /* is_coordinator */); |
479 MockMemoryDumpProvider mdp1; | 480 MockMemoryDumpProvider mdp1; |
480 MockMemoryDumpProvider mdp2; | 481 MockMemoryDumpProvider mdp2; |
481 | 482 |
482 RegisterDumpProvider(&mdp1); | 483 RegisterDumpProviderOnCurrentThread(&mdp1); |
483 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 484 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
484 | 485 |
485 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); | 486 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(4); |
486 | 487 |
487 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) | 488 EXPECT_CALL(mdp1, OnMemoryDump(_, _)) |
488 .Times(4) | 489 .Times(4) |
489 .WillOnce(Return(true)) | 490 .WillOnce(Return(true)) |
490 .WillOnce( | 491 .WillOnce( |
491 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { | 492 Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { |
492 RegisterDumpProvider(&mdp2); | 493 RegisterDumpProviderOnCurrentThread(&mdp2); |
493 return true; | 494 return true; |
494 })) | 495 })) |
495 .WillRepeatedly(Return(true)); | 496 .WillRepeatedly(Return(true)); |
496 | 497 |
497 // Depending on the insertion order (before or after mdp1), mdp2 might be | 498 // Depending on the insertion order (before or after mdp1), mdp2 might be |
498 // called also immediately after it gets registered. | 499 // called also immediately after it gets registered. |
499 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) | 500 EXPECT_CALL(mdp2, OnMemoryDump(_, _)) |
500 .Times(Between(2, 3)) | 501 .Times(Between(2, 3)) |
501 .WillRepeatedly(Return(true)); | 502 .WillRepeatedly(Return(true)); |
502 | 503 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 ASSERT_TRUE(last_callback_success_); | 640 ASSERT_TRUE(last_callback_success_); |
640 | 641 |
641 DisableTracing(); | 642 DisableTracing(); |
642 } | 643 } |
643 | 644 |
644 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when | 645 // Checks that a NACK callback is invoked if RequestGlobalDump() is called when |
645 // tracing is not enabled. | 646 // tracing is not enabled. |
646 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { | 647 TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { |
647 InitializeMemoryDumpManager(false /* is_coordinator */); | 648 InitializeMemoryDumpManager(false /* is_coordinator */); |
648 MockMemoryDumpProvider mdp1; | 649 MockMemoryDumpProvider mdp1; |
649 RegisterDumpProvider(&mdp1); | 650 RegisterDumpProviderOnCurrentThread(&mdp1); |
650 | 651 |
651 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); | 652 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); |
652 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); | 653 EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); |
653 | 654 |
654 last_callback_success_ = true; | 655 last_callback_success_ = true; |
655 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 656 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
656 MemoryDumpLevelOfDetail::DETAILED); | 657 MemoryDumpLevelOfDetail::DETAILED); |
657 EXPECT_FALSE(last_callback_success_); | 658 EXPECT_FALSE(last_callback_success_); |
658 } | 659 } |
659 | 660 |
660 // Checks that is the MemoryDumpManager is initialized after tracing already | 661 // Checks that is the MemoryDumpManager is initialized after tracing already |
661 // began, it will still late-join the party (real use case: startup tracing). | 662 // began, it will still late-join the party (real use case: startup tracing). |
662 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) { | 663 TEST_F(MemoryDumpManagerTest, InitializedAfterStartOfTracing) { |
663 MockMemoryDumpProvider mdp; | 664 MockMemoryDumpProvider mdp; |
664 RegisterDumpProvider(&mdp); | 665 RegisterDumpProviderOnCurrentThread(&mdp); |
665 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); | 666 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); |
666 | 667 |
667 // First check that a RequestGlobalDump() issued before the MemoryDumpManager | 668 // First check that a RequestGlobalDump() issued before the MemoryDumpManager |
668 // initialization gets NACK-ed cleanly. | 669 // initialization gets NACK-ed cleanly. |
669 { | 670 { |
670 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); | 671 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); |
671 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); | 672 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(0); |
672 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 673 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
673 MemoryDumpLevelOfDetail::DETAILED); | 674 MemoryDumpLevelOfDetail::DETAILED); |
674 EXPECT_FALSE(last_callback_success_); | 675 EXPECT_FALSE(last_callback_success_); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); | 950 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); |
950 for (int i = 0; i < 2; ++i) { | 951 for (int i = 0; i < 2; ++i) { |
951 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, | 952 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, |
952 MemoryDumpLevelOfDetail::DETAILED); | 953 MemoryDumpLevelOfDetail::DETAILED); |
953 } | 954 } |
954 DisableTracing(); | 955 DisableTracing(); |
955 } | 956 } |
956 | 957 |
957 } // namespace trace_event | 958 } // namespace trace_event |
958 } // namespace base | 959 } // namespace base |
OLD | NEW |