Index: base/test/trace_event_analyzer_unittest.cc |
diff --git a/base/test/trace_event_analyzer_unittest.cc b/base/test/trace_event_analyzer_unittest.cc |
index af1a3e0c3aa8fadfcb0c630b76f5c525822fccf8..b133caefd6a26255deb9542b10e1d221513a2571 100644 |
--- a/base/test/trace_event_analyzer_unittest.cc |
+++ b/base/test/trace_event_analyzer_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/test/trace_event_analyzer.h" |
#include "base/threading/platform_thread.h" |
#include "base/trace_event/trace_buffer.h" |
+#include "base/trace_event/trace_event_argument.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -98,6 +99,7 @@ TEST_F(TraceEventAnalyzerTest, TraceEvent) { |
event.arg_numbers["int"] = static_cast<double>(int_num); |
event.arg_numbers["double"] = double_num; |
event.arg_strings["string"] = str; |
+ event.arg_values["dict"] = make_scoped_ptr(new base::DictionaryValue()); |
ASSERT_TRUE(event.HasNumberArg("false")); |
ASSERT_TRUE(event.HasNumberArg("true")); |
@@ -106,12 +108,18 @@ TEST_F(TraceEventAnalyzerTest, TraceEvent) { |
ASSERT_TRUE(event.HasStringArg("string")); |
ASSERT_FALSE(event.HasNumberArg("notfound")); |
ASSERT_FALSE(event.HasStringArg("notfound")); |
+ ASSERT_TRUE(event.HasArg("dict")); |
+ ASSERT_FALSE(event.HasArg("notfound")); |
EXPECT_FALSE(event.GetKnownArgAsBool("false")); |
EXPECT_TRUE(event.GetKnownArgAsBool("true")); |
EXPECT_EQ(int_num, event.GetKnownArgAsInt("int")); |
EXPECT_EQ(double_num, event.GetKnownArgAsDouble("double")); |
EXPECT_STREQ(str, event.GetKnownArgAsString("string").c_str()); |
+ |
+ scoped_ptr<base::Value> arg; |
+ EXPECT_TRUE(event.GetArgAsValue("dict", &arg)); |
+ EXPECT_EQ(base::Value::TYPE_DICTIONARY, arg->GetType()); |
} |
TEST_F(TraceEventAnalyzerTest, QueryEventMember) { |
@@ -712,8 +720,7 @@ TEST_F(TraceEventAnalyzerTest, RateStats) { |
std::vector<TraceEvent> events; |
events.reserve(100); |
TraceEventVector event_ptrs; |
- TraceEvent event; |
- event.timestamp = 0.0; |
+ double timestamp = 0.0; |
double little_delta = 1.0; |
double big_delta = 10.0; |
double tiny_delta = 0.1; |
@@ -722,8 +729,10 @@ TEST_F(TraceEventAnalyzerTest, RateStats) { |
// Insert 10 events, each apart by little_delta. |
for (int i = 0; i < 10; ++i) { |
- event.timestamp += little_delta; |
- events.push_back(event); |
+ timestamp += little_delta; |
+ TraceEvent event; |
+ event.timestamp = timestamp; |
+ events.push_back(std::move(event)); |
event_ptrs.push_back(&events.back()); |
} |
@@ -734,9 +743,13 @@ TEST_F(TraceEventAnalyzerTest, RateStats) { |
EXPECT_EQ(0.0, stats.standard_deviation_us); |
// Add an event apart by big_delta. |
- event.timestamp += big_delta; |
- events.push_back(event); |
- event_ptrs.push_back(&events.back()); |
+ { |
+ timestamp += big_delta; |
+ TraceEvent event; |
+ event.timestamp = timestamp; |
+ events.push_back(std::move(event)); |
+ event_ptrs.push_back(&events.back()); |
+ } |
ASSERT_TRUE(GetRateStats(event_ptrs, &stats, NULL)); |
EXPECT_LT(little_delta, stats.mean_us); |
@@ -754,9 +767,13 @@ TEST_F(TraceEventAnalyzerTest, RateStats) { |
EXPECT_EQ(0.0, stats.standard_deviation_us); |
// Add an event apart by tiny_delta. |
- event.timestamp += tiny_delta; |
- events.push_back(event); |
- event_ptrs.push_back(&events.back()); |
+ { |
+ timestamp += tiny_delta; |
+ TraceEvent event; |
+ event.timestamp = timestamp; |
+ events.push_back(std::move(event)); |
+ event_ptrs.push_back(&events.back()); |
+ } |
// Trim off both the biggest and tiniest delta and verify stats. |
options.trim_min = 1; |
@@ -768,17 +785,20 @@ TEST_F(TraceEventAnalyzerTest, RateStats) { |
EXPECT_EQ(0.0, stats.standard_deviation_us); |
// Verify smallest allowed number of events. |
- TraceEventVector few_event_ptrs; |
- few_event_ptrs.push_back(&event); |
- few_event_ptrs.push_back(&event); |
- ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, NULL)); |
- few_event_ptrs.push_back(&event); |
- ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats, NULL)); |
- |
- // Trim off more than allowed and verify failure. |
- options.trim_min = 0; |
- options.trim_max = 1; |
- ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, &options)); |
+ { |
+ TraceEvent event; |
+ TraceEventVector few_event_ptrs; |
+ few_event_ptrs.push_back(&event); |
+ few_event_ptrs.push_back(&event); |
+ ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, NULL)); |
+ few_event_ptrs.push_back(&event); |
+ ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats, NULL)); |
+ |
+ // Trim off more than allowed and verify failure. |
+ options.trim_min = 0; |
+ options.trim_max = 1; |
+ ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, &options)); |
+ } |
} |
// Test FindFirstOf and FindLastOf. |
@@ -895,5 +915,37 @@ TEST_F(TraceEventAnalyzerTest, CountMatches) { |
EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); |
} |
+TEST_F(TraceEventAnalyzerTest, ComplexArgument) { |
+ ManualSetUp(); |
+ |
+ BeginTracing(); |
+ { |
+ scoped_ptr<base::trace_event::TracedValue> value( |
+ new base::trace_event::TracedValue); |
+ value->SetString("property", "value"); |
+ TRACE_EVENT1("cat", "name", "arg", std::move(value)); |
+ } |
+ EndTracing(); |
+ |
+ scoped_ptr<TraceAnalyzer> analyzer( |
+ TraceAnalyzer::Create(output_.json_output)); |
+ ASSERT_TRUE(analyzer.get()); |
+ |
+ TraceEventVector events; |
+ analyzer->FindEvents(Query::EventName() == Query::String("name"), &events); |
+ |
+ EXPECT_EQ(1u, events.size()); |
+ EXPECT_EQ("cat", events[0]->category); |
+ EXPECT_EQ("name", events[0]->name); |
+ EXPECT_TRUE(events[0]->HasArg("arg")); |
+ |
+ scoped_ptr<base::Value> arg; |
+ events[0]->GetArgAsValue("arg", &arg); |
+ base::DictionaryValue* arg_dict; |
+ EXPECT_TRUE(arg->GetAsDictionary(&arg_dict)); |
+ std::string property; |
+ EXPECT_TRUE(arg_dict->GetString("property", &property)); |
+ EXPECT_EQ("value", property); |
+} |
} // namespace trace_analyzer |