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

Side by Side Diff: chrome/test/base/trace_event_analyzer_unittest.cc

Issue 7981004: add classes trace_analyzer::Query and TraceAnalyzer to make it easy to search through trace data (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 9 years, 2 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "chrome/test/base/trace_event_analyzer.h"
7 #include "testing/gmock/include/gmock/gmock.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace trace_analyzer {
11
12 namespace {
13
14 class TraceEventAnalyzerTest : public testing::Test {
15 public:
16 void ManualSetUp();
17 void OnTraceDataCollected(
18 scoped_refptr<base::debug::TraceLog::RefCountedString> json_events_str);
19
20 std::string trace_string_;
21 };
22
23 void TraceEventAnalyzerTest::ManualSetUp() {
24 base::debug::TraceLog::Resurrect();
25 base::debug::TraceLog* tracelog = base::debug::TraceLog::GetInstance();
26 ASSERT_TRUE(tracelog);
27 tracelog->SetOutputCallback(
28 base::Bind(&TraceEventAnalyzerTest::OnTraceDataCollected,
29 base::Unretained(this)));
30 }
31
32 void TraceEventAnalyzerTest::OnTraceDataCollected(
33 scoped_refptr<base::debug::TraceLog::RefCountedString> json_events_str) {
34 trace_string_ = json_events_str->data;
35 }
36
37 } // namespace
38
39 // Test that the TraceAnalyzer works.
40 TEST_F(TraceEventAnalyzerTest, TraceAnalyzerBasic) {
41 using namespace trace_analyzer;
42 ManualSetUp();
43
44 base::debug::TraceLog::GetInstance()->SetEnabled(true);
45 {
46 TRACE_EVENT_END0("cat3", "name7");
47 TRACE_EVENT2("cat1", "name1", "arg1", 1111, "arg2", "string1");
48 {
49 TRACE_EVENT2("cat2", "name2", "arg1", 2222, "arg2", "string2");
50 TRACE_EVENT_INSTANT1("cat1", "name3", "arg1", 3333);
51 base::PlatformThread::Sleep(200);
52 TRACE_EVENT0("cat2", "name6");
53 }
54 TRACE_EVENT_INSTANT1("cat2", "name4", "arg1", 4444);
55 TRACE_EVENT_INSTANT1("cat2", "name5", "arg1", 1111);
56 TRACE_EVENT_BEGIN0("cat3", "name7");
57 TRACE_EVENT_INSTANT2("cat4", "math1", "a", 10, "b", 5);
58 TRACE_EVENT_INSTANT2("cat4", "math2", "a", 10, "b", 10);
59 }
60 base::debug::TraceLog::GetInstance()->SetEnabled(false);
61
62 const TraceEvent* event = NULL;
63 TraceAnalyzer analyzer(trace_string_);
64 analyzer.AssociateBeginEndEvents();
65
66 TraceAnalyzer::TraceEventVector found;
67
68 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat1", &found);
69 EXPECT_EQ(3u, found.size());
70
71 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat1" &&
72 Query(EVENT_ARG, "arg1") == 1111, &found);
73 ASSERT_EQ(1u, found.size());
74 EXPECT_STREQ("name1", found.front()->name.c_str());
75
76 analyzer.FindEvents(Query(EVENT_ARG, "arg1") == 1111 ||
77 Query(EVENT_ARG, "arg1") == 2222, &found);
78 EXPECT_EQ(3u, found.size());
79
80 analyzer.FindEvents(Query(EVENT_ARG, "arg1") == 1111 &&
81 Query(EVENT_NAME) != "name1", &found);
82 ASSERT_EQ(1u, found.size());
83 EXPECT_STREQ("name5", found.front()->name.c_str());
84
85 analyzer.FindEvents(Query(EVENT_ARG, "arg1") == 1111 &&
86 !(Query(EVENT_NAME) != "name1"), &found);
87 ASSERT_EQ(1u, found.size());
88 EXPECT_STREQ("name1", found.front()->name.c_str());
89
90 analyzer.FindEvents(Query::MatchBeginWithEnd() &&
91 Query(EVENT_DURATION) > 180000 &&
92 (Query(EVENT_CATEGORY) == "cat1" ||
93 Query(EVENT_CATEGORY) == "cat2" ||
94 Query(EVENT_CATEGORY) == "cat3"), &found);
95 EXPECT_EQ(2u, found.size());
96
97 analyzer.FindEvents(Query(EVENT_ARG, "arg1") <= 3333, &found);
98 EXPECT_EQ(4u, found.size());
99
100 analyzer.FindEvents(Query(EVENT_ARG, "arg1") >= 3333, &found);
101 EXPECT_EQ(2u, found.size());
102
103 analyzer.FindEvents(Query(EVENT_HAS_ARG, "arg1"), &found);
104 EXPECT_EQ(5u, found.size());
105
106 analyzer.FindEvents(Query(EVENT_ARG, "arg2") == "string1", &found);
107 ASSERT_EQ(1u, found.size());
108 EXPECT_STREQ("name1", found.front()->name.c_str());
109
110 analyzer.FindEvents(Query(EVENT_ARG, "arg2") == Query::Pattern("string?"),
111 &found);
112 EXPECT_EQ(2u, found.size());
113
114 analyzer.FindEvents(Query(EVENT_CATEGORY) == Query::Pattern("cat?") &&
115 Query(EVENT_NAME) != Query::Pattern("*"),
116 &found);
117 EXPECT_EQ(0u, found.size());
118
119 analyzer.FindEvents(!Query(EVENT_HAS_OTHER) &&
120 Query(EVENT_CATEGORY) == "cat2", &found);
121 EXPECT_EQ(2u, found.size());
122
123 event = analyzer.FindOneEvent(Query(OTHER_ARG, "arg1") == 1111);
124 ASSERT_TRUE(event);
125 EXPECT_STREQ("name1", event->name.c_str());
126
127 // Verify that matching END..BEGIN does not get associated.
128 ASSERT_TRUE(!analyzer.FindOneEvent(Query::MatchBeginName("name7")));
129
130 ASSERT_TRUE(!analyzer.FindOneEvent(Query(EVENT_ARG, "arg1") < 1111));
131
132 // Verify that arithmetic operators function:
133
134 analyzer.FindEvents(Query(EVENT_ARG, "a") + Query(EVENT_ARG, "b") == 20,
135 &found);
136 EXPECT_EQ(1u, found.size());
137 EXPECT_STREQ("math2", found.front()->name.c_str());
138
139 analyzer.FindEvents(Query(EVENT_ARG, "a") - Query(EVENT_ARG, "b") == 5,
140 &found);
141 EXPECT_EQ(1u, found.size());
142 EXPECT_STREQ("math1", found.front()->name.c_str());
143
144 analyzer.FindEvents(Query(EVENT_ARG, "a") * Query(EVENT_ARG, "b") == 50,
145 &found);
146 EXPECT_EQ(1u, found.size());
147 EXPECT_STREQ("math1", found.front()->name.c_str());
148
149 analyzer.FindEvents(Query(EVENT_ARG, "a") / Query(EVENT_ARG, "b") == 2,
150 &found);
151 EXPECT_EQ(1u, found.size());
152 EXPECT_STREQ("math1", found.front()->name.c_str());
153
154 analyzer.FindEvents(Query(EVENT_ARG, "a") % Query(EVENT_ARG, "b") == 0,
155 &found);
156 EXPECT_EQ(2u, found.size());
157
158 analyzer.FindEvents(-Query(EVENT_ARG, "b") == -10, &found);
159 EXPECT_EQ(1u, found.size());
160 EXPECT_STREQ("math2", found.front()->name.c_str());
161 }
162
163 // Test that the TraceAnalyzer custom associations work.
164 TEST_F(TraceEventAnalyzerTest, TraceAnalyzerAssociations) {
165 using namespace trace_analyzer;
166 ManualSetUp();
167
168 base::debug::TraceLog::GetInstance()->SetEnabled(true);
169 {
170 TRACE_EVENT_INSTANT1("cat1", "end", "id", 1);
171 TRACE_EVENT_INSTANT1("cat2", "begin", "id", 2);
172 TRACE_EVENT_INSTANT1("cat3", "begin", "id", 3);
173 TRACE_EVENT_INSTANT1("cat4", "end", "id", 2);
174 TRACE_EVENT_INSTANT1("cat5", "end", "id", 3);
175 TRACE_EVENT_INSTANT1("cat6", "begin", "id", 1);
176 }
177 base::debug::TraceLog::GetInstance()->SetEnabled(false);
178
179 TraceAnalyzer analyzer(trace_string_);
180
181 Query begin(Query(EVENT_NAME) == "begin");
182 Query end(Query(EVENT_NAME) == "end");
183 Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id"));
184 analyzer.AssociateEvents(begin, end, match);
185
186 TraceAnalyzer::TraceEventVector found;
187 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat1" &&
188 Query(EVENT_HAS_OTHER), &found);
189 EXPECT_EQ(0u, found.size());
190
191 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat1" &&
192 !Query(EVENT_HAS_OTHER), &found);
193 EXPECT_EQ(1u, found.size());
194
195 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat6" &&
196 !Query(EVENT_HAS_OTHER), &found);
197 EXPECT_EQ(1u, found.size());
198
199 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat2" &&
200 Query(OTHER_CATEGORY) == "cat4", &found);
201 EXPECT_EQ(1u, found.size());
202
203 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat4" &&
204 Query(OTHER_CATEGORY) == "cat2", &found);
205 EXPECT_EQ(1u, found.size());
206
207 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat3" &&
208 Query(OTHER_CATEGORY) == "cat5", &found);
209 EXPECT_EQ(1u, found.size());
210
211 analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat5" &&
212 Query(OTHER_CATEGORY) == "cat3", &found);
213 EXPECT_EQ(1u, found.size());
214 }
215
216
217 } // namespace trace_analyzer
218
OLDNEW
« chrome/test/base/trace_event_analyzer.cc ('K') | « chrome/test/base/trace_event_analyzer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698