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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 | 89 |
90 EXPECT_EQ(0u, process_data.descendants.size()); | 90 EXPECT_EQ(0u, process_data.descendants.size()); |
91 | 91 |
92 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 92 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
93 } | 93 } |
94 }; | 94 }; |
95 | 95 |
96 TEST_F(TrackedObjectsTest, MinimalStartupShutdown) { | 96 TEST_F(TrackedObjectsTest, MinimalStartupShutdown) { |
97 // Minimal test doesn't even create any tasks. | 97 // Minimal test doesn't even create any tasks. |
98 if (!ThreadData::InitializeAndSetTrackingStatus( | 98 if (!ThreadData::InitializeAndSetTrackingStatus( |
99 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 99 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
100 return; | 100 return; |
| 101 } |
101 | 102 |
102 EXPECT_FALSE(ThreadData::first()); // No activity even on this thread. | 103 EXPECT_FALSE(ThreadData::first()); // No activity even on this thread. |
103 ThreadData* data = ThreadData::Get(); | 104 ThreadData* data = ThreadData::Get(); |
104 EXPECT_TRUE(ThreadData::first()); // Now class was constructed. | 105 EXPECT_TRUE(ThreadData::first()); // Now class was constructed. |
105 ASSERT_TRUE(data); | 106 ASSERT_TRUE(data); |
106 EXPECT_FALSE(data->next()); | 107 EXPECT_FALSE(data->next()); |
107 EXPECT_EQ(data, ThreadData::Get()); | 108 EXPECT_EQ(data, ThreadData::Get()); |
108 ThreadData::BirthMap birth_map; | 109 ThreadData::BirthMap birth_map; |
109 ThreadData::DeathMap death_map; | 110 ThreadData::DeathMap death_map; |
110 ThreadData::ParentChildSet parent_child_set; | 111 ThreadData::ParentChildSet parent_child_set; |
(...skipping 18 matching lines...) Expand all Loading... |
129 death_map.clear(); | 130 death_map.clear(); |
130 parent_child_set.clear(); | 131 parent_child_set.clear(); |
131 data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set); | 132 data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set); |
132 EXPECT_EQ(0u, birth_map.size()); | 133 EXPECT_EQ(0u, birth_map.size()); |
133 EXPECT_EQ(0u, death_map.size()); | 134 EXPECT_EQ(0u, death_map.size()); |
134 EXPECT_EQ(0u, parent_child_set.size()); | 135 EXPECT_EQ(0u, parent_child_set.size()); |
135 } | 136 } |
136 | 137 |
137 TEST_F(TrackedObjectsTest, TinyStartupShutdown) { | 138 TEST_F(TrackedObjectsTest, TinyStartupShutdown) { |
138 if (!ThreadData::InitializeAndSetTrackingStatus( | 139 if (!ThreadData::InitializeAndSetTrackingStatus( |
139 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 140 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
140 return; | 141 return; |
| 142 } |
141 | 143 |
142 // Instigate tracking on a single tracked object, on our thread. | 144 // Instigate tracking on a single tracked object, on our thread. |
143 const char kFunction[] = "TinyStartupShutdown"; | 145 const char kFunction[] = "TinyStartupShutdown"; |
144 Location location(kFunction, kFile, kLineNumber, NULL); | 146 Location location(kFunction, kFile, kLineNumber, NULL); |
145 Births* first_birth = ThreadData::TallyABirthIfActive(location); | 147 Births* first_birth = ThreadData::TallyABirthIfActive(location); |
146 | 148 |
147 ThreadData* data = ThreadData::first(); | 149 ThreadData* data = ThreadData::first(); |
148 ASSERT_TRUE(data); | 150 ASSERT_TRUE(data); |
149 EXPECT_FALSE(data->next()); | 151 EXPECT_FALSE(data->next()); |
150 EXPECT_EQ(data, ThreadData::Get()); | 152 EXPECT_EQ(data, ThreadData::Get()); |
(...skipping 10 matching lines...) Expand all Loading... |
161 // Now instigate another birth, while we are timing the run of the first | 163 // Now instigate another birth, while we are timing the run of the first |
162 // execution. | 164 // execution. |
163 ThreadData::NowForStartOfRun(first_birth); | 165 ThreadData::NowForStartOfRun(first_birth); |
164 // Create a child (using the same birth location). | 166 // Create a child (using the same birth location). |
165 // TrackingInfo will call TallyABirth() during construction. | 167 // TrackingInfo will call TallyABirth() during construction. |
166 base::TimeTicks kBogusBirthTime; | 168 base::TimeTicks kBogusBirthTime; |
167 base::TrackingInfo pending_task(location, kBogusBirthTime); | 169 base::TrackingInfo pending_task(location, kBogusBirthTime); |
168 TrackedTime start_time(pending_task.time_posted); | 170 TrackedTime start_time(pending_task.time_posted); |
169 // Finally conclude the outer run. | 171 // Finally conclude the outer run. |
170 TrackedTime end_time = ThreadData::NowForEndOfRun(); | 172 TrackedTime end_time = ThreadData::NowForEndOfRun(); |
171 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, start_time, | 173 TaskStopwatch stopwatch; |
172 end_time); | 174 stopwatch.Start(start_time); |
| 175 stopwatch.Stop(end_time); |
| 176 |
| 177 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
173 | 178 |
174 birth_map.clear(); | 179 birth_map.clear(); |
175 death_map.clear(); | 180 death_map.clear(); |
176 parent_child_set.clear(); | 181 parent_child_set.clear(); |
177 data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set); | 182 data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set); |
178 EXPECT_EQ(1u, birth_map.size()); // 1 birth location. | 183 EXPECT_EQ(1u, birth_map.size()); // 1 birth location. |
179 EXPECT_EQ(2, birth_map.begin()->second->birth_count()); // 2 births. | 184 EXPECT_EQ(2, birth_map.begin()->second->birth_count()); // 2 births. |
180 EXPECT_EQ(1u, death_map.size()); // 1 location. | 185 EXPECT_EQ(1u, death_map.size()); // 1 location. |
181 EXPECT_EQ(1, death_map.begin()->second.count()); // 1 death. | 186 EXPECT_EQ(1, death_map.begin()->second.count()); // 1 death. |
182 if (ThreadData::TrackingParentChildStatus()) { | 187 if (ThreadData::TrackingParentChildStatus()) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 EXPECT_EQ(kLineNumber, | 228 EXPECT_EQ(kLineNumber, |
224 process_data.descendants[0].child.location.line_number); | 229 process_data.descendants[0].child.location.line_number); |
225 EXPECT_EQ(kWorkerThreadName, process_data.descendants[0].child.thread_name); | 230 EXPECT_EQ(kWorkerThreadName, process_data.descendants[0].child.thread_name); |
226 } else { | 231 } else { |
227 EXPECT_EQ(0u, process_data.descendants.size()); | 232 EXPECT_EQ(0u, process_data.descendants.size()); |
228 } | 233 } |
229 } | 234 } |
230 | 235 |
231 TEST_F(TrackedObjectsTest, DeathDataTest) { | 236 TEST_F(TrackedObjectsTest, DeathDataTest) { |
232 if (!ThreadData::InitializeAndSetTrackingStatus( | 237 if (!ThreadData::InitializeAndSetTrackingStatus( |
233 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 238 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
234 return; | 239 return; |
| 240 } |
235 | 241 |
236 scoped_ptr<DeathData> data(new DeathData()); | 242 scoped_ptr<DeathData> data(new DeathData()); |
237 ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); | 243 ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); |
238 EXPECT_EQ(data->run_duration_sum(), 0); | 244 EXPECT_EQ(data->run_duration_sum(), 0); |
239 EXPECT_EQ(data->run_duration_sample(), 0); | 245 EXPECT_EQ(data->run_duration_sample(), 0); |
240 EXPECT_EQ(data->queue_duration_sum(), 0); | 246 EXPECT_EQ(data->queue_duration_sum(), 0); |
241 EXPECT_EQ(data->queue_duration_sample(), 0); | 247 EXPECT_EQ(data->queue_duration_sample(), 0); |
242 EXPECT_EQ(data->count(), 0); | 248 EXPECT_EQ(data->count(), 0); |
243 | 249 |
244 int32 run_ms = 42; | 250 int32 run_ms = 42; |
(...skipping 19 matching lines...) Expand all Loading... |
264 EXPECT_EQ(2 * run_ms, snapshot.run_duration_sum); | 270 EXPECT_EQ(2 * run_ms, snapshot.run_duration_sum); |
265 EXPECT_EQ(run_ms, snapshot.run_duration_max); | 271 EXPECT_EQ(run_ms, snapshot.run_duration_max); |
266 EXPECT_EQ(run_ms, snapshot.run_duration_sample); | 272 EXPECT_EQ(run_ms, snapshot.run_duration_sample); |
267 EXPECT_EQ(2 * queue_ms, snapshot.queue_duration_sum); | 273 EXPECT_EQ(2 * queue_ms, snapshot.queue_duration_sum); |
268 EXPECT_EQ(queue_ms, snapshot.queue_duration_max); | 274 EXPECT_EQ(queue_ms, snapshot.queue_duration_max); |
269 EXPECT_EQ(queue_ms, snapshot.queue_duration_sample); | 275 EXPECT_EQ(queue_ms, snapshot.queue_duration_sample); |
270 } | 276 } |
271 | 277 |
272 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotWorkerThread) { | 278 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotWorkerThread) { |
273 // Start in the deactivated state. | 279 // Start in the deactivated state. |
274 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) | 280 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) { |
275 return; | 281 return; |
| 282 } |
276 | 283 |
277 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotWorkerThread"; | 284 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotWorkerThread"; |
278 Location location(kFunction, kFile, kLineNumber, NULL); | 285 Location location(kFunction, kFile, kLineNumber, NULL); |
279 TallyABirth(location, std::string()); | 286 TallyABirth(location, std::string()); |
280 | 287 |
281 ProcessDataSnapshot process_data; | 288 ProcessDataSnapshot process_data; |
282 ThreadData::Snapshot(false, &process_data); | 289 ThreadData::Snapshot(false, &process_data); |
283 EXPECT_EQ(0u, process_data.tasks.size()); | 290 EXPECT_EQ(0u, process_data.tasks.size()); |
284 EXPECT_EQ(0u, process_data.descendants.size()); | 291 EXPECT_EQ(0u, process_data.descendants.size()); |
285 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 292 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
286 } | 293 } |
287 | 294 |
288 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotMainThread) { | 295 TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotMainThread) { |
289 // Start in the deactivated state. | 296 // Start in the deactivated state. |
290 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) | 297 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) { |
291 return; | 298 return; |
| 299 } |
292 | 300 |
293 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotMainThread"; | 301 const char kFunction[] = "DeactivatedBirthOnlyToSnapshotMainThread"; |
294 Location location(kFunction, kFile, kLineNumber, NULL); | 302 Location location(kFunction, kFile, kLineNumber, NULL); |
295 TallyABirth(location, kMainThreadName); | 303 TallyABirth(location, kMainThreadName); |
296 | 304 |
297 ProcessDataSnapshot process_data; | 305 ProcessDataSnapshot process_data; |
298 ThreadData::Snapshot(false, &process_data); | 306 ThreadData::Snapshot(false, &process_data); |
299 EXPECT_EQ(0u, process_data.tasks.size()); | 307 EXPECT_EQ(0u, process_data.tasks.size()); |
300 EXPECT_EQ(0u, process_data.descendants.size()); | 308 EXPECT_EQ(0u, process_data.descendants.size()); |
301 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 309 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
302 } | 310 } |
303 | 311 |
304 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotWorkerThread) { | 312 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotWorkerThread) { |
305 if (!ThreadData::InitializeAndSetTrackingStatus( | 313 if (!ThreadData::InitializeAndSetTrackingStatus( |
306 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 314 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
307 return; | 315 return; |
| 316 } |
308 | 317 |
309 const char kFunction[] = "BirthOnlyToSnapshotWorkerThread"; | 318 const char kFunction[] = "BirthOnlyToSnapshotWorkerThread"; |
310 Location location(kFunction, kFile, kLineNumber, NULL); | 319 Location location(kFunction, kFile, kLineNumber, NULL); |
311 TallyABirth(location, std::string()); | 320 TallyABirth(location, std::string()); |
312 | 321 |
313 ProcessDataSnapshot process_data; | 322 ProcessDataSnapshot process_data; |
314 ThreadData::Snapshot(false, &process_data); | 323 ThreadData::Snapshot(false, &process_data); |
315 ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName, | 324 ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName, |
316 kStillAlive, 1, 0, 0); | 325 kStillAlive, 1, 0, 0); |
317 } | 326 } |
318 | 327 |
319 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotMainThread) { | 328 TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotMainThread) { |
320 if (!ThreadData::InitializeAndSetTrackingStatus( | 329 if (!ThreadData::InitializeAndSetTrackingStatus( |
321 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 330 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
322 return; | 331 return; |
| 332 } |
323 | 333 |
324 const char kFunction[] = "BirthOnlyToSnapshotMainThread"; | 334 const char kFunction[] = "BirthOnlyToSnapshotMainThread"; |
325 Location location(kFunction, kFile, kLineNumber, NULL); | 335 Location location(kFunction, kFile, kLineNumber, NULL); |
326 TallyABirth(location, kMainThreadName); | 336 TallyABirth(location, kMainThreadName); |
327 | 337 |
328 ProcessDataSnapshot process_data; | 338 ProcessDataSnapshot process_data; |
329 ThreadData::Snapshot(false, &process_data); | 339 ThreadData::Snapshot(false, &process_data); |
330 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, kStillAlive, | 340 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, kStillAlive, |
331 1, 0, 0); | 341 1, 0, 0); |
332 } | 342 } |
333 | 343 |
334 TEST_F(TrackedObjectsTest, LifeCycleToSnapshotMainThread) { | 344 TEST_F(TrackedObjectsTest, LifeCycleToSnapshotMainThread) { |
335 if (!ThreadData::InitializeAndSetTrackingStatus( | 345 if (!ThreadData::InitializeAndSetTrackingStatus( |
336 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 346 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
337 return; | 347 return; |
| 348 } |
338 | 349 |
339 const char kFunction[] = "LifeCycleToSnapshotMainThread"; | 350 const char kFunction[] = "LifeCycleToSnapshotMainThread"; |
340 Location location(kFunction, kFile, kLineNumber, NULL); | 351 Location location(kFunction, kFile, kLineNumber, NULL); |
341 TallyABirth(location, kMainThreadName); | 352 TallyABirth(location, kMainThreadName); |
342 | 353 |
343 const base::TimeTicks kTimePosted = base::TimeTicks() + | 354 const base::TimeTicks kTimePosted = base::TimeTicks() + |
344 base::TimeDelta::FromMilliseconds(1); | 355 base::TimeDelta::FromMilliseconds(1); |
345 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 356 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
346 // TrackingInfo will call TallyABirth() during construction. | 357 // TrackingInfo will call TallyABirth() during construction. |
347 base::TrackingInfo pending_task(location, kDelayedStartTime); | 358 base::TrackingInfo pending_task(location, kDelayedStartTime); |
348 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 359 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
349 | 360 |
350 const TrackedTime kStartOfRun = TrackedTime() + | 361 const TrackedTime kStartOfRun = TrackedTime() + |
351 Duration::FromMilliseconds(5); | 362 Duration::FromMilliseconds(5); |
352 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); | 363 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); |
353 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, | 364 TaskStopwatch stopwatch; |
354 kStartOfRun, kEndOfRun); | 365 stopwatch.Start(kStartOfRun); |
| 366 stopwatch.Stop(kEndOfRun); |
| 367 |
| 368 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
355 | 369 |
356 ProcessDataSnapshot process_data; | 370 ProcessDataSnapshot process_data; |
357 ThreadData::Snapshot(false, &process_data); | 371 ThreadData::Snapshot(false, &process_data); |
358 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 372 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
359 kMainThreadName, 1, 2, 4); | 373 kMainThreadName, 1, 2, 4); |
360 } | 374 } |
361 | 375 |
362 // We will deactivate tracking after the birth, and before the death, and | 376 // We will deactivate tracking after the birth, and before the death, and |
363 // demonstrate that the lifecycle is completely tallied. This ensures that | 377 // demonstrate that the lifecycle is completely tallied. This ensures that |
364 // our tallied births are matched by tallied deaths (except for when the | 378 // our tallied births are matched by tallied deaths (except for when the |
365 // task is still running, or is queued). | 379 // task is still running, or is queued). |
366 TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToSnapshotMainThread) { | 380 TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToSnapshotMainThread) { |
367 if (!ThreadData::InitializeAndSetTrackingStatus( | 381 if (!ThreadData::InitializeAndSetTrackingStatus( |
368 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 382 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
369 return; | 383 return; |
| 384 } |
370 | 385 |
371 const char kFunction[] = "LifeCycleMidDeactivatedToSnapshotMainThread"; | 386 const char kFunction[] = "LifeCycleMidDeactivatedToSnapshotMainThread"; |
372 Location location(kFunction, kFile, kLineNumber, NULL); | 387 Location location(kFunction, kFile, kLineNumber, NULL); |
373 TallyABirth(location, kMainThreadName); | 388 TallyABirth(location, kMainThreadName); |
374 | 389 |
375 const base::TimeTicks kTimePosted = base::TimeTicks() + | 390 const base::TimeTicks kTimePosted = base::TimeTicks() + |
376 base::TimeDelta::FromMilliseconds(1); | 391 base::TimeDelta::FromMilliseconds(1); |
377 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 392 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
378 // TrackingInfo will call TallyABirth() during construction. | 393 // TrackingInfo will call TallyABirth() during construction. |
379 base::TrackingInfo pending_task(location, kDelayedStartTime); | 394 base::TrackingInfo pending_task(location, kDelayedStartTime); |
380 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 395 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
381 | 396 |
382 // Turn off tracking now that we have births. | 397 // Turn off tracking now that we have births. |
383 EXPECT_TRUE(ThreadData::InitializeAndSetTrackingStatus( | 398 EXPECT_TRUE(ThreadData::InitializeAndSetTrackingStatus( |
384 ThreadData::DEACTIVATED)); | 399 ThreadData::DEACTIVATED)); |
385 | 400 |
386 const TrackedTime kStartOfRun = TrackedTime() + | 401 const TrackedTime kStartOfRun = TrackedTime() + |
387 Duration::FromMilliseconds(5); | 402 Duration::FromMilliseconds(5); |
388 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); | 403 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); |
389 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, | 404 TaskStopwatch stopwatch; |
390 kStartOfRun, kEndOfRun); | 405 stopwatch.Start(kStartOfRun); |
| 406 stopwatch.Stop(kEndOfRun); |
| 407 |
| 408 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
391 | 409 |
392 ProcessDataSnapshot process_data; | 410 ProcessDataSnapshot process_data; |
393 ThreadData::Snapshot(false, &process_data); | 411 ThreadData::Snapshot(false, &process_data); |
394 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 412 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
395 kMainThreadName, 1, 2, 4); | 413 kMainThreadName, 1, 2, 4); |
396 } | 414 } |
397 | 415 |
398 // We will deactivate tracking before starting a life cycle, and neither | 416 // We will deactivate tracking before starting a life cycle, and neither |
399 // the birth nor the death will be recorded. | 417 // the birth nor the death will be recorded. |
400 TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToSnapshotMainThread) { | 418 TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToSnapshotMainThread) { |
401 // Start in the deactivated state. | 419 // Start in the deactivated state. |
402 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) | 420 if (!ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED)) { |
403 return; | 421 return; |
| 422 } |
404 | 423 |
405 const char kFunction[] = "LifeCyclePreDeactivatedToSnapshotMainThread"; | 424 const char kFunction[] = "LifeCyclePreDeactivatedToSnapshotMainThread"; |
406 Location location(kFunction, kFile, kLineNumber, NULL); | 425 Location location(kFunction, kFile, kLineNumber, NULL); |
407 TallyABirth(location, kMainThreadName); | 426 TallyABirth(location, kMainThreadName); |
408 | 427 |
409 const base::TimeTicks kTimePosted = base::TimeTicks() + | 428 const base::TimeTicks kTimePosted = base::TimeTicks() + |
410 base::TimeDelta::FromMilliseconds(1); | 429 base::TimeDelta::FromMilliseconds(1); |
411 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 430 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
412 // TrackingInfo will call TallyABirth() during construction. | 431 // TrackingInfo will call TallyABirth() during construction. |
413 base::TrackingInfo pending_task(location, kDelayedStartTime); | 432 base::TrackingInfo pending_task(location, kDelayedStartTime); |
414 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 433 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
415 | 434 |
416 const TrackedTime kStartOfRun = TrackedTime() + | 435 const TrackedTime kStartOfRun = TrackedTime() + |
417 Duration::FromMilliseconds(5); | 436 Duration::FromMilliseconds(5); |
418 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); | 437 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); |
419 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, | 438 TaskStopwatch stopwatch; |
420 kStartOfRun, kEndOfRun); | 439 stopwatch.Start(kStartOfRun); |
| 440 stopwatch.Stop(kEndOfRun); |
| 441 |
| 442 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
421 | 443 |
422 ProcessDataSnapshot process_data; | 444 ProcessDataSnapshot process_data; |
423 ThreadData::Snapshot(false, &process_data); | 445 ThreadData::Snapshot(false, &process_data); |
424 EXPECT_EQ(0u, process_data.tasks.size()); | 446 EXPECT_EQ(0u, process_data.tasks.size()); |
425 EXPECT_EQ(0u, process_data.descendants.size()); | 447 EXPECT_EQ(0u, process_data.descendants.size()); |
426 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 448 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
427 } | 449 } |
428 | 450 |
429 TEST_F(TrackedObjectsTest, LifeCycleToSnapshotWorkerThread) { | 451 TEST_F(TrackedObjectsTest, LifeCycleToSnapshotWorkerThread) { |
430 if (!ThreadData::InitializeAndSetTrackingStatus( | 452 if (!ThreadData::InitializeAndSetTrackingStatus( |
431 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 453 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
432 return; | 454 return; |
| 455 } |
433 | 456 |
434 const char kFunction[] = "LifeCycleToSnapshotWorkerThread"; | 457 const char kFunction[] = "LifeCycleToSnapshotWorkerThread"; |
435 Location location(kFunction, kFile, kLineNumber, NULL); | 458 Location location(kFunction, kFile, kLineNumber, NULL); |
436 // Do not delete |birth|. We don't own it. | 459 // Do not delete |birth|. We don't own it. |
437 Births* birth = ThreadData::TallyABirthIfActive(location); | 460 Births* birth = ThreadData::TallyABirthIfActive(location); |
438 EXPECT_NE(reinterpret_cast<Births*>(NULL), birth); | 461 EXPECT_NE(reinterpret_cast<Births*>(NULL), birth); |
439 | 462 |
440 const TrackedTime kTimePosted = TrackedTime() + Duration::FromMilliseconds(1); | 463 const TrackedTime kTimePosted = TrackedTime() + Duration::FromMilliseconds(1); |
441 const TrackedTime kStartOfRun = TrackedTime() + | 464 const TrackedTime kStartOfRun = TrackedTime() + |
442 Duration::FromMilliseconds(5); | 465 Duration::FromMilliseconds(5); |
443 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); | 466 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); |
444 ThreadData::TallyRunOnWorkerThreadIfTracking(birth, kTimePosted, | 467 TaskStopwatch stopwatch; |
445 kStartOfRun, kEndOfRun); | 468 stopwatch.Start(kStartOfRun); |
| 469 stopwatch.Stop(kEndOfRun); |
| 470 |
| 471 ThreadData::TallyRunOnWorkerThreadIfTracking(birth, kTimePosted, stopwatch); |
446 | 472 |
447 // Call for the ToSnapshot, but tell it to not reset the maxes after scanning. | 473 // Call for the ToSnapshot, but tell it to not reset the maxes after scanning. |
448 ProcessDataSnapshot process_data; | 474 ProcessDataSnapshot process_data; |
449 ThreadData::Snapshot(false, &process_data); | 475 ThreadData::Snapshot(false, &process_data); |
450 ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName, | 476 ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName, |
451 kWorkerThreadName, 1, 2, 4); | 477 kWorkerThreadName, 1, 2, 4); |
452 | 478 |
453 // Call for the ToSnapshot, but tell it to reset the maxes after scanning. | 479 // Call for the ToSnapshot, but tell it to reset the maxes after scanning. |
454 // We'll still get the same values, but the data will be reset (which we'll | 480 // We'll still get the same values, but the data will be reset (which we'll |
455 // see in a moment). | 481 // see in a moment). |
(...skipping 23 matching lines...) Expand all Loading... |
479 EXPECT_EQ(4, | 505 EXPECT_EQ(4, |
480 process_data_post_reset.tasks[0].death_data.queue_duration_sample); | 506 process_data_post_reset.tasks[0].death_data.queue_duration_sample); |
481 EXPECT_EQ(kWorkerThreadName, | 507 EXPECT_EQ(kWorkerThreadName, |
482 process_data_post_reset.tasks[0].death_thread_name); | 508 process_data_post_reset.tasks[0].death_thread_name); |
483 EXPECT_EQ(0u, process_data_post_reset.descendants.size()); | 509 EXPECT_EQ(0u, process_data_post_reset.descendants.size()); |
484 EXPECT_EQ(base::GetCurrentProcId(), process_data_post_reset.process_id); | 510 EXPECT_EQ(base::GetCurrentProcId(), process_data_post_reset.process_id); |
485 } | 511 } |
486 | 512 |
487 TEST_F(TrackedObjectsTest, TwoLives) { | 513 TEST_F(TrackedObjectsTest, TwoLives) { |
488 if (!ThreadData::InitializeAndSetTrackingStatus( | 514 if (!ThreadData::InitializeAndSetTrackingStatus( |
489 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 515 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
490 return; | 516 return; |
| 517 } |
491 | 518 |
492 const char kFunction[] = "TwoLives"; | 519 const char kFunction[] = "TwoLives"; |
493 Location location(kFunction, kFile, kLineNumber, NULL); | 520 Location location(kFunction, kFile, kLineNumber, NULL); |
494 TallyABirth(location, kMainThreadName); | 521 TallyABirth(location, kMainThreadName); |
495 | 522 |
496 const base::TimeTicks kTimePosted = base::TimeTicks() + | 523 const base::TimeTicks kTimePosted = base::TimeTicks() + |
497 base::TimeDelta::FromMilliseconds(1); | 524 base::TimeDelta::FromMilliseconds(1); |
498 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 525 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
499 // TrackingInfo will call TallyABirth() during construction. | 526 // TrackingInfo will call TallyABirth() during construction. |
500 base::TrackingInfo pending_task(location, kDelayedStartTime); | 527 base::TrackingInfo pending_task(location, kDelayedStartTime); |
501 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 528 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
502 | 529 |
503 const TrackedTime kStartOfRun = TrackedTime() + | 530 const TrackedTime kStartOfRun = TrackedTime() + |
504 Duration::FromMilliseconds(5); | 531 Duration::FromMilliseconds(5); |
505 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); | 532 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); |
506 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, | 533 TaskStopwatch stopwatch; |
507 kStartOfRun, kEndOfRun); | 534 stopwatch.Start(kStartOfRun); |
| 535 stopwatch.Stop(kEndOfRun); |
| 536 |
| 537 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
508 | 538 |
509 // TrackingInfo will call TallyABirth() during construction. | 539 // TrackingInfo will call TallyABirth() during construction. |
510 base::TrackingInfo pending_task2(location, kDelayedStartTime); | 540 base::TrackingInfo pending_task2(location, kDelayedStartTime); |
511 pending_task2.time_posted = kTimePosted; // Overwrite implied Now(). | 541 pending_task2.time_posted = kTimePosted; // Overwrite implied Now(). |
| 542 stopwatch.Start(kStartOfRun); |
| 543 stopwatch.Stop(kEndOfRun); |
512 | 544 |
513 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2, | 545 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2, stopwatch); |
514 kStartOfRun, kEndOfRun); | |
515 | 546 |
516 ProcessDataSnapshot process_data; | 547 ProcessDataSnapshot process_data; |
517 ThreadData::Snapshot(false, &process_data); | 548 ThreadData::Snapshot(false, &process_data); |
518 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, | 549 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
519 kMainThreadName, 2, 2, 4); | 550 kMainThreadName, 2, 2, 4); |
520 } | 551 } |
521 | 552 |
522 TEST_F(TrackedObjectsTest, DifferentLives) { | 553 TEST_F(TrackedObjectsTest, DifferentLives) { |
523 if (!ThreadData::InitializeAndSetTrackingStatus( | 554 if (!ThreadData::InitializeAndSetTrackingStatus( |
524 ThreadData::PROFILING_CHILDREN_ACTIVE)) | 555 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
525 return; | 556 return; |
| 557 } |
526 | 558 |
527 // Use a well named thread. | 559 // Use a well named thread. |
528 ThreadData::InitializeThreadContext(kMainThreadName); | 560 ThreadData::InitializeThreadContext(kMainThreadName); |
529 const char kFunction[] = "DifferentLives"; | 561 const char kFunction[] = "DifferentLives"; |
530 Location location(kFunction, kFile, kLineNumber, NULL); | 562 Location location(kFunction, kFile, kLineNumber, NULL); |
531 | 563 |
532 const base::TimeTicks kTimePosted = base::TimeTicks() + | 564 const base::TimeTicks kTimePosted = base::TimeTicks() + |
533 base::TimeDelta::FromMilliseconds(1); | 565 base::TimeDelta::FromMilliseconds(1); |
534 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); | 566 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
535 // TrackingInfo will call TallyABirth() during construction. | 567 // TrackingInfo will call TallyABirth() during construction. |
536 base::TrackingInfo pending_task(location, kDelayedStartTime); | 568 base::TrackingInfo pending_task(location, kDelayedStartTime); |
537 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). | 569 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
538 | 570 |
539 const TrackedTime kStartOfRun = TrackedTime() + | 571 const TrackedTime kStartOfRun = TrackedTime() + |
540 Duration::FromMilliseconds(5); | 572 Duration::FromMilliseconds(5); |
541 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); | 573 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7); |
542 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, | 574 TaskStopwatch stopwatch; |
543 kStartOfRun, kEndOfRun); | 575 stopwatch.Start(kStartOfRun); |
| 576 stopwatch.Stop(kEndOfRun); |
| 577 |
| 578 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch); |
544 | 579 |
545 const int kSecondFakeLineNumber = 999; | 580 const int kSecondFakeLineNumber = 999; |
546 Location second_location(kFunction, kFile, kSecondFakeLineNumber, NULL); | 581 Location second_location(kFunction, kFile, kSecondFakeLineNumber, NULL); |
547 | 582 |
548 // TrackingInfo will call TallyABirth() during construction. | 583 // TrackingInfo will call TallyABirth() during construction. |
549 base::TrackingInfo pending_task2(second_location, kDelayedStartTime); | 584 base::TrackingInfo pending_task2(second_location, kDelayedStartTime); |
550 pending_task2.time_posted = kTimePosted; // Overwrite implied Now(). | 585 pending_task2.time_posted = kTimePosted; // Overwrite implied Now(). |
551 | 586 |
552 ProcessDataSnapshot process_data; | 587 ProcessDataSnapshot process_data; |
553 ThreadData::Snapshot(false, &process_data); | 588 ThreadData::Snapshot(false, &process_data); |
(...skipping 20 matching lines...) Expand all Loading... |
574 EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_max); | 609 EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_max); |
575 EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_sample); | 610 EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_sample); |
576 EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_sum); | 611 EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_sum); |
577 EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_max); | 612 EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_max); |
578 EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_sample); | 613 EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_sample); |
579 EXPECT_EQ(kStillAlive, process_data.tasks[1].death_thread_name); | 614 EXPECT_EQ(kStillAlive, process_data.tasks[1].death_thread_name); |
580 EXPECT_EQ(0u, process_data.descendants.size()); | 615 EXPECT_EQ(0u, process_data.descendants.size()); |
581 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); | 616 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
582 } | 617 } |
583 | 618 |
| 619 TEST_F(TrackedObjectsTest, TaskWithNestedExclusion) { |
| 620 if (!ThreadData::InitializeAndSetTrackingStatus( |
| 621 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
| 622 return; |
| 623 } |
| 624 |
| 625 const char kFunction[] = "TaskWithNestedExclusion"; |
| 626 Location location(kFunction, kFile, kLineNumber, NULL); |
| 627 TallyABirth(location, kMainThreadName); |
| 628 |
| 629 const base::TimeTicks kTimePosted = base::TimeTicks() + |
| 630 base::TimeDelta::FromMilliseconds(1); |
| 631 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
| 632 // TrackingInfo will call TallyABirth() during construction. |
| 633 base::TrackingInfo pending_task(location, kDelayedStartTime); |
| 634 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
| 635 |
| 636 const TrackedTime kStartOfRun = TrackedTime() + |
| 637 Duration::FromMilliseconds(5); |
| 638 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(15); |
| 639 TaskStopwatch task_stopwatch; |
| 640 task_stopwatch.Start(kStartOfRun); |
| 641 { |
| 642 TaskStopwatch exclusion_stopwatch; |
| 643 exclusion_stopwatch.Start(TrackedTime() + Duration::FromMilliseconds(8)); |
| 644 exclusion_stopwatch.Stop(TrackedTime() + Duration::FromMilliseconds(12)); |
| 645 } |
| 646 task_stopwatch.Stop(kEndOfRun); |
| 647 |
| 648 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); |
| 649 |
| 650 ProcessDataSnapshot process_data; |
| 651 ThreadData::Snapshot(false, &process_data); |
| 652 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
| 653 kMainThreadName, 1, 6, 4); |
| 654 } |
| 655 |
| 656 TEST_F(TrackedObjectsTest, TaskWith2NestedExclusions) { |
| 657 if (!ThreadData::InitializeAndSetTrackingStatus( |
| 658 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
| 659 return; |
| 660 } |
| 661 |
| 662 const char kFunction[] = "TaskWith2NestedExclusions"; |
| 663 Location location(kFunction, kFile, kLineNumber, NULL); |
| 664 TallyABirth(location, kMainThreadName); |
| 665 |
| 666 const base::TimeTicks kTimePosted = base::TimeTicks() + |
| 667 base::TimeDelta::FromMilliseconds(1); |
| 668 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
| 669 // TrackingInfo will call TallyABirth() during construction. |
| 670 base::TrackingInfo pending_task(location, kDelayedStartTime); |
| 671 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
| 672 |
| 673 const TrackedTime kStartOfRun = TrackedTime() + |
| 674 Duration::FromMilliseconds(5); |
| 675 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(25); |
| 676 TaskStopwatch task_stopwatch; |
| 677 task_stopwatch.Start(kStartOfRun); |
| 678 { |
| 679 TaskStopwatch exclusion_stopwatch; |
| 680 exclusion_stopwatch.Start(TrackedTime() + Duration::FromMilliseconds(8)); |
| 681 exclusion_stopwatch.Stop(TrackedTime() + Duration::FromMilliseconds(12)); |
| 682 |
| 683 exclusion_stopwatch.Start(TrackedTime() + Duration::FromMilliseconds(15)); |
| 684 exclusion_stopwatch.Stop(TrackedTime() + Duration::FromMilliseconds(18)); |
| 685 } |
| 686 task_stopwatch.Stop(kEndOfRun); |
| 687 |
| 688 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); |
| 689 |
| 690 ProcessDataSnapshot process_data; |
| 691 ThreadData::Snapshot(false, &process_data); |
| 692 ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, |
| 693 kMainThreadName, 1, 13, 4); |
| 694 } |
| 695 |
| 696 TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) { |
| 697 if (!ThreadData::InitializeAndSetTrackingStatus( |
| 698 ThreadData::PROFILING_CHILDREN_ACTIVE)) { |
| 699 return; |
| 700 } |
| 701 |
| 702 const char kFunction[] = "TaskWithNestedExclusionWithNestedTask"; |
| 703 Location location(kFunction, kFile, kLineNumber, NULL); |
| 704 |
| 705 const int kSecondFakeLineNumber = 999; |
| 706 |
| 707 TallyABirth(location, kMainThreadName); |
| 708 |
| 709 const base::TimeTicks kTimePosted = base::TimeTicks() + |
| 710 base::TimeDelta::FromMilliseconds(1); |
| 711 const base::TimeTicks kDelayedStartTime = base::TimeTicks(); |
| 712 // TrackingInfo will call TallyABirth() during construction. |
| 713 base::TrackingInfo pending_task(location, kDelayedStartTime); |
| 714 pending_task.time_posted = kTimePosted; // Overwrite implied Now(). |
| 715 |
| 716 const TrackedTime kStartOfRun = TrackedTime() + |
| 717 Duration::FromMilliseconds(5); |
| 718 const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(15); |
| 719 TaskStopwatch task_stopwatch; |
| 720 task_stopwatch.Start(kStartOfRun); |
| 721 { |
| 722 TaskStopwatch exclusion_stopwatch; |
| 723 exclusion_stopwatch.Start(TrackedTime() + Duration::FromMilliseconds(8)); |
| 724 { |
| 725 Location second_location(kFunction, kFile, kSecondFakeLineNumber, NULL); |
| 726 base::TrackingInfo nested_task(second_location, kDelayedStartTime); |
| 727 // Overwrite implied Now(). |
| 728 nested_task.time_posted = |
| 729 base::TimeTicks() + base::TimeDelta::FromMilliseconds(8); |
| 730 TaskStopwatch nested_task_stopwatch; |
| 731 nested_task_stopwatch.Start( |
| 732 TrackedTime() + Duration::FromMilliseconds(9)); |
| 733 nested_task_stopwatch.Stop( |
| 734 TrackedTime() + Duration::FromMilliseconds(11)); |
| 735 ThreadData::TallyRunOnNamedThreadIfTracking( |
| 736 nested_task, nested_task_stopwatch); |
| 737 } |
| 738 exclusion_stopwatch.Stop(TrackedTime() + Duration::FromMilliseconds(12)); |
| 739 } |
| 740 task_stopwatch.Stop(kEndOfRun); |
| 741 |
| 742 ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch); |
| 743 |
| 744 ProcessDataSnapshot process_data; |
| 745 ThreadData::Snapshot(false, &process_data); |
| 746 ASSERT_EQ(2u, process_data.tasks.size()); |
| 747 EXPECT_EQ(kFile, process_data.tasks[0].birth.location.file_name); |
| 748 EXPECT_EQ(kFunction, process_data.tasks[0].birth.location.function_name); |
| 749 EXPECT_EQ(kLineNumber, process_data.tasks[0].birth.location.line_number); |
| 750 EXPECT_EQ(kMainThreadName, process_data.tasks[0].birth.thread_name); |
| 751 EXPECT_EQ(1, process_data.tasks[0].death_data.count); |
| 752 EXPECT_EQ(6, process_data.tasks[0].death_data.run_duration_sum); |
| 753 EXPECT_EQ(6, process_data.tasks[0].death_data.run_duration_max); |
| 754 EXPECT_EQ(6, process_data.tasks[0].death_data.run_duration_sample); |
| 755 EXPECT_EQ(4, process_data.tasks[0].death_data.queue_duration_sum); |
| 756 EXPECT_EQ(4, process_data.tasks[0].death_data.queue_duration_max); |
| 757 EXPECT_EQ(4, process_data.tasks[0].death_data.queue_duration_sample); |
| 758 EXPECT_EQ(kMainThreadName, process_data.tasks[0].death_thread_name); |
| 759 EXPECT_EQ(kFile, process_data.tasks[1].birth.location.file_name); |
| 760 EXPECT_EQ(kFunction, process_data.tasks[1].birth.location.function_name); |
| 761 EXPECT_EQ(kSecondFakeLineNumber, |
| 762 process_data.tasks[1].birth.location.line_number); |
| 763 EXPECT_EQ(kMainThreadName, process_data.tasks[1].birth.thread_name); |
| 764 EXPECT_EQ(1, process_data.tasks[1].death_data.count); |
| 765 EXPECT_EQ(2, process_data.tasks[1].death_data.run_duration_sum); |
| 766 EXPECT_EQ(2, process_data.tasks[1].death_data.run_duration_max); |
| 767 EXPECT_EQ(2, process_data.tasks[1].death_data.run_duration_sample); |
| 768 EXPECT_EQ(1, process_data.tasks[1].death_data.queue_duration_sum); |
| 769 EXPECT_EQ(1, process_data.tasks[1].death_data.queue_duration_max); |
| 770 EXPECT_EQ(1, process_data.tasks[1].death_data.queue_duration_sample); |
| 771 EXPECT_EQ(kMainThreadName, process_data.tasks[1].death_thread_name); |
| 772 EXPECT_EQ(0u, process_data.descendants.size()); |
| 773 EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id); |
| 774 } |
| 775 |
584 } // namespace tracked_objects | 776 } // namespace tracked_objects |
OLD | NEW |