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); |
} |