OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Test of classes in the tracked_objects.h classes. | 5 // Test of classes in the tracked_objects.h classes. |
6 | 6 |
7 #include "base/tracked_objects.h" | 7 #include "base/tracked_objects.h" |
8 | 8 |
9 #include <stddef.h> | 9 #include <stddef.h> |
10 | 10 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 static unsigned int GetTestTime() { return test_time_; } | 112 static unsigned int GetTestTime() { return test_time_; } |
113 | 113 |
114 // Test time in milliseconds. | 114 // Test time in milliseconds. |
115 static unsigned int test_time_; | 115 static unsigned int test_time_; |
116 }; | 116 }; |
117 | 117 |
118 // static | 118 // static |
119 unsigned int TrackedObjectsTest::test_time_; | 119 unsigned int TrackedObjectsTest::test_time_; |
120 | 120 |
121 TEST_F(TrackedObjectsTest, TaskStopwatchNoStartStop) { | 121 TEST_F(TrackedObjectsTest, TaskStopwatchNoStartStop) { |
122 if (!ThreadData::InitializeAndSetTrackingStatus( | 122 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
123 ThreadData::PROFILING_ACTIVE)) { | |
124 // Don't run the test if task tracking is not compiled in. | |
125 return; | |
126 } | |
127 | 123 |
128 // Check that creating and destroying a stopwatch without starting it doesn't | 124 // Check that creating and destroying a stopwatch without starting it doesn't |
129 // crash. | 125 // crash. |
130 TaskStopwatch stopwatch; | 126 TaskStopwatch stopwatch; |
131 } | 127 } |
132 | 128 |
133 TEST_F(TrackedObjectsTest, MinimalStartupShutdown) { | 129 TEST_F(TrackedObjectsTest, MinimalStartupShutdown) { |
134 // Minimal test doesn't even create any tasks. | 130 // Minimal test doesn't even create any tasks. |
135 if (!ThreadData::InitializeAndSetTrackingStatus( | 131 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
136 ThreadData::PROFILING_ACTIVE)) { | |
137 // Don't run the test if task tracking is not compiled in. | |
138 return; | |
139 } | |
140 | 132 |
141 EXPECT_FALSE(ThreadData::first()); // No activity even on this thread. | 133 EXPECT_FALSE(ThreadData::first()); // No activity even on this thread. |
142 ThreadData* data = ThreadData::Get(); | 134 ThreadData* data = ThreadData::Get(); |
143 EXPECT_TRUE(ThreadData::first()); // Now class was constructed. | 135 EXPECT_TRUE(ThreadData::first()); // Now class was constructed. |
144 ASSERT_TRUE(data); | 136 ASSERT_TRUE(data); |
145 EXPECT_FALSE(data->next()); | 137 EXPECT_FALSE(data->next()); |
146 EXPECT_EQ(data, ThreadData::Get()); | 138 EXPECT_EQ(data, ThreadData::Get()); |
147 ThreadData::BirthMap birth_map; | 139 ThreadData::BirthMap birth_map; |
148 ThreadData::DeathsSnapshot deaths; | 140 ThreadData::DeathsSnapshot deaths; |
149 data->SnapshotMaps(0, &birth_map, &deaths); | 141 data->SnapshotMaps(0, &birth_map, &deaths); |
150 EXPECT_EQ(0u, birth_map.size()); | 142 EXPECT_EQ(0u, birth_map.size()); |
151 EXPECT_EQ(0u, deaths.size()); | 143 EXPECT_EQ(0u, deaths.size()); |
152 | 144 |
153 // Clean up with no leaking. | 145 // Clean up with no leaking. |
154 Reset(); | 146 Reset(); |
155 | 147 |
156 // Do it again, just to be sure we reset state completely. | 148 // Do it again, just to be sure we reset state completely. |
157 EXPECT_TRUE( | 149 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
158 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE)); | |
159 EXPECT_FALSE(ThreadData::first()); // No activity even on this thread. | 150 EXPECT_FALSE(ThreadData::first()); // No activity even on this thread. |
160 data = ThreadData::Get(); | 151 data = ThreadData::Get(); |
161 EXPECT_TRUE(ThreadData::first()); // Now class was constructed. | 152 EXPECT_TRUE(ThreadData::first()); // Now class was constructed. |
162 ASSERT_TRUE(data); | 153 ASSERT_TRUE(data); |
163 EXPECT_FALSE(data->next()); | 154 EXPECT_FALSE(data->next()); |
164 EXPECT_EQ(data, ThreadData::Get()); | 155 EXPECT_EQ(data, ThreadData::Get()); |
165 birth_map.clear(); | 156 birth_map.clear(); |
166 deaths.clear(); | 157 deaths.clear(); |
167 data->SnapshotMaps(0, &birth_map, &deaths); | 158 data->SnapshotMaps(0, &birth_map, &deaths); |
168 EXPECT_EQ(0u, birth_map.size()); | 159 EXPECT_EQ(0u, birth_map.size()); |
169 EXPECT_EQ(0u, deaths.size()); | 160 EXPECT_EQ(0u, deaths.size()); |
170 } | 161 } |
171 | 162 |
172 TEST_F(TrackedObjectsTest, TinyStartupShutdown) { | 163 TEST_F(TrackedObjectsTest, TinyStartupShutdown) { |
173 if (!ThreadData::InitializeAndSetTrackingStatus( | 164 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
174 ThreadData::PROFILING_ACTIVE)) { | |
175 // Don't run the test if task tracking is not compiled in. | |
176 return; | |
177 } | |
178 | 165 |
179 // Instigate tracking on a single tracked object, on our thread. | 166 // Instigate tracking on a single tracked object, on our thread. |
180 const char kFunction[] = "TinyStartupShutdown"; | 167 const char kFunction[] = "TinyStartupShutdown"; |
181 Location location(kFunction, kFile, kLineNumber, NULL); | 168 Location location(kFunction, kFile, kLineNumber, NULL); |
182 ThreadData::TallyABirthIfActive(location); | 169 ThreadData::TallyABirthIfActive(location); |
183 | 170 |
184 ThreadData* data = ThreadData::first(); | 171 ThreadData* data = ThreadData::first(); |
185 ASSERT_TRUE(data); | 172 ASSERT_TRUE(data); |
186 EXPECT_FALSE(data->next()); | 173 EXPECT_FALSE(data->next()); |
187 EXPECT_EQ(data, ThreadData::Get()); | 174 EXPECT_EQ(data, ThreadData::Get()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 process_data_phase.tasks[0].death_data.run_duration_max); | 230 process_data_phase.tasks[0].death_data.run_duration_max); |
244 EXPECT_EQ(time_elapsed, | 231 EXPECT_EQ(time_elapsed, |
245 process_data_phase.tasks[0].death_data.run_duration_sample); | 232 process_data_phase.tasks[0].death_data.run_duration_sample); |
246 EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_sum); | 233 EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_sum); |
247 EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_max); | 234 EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_max); |
248 EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_sample); | 235 EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_sample); |
249 EXPECT_EQ(kWorkerThreadName, process_data_phase.tasks[0].death_thread_name); | 236 EXPECT_EQ(kWorkerThreadName, process_data_phase.tasks[0].death_thread_name); |
250 } | 237 } |
251 | 238 |
252 TEST_F(TrackedObjectsTest, DeathDataTestRecordDeath) { | 239 TEST_F(TrackedObjectsTest, DeathDataTestRecordDeath) { |
253 if (!ThreadData::InitializeAndSetTrackingStatus( | 240 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
254 ThreadData::PROFILING_ACTIVE)) { | |
255 // Don't run the test if task tracking is not compiled in. | |
256 return; | |
257 } | |
258 | 241 |
259 scoped_ptr<DeathData> data(new DeathData()); | 242 scoped_ptr<DeathData> data(new DeathData()); |
260 ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); | 243 ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); |
261 EXPECT_EQ(data->run_duration_sum(), 0); | 244 EXPECT_EQ(data->run_duration_sum(), 0); |
262 EXPECT_EQ(data->run_duration_max(), 0); | 245 EXPECT_EQ(data->run_duration_max(), 0); |
263 EXPECT_EQ(data->run_duration_sample(), 0); | 246 EXPECT_EQ(data->run_duration_sample(), 0); |
264 EXPECT_EQ(data->queue_duration_sum(), 0); | 247 EXPECT_EQ(data->queue_duration_sum(), 0); |
265 EXPECT_EQ(data->queue_duration_max(), 0); | 248 EXPECT_EQ(data->queue_duration_max(), 0); |
266 EXPECT_EQ(data->queue_duration_sample(), 0); | 249 EXPECT_EQ(data->queue_duration_sample(), 0); |
267 EXPECT_EQ(data->count(), 0); | 250 EXPECT_EQ(data->count(), 0); |
(...skipping 18 matching lines...) Expand all Loading... |
286 EXPECT_EQ(data->run_duration_max(), run_ms); | 269 EXPECT_EQ(data->run_duration_max(), run_ms); |
287 EXPECT_EQ(data->run_duration_sample(), run_ms); | 270 EXPECT_EQ(data->run_duration_sample(), run_ms); |
288 EXPECT_EQ(data->queue_duration_sum(), queue_ms + queue_ms); | 271 EXPECT_EQ(data->queue_duration_sum(), queue_ms + queue_ms); |
289 EXPECT_EQ(data->queue_duration_max(), queue_ms); | 272 EXPECT_EQ(data->queue_duration_max(), queue_ms); |
290 EXPECT_EQ(data->queue_duration_sample(), queue_ms); | 273 EXPECT_EQ(data->queue_duration_sample(), queue_ms); |
291 EXPECT_EQ(data->count(), 2); | 274 EXPECT_EQ(data->count(), 2); |
292 EXPECT_EQ(nullptr, data->last_phase_snapshot()); | 275 EXPECT_EQ(nullptr, data->last_phase_snapshot()); |
293 } | 276 } |
294 | 277 |
295 TEST_F(TrackedObjectsTest, DeathDataTest2Phases) { | 278 TEST_F(TrackedObjectsTest, DeathDataTest2Phases) { |
296 if (!ThreadData::InitializeAndSetTrackingStatus( | 279 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
297 ThreadData::PROFILING_ACTIVE)) { | |
298 // Don't run the test if task tracking is not compiled in. | |
299 return; | |
300 } | |
301 | 280 |
302 scoped_ptr<DeathData> data(new DeathData()); | 281 scoped_ptr<DeathData> data(new DeathData()); |
303 ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); | 282 ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); |
304 | 283 |
305 int32 run_ms = 42; | 284 int32 run_ms = 42; |
306 int32 queue_ms = 8; | 285 int32 queue_ms = 8; |
307 | 286 |
308 const int kUnrandomInt = 0; // Fake random int that ensure we sample data. | 287 const int kUnrandomInt = 0; // Fake random int that ensure we sample data. |
309 data->RecordDeath(queue_ms, run_ms, kUnrandomInt); | 288 data->RecordDeath(queue_ms, run_ms, kUnrandomInt); |
310 data->RecordDeath(queue_ms, run_ms, kUnrandomInt); | 289 data->RecordDeath(queue_ms, run_ms, kUnrandomInt); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 EXPECT_EQ(2 * queue_ms, | 334 EXPECT_EQ(2 * queue_ms, |
356 data->last_phase_snapshot()->death_data.queue_duration_sum); | 335 data->last_phase_snapshot()->death_data.queue_duration_sum); |
357 EXPECT_EQ(queue_ms, | 336 EXPECT_EQ(queue_ms, |
358 data->last_phase_snapshot()->death_data.queue_duration_max); | 337 data->last_phase_snapshot()->death_data.queue_duration_max); |
359 EXPECT_EQ(queue_ms, | 338 EXPECT_EQ(queue_ms, |
360 data->last_phase_snapshot()->death_data.queue_duration_sample); | 339 data->last_phase_snapshot()->death_data.queue_duration_sample); |
361 EXPECT_EQ(nullptr, data->last_phase_snapshot()->prev); | 340 EXPECT_EQ(nullptr, data->last_phase_snapshot()->prev); |
362 } | 341 } |
363 | 342 |
364 TEST_F(TrackedObjectsTest, Delta) { | 343 TEST_F(TrackedObjectsTest, Delta) { |
365 if (!ThreadData::InitializeAndSetTrackingStatus( | 344 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
366 ThreadData::PROFILING_ACTIVE)) { | |
367 // Don't run the test if task tracking is not compiled in. | |
368 return; | |
369 } | |
370 | 345 |
371 DeathDataSnapshot snapshot; | 346 DeathDataSnapshot snapshot; |
372 snapshot.count = 10; | 347 snapshot.count = 10; |
373 snapshot.run_duration_sum = 100; | 348 snapshot.run_duration_sum = 100; |
374 snapshot.run_duration_max = 50; | 349 snapshot.run_duration_max = 50; |
375 snapshot.run_duration_sample = 25; | 350 snapshot.run_duration_sample = 25; |
376 snapshot.queue_duration_sum = 200; | 351 snapshot.queue_duration_sum = 200; |
377 snapshot.queue_duration_max = 101; | 352 snapshot.queue_duration_max = 101; |
378 snapshot.queue_duration_sample = 26; | 353 snapshot.queue_duration_sample = 26; |
379 | 354 |
(...skipping 11 matching lines...) Expand all Loading... |
391 EXPECT_EQ(5, delta.run_duration_sum); | 366 EXPECT_EQ(5, delta.run_duration_sum); |
392 EXPECT_EQ(50, delta.run_duration_max); | 367 EXPECT_EQ(50, delta.run_duration_max); |
393 EXPECT_EQ(25, delta.run_duration_sample); | 368 EXPECT_EQ(25, delta.run_duration_sample); |
394 EXPECT_EQ(10, delta.queue_duration_sum); | 369 EXPECT_EQ(10, delta.queue_duration_sum); |
395 EXPECT_EQ(101, delta.queue_duration_max); | 370 EXPECT_EQ(101, delta.queue_duration_max); |
396 EXPECT_EQ(26, delta.queue_duration_sample); | 371 EXPECT_EQ(26, delta.queue_duration_sample); |
397 } | 372 } |
398 | 373 |
399 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotWorkerThread) { | 374 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotWorkerThread) { |
400 // Start in the deactivated state. | 375 // Start in the deactivated state. |
401 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) { | 376 ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED); |
402 // Don't run the test if task tracking is not compiled in. | |
403 return; | |
404 } | |
405 | 377 |
406 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotWorkerThread"; | 378 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotWorkerThread"; |
407 Location location(kFunction, kFile, kLineNumber, NULL); | 379 Location location(kFunction, kFile, kLineNumber, NULL); |
408 TallyABirth(location, std::string()); | 380 TallyABirth(location, std::string()); |
409 | 381 |
410 ProcessDataSnapshot process_data; | 382 ProcessDataSnapshot process_data; |
411 ThreadData::Snapshot(0, &process_data); | 383 ThreadData::Snapshot(0, &process_data); |
412 | 384 |
413 ASSERT_EQ(1u, process_data.phased_snapshots.size()); | 385 ASSERT_EQ(1u, process_data.phased_snapshots.size()); |
414 | 386 |
415 auto it = process_data.phased_snapshots.find(0); | 387 auto it = process_data.phased_snapshots.find(0); |
416 ASSERT_TRUE(it != process_data.phased_snapshots.end()); | 388 ASSERT_TRUE(it != process_data.phased_snapshots.end()); |
417 const ProcessDataPhaseSnapshot& process_data_phase = it->second; | 389 const ProcessDataPhaseSnapshot& process_data_phase = it->second; |
418 | 390 |
419 ASSERT_EQ(0u, process_data_phase.tasks.size()); | 391 ASSERT_EQ(0u, process_data_phase.tasks.size()); |
420 | 392 |
421 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 393 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
422 } | 394 } |
423 | 395 |
424 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotMainThread) { | 396 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotMainThread) { |
425 // Start in the deactivated state. | 397 // Start in the deactivated state. |
426 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) { | 398 ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED); |
427 // Don't run the test if task tracking is not compiled in. | |
428 return; | |
429 } | |
430 | 399 |
431 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotMainThread"; | 400 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotMainThread"; |
432 Location location(kFunction, kFile, kLineNumber, NULL); | 401 Location location(kFunction, kFile, kLineNumber, NULL); |
433 TallyABirth(location, kMainThreadName); | 402 TallyABirth(location, kMainThreadName); |
434 | 403 |
435 ProcessDataSnapshot process_data; | 404 ProcessDataSnapshot process_data; |
436 ThreadData::Snapshot(0, &process_data); | 405 ThreadData::Snapshot(0, &process_data); |
437 | 406 |
438 ASSERT_EQ(1u, process_data.phased_snapshots.size()); | 407 ASSERT_EQ(1u, process_data.phased_snapshots.size()); |
439 | 408 |
440 auto it = process_data.phased_snapshots.find(0); | 409 auto it = process_data.phased_snapshots.find(0); |
441 ASSERT_TRUE(it != process_data.phased_snapshots.end()); | 410 ASSERT_TRUE(it != process_data.phased_snapshots.end()); |
442 const ProcessDataPhaseSnapshot& process_data_phase = it->second; | 411 const ProcessDataPhaseSnapshot& process_data_phase = it->second; |
443 | 412 |
444 ASSERT_EQ(0u, process_data_phase.tasks.size()); | 413 ASSERT_EQ(0u, process_data_phase.tasks.size()); |
445 | 414 |
446 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 415 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
447 } | 416 } |
448 | 417 |
449 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotWorkerThread) { | 418 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotWorkerThread) { |
450 if (!ThreadData::InitializeAndSetTrackingStatus( | 419 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
451 ThreadData::PROFILING_ACTIVE)) { | |
452 // Don't run the test if task tracking is not compiled in. | |
453 return; | |
454 } | |
455 | 420 |
456 const char kFunction[] = "BirthOnlyToSnapshotWorkerThread"; | 421 const char kFunction[] = "BirthOnlyToSnapshotWorkerThread"; |
457 Location location(kFunction, kFile, kLineNumber, NULL); | 422 Location location(kFunction, kFile, kLineNumber, NULL); |
458 TallyABirth(location, std::string()); | 423 TallyABirth(location, std::string()); |
459 | 424 |
460 ProcessDataSnapshot process_data; | 425 ProcessDataSnapshot process_data; |
461 ThreadData::Snapshot(0, &process_data); | 426 ThreadData::Snapshot(0, &process_data); |
462 ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName, | 427 ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName, |
463 kStillAlive, 1, 0, 0); | 428 kStillAlive, 1, 0, 0); |
464 } | 429 } |
465 | 430 |
466 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotMainThread) { | 431 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotMainThread) { |
467 if (!ThreadData::InitializeAndSetTrackingStatus( | 432 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
468 ThreadData::PROFILING_ACTIVE)) { | |
469 // Don't run the test if task tracking is not compiled in. | |
470 return; | |
471 } | |
472 | 433 |
473 const char kFunction[] = "BirthOnlyToSnapshotMainThread"; | 434 const char kFunction[] = "BirthOnlyToSnapshotMainThread"; |
474 Location location(kFunction, kFile, kLineNumber, NULL); | 435 Location location(kFunction, kFile, kLineNumber, NULL); |
475 TallyABirth(location, kMainThreadName); | 436 TallyABirth(location, kMainThreadName); |
476 | 437 |
477 ProcessDataSnapshot process_data; | 438 ProcessDataSnapshot process_data; |
478 ThreadData::Snapshot(0, &process_data); | 439 ThreadData::Snapshot(0, &process_data); |
479 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, kStillAlive, | 440 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, kStillAlive, |
480 1, 0, 0); | 441 1, 0, 0); |
481 } | 442 } |
482 | 443 |
483 TEST_F(TrackedObjectsTest, LifeCycleToSnapshotMainThread) { | 444 TEST_F(TrackedObjectsTest, LifeCycleToSnapshotMainThread) { |
484 if (!ThreadData::InitializeAndSetTrackingStatus( | 445 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
485 ThreadData::PROFILING_ACTIVE)) { | |
486 // Don't run the test if task tracking is not compiled in. | |
487 return; | |
488 } | |
489 | 446 |
490 const char kFunction[] = "LifeCycleToSnapshotMainThread"; | 447 const char kFunction[] = "LifeCycleToSnapshotMainThread"; |
491 Location location(kFunction, kFile, kLineNumber, NULL); | 448 Location location(kFunction, kFile, kLineNumber, NULL); |
492 TallyABirth(location, kMainThreadName); | 449 TallyABirth(location, kMainThreadName); |
493 | 450 |
494 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 451 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
495 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 452 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
496 // TrackingInfo will call TallyABirth() during construction. | 453 // TrackingInfo will call TallyABirth() during construction. |
497 base::TrackingInfo pending_task(location, kDelayedStartTime); | 454 base::TrackingInfo pending_task(location, kDelayedStartTime); |
498 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 455 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
499 | 456 |
500 const unsigned int kStartOfRun = 5; | 457 const unsigned int kStartOfRun = 5; |
501 const unsigned int kEndOfRun = 7; | 458 const unsigned int kEndOfRun = 7; |
502 SetTestTime(kStartOfRun); | 459 SetTestTime(kStartOfRun); |
503 TaskStopwatch stopwatch; | 460 TaskStopwatch stopwatch; |
504 stopwatch.Start(); | 461 stopwatch.Start(); |
505 SetTestTime(kEndOfRun); | 462 SetTestTime(kEndOfRun); |
506 stopwatch.Stop(); | 463 stopwatch.Stop(); |
507 | 464 |
508 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); | 465 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
509 | 466 |
510 ProcessDataSnapshot process_data; | 467 ProcessDataSnapshot process_data; |
511 ThreadData::Snapshot(0, &process_data); | 468 ThreadData::Snapshot(0, &process_data); |
512 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 469 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
513 kMainThreadName, 1, 2, 4); | 470 kMainThreadName, 1, 2, 4); |
514 } | 471 } |
515 | 472 |
516 TEST_F(TrackedObjectsTest, TwoPhases) { | 473 TEST_F(TrackedObjectsTest, TwoPhases) { |
517 if (!ThreadData::InitializeAndSetTrackingStatus( | 474 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
518 ThreadData::PROFILING_ACTIVE)) { | |
519 // Don't run the test if task tracking is not compiled in. | |
520 return; | |
521 } | |
522 | 475 |
523 const char kFunction[] = "TwoPhases"; | 476 const char kFunction[] = "TwoPhases"; |
524 Location location(kFunction, kFile, kLineNumber, NULL); | 477 Location location(kFunction, kFile, kLineNumber, NULL); |
525 TallyABirth(location, kMainThreadName); | 478 TallyABirth(location, kMainThreadName); |
526 | 479 |
527 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 480 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
528 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 481 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
529 // TrackingInfo will call TallyABirth() during construction. | 482 // TrackingInfo will call TallyABirth() during construction. |
530 base::TrackingInfo pending_task(location, kDelayedStartTime); | 483 base::TrackingInfo pending_task(location, kDelayedStartTime); |
531 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 484 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_sum); | 563 EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_sum); |
611 EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_max); | 564 EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_max); |
612 EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_sample); | 565 EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_sample); |
613 | 566 |
614 EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name); | 567 EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name); |
615 | 568 |
616 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 569 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
617 } | 570 } |
618 | 571 |
619 TEST_F(TrackedObjectsTest, ThreePhases) { | 572 TEST_F(TrackedObjectsTest, ThreePhases) { |
620 if (!ThreadData::InitializeAndSetTrackingStatus( | 573 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
621 ThreadData::PROFILING_ACTIVE)) { | |
622 // Don't run the test if task tracking is not compiled in. | |
623 return; | |
624 } | |
625 | 574 |
626 const char kFunction[] = "ThreePhases"; | 575 const char kFunction[] = "ThreePhases"; |
627 Location location(kFunction, kFile, kLineNumber, NULL); | 576 Location location(kFunction, kFile, kLineNumber, NULL); |
628 | 577 |
629 // Phase 0 | 578 // Phase 0 |
630 { | 579 { |
631 TallyABirth(location, kMainThreadName); | 580 TallyABirth(location, kMainThreadName); |
632 | 581 |
633 // TrackingInfo will call TallyABirth() during construction. | 582 // TrackingInfo will call TallyABirth() during construction. |
634 SetTestTime(10); | 583 SetTestTime(10); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_sum); | 704 EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_sum); |
756 EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_max); | 705 EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_max); |
757 EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_sample); | 706 EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_sample); |
758 | 707 |
759 EXPECT_EQ(kMainThreadName, process_data_phase2.tasks[0].death_thread_name); | 708 EXPECT_EQ(kMainThreadName, process_data_phase2.tasks[0].death_thread_name); |
760 | 709 |
761 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 710 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
762 } | 711 } |
763 | 712 |
764 TEST_F(TrackedObjectsTest, TwoPhasesSecondEmpty) { | 713 TEST_F(TrackedObjectsTest, TwoPhasesSecondEmpty) { |
765 if (!ThreadData::InitializeAndSetTrackingStatus( | 714 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
766 ThreadData::PROFILING_ACTIVE)) { | |
767 // Don't run the test if task tracking is not compiled in. | |
768 return; | |
769 } | |
770 | 715 |
771 const char kFunction[] = "TwoPhasesSecondEmpty"; | 716 const char kFunction[] = "TwoPhasesSecondEmpty"; |
772 Location location(kFunction, kFile, kLineNumber, NULL); | 717 Location location(kFunction, kFile, kLineNumber, NULL); |
773 ThreadData::InitializeThreadContext(kMainThreadName); | 718 ThreadData::InitializeThreadContext(kMainThreadName); |
774 | 719 |
775 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 720 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
776 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 721 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
777 // TrackingInfo will call TallyABirth() during construction. | 722 // TrackingInfo will call TallyABirth() during construction. |
778 base::TrackingInfo pending_task(location, kDelayedStartTime); | 723 base::TrackingInfo pending_task(location, kDelayedStartTime); |
779 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 724 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 auto it1 = process_data.phased_snapshots.find(1); | 767 auto it1 = process_data.phased_snapshots.find(1); |
823 ASSERT_TRUE(it1 != process_data.phased_snapshots.end()); | 768 ASSERT_TRUE(it1 != process_data.phased_snapshots.end()); |
824 const ProcessDataPhaseSnapshot& process_data_phase1 = it1->second; | 769 const ProcessDataPhaseSnapshot& process_data_phase1 = it1->second; |
825 | 770 |
826 ASSERT_EQ(0u, process_data_phase1.tasks.size()); | 771 ASSERT_EQ(0u, process_data_phase1.tasks.size()); |
827 | 772 |
828 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 773 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
829 } | 774 } |
830 | 775 |
831 TEST_F(TrackedObjectsTest, TwoPhasesFirstEmpty) { | 776 TEST_F(TrackedObjectsTest, TwoPhasesFirstEmpty) { |
832 if (!ThreadData::InitializeAndSetTrackingStatus( | 777 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
833 ThreadData::PROFILING_ACTIVE)) { | |
834 // Don't run the test if task tracking is not compiled in. | |
835 return; | |
836 } | |
837 | 778 |
838 ThreadData::OnProfilingPhaseCompleted(0); | 779 ThreadData::OnProfilingPhaseCompleted(0); |
839 | 780 |
840 const char kFunction[] = "TwoPhasesSecondEmpty"; | 781 const char kFunction[] = "TwoPhasesSecondEmpty"; |
841 Location location(kFunction, kFile, kLineNumber, NULL); | 782 Location location(kFunction, kFile, kLineNumber, NULL); |
842 ThreadData::InitializeThreadContext(kMainThreadName); | 783 ThreadData::InitializeThreadContext(kMainThreadName); |
843 | 784 |
844 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 785 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
845 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 786 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
846 // TrackingInfo will call TallyABirth() during construction. | 787 // TrackingInfo will call TallyABirth() during construction. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name); | 828 EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name); |
888 | 829 |
889 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 830 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
890 } | 831 } |
891 | 832 |
892 // We will deactivate tracking after the birth, and before the death, and | 833 // We will deactivate tracking after the birth, and before the death, and |
893 // demonstrate that the lifecycle is completely tallied. This ensures that | 834 // demonstrate that the lifecycle is completely tallied. This ensures that |
894 // our tallied births are matched by tallied deaths (except for when the | 835 // our tallied births are matched by tallied deaths (except for when the |
895 // task is still running, or is queued). | 836 // task is still running, or is queued). |
896 TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToSnapshotMainThread) { | 837 TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToSnapshotMainThread) { |
897 if (!ThreadData::InitializeAndSetTrackingStatus( | 838 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
898 ThreadData::PROFILING_ACTIVE)) { | |
899 // Don't run the test if task tracking is not compiled in. | |
900 return; | |
901 } | |
902 | 839 |
903 const char kFunction[] = "LifeCycleMidDeactivatedToSnapshotMainThread"; | 840 const char kFunction[] = "LifeCycleMidDeactivatedToSnapshotMainThread"; |
904 Location location(kFunction, kFile, kLineNumber, NULL); | 841 Location location(kFunction, kFile, kLineNumber, NULL); |
905 TallyABirth(location, kMainThreadName); | 842 TallyABirth(location, kMainThreadName); |
906 | 843 |
907 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 844 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
908 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 845 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
909 // TrackingInfo will call TallyABirth() during construction. | 846 // TrackingInfo will call TallyABirth() during construction. |
910 base::TrackingInfo pending_task(location, kDelayedStartTime); | 847 base::TrackingInfo pending_task(location, kDelayedStartTime); |
911 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 848 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
912 | 849 |
913 // Turn off tracking now that we have births. | 850 // Turn off tracking now that we have births. |
914 EXPECT_TRUE( | 851 ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED); |
915 ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)); | |
916 | 852 |
917 const unsigned int kStartOfRun = 5; | 853 const unsigned int kStartOfRun = 5; |
918 const unsigned int kEndOfRun = 7; | 854 const unsigned int kEndOfRun = 7; |
919 SetTestTime(kStartOfRun); | 855 SetTestTime(kStartOfRun); |
920 TaskStopwatch stopwatch; | 856 TaskStopwatch stopwatch; |
921 stopwatch.Start(); | 857 stopwatch.Start(); |
922 SetTestTime(kEndOfRun); | 858 SetTestTime(kEndOfRun); |
923 stopwatch.Stop(); | 859 stopwatch.Stop(); |
924 | 860 |
925 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); | 861 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
926 | 862 |
927 ProcessDataSnapshot process_data; | 863 ProcessDataSnapshot process_data; |
928 ThreadData::Snapshot(0, &process_data); | 864 ThreadData::Snapshot(0, &process_data); |
929 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 865 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
930 kMainThreadName, 1, 2, 4); | 866 kMainThreadName, 1, 2, 4); |
931 } | 867 } |
932 | 868 |
933 // We will deactivate tracking before starting a life cycle, and neither | 869 // We will deactivate tracking before starting a life cycle, and neither |
934 // the birth nor the death will be recorded. | 870 // the birth nor the death will be recorded. |
935 TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToSnapshotMainThread) { | 871 TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToSnapshotMainThread) { |
936 // Start in the deactivated state. | 872 // Start in the deactivated state. |
937 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) { | 873 ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED); |
938 // Don't run the test if task tracking is not compiled in. | |
939 return; | |
940 } | |
941 | 874 |
942 const char kFunction[] = "LifeCyclePreDeactivatedToSnapshotMainThread"; | 875 const char kFunction[] = "LifeCyclePreDeactivatedToSnapshotMainThread"; |
943 Location location(kFunction, kFile, kLineNumber, NULL); | 876 Location location(kFunction, kFile, kLineNumber, NULL); |
944 TallyABirth(location, kMainThreadName); | 877 TallyABirth(location, kMainThreadName); |
945 | 878 |
946 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 879 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
947 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 880 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
948 // TrackingInfo will call TallyABirth() during construction. | 881 // TrackingInfo will call TallyABirth() during construction. |
949 base::TrackingInfo pending_task(location, kDelayedStartTime); | 882 base::TrackingInfo pending_task(location, kDelayedStartTime); |
950 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 883 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
(...skipping 16 matching lines...) Expand all Loading... |
967 auto it = process_data.phased_snapshots.find(0); | 900 auto it = process_data.phased_snapshots.find(0); |
968 ASSERT_TRUE(it != process_data.phased_snapshots.end()); | 901 ASSERT_TRUE(it != process_data.phased_snapshots.end()); |
969 const ProcessDataPhaseSnapshot& process_data_phase = it->second; | 902 const ProcessDataPhaseSnapshot& process_data_phase = it->second; |
970 | 903 |
971 ASSERT_EQ(0u, process_data_phase.tasks.size()); | 904 ASSERT_EQ(0u, process_data_phase.tasks.size()); |
972 | 905 |
973 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 906 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
974 } | 907 } |
975 | 908 |
976 TEST_F(TrackedObjectsTest, TwoLives) { | 909 TEST_F(TrackedObjectsTest, TwoLives) { |
977 if (!ThreadData::InitializeAndSetTrackingStatus( | 910 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
978 ThreadData::PROFILING_ACTIVE)) { | |
979 // Don't run the test if task tracking is not compiled in. | |
980 return; | |
981 } | |
982 | 911 |
983 const char kFunction[] = "TwoLives"; | 912 const char kFunction[] = "TwoLives"; |
984 Location location(kFunction, kFile, kLineNumber, NULL); | 913 Location location(kFunction, kFile, kLineNumber, NULL); |
985 TallyABirth(location, kMainThreadName); | 914 TallyABirth(location, kMainThreadName); |
986 | 915 |
987 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 916 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
988 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 917 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
989 // TrackingInfo will call TallyABirth() during construction. | 918 // TrackingInfo will call TallyABirth() during construction. |
990 base::TrackingInfo pending_task(location, kDelayedStartTime); | 919 base::TrackingInfo pending_task(location, kDelayedStartTime); |
991 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 920 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
(...skipping 19 matching lines...) Expand all Loading... |
1011 | 940 |
1012 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2, stopwatch2); | 941 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2, stopwatch2); |
1013 | 942 |
1014 ProcessDataSnapshot process_data; | 943 ProcessDataSnapshot process_data; |
1015 ThreadData::Snapshot(0, &process_data); | 944 ThreadData::Snapshot(0, &process_data); |
1016 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 945 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
1017 kMainThreadName, 2, 2, 4); | 946 kMainThreadName, 2, 2, 4); |
1018 } | 947 } |
1019 | 948 |
1020 TEST_F(TrackedObjectsTest, DifferentLives) { | 949 TEST_F(TrackedObjectsTest, DifferentLives) { |
1021 if (!ThreadData::InitializeAndSetTrackingStatus( | 950 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
1022 ThreadData::PROFILING_ACTIVE)) { | |
1023 // Don't run the test if task tracking is not compiled in. | |
1024 return; | |
1025 } | |
1026 | 951 |
1027 // Use a well named thread. | 952 // Use a well named thread. |
1028 ThreadData::InitializeThreadContext(kMainThreadName); | 953 ThreadData::InitializeThreadContext(kMainThreadName); |
1029 const char kFunction[] = "DifferentLives"; | 954 const char kFunction[] = "DifferentLives"; |
1030 Location location(kFunction, kFile, kLineNumber, NULL); | 955 Location location(kFunction, kFile, kLineNumber, NULL); |
1031 | 956 |
1032 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 957 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
1033 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 958 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
1034 // TrackingInfo will call TallyABirth() during construction. | 959 // TrackingInfo will call TallyABirth() during construction. |
1035 base::TrackingInfo pending_task(location, kDelayedStartTime); | 960 base::TrackingInfo pending_task(location, kDelayedStartTime); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_max); | 1012 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_max); |
1088 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_sample); | 1013 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_sample); |
1089 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_sum); | 1014 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_sum); |
1090 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_max); | 1015 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_max); |
1091 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_sample); | 1016 EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_sample); |
1092 EXPECT_EQ(kStillAlive, process_data_phase.tasks[1].death_thread_name); | 1017 EXPECT_EQ(kStillAlive, process_data_phase.tasks[1].death_thread_name); |
1093 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 1018 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
1094 } | 1019 } |
1095 | 1020 |
1096 TEST_F(TrackedObjectsTest, TaskWithNestedExclusion) { | 1021 TEST_F(TrackedObjectsTest, TaskWithNestedExclusion) { |
1097 if (!ThreadData::InitializeAndSetTrackingStatus( | 1022 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
1098 ThreadData::PROFILING_ACTIVE)) { | |
1099 // Don't run the test if task tracking is not compiled in. | |
1100 return; | |
1101 } | |
1102 | 1023 |
1103 const char kFunction[] = "TaskWithNestedExclusion"; | 1024 const char kFunction[] = "TaskWithNestedExclusion"; |
1104 Location location(kFunction, kFile, kLineNumber, NULL); | 1025 Location location(kFunction, kFile, kLineNumber, NULL); |
1105 TallyABirth(location, kMainThreadName); | 1026 TallyABirth(location, kMainThreadName); |
1106 | 1027 |
1107 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 1028 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
1108 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 1029 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
1109 // TrackingInfo will call TallyABirth() during construction. | 1030 // TrackingInfo will call TallyABirth() during construction. |
1110 base::TrackingInfo pending_task(location, kDelayedStartTime); | 1031 base::TrackingInfo pending_task(location, kDelayedStartTime); |
1111 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 1032 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
(...skipping 13 matching lines...) Expand all Loading... |
1125 | 1046 |
1126 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); | 1047 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); |
1127 | 1048 |
1128 ProcessDataSnapshot process_data; | 1049 ProcessDataSnapshot process_data; |
1129 ThreadData::Snapshot(0, &process_data); | 1050 ThreadData::Snapshot(0, &process_data); |
1130 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 1051 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
1131 kMainThreadName, 1, 6, 4); | 1052 kMainThreadName, 1, 6, 4); |
1132 } | 1053 } |
1133 | 1054 |
1134 TEST_F(TrackedObjectsTest, TaskWith2NestedExclusions) { | 1055 TEST_F(TrackedObjectsTest, TaskWith2NestedExclusions) { |
1135 if (!ThreadData::InitializeAndSetTrackingStatus( | 1056 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
1136 ThreadData::PROFILING_ACTIVE)) { | |
1137 // Don't run the test if task tracking is not compiled in. | |
1138 return; | |
1139 } | |
1140 | 1057 |
1141 const char kFunction[] = "TaskWith2NestedExclusions"; | 1058 const char kFunction[] = "TaskWith2NestedExclusions"; |
1142 Location location(kFunction, kFile, kLineNumber, NULL); | 1059 Location location(kFunction, kFile, kLineNumber, NULL); |
1143 TallyABirth(location, kMainThreadName); | 1060 TallyABirth(location, kMainThreadName); |
1144 | 1061 |
1145 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 1062 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
1146 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 1063 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
1147 // TrackingInfo will call TallyABirth() during construction. | 1064 // TrackingInfo will call TallyABirth() during construction. |
1148 base::TrackingInfo pending_task(location, kDelayedStartTime); | 1065 base::TrackingInfo pending_task(location, kDelayedStartTime); |
1149 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 1066 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
(...skipping 19 matching lines...) Expand all Loading... |
1169 | 1086 |
1170 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); | 1087 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); |
1171 | 1088 |
1172 ProcessDataSnapshot process_data; | 1089 ProcessDataSnapshot process_data; |
1173 ThreadData::Snapshot(0, &process_data); | 1090 ThreadData::Snapshot(0, &process_data); |
1174 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 1091 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
1175 kMainThreadName, 1, 13, 4); | 1092 kMainThreadName, 1, 13, 4); |
1176 } | 1093 } |
1177 | 1094 |
1178 TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) { | 1095 TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) { |
1179 if (!ThreadData::InitializeAndSetTrackingStatus( | 1096 ThreadData::InitializeAndSetTrackingStatus(ThreadData::PROFILING_ACTIVE); |
1180 ThreadData::PROFILING_ACTIVE)) { | |
1181 // Don't run the test if task tracking is not compiled in. | |
1182 return; | |
1183 } | |
1184 | 1097 |
1185 const char kFunction[] = "TaskWithNestedExclusionWithNestedTask"; | 1098 const char kFunction[] = "TaskWithNestedExclusionWithNestedTask"; |
1186 Location location(kFunction, kFile, kLineNumber, NULL); | 1099 Location location(kFunction, kFile, kLineNumber, NULL); |
1187 | 1100 |
1188 const int kSecondFakeLineNumber = 999; | 1101 const int kSecondFakeLineNumber = 999; |
1189 | 1102 |
1190 TallyABirth(location, kMainThreadName); | 1103 TallyABirth(location, kMainThreadName); |
1191 | 1104 |
1192 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); | 1105 const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1); |
1193 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 1106 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1264 EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_max); | 1177 EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_max); |
1265 EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_sample); | 1178 EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_sample); |
1266 EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_sum); | 1179 EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_sum); |
1267 EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_max); | 1180 EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_max); |
1268 EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_sample); | 1181 EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_sample); |
1269 EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t1].death_thread_name); | 1182 EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t1].death_thread_name); |
1270 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 1183 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
1271 } | 1184 } |
1272 | 1185 |
1273 } // namespace tracked_objects | 1186 } // namespace tracked_objects |
OLD | NEW |