| Index: base/debug/activity_analyzer_unittest.cc
|
| diff --git a/base/debug/activity_analyzer_unittest.cc b/base/debug/activity_analyzer_unittest.cc
|
| index 5cdb6c5fe48e45fe486fafecef97abf5c85f5357..57b5a21411f0599b76b5289be628d284e560b461 100644
|
| --- a/base/debug/activity_analyzer_unittest.cc
|
| +++ b/base/debug/activity_analyzer_unittest.cc
|
| @@ -16,6 +16,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/pending_task.h"
|
| #include "base/process/process.h"
|
| +#include "base/stl_util.h"
|
| #include "base/synchronization/condition_variable.h"
|
| #include "base/synchronization/lock.h"
|
| #include "base/synchronization/spin_wait.h"
|
| @@ -176,5 +177,145 @@ TEST_F(ActivityAnalyzerTest, GlobalAnalyzerConstruction) {
|
| EXPECT_EQ(tk1, tk2);
|
| }
|
|
|
| +TEST_F(ActivityAnalyzerTest, UserDataSnapshotTest) {
|
| + GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3);
|
| + ActivitySnapshot snapshot;
|
| +
|
| + const char string1a[] = "string1a";
|
| + const char string1b[] = "string1b";
|
| + const char string2a[] = "string2a";
|
| + const char string2b[] = "string2b";
|
| +
|
| + PersistentMemoryAllocator* allocator =
|
| + GlobalActivityTracker::Get()->allocator();
|
| + GlobalActivityAnalyzer global_analyzer(MakeUnique<PersistentMemoryAllocator>(
|
| + const_cast<void*>(allocator->data()), allocator->size(), 0, 0, "", true));
|
| +
|
| + ThreadActivityTracker* tracker =
|
| + GlobalActivityTracker::Get()->GetOrCreateTrackerForCurrentThread();
|
| +
|
| + {
|
| + ScopedActivity activity1(1, 11, 111);
|
| + ActivityUserData& user_data1 = activity1.user_data();
|
| + user_data1.Set("raw1", "foo1", 4);
|
| + user_data1.SetString("string1", "bar1");
|
| + user_data1.SetChar("char1", '1');
|
| + user_data1.SetInt("int1", -1111);
|
| + user_data1.SetUint("uint1", 1111);
|
| + user_data1.SetBool("bool1", true);
|
| + user_data1.SetReference("ref1", string1a, sizeof(string1a));
|
| + user_data1.SetStringReference("sref1", string1b);
|
| +
|
| + {
|
| + ScopedActivity activity2(2, 22, 222);
|
| + ActivityUserData& user_data2 = activity2.user_data();
|
| + user_data2.Set("raw2", "foo2", 4);
|
| + user_data2.SetString("string2", "bar2");
|
| + user_data2.SetChar("char2", '2');
|
| + user_data2.SetInt("int2", -2222);
|
| + user_data2.SetUint("uint2", 2222);
|
| + user_data2.SetBool("bool2", false);
|
| + user_data2.SetReference("ref2", string2a, sizeof(string2a));
|
| + user_data2.SetStringReference("sref2", string2b);
|
| +
|
| + ASSERT_TRUE(tracker->CreateSnapshot(&snapshot));
|
| + ASSERT_EQ(2U, snapshot.activity_stack.size());
|
| +
|
| + ThreadActivityAnalyzer analyzer(*tracker);
|
| + analyzer.AddGlobalInformation(&global_analyzer);
|
| + const ActivityUserData::Snapshot& user_data =
|
| + analyzer.GetUserDataSnapshot(1);
|
| + EXPECT_EQ(8U, user_data.size());
|
| + ASSERT_TRUE(ContainsKey(user_data, "raw2"));
|
| + EXPECT_EQ("foo2", user_data.at("raw2").Get().as_string());
|
| + ASSERT_TRUE(ContainsKey(user_data, "string2"));
|
| + EXPECT_EQ("bar2", user_data.at("string2").GetString().as_string());
|
| + ASSERT_TRUE(ContainsKey(user_data, "char2"));
|
| + EXPECT_EQ('2', user_data.at("char2").GetChar());
|
| + ASSERT_TRUE(ContainsKey(user_data, "int2"));
|
| + EXPECT_EQ(-2222, user_data.at("int2").GetInt());
|
| + ASSERT_TRUE(ContainsKey(user_data, "uint2"));
|
| + EXPECT_EQ(2222U, user_data.at("uint2").GetUint());
|
| + ASSERT_TRUE(ContainsKey(user_data, "bool2"));
|
| + EXPECT_FALSE(user_data.at("bool2").GetBool());
|
| + ASSERT_TRUE(ContainsKey(user_data, "ref2"));
|
| + EXPECT_EQ(string2a, user_data.at("ref2").GetReference().data());
|
| + EXPECT_EQ(sizeof(string2a), user_data.at("ref2").GetReference().size());
|
| + ASSERT_TRUE(ContainsKey(user_data, "sref2"));
|
| + EXPECT_EQ(string2b, user_data.at("sref2").GetStringReference().data());
|
| + EXPECT_EQ(strlen(string2b),
|
| + user_data.at("sref2").GetStringReference().size());
|
| + }
|
| +
|
| + ASSERT_TRUE(tracker->CreateSnapshot(&snapshot));
|
| + ASSERT_EQ(1U, snapshot.activity_stack.size());
|
| +
|
| + ThreadActivityAnalyzer analyzer(*tracker);
|
| + analyzer.AddGlobalInformation(&global_analyzer);
|
| + const ActivityUserData::Snapshot& user_data =
|
| + analyzer.GetUserDataSnapshot(0);
|
| + EXPECT_EQ(8U, user_data.size());
|
| + EXPECT_EQ("foo1", user_data.at("raw1").Get().as_string());
|
| + EXPECT_EQ("bar1", user_data.at("string1").GetString().as_string());
|
| + EXPECT_EQ('1', user_data.at("char1").GetChar());
|
| + EXPECT_EQ(-1111, user_data.at("int1").GetInt());
|
| + EXPECT_EQ(1111U, user_data.at("uint1").GetUint());
|
| + EXPECT_TRUE(user_data.at("bool1").GetBool());
|
| + EXPECT_EQ(string1a, user_data.at("ref1").GetReference().data());
|
| + EXPECT_EQ(sizeof(string1a), user_data.at("ref1").GetReference().size());
|
| + EXPECT_EQ(string1b, user_data.at("sref1").GetStringReference().data());
|
| + EXPECT_EQ(strlen(string1b),
|
| + user_data.at("sref1").GetStringReference().size());
|
| + }
|
| +
|
| + ASSERT_TRUE(tracker->CreateSnapshot(&snapshot));
|
| + ASSERT_EQ(0U, snapshot.activity_stack.size());
|
| +}
|
| +
|
| +TEST_F(ActivityAnalyzerTest, GlobalUserDataTest) {
|
| + GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3);
|
| +
|
| + const char string1[] = "foo";
|
| + const char string2[] = "bar";
|
| +
|
| + PersistentMemoryAllocator* allocator =
|
| + GlobalActivityTracker::Get()->allocator();
|
| + GlobalActivityAnalyzer global_analyzer(MakeUnique<PersistentMemoryAllocator>(
|
| + const_cast<void*>(allocator->data()), allocator->size(), 0, 0, "", true));
|
| +
|
| + ActivityUserData& global_data = GlobalActivityTracker::Get()->user_data();
|
| + global_data.Set("raw", "foo", 3);
|
| + global_data.SetString("string", "bar");
|
| + global_data.SetChar("char", '9');
|
| + global_data.SetInt("int", -9999);
|
| + global_data.SetUint("uint", 9999);
|
| + global_data.SetBool("bool", true);
|
| + global_data.SetReference("ref", string1, sizeof(string1));
|
| + global_data.SetStringReference("sref", string2);
|
| +
|
| +#if 0 // FIXME(bcwhite): Needs PMA change...
|
| + ActivityUserData::Snapshot snapshot =
|
| + global_analyzer.GetGlobalUserDataSnapshot();
|
| + ASSERT_TRUE(ContainsKey(snapshot, "raw"));
|
| + EXPECT_EQ("foo", snapshot.at("raw").Get().as_string());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "string"));
|
| + EXPECT_EQ("bar", snapshot.at("string").GetString().as_string());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "char"));
|
| + EXPECT_EQ('9', snapshot.at("char").GetChar());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "int"));
|
| + EXPECT_EQ(-9999, snapshot.at("int").GetInt());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "uint"));
|
| + EXPECT_EQ(9999U, snapshot.at("uint").GetUint());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "bool"));
|
| + EXPECT_TRUE(snapshot.at("bool").GetBool());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "ref2"));
|
| + EXPECT_EQ(string1, snapshot.at("ref").GetReference().data());
|
| + EXPECT_EQ(sizeof(string1), snapshot.at("ref").GetReference().size());
|
| + ASSERT_TRUE(ContainsKey(snapshot, "sref"));
|
| + EXPECT_EQ(string2, snapshot.at("sref").GetStringReference().data());
|
| + EXPECT_EQ(strlen(string2), snapshot.at("sref").GetStringReference().size());
|
| +#endif
|
| +}
|
| +
|
| } // namespace debug
|
| } // namespace base
|
|
|