| Index: base/tracked_objects_unittest.cc
|
| diff --git a/base/tracked_objects_unittest.cc b/base/tracked_objects_unittest.cc
|
| index b64e5fdd4e235868a8ad090175e105ab72a9e619..f208e3c9818fca3f5d1d54ea298471c883c64091 100644
|
| --- a/base/tracked_objects_unittest.cc
|
| +++ b/base/tracked_objects_unittest.cc
|
| @@ -11,14 +11,17 @@
|
|
|
| #include <memory>
|
|
|
| +#include "base/macros.h"
|
| #include "base/process/process_handle.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "base/threading/thread.h"
|
| #include "base/time/time.h"
|
| #include "base/tracking_info.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| const int kLineNumber = 1776;
|
| const char kFile[] = "FixedUnitTestFileName";
|
| -const char kWorkerThreadName[] = "WorkerThread-1";
|
| +const char kWorkerThreadName[] = "WorkerThread-*";
|
| const char kMainThreadName[] = "SomeMainThreadName";
|
| const char kStillAlive[] = "Still_Alive";
|
|
|
| @@ -92,7 +95,8 @@ class TrackedObjectsTest : public testing::Test {
|
| EXPECT_EQ(kLineNumber,
|
| process_data_phase.tasks[0].birth.location.line_number);
|
|
|
| - EXPECT_EQ(birth_thread, process_data_phase.tasks[0].birth.thread_name);
|
| + EXPECT_EQ(birth_thread,
|
| + process_data_phase.tasks[0].birth.sanitized_thread_name);
|
|
|
| EXPECT_EQ(count, process_data_phase.tasks[0].death_data.count);
|
| EXPECT_EQ(count * run_ms,
|
| @@ -107,7 +111,8 @@ class TrackedObjectsTest : public testing::Test {
|
| EXPECT_EQ(queue_ms,
|
| process_data_phase.tasks[0].death_data.queue_duration_sample);
|
|
|
| - EXPECT_EQ(death_thread, process_data_phase.tasks[0].death_thread_name);
|
| + EXPECT_EQ(death_thread,
|
| + process_data_phase.tasks[0].death_sanitized_thread_name);
|
|
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
| @@ -115,6 +120,16 @@ class TrackedObjectsTest : public testing::Test {
|
| // Sets time that will be returned by ThreadData::Now().
|
| static void SetTestTime(unsigned int test_time) { test_time_ = test_time; }
|
|
|
| + int GetNumThreadData() {
|
| + int num_thread_data = 0;
|
| + ThreadData* current = ThreadData::first();
|
| + while (current) {
|
| + ++num_thread_data;
|
| + current = current->next();
|
| + }
|
| + return num_thread_data;
|
| + }
|
| +
|
| private:
|
| // Returns test time in milliseconds.
|
| static unsigned int GetTestTime() { return test_time_; }
|
| @@ -230,7 +245,8 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
|
| 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(kWorkerThreadName,
|
| + process_data_phase.tasks[0].birth.sanitized_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);
|
| @@ -241,7 +257,8 @@ TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
|
| 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);
|
| + EXPECT_EQ(kWorkerThreadName,
|
| + process_data_phase.tasks[0].death_sanitized_thread_name);
|
| }
|
|
|
| TEST_F(TrackedObjectsTest, DeathDataTestRecordDurations) {
|
| @@ -659,7 +676,8 @@ TEST_F(TrackedObjectsTest, TwoPhases) {
|
| 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(kMainThreadName,
|
| + process_data_phase0.tasks[0].birth.sanitized_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);
|
| @@ -669,7 +687,8 @@ TEST_F(TrackedObjectsTest, TwoPhases) {
|
| 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(kMainThreadName,
|
| + process_data_phase0.tasks[0].death_sanitized_thread_name);
|
|
|
| auto it1 = process_data.phased_snapshots.find(1);
|
| ASSERT_TRUE(it1 != process_data.phased_snapshots.end());
|
| @@ -683,7 +702,8 @@ TEST_F(TrackedObjectsTest, TwoPhases) {
|
| 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(kMainThreadName,
|
| + process_data_phase1.tasks[0].birth.sanitized_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);
|
| @@ -693,7 +713,8 @@ TEST_F(TrackedObjectsTest, TwoPhases) {
|
| 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(kMainThreadName,
|
| + process_data_phase1.tasks[0].death_sanitized_thread_name);
|
|
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
| @@ -776,7 +797,8 @@ TEST_F(TrackedObjectsTest, ThreePhases) {
|
| 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(kMainThreadName,
|
| + process_data_phase0.tasks[0].birth.sanitized_thread_name);
|
|
|
| EXPECT_EQ(1, process_data_phase0.tasks[0].death_data.count);
|
| EXPECT_EQ(6, process_data_phase0.tasks[0].death_data.run_duration_sum);
|
| @@ -786,7 +808,8 @@ TEST_F(TrackedObjectsTest, ThreePhases) {
|
| EXPECT_EQ(7, process_data_phase0.tasks[0].death_data.queue_duration_max);
|
| EXPECT_EQ(7, process_data_phase0.tasks[0].death_data.queue_duration_sample);
|
|
|
| - EXPECT_EQ(kMainThreadName, process_data_phase0.tasks[0].death_thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase0.tasks[0].death_sanitized_thread_name);
|
|
|
| auto it1 = process_data.phased_snapshots.find(1);
|
| ASSERT_TRUE(it1 != process_data.phased_snapshots.end());
|
| @@ -800,7 +823,8 @@ TEST_F(TrackedObjectsTest, ThreePhases) {
|
| 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(kMainThreadName,
|
| + process_data_phase1.tasks[0].birth.sanitized_thread_name);
|
|
|
| EXPECT_EQ(1, process_data_phase1.tasks[0].death_data.count);
|
| EXPECT_EQ(4, process_data_phase1.tasks[0].death_data.run_duration_sum);
|
| @@ -810,7 +834,8 @@ TEST_F(TrackedObjectsTest, ThreePhases) {
|
| EXPECT_EQ(5, process_data_phase1.tasks[0].death_data.queue_duration_max);
|
| EXPECT_EQ(5, process_data_phase1.tasks[0].death_data.queue_duration_sample);
|
|
|
| - EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase1.tasks[0].death_sanitized_thread_name);
|
|
|
| auto it2 = process_data.phased_snapshots.find(2);
|
| ASSERT_TRUE(it2 != process_data.phased_snapshots.end());
|
| @@ -824,7 +849,8 @@ TEST_F(TrackedObjectsTest, ThreePhases) {
|
| EXPECT_EQ(kLineNumber,
|
| process_data_phase2.tasks[0].birth.location.line_number);
|
|
|
| - EXPECT_EQ(kMainThreadName, process_data_phase2.tasks[0].birth.thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase2.tasks[0].birth.sanitized_thread_name);
|
|
|
| EXPECT_EQ(1, process_data_phase2.tasks[0].death_data.count);
|
| EXPECT_EQ(2, process_data_phase2.tasks[0].death_data.run_duration_sum);
|
| @@ -834,7 +860,8 @@ TEST_F(TrackedObjectsTest, ThreePhases) {
|
| EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_max);
|
| EXPECT_EQ(3, process_data_phase2.tasks[0].death_data.queue_duration_sample);
|
|
|
| - EXPECT_EQ(kMainThreadName, process_data_phase2.tasks[0].death_thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase2.tasks[0].death_sanitized_thread_name);
|
|
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
| @@ -881,7 +908,8 @@ TEST_F(TrackedObjectsTest, TwoPhasesSecondEmpty) {
|
| 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(kMainThreadName,
|
| + process_data_phase0.tasks[0].birth.sanitized_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);
|
| @@ -891,7 +919,8 @@ TEST_F(TrackedObjectsTest, TwoPhasesSecondEmpty) {
|
| 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(kMainThreadName,
|
| + process_data_phase0.tasks[0].death_sanitized_thread_name);
|
|
|
| auto it1 = process_data.phased_snapshots.find(1);
|
| ASSERT_TRUE(it1 != process_data.phased_snapshots.end());
|
| @@ -944,7 +973,8 @@ TEST_F(TrackedObjectsTest, TwoPhasesFirstEmpty) {
|
| 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(kMainThreadName,
|
| + process_data_phase1.tasks[0].birth.sanitized_thread_name);
|
|
|
| EXPECT_EQ(1, process_data_phase1.tasks[0].death_data.count);
|
| EXPECT_EQ(2, process_data_phase1.tasks[0].death_data.run_duration_sum);
|
| @@ -954,7 +984,8 @@ TEST_F(TrackedObjectsTest, TwoPhasesFirstEmpty) {
|
| EXPECT_EQ(4, process_data_phase1.tasks[0].death_data.queue_duration_max);
|
| EXPECT_EQ(4, process_data_phase1.tasks[0].death_data.queue_duration_sample);
|
|
|
| - EXPECT_EQ(kMainThreadName, process_data_phase1.tasks[0].death_thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase1.tasks[0].death_sanitized_thread_name);
|
|
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
| @@ -1121,7 +1152,8 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
|
| 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(kMainThreadName,
|
| + process_data_phase.tasks[0].birth.sanitized_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);
|
| @@ -1129,13 +1161,15 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
|
| 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(kMainThreadName,
|
| + process_data_phase.tasks[0].death_sanitized_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_phase.tasks[1].birth.location.line_number);
|
| - EXPECT_EQ(kMainThreadName, process_data_phase.tasks[1].birth.thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase.tasks[1].birth.sanitized_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);
|
| @@ -1143,7 +1177,8 @@ TEST_F(TrackedObjectsTest, DifferentLives) {
|
| 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(kStillAlive,
|
| + process_data_phase.tasks[1].death_sanitized_thread_name);
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
| @@ -1286,7 +1321,8 @@ TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) {
|
| 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(kMainThreadName,
|
| + process_data_phase.tasks[t0].birth.sanitized_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);
|
| @@ -1294,13 +1330,15 @@ TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) {
|
| 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(kMainThreadName,
|
| + process_data_phase.tasks[t0].death_sanitized_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_phase.tasks[t1].birth.location.line_number);
|
| - EXPECT_EQ(kMainThreadName, process_data_phase.tasks[t1].birth.thread_name);
|
| + EXPECT_EQ(kMainThreadName,
|
| + process_data_phase.tasks[t1].birth.sanitized_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);
|
| @@ -1308,8 +1346,30 @@ TEST_F(TrackedObjectsTest, TaskWithNestedExclusionWithNestedTask) {
|
| 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(kMainThreadName,
|
| + process_data_phase.tasks[t1].death_sanitized_thread_name);
|
| EXPECT_EQ(base::GetCurrentProcId(), process_data.process_id);
|
| }
|
|
|
| +// Repetitively create and stop named threads. Verify that the number of
|
| +// instantiated ThreadData instance is equal to the number of different
|
| +// sanitized thread names used in the test.
|
| +TEST_F(TrackedObjectsTest, ReuseRetiredThreadData) {
|
| + const char* const kThreadNames[] = {"Foo%d", "Bar%d", "123Dummy%d",
|
| + "456Dummy%d", "%d"};
|
| + constexpr int kNumIterations = 10;
|
| + EXPECT_EQ(0, GetNumThreadData());
|
| +
|
| + for (int i = 0; i < kNumIterations; ++i) {
|
| + for (const char* thread_name : kThreadNames) {
|
| + base::Thread thread(base::StringPrintf(thread_name, i));
|
| + EXPECT_TRUE(thread.Start());
|
| + }
|
| + }
|
| +
|
| + // Expect one ThreadData instance for each element in |kThreadNames| and one
|
| + // ThreadData instance for the main thread.
|
| + EXPECT_EQ(static_cast<int>(arraysize(kThreadNames) + 1), GetNumThreadData());
|
| +}
|
| +
|
| } // namespace tracked_objects
|
|
|