summaryrefslogtreecommitdiffstats
path: root/base/tracked_objects_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/tracked_objects_unittest.cc')
-rw-r--r--base/tracked_objects_unittest.cc401
1 files changed, 104 insertions, 297 deletions
diff --git a/base/tracked_objects_unittest.cc b/base/tracked_objects_unittest.cc
index b457cb1..ef88183 100644
--- a/base/tracked_objects_unittest.cc
+++ b/base/tracked_objects_unittest.cc
@@ -15,18 +15,15 @@ namespace tracked_objects {
class TrackedObjectsTest : public testing::Test {
public:
- TrackedObjectsTest() {
- ThreadData::ShutdownSingleThreadedCleanup();
- }
+ ~TrackedObjectsTest() {
+ ThreadData::ShutdownSingleThreadedCleanup();
+ }
- ~TrackedObjectsTest() {
- ThreadData::ShutdownSingleThreadedCleanup();
- }
};
TEST_F(TrackedObjectsTest, MinimalStartupShutdown) {
// Minimal test doesn't even create any tasks.
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
EXPECT_FALSE(ThreadData::first()); // No activity even on this thread.
@@ -44,7 +41,7 @@ TEST_F(TrackedObjectsTest, MinimalStartupShutdown) {
ThreadData::ShutdownSingleThreadedCleanup();
// Do it again, just to be sure we reset state completely.
- ThreadData::InitializeAndSetTrackingStatus(true);
+ ThreadData::StartTracking(true);
EXPECT_FALSE(ThreadData::first()); // No activity even on this thread.
data = ThreadData::Get();
EXPECT_TRUE(ThreadData::first()); // Now class was constructed.
@@ -60,7 +57,7 @@ TEST_F(TrackedObjectsTest, MinimalStartupShutdown) {
}
TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
// Instigate tracking on a single tracked object, on our thread.
@@ -80,14 +77,14 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
EXPECT_EQ(0u, death_map.size()); // No deaths.
- // Now instigate another birth, and a first death at the same location.
- // TrackingInfo will call TallyABirth() during construction.
- base::TimeTicks kBogusStartTime;
- base::TrackingInfo pending_task(location, kBogusStartTime);
- TrackedTime kBogusStartRunTime;
- TrackedTime kBogusEndRunTime;
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task, kBogusStartRunTime,
- kBogusEndRunTime);
+ // Now instigate a birth, and a death.
+ const Births* second_birth = ThreadData::TallyABirthIfActive(location);
+ ThreadData::TallyADeathIfActive(
+ second_birth,
+ base::TimeTicks(), /* Bogus post_time. */
+ base::TimeTicks(), /* Bogus delayed_start_time. */
+ base::TimeTicks(), /* Bogus start_run_time. */
+ base::TimeTicks() /* Bogus end_run_time */ );
birth_map.clear();
data->SnapshotBirthMap(&birth_map);
@@ -103,13 +100,13 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
}
TEST_F(TrackedObjectsTest, DeathDataTest) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
scoped_ptr<DeathData> data(new DeathData());
ASSERT_NE(data, reinterpret_cast<DeathData*>(NULL));
- EXPECT_EQ(data->run_duration(), Duration());
- EXPECT_EQ(data->queue_duration(), Duration());
+ EXPECT_EQ(data->run_duration(), base::TimeDelta());
+ EXPECT_EQ(data->queue_duration(), base::TimeDelta());
EXPECT_EQ(data->AverageMsRunDuration(), 0);
EXPECT_EQ(data->AverageMsQueueDuration(), 0);
EXPECT_EQ(data->count(), 0);
@@ -117,8 +114,8 @@ TEST_F(TrackedObjectsTest, DeathDataTest) {
int run_ms = 42;
int queue_ms = 8;
- Duration run_duration = Duration().FromMilliseconds(run_ms);
- Duration queue_duration = Duration().FromMilliseconds(queue_ms);
+ base::TimeDelta run_duration = base::TimeDelta().FromMilliseconds(run_ms);
+ base::TimeDelta queue_duration = base::TimeDelta().FromMilliseconds(queue_ms);
data->RecordDeath(queue_duration, run_duration);
EXPECT_EQ(data->run_duration(), run_duration);
EXPECT_EQ(data->queue_duration(), queue_duration);
@@ -154,69 +151,20 @@ TEST_F(TrackedObjectsTest, DeathDataTest) {
EXPECT_EQ(json, birth_only_result);
}
-TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToValueWorkerThread) {
- // Transition to Deactivated state before doing anything.
- if (!ThreadData::InitializeAndSetTrackingStatus(false))
- return;
- // We don't initialize system with a thread name, so we're viewed as a worker
- // thread.
- const int kFakeLineNumber = 173;
- const char* kFile = "FixedFileName";
- const char* kFunction = "BirthOnlyToValueWorkerThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
- Births* birth = ThreadData::TallyABirthIfActive(location);
- // We should now see a NULL birth record.
- EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL));
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
- std::string json;
- base::JSONWriter::Write(value.get(), false, &json);
- std::string birth_only_result = "{"
- "\"list\":["
- "]"
- "}";
- EXPECT_EQ(json, birth_only_result);
-}
-
-TEST_F(TrackedObjectsTest, DeactivatedBirthOnlyToValueMainThread) {
- // Start in the deactivated state.
- if (!ThreadData::InitializeAndSetTrackingStatus(false))
- return;
-
- // Use a well named thread.
- ThreadData::InitializeThreadContext("SomeMainThreadName");
- const int kFakeLineNumber = 173;
- const char* kFile = "FixedFileName";
- const char* kFunction = "BirthOnlyToValueMainThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
- // Do not delete birth. We don't own it.
- Births* birth = ThreadData::TallyABirthIfActive(location);
- // We expect to not get a birth record.
- EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL));
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
- std::string json;
- base::JSONWriter::Write(value.get(), false, &json);
- std::string birth_only_result = "{"
- "\"list\":["
- "]"
- "}";
- EXPECT_EQ(json, birth_only_result);
-}
-
TEST_F(TrackedObjectsTest, BirthOnlyToValueWorkerThread) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
// We don't initialize system with a thread name, so we're viewed as a worker
// thread.
- const int kFakeLineNumber = 173;
+ int fake_line_number = 173;
const char* kFile = "FixedFileName";
const char* kFunction = "BirthOnlyToValueWorkerThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
+ Location location(kFunction, kFile, fake_line_number, NULL);
Births* birth = ThreadData::TallyABirthIfActive(location);
EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue());
+ int process_type = 3;
+ scoped_ptr<base::Value> value(ThreadData::ToValue(process_type));
std::string json;
base::JSONWriter::Write(value.get(), false, &json);
std::string birth_only_result = "{"
@@ -235,26 +183,28 @@ TEST_F(TrackedObjectsTest, BirthOnlyToValueWorkerThread) {
"\"line_number\":173"
"}"
"}"
- "]"
+ "],"
+ "\"process\":3"
"}";
EXPECT_EQ(json, birth_only_result);
}
TEST_F(TrackedObjectsTest, BirthOnlyToValueMainThread) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
// Use a well named thread.
ThreadData::InitializeThreadContext("SomeMainThreadName");
- const int kFakeLineNumber = 173;
+ int fake_line_number = 173;
const char* kFile = "FixedFileName";
const char* kFunction = "BirthOnlyToValueMainThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
+ Location location(kFunction, kFile, fake_line_number, NULL);
// Do not delete birth. We don't own it.
Births* birth = ThreadData::TallyABirthIfActive(location);
EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue());
+ int process_type = 34;
+ scoped_ptr<base::Value> value(ThreadData::ToValue(process_type));
std::string json;
base::JSONWriter::Write(value.get(), false, &json);
std::string birth_only_result = "{"
@@ -273,39 +223,40 @@ TEST_F(TrackedObjectsTest, BirthOnlyToValueMainThread) {
"\"line_number\":173"
"}"
"}"
- "]"
+ "],"
+ "\"process\":34"
"}";
EXPECT_EQ(json, birth_only_result);
}
TEST_F(TrackedObjectsTest, LifeCycleToValueMainThread) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
// Use a well named thread.
ThreadData::InitializeThreadContext("SomeMainThreadName");
- const int kFakeLineNumber = 236;
+ int fake_line_number = 236;
const char* kFile = "FixedFileName";
const char* kFunction = "LifeCycleToValueMainThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
+ Location location(kFunction, kFile, fake_line_number, NULL);
// Do not delete birth. We don't own it.
Births* birth = ThreadData::TallyABirthIfActive(location);
EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
- const base::TimeTicks kTimePosted = base::TimeTicks()
- + base::TimeDelta::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 TrackedTime kStartOfRun = TrackedTime() +
- Duration::FromMilliseconds(5);
- const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7);
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
- kStartOfRun, kEndOfRun);
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
+ // TimeTicks initializers ar ein microseconds. Durations are calculated in
+ // milliseconds, so we need to use 1000x.
+ const base::TimeTicks time_posted = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(1);
+ const base::TimeTicks delayed_start_time = base::TimeTicks();
+ const base::TimeTicks start_of_run = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(5);
+ const base::TimeTicks end_of_run = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(7);
+ ThreadData::TallyADeathIfActive(birth, time_posted, delayed_start_time,
+ start_of_run, end_of_run);
+
+ int process_type = 7;
+ scoped_ptr<base::Value> value(ThreadData::ToValue(process_type));
std::string json;
base::JSONWriter::Write(value.get(), false, &json);
std::string one_line_result = "{"
@@ -324,190 +275,44 @@ TEST_F(TrackedObjectsTest, LifeCycleToValueMainThread) {
"\"line_number\":236"
"}"
"}"
- "]"
+ "],"
+ "\"process\":7"
"}";
- EXPECT_EQ(one_line_result, json);
-}
-
-// 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
-// task is still running, or is queued).
-TEST_F(TrackedObjectsTest, LifeCycleMidDeactivatedToValueMainThread) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
- return;
-
- // Use a well named thread.
- ThreadData::InitializeThreadContext("SomeMainThreadName");
- const int kFakeLineNumber = 236;
- const char* kFile = "FixedFileName";
- const char* kFunction = "LifeCycleToValueMainThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
- // Do not delete birth. We don't own it.
- Births* birth = ThreadData::TallyABirthIfActive(location);
- EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
-
- const base::TimeTicks kTimePosted = base::TimeTicks()
- + base::TimeDelta::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().
-
- // Turn off tracking now that we have births.
- EXPECT_TRUE(ThreadData::InitializeAndSetTrackingStatus(false));
-
- const TrackedTime kStartOfRun = TrackedTime() +
- Duration::FromMilliseconds(5);
- const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7);
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
- kStartOfRun, kEndOfRun);
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
- std::string json;
- base::JSONWriter::Write(value.get(), false, &json);
- std::string one_line_result = "{"
- "\"list\":["
- "{"
- "\"birth_thread\":\"SomeMainThreadName\","
- "\"death_data\":{"
- "\"count\":1,"
- "\"queue_ms\":4,"
- "\"run_ms\":2"
- "},"
- "\"death_thread\":\"SomeMainThreadName\","
- "\"location\":{"
- "\"file_name\":\"FixedFileName\","
- "\"function_name\":\"LifeCycleToValueMainThread\","
- "\"line_number\":236"
- "}"
- "}"
- "]"
- "}";
- EXPECT_EQ(one_line_result, json);
-}
-
-// We will deactivate tracking before starting a life cycle, and neither
-// the birth nor the death will be recorded.
-TEST_F(TrackedObjectsTest, LifeCyclePreDeactivatedToValueMainThread) {
- if (!ThreadData::InitializeAndSetTrackingStatus(false))
- return;
-
- // Use a well named thread.
- ThreadData::InitializeThreadContext("SomeMainThreadName");
- const int kFakeLineNumber = 236;
- const char* kFile = "FixedFileName";
- const char* kFunction = "LifeCycleToValueMainThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
- // Do not delete birth. We don't own it.
- Births* birth = ThreadData::TallyABirthIfActive(location);
- EXPECT_EQ(birth, reinterpret_cast<Births*>(NULL));
-
- const base::TimeTicks kTimePosted = base::TimeTicks()
- + base::TimeDelta::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 TrackedTime kStartOfRun = TrackedTime() +
- Duration::FromMilliseconds(5);
- const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7);
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
- kStartOfRun, kEndOfRun);
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
- std::string json;
- base::JSONWriter::Write(value.get(), false, &json);
- std::string one_line_result = "{"
- "\"list\":["
- "]"
- "}";
- EXPECT_EQ(one_line_result, json);
-}
-
-TEST_F(TrackedObjectsTest, LifeCycleToValueWorkerThread) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
- return;
-
- // Don't initialize thread, so that we appear as a worker thread.
- // ThreadData::InitializeThreadContext("SomeMainThreadName");
-
- const int kFakeLineNumber = 236;
- const char* kFile = "FixedFileName";
- const char* kFunction = "LifeCycleToValueWorkerThread";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
- // Do not delete birth. We don't own it.
- Births* birth = ThreadData::TallyABirthIfActive(location);
- EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
-
- const TrackedTime kTimePosted = TrackedTime() + Duration::FromMilliseconds(1);
- const TrackedTime kStartOfRun = TrackedTime() +
- Duration::FromMilliseconds(5);
- const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7);
- ThreadData::TallyRunOnWorkerThreadIfTracking(birth, kTimePosted,
- kStartOfRun, kEndOfRun);
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
- std::string json;
- base::JSONWriter::Write(value.get(), false, &json);
- std::string one_line_result = "{"
- "\"list\":["
- "{"
- "\"birth_thread\":\"WorkerThread-1\","
- "\"death_data\":{"
- "\"count\":1,"
- "\"queue_ms\":4,"
- "\"run_ms\":2"
- "},"
- "\"death_thread\":\"WorkerThread-1\","
- "\"location\":{"
- "\"file_name\":\"FixedFileName\","
- "\"function_name\":\"LifeCycleToValueWorkerThread\","
- "\"line_number\":236"
- "}"
- "}"
- "]"
- "}";
- EXPECT_EQ(one_line_result, json);
+ EXPECT_EQ(json, one_line_result);
}
TEST_F(TrackedObjectsTest, TwoLives) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
// Use a well named thread.
ThreadData::InitializeThreadContext("SomeFileThreadName");
- const int kFakeLineNumber = 222;
+ int fake_line_number = 222;
const char* kFile = "AnotherFileName";
const char* kFunction = "TwoLives";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
+ Location location(kFunction, kFile, fake_line_number, NULL);
// Do not delete birth. We don't own it.
Births* birth = ThreadData::TallyABirthIfActive(location);
EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
-
- const base::TimeTicks kTimePosted = base::TimeTicks()
- + base::TimeDelta::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 TrackedTime kStartOfRun = TrackedTime() +
- Duration::FromMilliseconds(5);
- const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7);
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
- kStartOfRun, kEndOfRun);
-
- // TrackingInfo will call TallyABirth() during construction.
- base::TrackingInfo pending_task2(location, kDelayedStartTime);
- pending_task2.time_posted = kTimePosted; // Overwrite implied Now().
-
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task2,
- kStartOfRun, kEndOfRun);
-
- scoped_ptr<base::Value> value(ThreadData::ToValue());
+ // TimeTicks initializers ar ein microseconds. Durations are calculated in
+ // milliseconds, so we need to use 1000x.
+ const base::TimeTicks time_posted = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(1);
+ const base::TimeTicks delayed_start_time = base::TimeTicks();
+ const base::TimeTicks start_of_run = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(5);
+ const base::TimeTicks end_of_run = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(7);
+ ThreadData::TallyADeathIfActive(birth, time_posted, delayed_start_time,
+ start_of_run, end_of_run);
+
+ birth = ThreadData::TallyABirthIfActive(location);
+ ThreadData::TallyADeathIfActive(birth, time_posted, delayed_start_time,
+ start_of_run, end_of_run);
+
+ int process_type = 7;
+ scoped_ptr<base::Value> value(ThreadData::ToValue(process_type));
std::string json;
base::JSONWriter::Write(value.get(), false, &json);
std::string one_line_result = "{"
@@ -526,43 +331,44 @@ TEST_F(TrackedObjectsTest, TwoLives) {
"\"line_number\":222"
"}"
"}"
- "]"
+ "],"
+ "\"process\":7"
"}";
- EXPECT_EQ(one_line_result, json);
+ EXPECT_EQ(json, one_line_result);
}
TEST_F(TrackedObjectsTest, DifferentLives) {
- if (!ThreadData::InitializeAndSetTrackingStatus(true))
+ if (!ThreadData::StartTracking(true))
return;
// Use a well named thread.
ThreadData::InitializeThreadContext("SomeFileThreadName");
- const int kFakeLineNumber = 567;
+ int fake_line_number = 567;
const char* kFile = "AnotherFileName";
const char* kFunction = "DifferentLives";
- Location location(kFunction, kFile, kFakeLineNumber, NULL);
-
- const base::TimeTicks kTimePosted = base::TimeTicks()
- + base::TimeDelta::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 TrackedTime kStartOfRun = TrackedTime() +
- Duration::FromMilliseconds(5);
- const TrackedTime kEndOfRun = TrackedTime() + Duration::FromMilliseconds(7);
- ThreadData::TallyRunOnNamedThreadIfTracking(pending_task,
- kStartOfRun, kEndOfRun);
-
- const int kSecondFakeLineNumber = 999;
- Location second_location(kFunction, kFile, kSecondFakeLineNumber, NULL);
-
- // TrackingInfo will call TallyABirth() during construction.
- base::TrackingInfo pending_task2(second_location, kDelayedStartTime);
- pending_task2.time_posted = kTimePosted; // Overwrite implied Now().
+ Location location(kFunction, kFile, fake_line_number, NULL);
+ // Do not delete birth. We don't own it.
+ Births* birth = ThreadData::TallyABirthIfActive(location);
+ EXPECT_NE(birth, reinterpret_cast<Births*>(NULL));
- scoped_ptr<base::Value> value(ThreadData::ToValue());
+ // TimeTicks initializers ar ein microseconds. Durations are calculated in
+ // milliseconds, so we need to use 1000x.
+ const base::TimeTicks time_posted = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(1);
+ const base::TimeTicks delayed_start_time = base::TimeTicks();
+ const base::TimeTicks start_of_run = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(5);
+ const base::TimeTicks end_of_run = base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(7);
+ ThreadData::TallyADeathIfActive(birth, time_posted, delayed_start_time,
+ start_of_run, end_of_run);
+
+ int second_fake_line_number = 999;
+ Location second_location(kFunction, kFile, second_fake_line_number, NULL);
+ birth = ThreadData::TallyABirthIfActive(second_location);
+
+ int process_type = 2;
+ scoped_ptr<base::Value> value(ThreadData::ToValue(process_type));
std::string json;
base::JSONWriter::Write(value.get(), false, &json);
std::string one_line_result = "{"
@@ -595,9 +401,10 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
"\"line_number\":999"
"}"
"}"
- "]"
+ "],"
+ "\"process\":2"
"}";
- EXPECT_EQ(one_line_result, json);
+ EXPECT_EQ(json, one_line_result);
}
} // namespace tracked_objects