Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3025)

Unified Diff: base/tracked_objects_unittest.cc

Issue 9702014: [UMA] Use proper C++ objects to serialize tracked_objects across process boundaries. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make sure to initialize all primitive fields Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/tracked_objects_unittest.cc
diff --git a/base/tracked_objects_unittest.cc b/base/tracked_objects_unittest.cc
index 837a449ccaf06427317f38ed014266793f948872..6014b00f7c01b2a8287104b5f68b1650a9a9d3b8 100644
--- a/base/tracked_objects_unittest.cc
+++ b/base/tracked_objects_unittest.cc
@@ -6,11 +6,18 @@
#include "base/tracked_objects.h"
-#include "base/json/json_writer.h"
#include "base/memory/scoped_ptr.h"
#include "base/time.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace {
+
+std::string GetProcessIdString() {
+ return base::IntToString(base::GetCurrentProcId());
jar (doing other things) 2012/04/04 17:55:35 nit: I'm not sure which is better.... but you coul
+}
+
+} // anonymous namespace
+
namespace tracked_objects {
class TrackedObjectsTest : public testing::Test {
@@ -170,7 +177,11 @@ TEST_F(TrackedObjectsTest, ParentChildTest) {
EXPECT_EQ(parent_child_set.begin()->first,
parent_child_set.begin()->second);
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
jar (doing other things) 2012/04/04 17:55:35 I think the scoped pointer was only useful because
Ilya Sherman 2012/04/05 02:51:04 This test code is actually completely out of sync
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string birth_only_result = "{"
@@ -245,7 +256,8 @@ TEST_F(TrackedObjectsTest, DeathDataTest) {
EXPECT_EQ(data->queue_duration_sample(), queue_ms);
EXPECT_EQ(data->count(), 2);
- scoped_ptr<base::DictionaryValue> dictionary(data->ToValue());
+ scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue);
jar (doing other things) 2012/04/04 17:55:35 Suggest using just an instance (not scoped pointer
+ SerializedDeathData(*data).ToValue(dictionary.get());
int integer;
EXPECT_TRUE(dictionary->GetInteger("run_ms", &integer));
EXPECT_EQ(integer, 2 * run_ms);
@@ -258,7 +270,8 @@ TEST_F(TrackedObjectsTest, DeathDataTest) {
EXPECT_TRUE(dictionary->GetInteger("count", &integer));
EXPECT_EQ(integer, 2);
- scoped_ptr<base::Value> value(data->ToValue());
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ SerializedDeathData(*data).ToValue(value.get());
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string birth_only_result = "{"
@@ -287,16 +300,21 @@ TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToValueWorkerThread) {
// We should now see a NULL birth record.
EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string birth_only_result = "{"
"\"descendants\":["
"],"
"\"list\":["
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
- EXPECT_EQ(json, birth_only_result);
+ EXPECT_EQ(birth_only_result, json);
}
TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToValueMainThread) {
@@ -315,16 +333,21 @@ TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToValueMainThread) {
// We expect to not get a birth record.
EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string birth_only_result = "{"
"\"descendants\":["
"],"
"\"list\":["
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
- EXPECT_EQ(json, birth_only_result);
+ EXPECT_EQ(birth_only_result, json);
}
TEST_F(TrackedObjectsTest, BirthOnlyToValueWorkerThread) {
@@ -340,7 +363,11 @@ TEST_F(TrackedObjectsTest, BirthOnlyToValueWorkerThread) {
Births* birth = ThreadData::TallyABirthIfActive(location);
EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string birth_only_result = "{"
@@ -365,9 +392,10 @@ TEST_F(TrackedObjectsTest, BirthOnlyToValueWorkerThread) {
"\"line_number\":173"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
- EXPECT_EQ(json, birth_only_result);
+ EXPECT_EQ(birth_only_result, json);
}
TEST_F(TrackedObjectsTest, BirthOnlyToValueMainThread) {
@@ -385,7 +413,11 @@ TEST_F(TrackedObjectsTest, BirthOnlyToValueMainThread) {
Births* birth = ThreadData::TallyABirthIfActive(location);
EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string birth_only_result = "{"
@@ -410,9 +442,10 @@ TEST_F(TrackedObjectsTest, BirthOnlyToValueMainThread) {
"\"line_number\":173"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
- EXPECT_EQ(json, birth_only_result);
+ EXPECT_EQ(birth_only_result, json);
}
TEST_F(TrackedObjectsTest, LifeCycleToValueMainThread) {
@@ -443,7 +476,11 @@ TEST_F(TrackedObjectsTest, LifeCycleToValueMainThread) {
ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
kStartOfRun, kEndOfRun);
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string one_line_result = "{"
@@ -468,7 +505,8 @@ TEST_F(TrackedObjectsTest, LifeCycleToValueMainThread) {
"\"line_number\":236"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
EXPECT_EQ(one_line_result, json);
}
@@ -509,7 +547,11 @@ TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToValueMainThread) {
ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
kStartOfRun, kEndOfRun);
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string one_line_result = "{"
@@ -534,7 +576,8 @@ TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToValueMainThread) {
"\"line_number\":236"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
EXPECT_EQ(one_line_result, json);
}
@@ -568,14 +611,19 @@ TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToValueMainThread) {
ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
kStartOfRun, kEndOfRun);
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string one_line_result = "{"
"\"descendants\":["
"],"
"\"list\":["
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
EXPECT_EQ(one_line_result, json);
}
@@ -604,7 +652,11 @@ TEST_F(TrackedObjectsTest, LifeCycleToValueWorkerThread) {
kStartOfRun, kEndOfRun);
// Call for the ToValue, but tell it to not the maxes after scanning.
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string one_line_result = "{"
@@ -629,22 +681,31 @@ TEST_F(TrackedObjectsTest, LifeCycleToValueWorkerThread) {
"\"line_number\":236"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
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).
- value.reset(ThreadData::ToValue(true));
- base::JSONWriter::Write(value.get(), &json);
+ SerializedProcessData process_data_pre_reset;
+ ThreadData::ToSerializedProcessData(true, &process_data_pre_reset);
+ value.reset(new base::DictionaryValue);
+ process_data_pre_reset.ToValue(value.get());
+
+ 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(), &json);
+ SerializedProcessData process_data_post_reset;
+ ThreadData::ToSerializedProcessData(true, &process_data_post_reset);
+ value.reset(new base::DictionaryValue);
+ process_data_post_reset.ToValue(value.get());
+
+ base::JSONWriter::Write(value.get(), false, &json);
std::string one_line_result_with_zeros = "{"
"\"descendants\":["
"],"
@@ -667,7 +728,8 @@ TEST_F(TrackedObjectsTest, LifeCycleToValueWorkerThread) {
"\"line_number\":236"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
EXPECT_EQ(one_line_result_with_zeros, json);
}
@@ -708,7 +770,11 @@ TEST_F(TrackedObjectsTest, TwoLives) {
ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2,
kStartOfRun, kEndOfRun);
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string one_line_result = "{"
@@ -733,7 +799,8 @@ TEST_F(TrackedObjectsTest, TwoLives) {
"\"line_number\":222"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
EXPECT_EQ(one_line_result, json);
}
@@ -770,7 +837,11 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
base::TrackingInfo pending_task2(second_location, kDelayedStartTime);
pending_task2.time_posted = kTimePosted; // Overwrite implied Now().
- scoped_ptr<base::Value> value(ThreadData::ToValue(false));
+ SerializedProcessData process_data;
+ ThreadData::ToSerializedProcessData(false, &process_data);
+ scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+ process_data.ToValue(value.get());
+
std::string json;
base::JSONWriter::Write(value.get(), &json);
std::string one_line_result = "{"
@@ -813,7 +884,8 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
"\"line_number\":999"
"}"
"}"
- "]"
+ "],"
+ "\"process_id\":" + GetProcessIdString() +
"}";
EXPECT_EQ(one_line_result, json);
}

Powered by Google App Engine
This is Rietveld 408576698