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

Unified Diff: base/debug/activity_analyzer_unittest.cc

Issue 2511043003: Support for extracting user-data from activity tracking. (Closed)
Patch Set: rebased Created 4 years 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_analyzer.cc ('k') | base/debug/activity_tracker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/activity_analyzer_unittest.cc
diff --git a/base/debug/activity_analyzer_unittest.cc b/base/debug/activity_analyzer_unittest.cc
index c8c3911750d49e56348039ecd64c802444f3fc22..08ed85c66db3ca274751ebc1b9c02fe0cbb9b779 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,6 +177,150 @@ TEST_F(ActivityAnalyzerTest, GlobalAnalyzerConstruction) {
EXPECT_EQ(tk1, tk2);
}
+TEST_F(ActivityAnalyzerTest, UserDataSnapshotTest) {
+ GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3);
+ ThreadActivityAnalyzer::Snapshot 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 ThreadActivityAnalyzer::Snapshot& snapshot =
+ analyzer.activity_snapshot();
+ ASSERT_EQ(2U, snapshot.user_data_stack.size());
+ const ActivityUserData::Snapshot& user_data =
+ snapshot.user_data_stack.at(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 ThreadActivityAnalyzer::Snapshot& snapshot =
+ analyzer.activity_snapshot();
+ ASSERT_EQ(1U, snapshot.user_data_stack.size());
+ const ActivityUserData::Snapshot& user_data =
+ snapshot.user_data_stack.at(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());
+}
+
TEST_F(ActivityAnalyzerTest, GlobalLogMessages) {
GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3);
« no previous file with comments | « base/debug/activity_analyzer.cc ('k') | base/debug/activity_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698