Chromium Code Reviews| Index: base/tracked_objects_unittest.cc |
| =================================================================== |
| --- base/tracked_objects_unittest.cc (revision 112568) |
| +++ base/tracked_objects_unittest.cc (working copy) |
| @@ -45,10 +45,9 @@ |
| EXPECT_TRUE(!data->next()); |
| EXPECT_EQ(data, ThreadData::Get()); |
| ThreadData::BirthMap birth_map; |
| - data->SnapshotBirthMap(&birth_map); |
| + ThreadData::DeathMap death_map; |
| + data->SnapshotMaps(false, &birth_map, &death_map); |
| EXPECT_EQ(0u, birth_map.size()); |
| - ThreadData::DeathMap death_map; |
| - data->SnapshotDeathMap(&death_map); |
| EXPECT_EQ(0u, death_map.size()); |
| // Cleanup with no leaking. |
| ShutdownSingleThreadedCleanup(false); |
| @@ -62,10 +61,9 @@ |
| EXPECT_TRUE(!data->next()); |
| EXPECT_EQ(data, ThreadData::Get()); |
| birth_map.clear(); |
| - data->SnapshotBirthMap(&birth_map); |
| + death_map.clear(); |
| + data->SnapshotMaps(false, &birth_map, &death_map); |
| EXPECT_EQ(0u, birth_map.size()); |
| - death_map.clear(); |
| - data->SnapshotDeathMap(&death_map); |
| EXPECT_EQ(0u, death_map.size()); |
| } |
| @@ -77,16 +75,15 @@ |
| const Location& location = FROM_HERE; |
| ThreadData::TallyABirthIfActive(location); |
| - const ThreadData* data = ThreadData::first(); |
| + ThreadData* data = ThreadData::first(); |
| ASSERT_TRUE(data); |
| EXPECT_TRUE(!data->next()); |
| EXPECT_EQ(data, ThreadData::Get()); |
| ThreadData::BirthMap birth_map; |
| - data->SnapshotBirthMap(&birth_map); |
| + ThreadData::DeathMap death_map; |
| + data->SnapshotMaps(false, &birth_map, &death_map); |
| EXPECT_EQ(1u, birth_map.size()); // 1 birth location. |
| EXPECT_EQ(1, birth_map.begin()->second->birth_count()); // 1 birth. |
| - ThreadData::DeathMap death_map; |
| - data->SnapshotDeathMap(&death_map); |
| EXPECT_EQ(0u, death_map.size()); // No deaths. |
| @@ -100,11 +97,10 @@ |
| kBogusEndRunTime); |
| birth_map.clear(); |
| - data->SnapshotBirthMap(&birth_map); |
| + death_map.clear(); |
| + data->SnapshotMaps(false, &birth_map, &death_map); |
| EXPECT_EQ(1u, birth_map.size()); // 1 birth location. |
| EXPECT_EQ(2, birth_map.begin()->second->birth_count()); // 2 births. |
| - death_map.clear(); |
| - data->SnapshotDeathMap(&death_map); |
| EXPECT_EQ(1u, death_map.size()); // 1 location. |
| EXPECT_EQ(1, death_map.begin()->second.count()); // 1 death. |
| @@ -118,35 +114,40 @@ |
| scoped_ptr<DeathData> data(new DeathData()); |
| ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL)); |
| - EXPECT_EQ(data->run_duration(), 0); |
| - EXPECT_EQ(data->queue_duration(), 0); |
| - EXPECT_EQ(data->AverageMsRunDuration(), 0); |
| - EXPECT_EQ(data->AverageMsQueueDuration(), 0); |
| + EXPECT_EQ(data->run_duration_sum(), 0); |
| + EXPECT_EQ(data->run_duration_sample(), 0); |
| + EXPECT_EQ(data->queue_duration_sum(), 0); |
| + EXPECT_EQ(data->queue_duration_sample(), 0); |
| EXPECT_EQ(data->count(), 0); |
| DurationInt run_ms = 42; |
| DurationInt queue_ms = 8; |
| - data->RecordDeath(queue_ms, run_ms); |
| - EXPECT_EQ(data->run_duration(), run_ms); |
| - EXPECT_EQ(data->queue_duration(), queue_ms); |
| - EXPECT_EQ(data->AverageMsRunDuration(), run_ms); |
| - EXPECT_EQ(data->AverageMsQueueDuration(), queue_ms); |
| + const int kUnrandomInt = 0; // Fake random int that ensure we sample data. |
| + data->RecordDeath(queue_ms, run_ms, kUnrandomInt); |
| + EXPECT_EQ(data->run_duration_sum(), run_ms); |
| + EXPECT_EQ(data->run_duration_sample(), run_ms); |
| + EXPECT_EQ(data->queue_duration_sum(), queue_ms); |
| + EXPECT_EQ(data->queue_duration_sample(), queue_ms); |
| EXPECT_EQ(data->count(), 1); |
| - data->RecordDeath(queue_ms, run_ms); |
| - EXPECT_EQ(data->run_duration(), run_ms + run_ms); |
| - EXPECT_EQ(data->queue_duration(), queue_ms + queue_ms); |
| - EXPECT_EQ(data->AverageMsRunDuration(), run_ms); |
| - EXPECT_EQ(data->AverageMsQueueDuration(), queue_ms); |
| + data->RecordDeath(queue_ms, run_ms, kUnrandomInt); |
| + EXPECT_EQ(data->run_duration_sum(), run_ms + run_ms); |
| + EXPECT_EQ(data->run_duration_sample(), run_ms); |
| + EXPECT_EQ(data->queue_duration_sum(), queue_ms + queue_ms); |
| + EXPECT_EQ(data->queue_duration_sample(), queue_ms); |
| EXPECT_EQ(data->count(), 2); |
| scoped_ptr<base::DictionaryValue> dictionary(data->ToValue()); |
| int integer; |
| EXPECT_TRUE(dictionary->GetInteger("run_ms", &integer)); |
| EXPECT_EQ(integer, 2 * run_ms); |
| + EXPECT_TRUE(dictionary->GetInteger("run_ms_sample", &integer)); |
| + EXPECT_EQ(integer, run_ms); |
| EXPECT_TRUE(dictionary->GetInteger("queue_ms", &integer)); |
| EXPECT_EQ(integer, 2 * queue_ms); |
| + EXPECT_TRUE(dictionary->GetInteger("queue_ms_sample", &integer)); |
| + EXPECT_EQ(integer, queue_ms); |
| EXPECT_TRUE(dictionary->GetInteger("count", &integer)); |
| EXPECT_EQ(integer, 2); |
| @@ -157,8 +158,10 @@ |
| "\"count\":2," |
| "\"queue_ms\":16," |
| "\"queue_ms_max\":8," |
| + "\"queue_ms_sample\":8," |
| "\"run_ms\":84," |
| - "\"run_ms_max\":42" |
| + "\"run_ms_max\":42," |
| + "\"run_ms_sample\":42" |
| "}"; |
| EXPECT_EQ(birth_only_result, json); |
| } |
| @@ -177,7 +180,7 @@ |
| // We should now see a NULL birth record. |
| EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL)); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string birth_only_result = "{" |
| @@ -203,7 +206,7 @@ |
| // We expect to not get a birth record. |
| EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL)); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string birth_only_result = "{" |
| @@ -225,7 +228,7 @@ |
| Births* birth = ThreadData::TallyABirthIfActive(location); |
| EXPECT_NE(birth, reinterpret_cast<Births*>(NULL)); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string birth_only_result = "{" |
| @@ -236,8 +239,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":0," |
| "\"queue_ms_max\":0," |
| + "\"queue_ms_sample\":0," |
| "\"run_ms\":0," |
| - "\"run_ms_max\":0" |
| + "\"run_ms_max\":0," |
| + "\"run_ms_sample\":0" |
| "}," |
| "\"death_thread\":\"Still_Alive\"," |
| "\"location\":{" |
| @@ -265,7 +270,7 @@ |
| Births* birth = ThreadData::TallyABirthIfActive(location); |
| EXPECT_NE(birth, reinterpret_cast<Births*>(NULL)); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string birth_only_result = "{" |
| @@ -276,8 +281,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":0," |
| "\"queue_ms_max\":0," |
| + "\"queue_ms_sample\":0," |
| "\"run_ms\":0," |
| - "\"run_ms_max\":0" |
| + "\"run_ms_max\":0," |
| + "\"run_ms_sample\":0" |
| "}," |
| "\"death_thread\":\"Still_Alive\"," |
| "\"location\":{" |
| @@ -318,7 +325,7 @@ |
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, |
| kStartOfRun, kEndOfRun); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string one_line_result = "{" |
| @@ -329,8 +336,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":4," |
| "\"queue_ms_max\":4," |
| + "\"queue_ms_sample\":4," |
| "\"run_ms\":2," |
| - "\"run_ms_max\":2" |
| + "\"run_ms_max\":2," |
| + "\"run_ms_sample\":2" |
| "}," |
| "\"death_thread\":\"SomeMainThreadName\"," |
| "\"location\":{" |
| @@ -378,7 +387,7 @@ |
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, |
| kStartOfRun, kEndOfRun); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string one_line_result = "{" |
| @@ -389,8 +398,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":4," |
| "\"queue_ms_max\":4," |
| + "\"queue_ms_sample\":4," |
| "\"run_ms\":2," |
| - "\"run_ms_max\":2" |
| + "\"run_ms_max\":2," |
| + "\"run_ms_sample\":2" |
| "}," |
| "\"death_thread\":\"SomeMainThreadName\"," |
| "\"location\":{" |
| @@ -433,7 +444,7 @@ |
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, |
| kStartOfRun, kEndOfRun); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string one_line_result = "{" |
| @@ -465,7 +476,8 @@ |
| ThreadData::TallyRunOnWorkerThreadIfTracking(birth, kTimePosted, |
| kStartOfRun, kEndOfRun); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + // Call for the ToValue, but tell it to not the maxes after scanning. |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string one_line_result = "{" |
| @@ -476,8 +488,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":4," |
| "\"queue_ms_max\":4," |
| + "\"queue_ms_sample\":4," |
| "\"run_ms\":2," |
| - "\"run_ms_max\":2" |
| + "\"run_ms_max\":2," |
| + "\"run_ms_sample\":2" |
| "}," |
| "\"death_thread\":\"WorkerThread-1\"," |
| "\"location\":{" |
| @@ -489,6 +503,42 @@ |
| "]" |
| "}"; |
| EXPECT_EQ(one_line_result, json); |
| + |
| + // Call for the ToValue, but tell it to reset the maxes after scanning. |
| + // We'll still get the same values, but the data will be reset (which we'll |
| + // see in a moment) |
|
ramant (doing other things)
2011/12/03 22:48:39
nit: Add a period.
jar (doing other things)
2011/12/04 00:46:22
Done.
|
| + value.reset(ThreadData::ToValue(true)); |
| + base::JSONWriter::Write(value.get(), false, &json); |
| + // Result should be unchanged. |
| + EXPECT_EQ(one_line_result, json); |
| + |
| + // Call for the ToValue, and now we'll see the result of the last translation, |
| + // as the max will have been pushed back to zero. |
| + value.reset(ThreadData::ToValue(false)); |
| + base::JSONWriter::Write(value.get(), false, &json); |
| + std::string one_line_result_with_zeros = "{" |
| + "\"list\":[" |
| + "{" |
| + "\"birth_thread\":\"WorkerThread-1\"," |
| + "\"death_data\":{" |
| + "\"count\":1," |
| + "\"queue_ms\":4," |
| + "\"queue_ms_max\":0," // Note zero here. |
| + "\"queue_ms_sample\":4," |
| + "\"run_ms\":2," |
| + "\"run_ms_max\":0," // Note zero here. |
| + "\"run_ms_sample\":2" |
| + "}," |
| + "\"death_thread\":\"WorkerThread-1\"," |
| + "\"location\":{" |
| + "\"file_name\":\"FixedFileName\"," |
| + "\"function_name\":\"LifeCycleToValueWorkerThread\"," |
| + "\"line_number\":236" |
| + "}" |
| + "}" |
| + "]" |
| + "}"; |
| + EXPECT_EQ(one_line_result_with_zeros, json); |
| } |
| TEST_F(TrackedObjectsTest, TwoLives) { |
| @@ -526,7 +576,7 @@ |
| ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2, |
| kStartOfRun, kEndOfRun); |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string one_line_result = "{" |
| @@ -537,8 +587,10 @@ |
| "\"count\":2," |
| "\"queue_ms\":8," |
| "\"queue_ms_max\":4," |
| + "\"queue_ms_sample\":4," |
| "\"run_ms\":4," |
| - "\"run_ms_max\":2" |
| + "\"run_ms_max\":2," |
| + "\"run_ms_sample\":2" |
| "}," |
| "\"death_thread\":\"SomeFileThreadName\"," |
| "\"location\":{" |
| @@ -583,7 +635,7 @@ |
| base::TrackingInfo pending_task2(second_location, kDelayedStartTime); |
| pending_task2.time_posted = kTimePosted; // Overwrite implied Now(). |
| - scoped_ptr<base::Value> value(ThreadData::ToValue()); |
| + scoped_ptr<base::Value> value(ThreadData::ToValue(false)); |
| std::string json; |
| base::JSONWriter::Write(value.get(), false, &json); |
| std::string one_line_result = "{" |
| @@ -594,8 +646,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":4," |
| "\"queue_ms_max\":4," |
| + "\"queue_ms_sample\":4," |
| "\"run_ms\":2," |
| - "\"run_ms_max\":2" |
| + "\"run_ms_max\":2," |
| + "\"run_ms_sample\":2" |
| "}," |
| "\"death_thread\":\"SomeFileThreadName\"," |
| "\"location\":{" |
| @@ -610,8 +664,10 @@ |
| "\"count\":1," |
| "\"queue_ms\":0," |
| "\"queue_ms_max\":0," |
| + "\"queue_ms_sample\":0," |
| "\"run_ms\":0," |
| - "\"run_ms_max\":0" |
| + "\"run_ms_max\":0," |
| + "\"run_ms_sample\":0" |
| "}," |
| "\"death_thread\":\"Still_Alive\"," |
| "\"location\":{" |