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

Unified Diff: base/debug/activity_tracker_unittest.cc

Issue 2422213002: Added support for storing arbitrary user data. (Closed)
Patch Set: some 'git cl format' changes Created 4 years, 1 month 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
« no previous file with comments | « base/debug/activity_tracker.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/activity_tracker_unittest.cc
diff --git a/base/debug/activity_tracker_unittest.cc b/base/debug/activity_tracker_unittest.cc
index 4132848885b549eac32144f30a07182f57604834..6e7630e0628c77e8fb495ba7e711dbeb6bbcb7b2 100644
--- a/base/debug/activity_tracker_unittest.cc
+++ b/base/debug/activity_tracker_unittest.cc
@@ -44,9 +44,11 @@ class TestActivityTracker : public ThreadActivityTracker {
class ActivityTrackerTest : public testing::Test {
public:
- const int kMemorySize = 1 << 10; // 1MiB
+ const int kMemorySize = 1 << 20; // 1MiB
const int kStackSize = 1 << 10; // 1KiB
+ using ActivityId = ThreadActivityTracker::ActivityId;
+
ActivityTrackerTest() {}
~ActivityTrackerTest() override {
@@ -78,9 +80,44 @@ class ActivityTrackerTest : public testing::Test {
return global_tracker->thread_tracker_allocator_.cache_used();
}
+ size_t GetGlobalUserDataMemoryCacheUsed() {
+ return GlobalActivityTracker::Get()->user_data_allocator_.cache_used();
+ }
+
static void DoNothing() {}
};
+TEST_F(ActivityTrackerTest, UserDataTest) {
+ char buffer[256];
+ memset(buffer, 0, sizeof(buffer));
+ ActivityUserData data(buffer, sizeof(buffer));
+ ASSERT_EQ(sizeof(buffer), data.available_);
+
+ data.SetInt("foo", 1);
+ ASSERT_EQ(sizeof(buffer) - 24, data.available_);
+
+ data.SetUint("b", 1U); // Small names fit beside header in a word.
+ ASSERT_EQ(sizeof(buffer) - 24 - 16, data.available_);
+
+ data.Set("c", buffer, 10);
+ ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24, data.available_);
+
+ data.SetString("dear john", "it's been fun");
+ ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_);
+
+ data.Set("c", buffer, 20);
+ ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_);
+
+ data.SetString("dear john", "but we're done together");
+ ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_);
+
+ data.SetString("dear john", "bye");
+ ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32, data.available_);
+
+ data.SetChar("d", 'x');
+ ASSERT_EQ(sizeof(buffer) - 24 - 16 - 24 - 32 - 16, data.available_);
+}
+
TEST_F(ActivityTrackerTest, PushPopTest) {
std::unique_ptr<ThreadActivityTracker> tracker = CreateActivityTracker();
ActivitySnapshot snapshot;
@@ -90,8 +127,8 @@ TEST_F(ActivityTrackerTest, PushPopTest) {
ASSERT_EQ(0U, snapshot.activity_stack.size());
char origin1;
- tracker->PushActivity(&origin1, Activity::ACT_TASK,
- ActivityData::ForTask(11));
+ ActivityId id1 = tracker->PushActivity(&origin1, Activity::ACT_TASK,
+ ActivityData::ForTask(11));
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(1U, snapshot.activity_stack_depth);
ASSERT_EQ(1U, snapshot.activity_stack.size());
@@ -103,8 +140,8 @@ TEST_F(ActivityTrackerTest, PushPopTest) {
char origin2;
char lock2;
- tracker->PushActivity(&origin2, Activity::ACT_LOCK,
- ActivityData::ForLock(&lock2));
+ ActivityId id2 = tracker->PushActivity(&origin2, Activity::ACT_LOCK,
+ ActivityData::ForLock(&lock2));
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(2U, snapshot.activity_stack_depth);
ASSERT_EQ(2U, snapshot.activity_stack.size());
@@ -116,7 +153,7 @@ TEST_F(ActivityTrackerTest, PushPopTest) {
EXPECT_EQ(reinterpret_cast<uintptr_t>(&lock2),
snapshot.activity_stack[1].data.lock.lock_address);
- tracker->PopActivity();
+ tracker->PopActivity(id2);
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(1U, snapshot.activity_stack_depth);
ASSERT_EQ(1U, snapshot.activity_stack.size());
@@ -125,7 +162,7 @@ TEST_F(ActivityTrackerTest, PushPopTest) {
snapshot.activity_stack[0].origin_address);
EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id);
- tracker->PopActivity();
+ tracker->PopActivity(id1);
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(0U, snapshot.activity_stack_depth);
ASSERT_EQ(0U, snapshot.activity_stack.size());
@@ -137,6 +174,7 @@ TEST_F(ActivityTrackerTest, ScopedTaskTest) {
ThreadActivityTracker* tracker =
GlobalActivityTracker::Get()->GetOrCreateTrackerForCurrentThread();
ActivitySnapshot snapshot;
+ ASSERT_EQ(0U, GetGlobalUserDataMemoryCacheUsed());
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(0U, snapshot.activity_stack_depth);
@@ -145,6 +183,8 @@ TEST_F(ActivityTrackerTest, ScopedTaskTest) {
{
PendingTask task1(FROM_HERE, base::Bind(&DoNothing));
ScopedTaskRunActivity activity1(task1);
+ ActivityUserData& user_data1 = activity1.user_data();
+ (void)user_data1; // Tell compiler it's been used.
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(1U, snapshot.activity_stack_depth);
@@ -154,6 +194,8 @@ TEST_F(ActivityTrackerTest, ScopedTaskTest) {
{
PendingTask task2(FROM_HERE, base::Bind(&DoNothing));
ScopedTaskRunActivity activity2(task2);
+ ActivityUserData& user_data2 = activity2.user_data();
+ (void)user_data2; // Tell compiler it's been used.
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(2U, snapshot.activity_stack_depth);
@@ -170,6 +212,7 @@ TEST_F(ActivityTrackerTest, ScopedTaskTest) {
ASSERT_TRUE(tracker->Snapshot(&snapshot));
ASSERT_EQ(0U, snapshot.activity_stack_depth);
ASSERT_EQ(0U, snapshot.activity_stack.size());
+ ASSERT_EQ(2U, GetGlobalUserDataMemoryCacheUsed());
}
TEST_F(ActivityTrackerTest, CreateWithFileTest) {
@@ -215,9 +258,10 @@ class SimpleActivityThread : public SimpleThread {
~SimpleActivityThread() override {}
void Run() override {
- GlobalActivityTracker::Get()
- ->GetOrCreateTrackerForCurrentThread()
- ->PushActivity(origin_, activity_, data_);
+ ThreadActivityTracker::ActivityId id =
+ GlobalActivityTracker::Get()
+ ->GetOrCreateTrackerForCurrentThread()
+ ->PushActivity(origin_, activity_, data_);
{
AutoLock auto_lock(lock_);
@@ -226,9 +270,7 @@ class SimpleActivityThread : public SimpleThread {
exit_condition_.Wait();
}
- GlobalActivityTracker::Get()
- ->GetOrCreateTrackerForCurrentThread()
- ->PopActivity();
+ GlobalActivityTracker::Get()->GetTrackerForCurrentThread()->PopActivity(id);
}
void Exit() {
« no previous file with comments | « base/debug/activity_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698