| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/debug/activity_tracker.h" | 5 #include "base/debug/activity_tracker.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 return GlobalActivityTracker::Get()->user_data_allocator_.cache_used(); | 84 return GlobalActivityTracker::Get()->user_data_allocator_.cache_used(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 static void DoNothing() {} | 87 static void DoNothing() {} |
| 88 }; | 88 }; |
| 89 | 89 |
| 90 TEST_F(ActivityTrackerTest, UserDataTest) { | 90 TEST_F(ActivityTrackerTest, UserDataTest) { |
| 91 char buffer[256]; | 91 char buffer[256]; |
| 92 memset(buffer, 0, sizeof(buffer)); | 92 memset(buffer, 0, sizeof(buffer)); |
| 93 ActivityUserData data(buffer, sizeof(buffer)); | 93 ActivityUserData data(buffer, sizeof(buffer)); |
| 94 ASSERT_EQ(sizeof(buffer), data.available_); | 94 ASSERT_EQ(sizeof(buffer) - 8, data.available_); |
| 95 | 95 |
| 96 data.SetInt("foo", 1); | 96 data.SetInt("foo", 1); |
| 97 ASSERT_EQ(sizeof(buffer) - 24, data.available_); | 97 ASSERT_EQ(sizeof(buffer) - 8 - 24, data.available_); |
| 98 | 98 |
| 99 data.SetUint("b", 1U); // Small names fit beside header in a word. | 99 data.SetUint("b", 1U); // Small names fit beside header in a word. |
| 100 ASSERT_EQ(sizeof(buffer) - 24 - 16, data.available_); | 100 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16, data.available_); |
| 101 | 101 |
| 102 data.Set("c", buffer, 10); | 102 data.Set("c", buffer, 10); |
| 103 ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24, data.available_); | 103 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24, data.available_); |
| 104 | 104 |
| 105 data.SetString("dear john", "it's been fun"); | 105 data.SetString("dear john", "it's been fun"); |
| 106 ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_); | 106 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24 - 32, data.available_); |
| 107 | 107 |
| 108 data.Set("c", buffer, 20); | 108 data.Set("c", buffer, 20); |
| 109 ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_); | 109 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24 - 32, data.available_); |
| 110 | 110 |
| 111 data.SetString("dear john", "but we're done together"); | 111 data.SetString("dear john", "but we're done together"); |
| 112 ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_); | 112 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24 - 32, data.available_); |
| 113 | 113 |
| 114 data.SetString("dear john", "bye"); | 114 data.SetString("dear john", "bye"); |
| 115 ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_); | 115 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24 - 32, data.available_); |
| 116 | 116 |
| 117 data.SetChar("d", 'x'); | 117 data.SetChar("d", 'x'); |
| 118 ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32 - 16, data.available_); | 118 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24 - 32 - 8, data.available_); |
| 119 |
| 120 data.SetBool("ee", true); |
| 121 ASSERT_EQ(sizeof(buffer) - 8 - 24 - 16 - 24 - 32 - 8 - 16, data.available_); |
| 119 } | 122 } |
| 120 | 123 |
| 121 TEST_F(ActivityTrackerTest, PushPopTest) { | 124 TEST_F(ActivityTrackerTest, PushPopTest) { |
| 122 std::unique_ptr<ThreadActivityTracker> tracker = CreateActivityTracker(); | 125 std::unique_ptr<ThreadActivityTracker> tracker = CreateActivityTracker(); |
| 123 ActivitySnapshot snapshot; | 126 ThreadActivityTracker::Snapshot snapshot; |
| 124 | 127 |
| 125 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 128 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 126 ASSERT_EQ(0U, snapshot.activity_stack_depth); | 129 ASSERT_EQ(0U, snapshot.activity_stack_depth); |
| 127 ASSERT_EQ(0U, snapshot.activity_stack.size()); | 130 ASSERT_EQ(0U, snapshot.activity_stack.size()); |
| 128 | 131 |
| 129 char origin1; | 132 char origin1; |
| 130 ActivityId id1 = tracker->PushActivity(&origin1, Activity::ACT_TASK, | 133 ActivityId id1 = tracker->PushActivity(&origin1, Activity::ACT_TASK, |
| 131 ActivityData::ForTask(11)); | 134 ActivityData::ForTask(11)); |
| 132 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 135 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 133 ASSERT_EQ(1U, snapshot.activity_stack_depth); | 136 ASSERT_EQ(1U, snapshot.activity_stack_depth); |
| 134 ASSERT_EQ(1U, snapshot.activity_stack.size()); | 137 ASSERT_EQ(1U, snapshot.activity_stack.size()); |
| 135 EXPECT_NE(0, snapshot.activity_stack[0].time_internal); | 138 EXPECT_NE(0, snapshot.activity_stack[0].time_internal); |
| 136 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); | 139 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); |
| 137 EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin1), | 140 EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin1), |
| 138 snapshot.activity_stack[0].origin_address); | 141 snapshot.activity_stack[0].origin_address); |
| 139 EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id); | 142 EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id); |
| 140 | 143 |
| 141 char origin2; | 144 char origin2; |
| 142 char lock2; | 145 char lock2; |
| 143 ActivityId id2 = tracker->PushActivity(&origin2, Activity::ACT_LOCK, | 146 ActivityId id2 = tracker->PushActivity(&origin2, Activity::ACT_LOCK, |
| 144 ActivityData::ForLock(&lock2)); | 147 ActivityData::ForLock(&lock2)); |
| 145 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 148 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 146 ASSERT_EQ(2U, snapshot.activity_stack_depth); | 149 ASSERT_EQ(2U, snapshot.activity_stack_depth); |
| 147 ASSERT_EQ(2U, snapshot.activity_stack.size()); | 150 ASSERT_EQ(2U, snapshot.activity_stack.size()); |
| 148 EXPECT_LE(snapshot.activity_stack[0].time_internal, | 151 EXPECT_LE(snapshot.activity_stack[0].time_internal, |
| 149 snapshot.activity_stack[1].time_internal); | 152 snapshot.activity_stack[1].time_internal); |
| 150 EXPECT_EQ(Activity::ACT_LOCK, snapshot.activity_stack[1].activity_type); | 153 EXPECT_EQ(Activity::ACT_LOCK, snapshot.activity_stack[1].activity_type); |
| 151 EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin2), | 154 EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin2), |
| 152 snapshot.activity_stack[1].origin_address); | 155 snapshot.activity_stack[1].origin_address); |
| 153 EXPECT_EQ(reinterpret_cast<uintptr_t>(&lock2), | 156 EXPECT_EQ(reinterpret_cast<uintptr_t>(&lock2), |
| 154 snapshot.activity_stack[1].data.lock.lock_address); | 157 snapshot.activity_stack[1].data.lock.lock_address); |
| 155 | 158 |
| 156 tracker->PopActivity(id2); | 159 tracker->PopActivity(id2); |
| 157 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 160 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 158 ASSERT_EQ(1U, snapshot.activity_stack_depth); | 161 ASSERT_EQ(1U, snapshot.activity_stack_depth); |
| 159 ASSERT_EQ(1U, snapshot.activity_stack.size()); | 162 ASSERT_EQ(1U, snapshot.activity_stack.size()); |
| 160 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); | 163 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); |
| 161 EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin1), | 164 EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin1), |
| 162 snapshot.activity_stack[0].origin_address); | 165 snapshot.activity_stack[0].origin_address); |
| 163 EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id); | 166 EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id); |
| 164 | 167 |
| 165 tracker->PopActivity(id1); | 168 tracker->PopActivity(id1); |
| 166 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 169 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 167 ASSERT_EQ(0U, snapshot.activity_stack_depth); | 170 ASSERT_EQ(0U, snapshot.activity_stack_depth); |
| 168 ASSERT_EQ(0U, snapshot.activity_stack.size()); | 171 ASSERT_EQ(0U, snapshot.activity_stack.size()); |
| 169 } | 172 } |
| 170 | 173 |
| 171 TEST_F(ActivityTrackerTest, ScopedTaskTest) { | 174 TEST_F(ActivityTrackerTest, ScopedTaskTest) { |
| 172 GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3); | 175 GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3); |
| 173 | 176 |
| 174 ThreadActivityTracker* tracker = | 177 ThreadActivityTracker* tracker = |
| 175 GlobalActivityTracker::Get()->GetOrCreateTrackerForCurrentThread(); | 178 GlobalActivityTracker::Get()->GetOrCreateTrackerForCurrentThread(); |
| 176 ActivitySnapshot snapshot; | 179 ThreadActivityTracker::Snapshot snapshot; |
| 177 ASSERT_EQ(0U, GetGlobalUserDataMemoryCacheUsed()); | 180 ASSERT_EQ(0U, GetGlobalUserDataMemoryCacheUsed()); |
| 178 | 181 |
| 179 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 182 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 180 ASSERT_EQ(0U, snapshot.activity_stack_depth); | 183 ASSERT_EQ(0U, snapshot.activity_stack_depth); |
| 181 ASSERT_EQ(0U, snapshot.activity_stack.size()); | 184 ASSERT_EQ(0U, snapshot.activity_stack.size()); |
| 182 | 185 |
| 183 { | 186 { |
| 184 PendingTask task1(FROM_HERE, base::Bind(&DoNothing)); | 187 PendingTask task1(FROM_HERE, base::Bind(&DoNothing)); |
| 185 ScopedTaskRunActivity activity1(task1); | 188 ScopedTaskRunActivity activity1(task1); |
| 186 ActivityUserData& user_data1 = activity1.user_data(); | 189 ActivityUserData& user_data1 = activity1.user_data(); |
| 187 (void)user_data1; // Tell compiler it's been used. | 190 (void)user_data1; // Tell compiler it's been used. |
| 188 | 191 |
| 189 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 192 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 190 ASSERT_EQ(1U, snapshot.activity_stack_depth); | 193 ASSERT_EQ(1U, snapshot.activity_stack_depth); |
| 191 ASSERT_EQ(1U, snapshot.activity_stack.size()); | 194 ASSERT_EQ(1U, snapshot.activity_stack.size()); |
| 192 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); | 195 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); |
| 193 | 196 |
| 194 { | 197 { |
| 195 PendingTask task2(FROM_HERE, base::Bind(&DoNothing)); | 198 PendingTask task2(FROM_HERE, base::Bind(&DoNothing)); |
| 196 ScopedTaskRunActivity activity2(task2); | 199 ScopedTaskRunActivity activity2(task2); |
| 197 ActivityUserData& user_data2 = activity2.user_data(); | 200 ActivityUserData& user_data2 = activity2.user_data(); |
| 198 (void)user_data2; // Tell compiler it's been used. | 201 (void)user_data2; // Tell compiler it's been used. |
| 199 | 202 |
| 200 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 203 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 201 ASSERT_EQ(2U, snapshot.activity_stack_depth); | 204 ASSERT_EQ(2U, snapshot.activity_stack_depth); |
| 202 ASSERT_EQ(2U, snapshot.activity_stack.size()); | 205 ASSERT_EQ(2U, snapshot.activity_stack.size()); |
| 203 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[1].activity_type); | 206 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[1].activity_type); |
| 204 } | 207 } |
| 205 | 208 |
| 206 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 209 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 207 ASSERT_EQ(1U, snapshot.activity_stack_depth); | 210 ASSERT_EQ(1U, snapshot.activity_stack_depth); |
| 208 ASSERT_EQ(1U, snapshot.activity_stack.size()); | 211 ASSERT_EQ(1U, snapshot.activity_stack.size()); |
| 209 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); | 212 EXPECT_EQ(Activity::ACT_TASK, snapshot.activity_stack[0].activity_type); |
| 210 } | 213 } |
| 211 | 214 |
| 212 ASSERT_TRUE(tracker->Snapshot(&snapshot)); | 215 ASSERT_TRUE(tracker->CreateSnapshot(&snapshot)); |
| 213 ASSERT_EQ(0U, snapshot.activity_stack_depth); | 216 ASSERT_EQ(0U, snapshot.activity_stack_depth); |
| 214 ASSERT_EQ(0U, snapshot.activity_stack.size()); | 217 ASSERT_EQ(0U, snapshot.activity_stack.size()); |
| 215 ASSERT_EQ(2U, GetGlobalUserDataMemoryCacheUsed()); | 218 ASSERT_EQ(2U, GetGlobalUserDataMemoryCacheUsed()); |
| 216 } | 219 } |
| 217 | 220 |
| 218 TEST_F(ActivityTrackerTest, CreateWithFileTest) { | 221 TEST_F(ActivityTrackerTest, CreateWithFileTest) { |
| 219 const char temp_name[] = "CreateWithFileTest"; | 222 const char temp_name[] = "CreateWithFileTest"; |
| 220 ScopedTempDir temp_dir; | 223 ScopedTempDir temp_dir; |
| 221 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 224 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 222 FilePath temp_file = temp_dir.GetPath().AppendASCII(temp_name); | 225 FilePath temp_file = temp_dir.GetPath().AppendASCII(temp_name); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 EXPECT_EQ(starting_inactive, GetGlobalInactiveTrackerCount()); | 327 EXPECT_EQ(starting_inactive, GetGlobalInactiveTrackerCount()); |
| 325 | 328 |
| 326 t2.Exit(); | 329 t2.Exit(); |
| 327 t2.Join(); | 330 t2.Join(); |
| 328 EXPECT_EQ(starting_active, GetGlobalActiveTrackerCount()); | 331 EXPECT_EQ(starting_active, GetGlobalActiveTrackerCount()); |
| 329 EXPECT_EQ(starting_inactive + 1, GetGlobalInactiveTrackerCount()); | 332 EXPECT_EQ(starting_inactive + 1, GetGlobalInactiveTrackerCount()); |
| 330 } | 333 } |
| 331 | 334 |
| 332 } // namespace debug | 335 } // namespace debug |
| 333 } // namespace base | 336 } // namespace base |
| OLD | NEW |