| Index: base/tracked_objects_unittest.cc
|
| diff --git a/base/tracked_objects_unittest.cc b/base/tracked_objects_unittest.cc
|
| index 77130912420722fc21e3411f58a26fa5d041beab..3960db2f93b230194f63757810349122206c7118 100644
|
| --- a/base/tracked_objects_unittest.cc
|
| +++ b/base/tracked_objects_unittest.cc
|
| @@ -71,28 +71,38 @@ class TrackedObjectsTest : public testing::Test {
|
| int count,
|
| int run_ms,
|
| int queue_ms) {
|
| - ASSERT_EQ(1u, process_data.tasks.size());
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
|
|
| - EXPECT_EQ(kFile, process_data.tasks[0].birth.location.file_name);
|
| + ASSERT_EQ(1u, process_data_phase.tasks.size());
|
| +
|
| + EXPECT_EQ(kFile, process_data_phase.tasks[0].birth.location.file_name);
|
| EXPECT_EQ(function_name,
|
| - process_data.tasks[0].birth.location.function_name);
|
| - EXPECT_EQ(kLineNumber, process_data.tasks[0].birth.location.line_number);
|
| + process_data_phase.tasks[0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase.tasks[0].birth.location.line_number);
|
|
|
| - EXPECT_EQ(birth_thread, process_data.tasks[0].birth.thread_name);
|
| + EXPECT_EQ(birth_thread, process_data_phase.tasks[0].birth.thread_name);
|
|
|
| - EXPECT_EQ(count, process_data.tasks[0].death_data.count);
|
| + EXPECT_EQ(count, process_data_phase.tasks[0].death_data.count);
|
| EXPECT_EQ(count * run_ms,
|
| - process_data.tasks[0].death_data.run_duration_sum);
|
| - EXPECT_EQ(run_ms, process_data.tasks[0].death_data.run_duration_max);
|
| - EXPECT_EQ(run_ms, process_data.tasks[0].death_data.run_duration_sample);
|
| + process_data_phase.tasks[0].death_data.run_duration_sum);
|
| + EXPECT_EQ(run_ms, process_data_phase.tasks[0].death_data.run_duration_max);
|
| + EXPECT_EQ(run_ms,
|
| + process_data_phase.tasks[0].death_data.run_duration_sample);
|
| EXPECT_EQ(count * queue_ms,
|
| - process_data.tasks[0].death_data.queue_duration_sum);
|
| - EXPECT_EQ(queue_ms, process_data.tasks[0].death_data.queue_duration_max);
|
| - EXPECT_EQ(queue_ms, process_data.tasks[0].death_data.queue_duration_sample);
|
| + process_data_phase.tasks[0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(queue_ms,
|
| + process_data_phase.tasks[0].death_data.queue_duration_max);
|
| + EXPECT_EQ(queue_ms,
|
| + process_data_phase.tasks[0].death_data.queue_duration_sample);
|
|
|
| - EXPECT_EQ(death_thread, process_data.tasks[0].death_thread_name);
|
| + EXPECT_EQ(death_thread, process_data_phase.tasks[0].death_thread_name);
|
|
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
|
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
| @@ -138,7 +148,7 @@ TEST_F(TrackedObjectsTest, MinimalStartupShutdown) {
|
| ThreadData::BirthMap birth_map;
|
| ThreadData::DeathMap death_map;
|
| ThreadData::ParentChildSet parent_child_set;
|
| - data->SnapshotMaps(&birth_map, &death_map, &parent_child_set);
|
| + data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set);
|
| EXPECT_EQ(0u, birth_map.size());
|
| EXPECT_EQ(0u, death_map.size());
|
| EXPECT_EQ(0u, parent_child_set.size());
|
| @@ -158,7 +168,7 @@ TEST_F(TrackedObjectsTest, MinimalStartupShutdown) {
|
| birth_map.clear();
|
| death_map.clear();
|
| parent_child_set.clear();
|
| - data->SnapshotMaps(&birth_map, &death_map, &parent_child_set);
|
| + data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set);
|
| EXPECT_EQ(0u, birth_map.size());
|
| EXPECT_EQ(0u, death_map.size());
|
| EXPECT_EQ(0u, parent_child_set.size());
|
| @@ -182,7 +192,7 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
|
| ThreadData::BirthMap birth_map;
|
| ThreadData::DeathMap death_map;
|
| ThreadData::ParentChildSet parent_child_set;
|
| - data->SnapshotMaps(&birth_map, &death_map, &parent_child_set);
|
| + data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set);
|
| EXPECT_EQ(1u, birth_map.size()); // 1 birth location.
|
| EXPECT_EQ(1, birth_map.begin()->second->birth_count()); // 1 birth.
|
| EXPECT_EQ(0u, death_map.size()); // No deaths.
|
| @@ -211,7 +221,7 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
|
| birth_map.clear();
|
| death_map.clear();
|
| parent_child_set.clear();
|
| - data->SnapshotMaps(&birth_map, &death_map, &parent_child_set);
|
| + data->SnapshotMaps(false, &birth_map, &death_map, &parent_child_set);
|
| EXPECT_EQ(1u, birth_map.size()); // 1 birth location.
|
| EXPECT_EQ(2, birth_map.begin()->second->birth_count()); // 2 births.
|
| EXPECT_EQ(1u, death_map.size()); // 1 location.
|
| @@ -228,39 +238,52 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
|
| EXPECT_EQ(birth_map.begin()->second, death_map.begin()->first);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| -
|
| - ASSERT_EQ(1u, process_data.tasks.size());
|
| - EXPECT_EQ(kFile, process_data.tasks[0].birth.location.file_name);
|
| - EXPECT_EQ(kFunction, process_data.tasks[0].birth.location.function_name);
|
| - EXPECT_EQ(kLineNumber, process_data.tasks[0].birth.location.line_number);
|
| - EXPECT_EQ(kWorkerThreadName, process_data.tasks[0].birth.thread_name);
|
| - EXPECT_EQ(1, process_data.tasks[0].death_data.count);
|
| - EXPECT_EQ(time_elapsed, process_data.tasks[0].death_data.run_duration_sum);
|
| - EXPECT_EQ(time_elapsed, process_data.tasks[0].death_data.run_duration_max);
|
| - EXPECT_EQ(time_elapsed, process_data.tasks[0].death_data.run_duration_sample);
|
| - EXPECT_EQ(0, process_data.tasks[0].death_data.queue_duration_sum);
|
| - EXPECT_EQ(0, process_data.tasks[0].death_data.queue_duration_max);
|
| - EXPECT_EQ(0, process_data.tasks[0].death_data.queue_duration_sample);
|
| - EXPECT_EQ(kWorkerThreadName, process_data.tasks[0].death_thread_name);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| +
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
| + ASSERT_EQ(1u, process_data_phase.tasks.size());
|
| + EXPECT_EQ(kFile, process_data_phase.tasks[0].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase.tasks[0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase.tasks[0].birth.location.line_number);
|
| + EXPECT_EQ(kWorkerThreadName, process_data_phase.tasks[0].birth.thread_name);
|
| + EXPECT_EQ(1, process_data_phase.tasks[0].death_data.count);
|
| + EXPECT_EQ(time_elapsed,
|
| + process_data_phase.tasks[0].death_data.run_duration_sum);
|
| + EXPECT_EQ(time_elapsed,
|
| + process_data_phase.tasks[0].death_data.run_duration_max);
|
| + EXPECT_EQ(time_elapsed,
|
| + process_data_phase.tasks[0].death_data.run_duration_sample);
|
| + EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_max);
|
| + EXPECT_EQ(0, process_data_phase.tasks[0].death_data.queue_duration_sample);
|
| + EXPECT_EQ(kWorkerThreadName, process_data_phase.tasks[0].death_thread_name);
|
|
|
| if (ThreadData::TrackingParentChildStatus()) {
|
| - ASSERT_EQ(1u, process_data.descendants.size());
|
| - EXPECT_EQ(kFile, process_data.descendants[0].parent.location.file_name);
|
| + ASSERT_EQ(1u, process_data_phase.descendants.size());
|
| + EXPECT_EQ(kFile,
|
| + process_data_phase.descendants[0].parent.location.file_name);
|
| EXPECT_EQ(kFunction,
|
| - process_data.descendants[0].parent.location.function_name);
|
| + process_data_phase.descendants[0].parent.location.function_name);
|
| EXPECT_EQ(kLineNumber,
|
| - process_data.descendants[0].parent.location.line_number);
|
| + process_data_phase.descendants[0].parent.location.line_number);
|
| EXPECT_EQ(kWorkerThreadName,
|
| - process_data.descendants[0].parent.thread_name);
|
| - EXPECT_EQ(kFile, process_data.descendants[0].child.location.file_name);
|
| + process_data_phase.descendants[0].parent.thread_name);
|
| + EXPECT_EQ(kFile,
|
| + process_data_phase.descendants[0].child.location.file_name);
|
| EXPECT_EQ(kFunction,
|
| - process_data.descendants[0].child.location.function_name);
|
| + process_data_phase.descendants[0].child.location.function_name);
|
| EXPECT_EQ(kLineNumber,
|
| - process_data.descendants[0].child.location.line_number);
|
| - EXPECT_EQ(kWorkerThreadName, process_data.descendants[0].child.thread_name);
|
| + process_data_phase.descendants[0].child.location.line_number);
|
| + EXPECT_EQ(kWorkerThreadName,
|
| + process_data_phase.descendants[0].child.thread_name);
|
| } else {
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
| }
|
| }
|
|
|
| @@ -317,9 +340,16 @@ TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotWorkerThread) {
|
| TallyABirth(location, std::string());
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| - EXPECT_EQ(0u, process_data.tasks.size());
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| +
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
| +
|
| + EXPECT_EQ(0u, process_data_phase.tasks.size());
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
| @@ -334,9 +364,16 @@ TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToSnapshotMainThread) {
|
| TallyABirth(location, kMainThreadName);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| - EXPECT_EQ(0u, process_data.tasks.size());
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| +
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
| +
|
| + EXPECT_EQ(0u, process_data_phase.tasks.size());
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
| @@ -351,7 +388,7 @@ TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotWorkerThread) {
|
| TallyABirth(location, std::string());
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kWorkerThreadName,
|
| kStillAlive, 1, 0, 0);
|
| }
|
| @@ -367,7 +404,7 @@ TEST_F(TrackedObjectsTest, BirthOnlyToSnapshotMainThread) {
|
| TallyABirth(location, kMainThreadName);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kMainThreadName, kStillAlive,
|
| 1, 0, 0);
|
| }
|
| @@ -399,11 +436,191 @@ TEST_F(TrackedObjectsTest, LifeCycleToSnapshotMainThread) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kMainThreadName,
|
| kMainThreadName, 1, 2, 4);
|
| }
|
|
|
| +TEST_F(TrackedObjectsTest, TwoPhases) {
|
| + if (!ThreadData::InitializeAndSetTrackingStatus(
|
| + ThreadData::PROFILING_CHILDREN_ACTIVE)) {
|
| + return;
|
| + }
|
| +
|
| + const char kFunction[] = "TwoPhases";
|
| + Location location(kFunction, kFile, kLineNumber, NULL);
|
| + TallyABirth(location, kMainThreadName);
|
| +
|
| + const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1);
|
| + const base::TimeTicks kDelayedStartTime = base::TimeTicks();
|
| + // TrackingInfo will call TallyABirth() during construction.
|
| + base::TrackingInfo pending_task(location, kDelayedStartTime);
|
| + pending_task.time_posted = kTimePosted; // Overwrite implied Now().
|
| +
|
| + const unsigned int kStartOfRun = 5;
|
| + const unsigned int kEndOfRun = 7;
|
| + SetTestTime(kStartOfRun);
|
| + TaskStopwatch stopwatch;
|
| + stopwatch.Start();
|
| + SetTestTime(kEndOfRun);
|
| + stopwatch.Stop();
|
| +
|
| + ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch);
|
| +
|
| + ThreadData::OnProfilingPhaseCompletion(0);
|
| +
|
| + TallyABirth(location, kMainThreadName);
|
| +
|
| + const TrackedTime kTimePosted1 = TrackedTime::FromMilliseconds(9);
|
| + const base::TimeTicks kDelayedStartTime1 = base::TimeTicks();
|
| + // TrackingInfo will call TallyABirth() during construction.
|
| + base::TrackingInfo pending_task1(location, kDelayedStartTime1);
|
| + pending_task1.time_posted = kTimePosted1; // Overwrite implied Now().
|
| +
|
| + const unsigned int kStartOfRun1 = 11;
|
| + const unsigned int kEndOfRun1 = 21;
|
| + SetTestTime(kStartOfRun1);
|
| + TaskStopwatch stopwatch1;
|
| + stopwatch1.Start();
|
| + SetTestTime(kEndOfRun1);
|
| + stopwatch1.Stop();
|
| +
|
| + ThreadData::TallyRunOnNamedThreadIfTracking(pending_task1, stopwatch1);
|
| +
|
| + ProcessDataSnapshot process_data;
|
| + ThreadData::GetProcessDataSnapshot(1, &process_data);
|
| +
|
| + ASSERT_EQ(2, process_data.phased_process_data_snapshots.size());
|
| +
|
| + const PhasedProcessDataSnapshots::const_iterator it0 =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it0 != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase0 = it0->second;
|
| +
|
| + ASSERT_EQ(1u, process_data_phase0.tasks.size());
|
| +
|
| + EXPECT_EQ(kFile, process_data_phase0.tasks[0].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase0.tasks[0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase0.tasks[0].birth.location.line_number);
|
| +
|
| + EXPECT_EQ(kMainThreadName, process_data_phase0.tasks[0].birth.thread_name);
|
| +
|
| + EXPECT_EQ(1, process_data_phase0.tasks[0].death_data.count);
|
| + EXPECT_EQ(2, process_data_phase0.tasks[0].death_data.run_duration_sum);
|
| + EXPECT_EQ(2, process_data_phase0.tasks[0].death_data.run_duration_max);
|
| + EXPECT_EQ(2, process_data_phase0.tasks[0].death_data.run_duration_sample);
|
| + EXPECT_EQ(4, process_data_phase0.tasks[0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(4, process_data_phase0.tasks[0].death_data.queue_duration_max);
|
| + EXPECT_EQ(4, process_data_phase0.tasks[0].death_data.queue_duration_sample);
|
| +
|
| + EXPECT_EQ(kMainThreadName, process_data_phase0.tasks[0].death_thread_name);
|
| +
|
| + EXPECT_EQ(0u, process_data_phase0.descendants.size());
|
| +
|
| + const PhasedProcessDataSnapshots::const_iterator it1 =
|
| + process_data.phased_process_data_snapshots.find(1);
|
| + ASSERT_TRUE(it1 != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase1 = it1->second;
|
| +
|
| + ASSERT_EQ(1u, process_data_phase1.tasks.size());
|
| +
|
| + EXPECT_EQ(kFile, process_data_phase1.tasks[0].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase1.tasks[0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase1.tasks[0].birth.location.line_number);
|
| +
|
| + EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].birth.thread_name);
|
| +
|
| + EXPECT_EQ(1, process_data_phase1.tasks[0].death_data.count);
|
| + EXPECT_EQ(10, process_data_phase1.tasks[0].death_data.run_duration_sum);
|
| + EXPECT_EQ(10, process_data_phase1.tasks[0].death_data.run_duration_max);
|
| + EXPECT_EQ(10, process_data_phase1.tasks[0].death_data.run_duration_sample);
|
| + EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_max);
|
| + EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.queue_duration_sample);
|
| +
|
| + EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name);
|
| +
|
| + EXPECT_EQ(0u, process_data_phase1.descendants.size());
|
| +
|
| + EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| +}
|
| +
|
| +TEST_F(TrackedObjectsTest, TwoPhasesSecondEmpty) {
|
| + if (!ThreadData::InitializeAndSetTrackingStatus(
|
| + ThreadData::PROFILING_CHILDREN_ACTIVE)) {
|
| + return;
|
| + }
|
| +
|
| + const char kFunction[] = "TwoPhasesSecondEmpty";
|
| + Location location(kFunction, kFile, kLineNumber, NULL);
|
| + ThreadData::InitializeThreadContext(kMainThreadName);
|
| +
|
| + const TrackedTime kTimePosted = TrackedTime::FromMilliseconds(1);
|
| + const base::TimeTicks kDelayedStartTime = base::TimeTicks();
|
| + // TrackingInfo will call TallyABirth() during construction.
|
| + base::TrackingInfo pending_task(location, kDelayedStartTime);
|
| + pending_task.time_posted = kTimePosted; // Overwrite implied Now().
|
| +
|
| + const unsigned int kStartOfRun = 5;
|
| + const unsigned int kEndOfRun = 7;
|
| + SetTestTime(kStartOfRun);
|
| + TaskStopwatch stopwatch;
|
| + stopwatch.Start();
|
| + SetTestTime(kEndOfRun);
|
| + stopwatch.Stop();
|
| +
|
| + ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch);
|
| +
|
| + ThreadData::OnProfilingPhaseCompletion(0);
|
| +
|
| + ProcessDataSnapshot process_data;
|
| + ThreadData::GetProcessDataSnapshot(1, &process_data);
|
| +
|
| + ASSERT_EQ(2, process_data.phased_process_data_snapshots.size());
|
| +
|
| + const PhasedProcessDataSnapshots::const_iterator it0 =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it0 != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase0 = it0->second;
|
| +
|
| + ASSERT_EQ(1u, process_data_phase0.tasks.size());
|
| +
|
| + EXPECT_EQ(kFile, process_data_phase0.tasks[0].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase0.tasks[0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase0.tasks[0].birth.location.line_number);
|
| +
|
| + EXPECT_EQ(kMainThreadName, process_data_phase0.tasks[0].birth.thread_name);
|
| +
|
| + EXPECT_EQ(1, process_data_phase0.tasks[0].death_data.count);
|
| + EXPECT_EQ(2, process_data_phase0.tasks[0].death_data.run_duration_sum);
|
| + EXPECT_EQ(2, process_data_phase0.tasks[0].death_data.run_duration_max);
|
| + EXPECT_EQ(2, process_data_phase0.tasks[0].death_data.run_duration_sample);
|
| + EXPECT_EQ(4, process_data_phase0.tasks[0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(4, process_data_phase0.tasks[0].death_data.queue_duration_max);
|
| + EXPECT_EQ(4, process_data_phase0.tasks[0].death_data.queue_duration_sample);
|
| +
|
| + EXPECT_EQ(kMainThreadName, process_data_phase0.tasks[0].death_thread_name);
|
| +
|
| + EXPECT_EQ(0u, process_data_phase0.descendants.size());
|
| +
|
| + const PhasedProcessDataSnapshots::const_iterator it1 =
|
| + process_data.phased_process_data_snapshots.find(1);
|
| + ASSERT_TRUE(it1 != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase1 = it1->second;
|
| +
|
| + ASSERT_EQ(0u, process_data_phase1.tasks.size());
|
| +
|
| + EXPECT_EQ(0u, process_data_phase1.descendants.size());
|
| +
|
| + EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| +}
|
| +
|
| // We will deactivate tracking after the birth, and before the death, and
|
| // demonstrate that the lifecycle is completely tallied. This ensures that
|
| // our tallied births are matched by tallied deaths (except for when the
|
| @@ -425,8 +642,8 @@ TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToSnapshotMainThread) {
|
| pending_task.time_posted = kTimePosted; // Overwrite implied Now().
|
|
|
| // Turn off tracking now that we have births.
|
| - EXPECT_TRUE(ThreadData::InitializeAndSetTrackingStatus(
|
| - ThreadData::DEACTIVATED));
|
| + EXPECT_TRUE(
|
| + ThreadData::InitializeAndSetTrackingStatus(ThreadData::DEACTIVATED));
|
|
|
| const unsigned int kStartOfRun = 5;
|
| const unsigned int kEndOfRun = 7;
|
| @@ -439,7 +656,7 @@ TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToSnapshotMainThread) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kMainThreadName,
|
| kMainThreadName, 1, 2, 4);
|
| }
|
| @@ -473,9 +690,16 @@ TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToSnapshotMainThread) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, stopwatch);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| - EXPECT_EQ(0u, process_data.tasks.size());
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| +
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
| +
|
| + EXPECT_EQ(0u, process_data_phase.tasks.size());
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
| @@ -517,7 +741,7 @@ TEST_F(TrackedObjectsTest, TwoLives) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2, stopwatch2);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kMainThreadName,
|
| kMainThreadName, 2, 2, 4);
|
| }
|
| @@ -557,35 +781,45 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
|
| pending_task2.time_posted = kTimePosted; // Overwrite implied Now().
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| - ASSERT_EQ(2u, process_data.tasks.size());
|
| -
|
| - EXPECT_EQ(kFile, process_data.tasks[0].birth.location.file_name);
|
| - EXPECT_EQ(kFunction, process_data.tasks[0].birth.location.function_name);
|
| - EXPECT_EQ(kLineNumber, process_data.tasks[0].birth.location.line_number);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[0].birth.thread_name);
|
| - EXPECT_EQ(1, process_data.tasks[0].death_data.count);
|
| - EXPECT_EQ(2, process_data.tasks[0].death_data.run_duration_sum);
|
| - EXPECT_EQ(2, process_data.tasks[0].death_data.run_duration_max);
|
| - EXPECT_EQ(2, process_data.tasks[0].death_data.run_duration_sample);
|
| - EXPECT_EQ(4, process_data.tasks[0].death_data.queue_duration_sum);
|
| - EXPECT_EQ(4, process_data.tasks[0].death_data.queue_duration_max);
|
| - EXPECT_EQ(4, process_data.tasks[0].death_data.queue_duration_sample);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[0].death_thread_name);
|
| - EXPECT_EQ(kFile, process_data.tasks[1].birth.location.file_name);
|
| - EXPECT_EQ(kFunction, process_data.tasks[1].birth.location.function_name);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| +
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
| +
|
| + ASSERT_EQ(2u, process_data_phase.tasks.size());
|
| +
|
| + EXPECT_EQ(kFile, process_data_phase.tasks[0].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase.tasks[0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase.tasks[0].birth.location.line_number);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[0].birth.thread_name);
|
| + EXPECT_EQ(1, process_data_phase.tasks[0].death_data.count);
|
| + EXPECT_EQ(2, process_data_phase.tasks[0].death_data.run_duration_sum);
|
| + EXPECT_EQ(2, process_data_phase.tasks[0].death_data.run_duration_max);
|
| + EXPECT_EQ(2, process_data_phase.tasks[0].death_data.run_duration_sample);
|
| + EXPECT_EQ(4, process_data_phase.tasks[0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(4, process_data_phase.tasks[0].death_data.queue_duration_max);
|
| + EXPECT_EQ(4, process_data_phase.tasks[0].death_data.queue_duration_sample);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[0].death_thread_name);
|
| + EXPECT_EQ(kFile, process_data_phase.tasks[1].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase.tasks[1].birth.location.function_name);
|
| EXPECT_EQ(kSecondFakeLineNumber,
|
| - process_data.tasks[1].birth.location.line_number);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[1].birth.thread_name);
|
| - EXPECT_EQ(1, process_data.tasks[1].death_data.count);
|
| - EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_sum);
|
| - EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_max);
|
| - EXPECT_EQ(0, process_data.tasks[1].death_data.run_duration_sample);
|
| - EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_sum);
|
| - EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_max);
|
| - EXPECT_EQ(0, process_data.tasks[1].death_data.queue_duration_sample);
|
| - EXPECT_EQ(kStillAlive, process_data.tasks[1].death_thread_name);
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + process_data_phase.tasks[1].birth.location.line_number);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[1].birth.thread_name);
|
| + EXPECT_EQ(1, process_data_phase.tasks[1].death_data.count);
|
| + EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_sum);
|
| + EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_max);
|
| + EXPECT_EQ(0, process_data_phase.tasks[1].death_data.run_duration_sample);
|
| + EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_sum);
|
| + EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_max);
|
| + EXPECT_EQ(0, process_data_phase.tasks[1].death_data.queue_duration_sample);
|
| + EXPECT_EQ(kStillAlive, process_data_phase.tasks[1].death_thread_name);
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
| @@ -621,7 +855,7 @@ TEST_F(TrackedObjectsTest, TaskWithNestedExclusion) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kMainThreadName,
|
| kMainThreadName, 1, 6, 4);
|
| }
|
| @@ -664,7 +898,7 @@ TEST_F(TrackedObjectsTest, TaskWith2NestedExclusions) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| ExpectSimpleProcessData(process_data, kFunction, kMainThreadName,
|
| kMainThreadName, 1, 13, 4);
|
| }
|
| @@ -717,40 +951,51 @@ TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) {
|
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, task_stopwatch);
|
|
|
| ProcessDataSnapshot process_data;
|
| - ThreadData::Snapshot(&process_data);
|
| + ThreadData::GetProcessDataSnapshot(0, &process_data);
|
| +
|
| + ASSERT_EQ(1, process_data.phased_process_data_snapshots.size());
|
| + const PhasedProcessDataSnapshots::const_iterator it =
|
| + process_data.phased_process_data_snapshots.find(0);
|
| + ASSERT_TRUE(it != process_data.phased_process_data_snapshots.end());
|
| + const ProcessDataPhaseSnapshot& process_data_phase = it->second;
|
|
|
| // The order in which the two task follow is platform-dependent.
|
| - int t0 = (process_data.tasks[0].birth.location.line_number == kLineNumber) ?
|
| - 0 : 1;
|
| + int t0 =
|
| + (process_data_phase.tasks[0].birth.location.line_number == kLineNumber)
|
| + ? 0
|
| + : 1;
|
| int t1 = 1 - t0;
|
|
|
| - ASSERT_EQ(2u, process_data.tasks.size());
|
| - EXPECT_EQ(kFile, process_data.tasks[t0].birth.location.file_name);
|
| - EXPECT_EQ(kFunction, process_data.tasks[t0].birth.location.function_name);
|
| - EXPECT_EQ(kLineNumber, process_data.tasks[t0].birth.location.line_number);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[t0].birth.thread_name);
|
| - EXPECT_EQ(1, process_data.tasks[t0].death_data.count);
|
| - EXPECT_EQ(6, process_data.tasks[t0].death_data.run_duration_sum);
|
| - EXPECT_EQ(6, process_data.tasks[t0].death_data.run_duration_max);
|
| - EXPECT_EQ(6, process_data.tasks[t0].death_data.run_duration_sample);
|
| - EXPECT_EQ(4, process_data.tasks[t0].death_data.queue_duration_sum);
|
| - EXPECT_EQ(4, process_data.tasks[t0].death_data.queue_duration_max);
|
| - EXPECT_EQ(4, process_data.tasks[t0].death_data.queue_duration_sample);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[t0].death_thread_name);
|
| - EXPECT_EQ(kFile, process_data.tasks[t1].birth.location.file_name);
|
| - EXPECT_EQ(kFunction, process_data.tasks[t1].birth.location.function_name);
|
| + ASSERT_EQ(2u, process_data_phase.tasks.size());
|
| + EXPECT_EQ(kFile, process_data_phase.tasks[t0].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase.tasks[t0].birth.location.function_name);
|
| + EXPECT_EQ(kLineNumber,
|
| + process_data_phase.tasks[t0].birth.location.line_number);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t0].birth.thread_name);
|
| + EXPECT_EQ(1, process_data_phase.tasks[t0].death_data.count);
|
| + EXPECT_EQ(6, process_data_phase.tasks[t0].death_data.run_duration_sum);
|
| + EXPECT_EQ(6, process_data_phase.tasks[t0].death_data.run_duration_max);
|
| + EXPECT_EQ(6, process_data_phase.tasks[t0].death_data.run_duration_sample);
|
| + EXPECT_EQ(4, process_data_phase.tasks[t0].death_data.queue_duration_sum);
|
| + EXPECT_EQ(4, process_data_phase.tasks[t0].death_data.queue_duration_max);
|
| + EXPECT_EQ(4, process_data_phase.tasks[t0].death_data.queue_duration_sample);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t0].death_thread_name);
|
| + EXPECT_EQ(kFile, process_data_phase.tasks[t1].birth.location.file_name);
|
| + EXPECT_EQ(kFunction,
|
| + process_data_phase.tasks[t1].birth.location.function_name);
|
| EXPECT_EQ(kSecondFakeLineNumber,
|
| - process_data.tasks[t1].birth.location.line_number);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[t1].birth.thread_name);
|
| - EXPECT_EQ(1, process_data.tasks[t1].death_data.count);
|
| - EXPECT_EQ(2, process_data.tasks[t1].death_data.run_duration_sum);
|
| - EXPECT_EQ(2, process_data.tasks[t1].death_data.run_duration_max);
|
| - EXPECT_EQ(2, process_data.tasks[t1].death_data.run_duration_sample);
|
| - EXPECT_EQ(1, process_data.tasks[t1].death_data.queue_duration_sum);
|
| - EXPECT_EQ(1, process_data.tasks[t1].death_data.queue_duration_max);
|
| - EXPECT_EQ(1, process_data.tasks[t1].death_data.queue_duration_sample);
|
| - EXPECT_EQ(kMainThreadName, process_data.tasks[t1].death_thread_name);
|
| - EXPECT_EQ(0u, process_data.descendants.size());
|
| + process_data_phase.tasks[t1].birth.location.line_number);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t1].birth.thread_name);
|
| + EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.count);
|
| + EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_sum);
|
| + EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_max);
|
| + EXPECT_EQ(2, process_data_phase.tasks[t1].death_data.run_duration_sample);
|
| + EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_sum);
|
| + EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_max);
|
| + EXPECT_EQ(1, process_data_phase.tasks[t1].death_data.queue_duration_sample);
|
| + EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t1].death_thread_name);
|
| + EXPECT_EQ(0u, process_data_phase.descendants.size());
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
|
|