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..635c0d6fa37eb5c21f73368899da14f19347010d 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,143 @@ 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); |
+ |
+ 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, "ref")); |
+ 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()); |
+} |
+ |
} // namespace debug |
} // namespace base |