| 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
|
|
|