OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/debug/trace_event_unittest.h" | 6 #include "base/debug/trace_event_unittest.h" |
7 #include "base/test/trace_event_analyzer.h" | 7 #include "base/test/trace_event_analyzer.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 EXPECT_FALSE(event_arg1.Evaluate(other)); | 197 EXPECT_FALSE(event_arg1.Evaluate(other)); |
198 EXPECT_FALSE(event_arg2.Evaluate(other)); | 198 EXPECT_FALSE(event_arg2.Evaluate(other)); |
199 EXPECT_FALSE(event_has_other.Evaluate(other)); | 199 EXPECT_FALSE(event_has_other.Evaluate(other)); |
200 } | 200 } |
201 | 201 |
202 TEST_F(TraceEventAnalyzerTest, BooleanOperators) { | 202 TEST_F(TraceEventAnalyzerTest, BooleanOperators) { |
203 ManualSetUp(); | 203 ManualSetUp(); |
204 | 204 |
205 BeginTracing(); | 205 BeginTracing(); |
206 { | 206 { |
207 TRACE_EVENT_INSTANT1("cat1", "name1", "num", 1); | 207 TRACE_EVENT_INSTANT1("cat1", "name1", TRACE_EVENT_SCOPE_THREAD, "num", 1); |
208 TRACE_EVENT_INSTANT1("cat1", "name2", "num", 2); | 208 TRACE_EVENT_INSTANT1("cat1", "name2", TRACE_EVENT_SCOPE_THREAD, "num", 2); |
209 TRACE_EVENT_INSTANT1("cat2", "name3", "num", 3); | 209 TRACE_EVENT_INSTANT1("cat2", "name3", TRACE_EVENT_SCOPE_THREAD, "num", 3); |
210 TRACE_EVENT_INSTANT1("cat2", "name4", "num", 4); | 210 TRACE_EVENT_INSTANT1("cat2", "name4", TRACE_EVENT_SCOPE_THREAD, "num", 4); |
211 } | 211 } |
212 EndTracing(); | 212 EndTracing(); |
213 | 213 |
214 scoped_ptr<TraceAnalyzer> | 214 scoped_ptr<TraceAnalyzer> |
215 analyzer(TraceAnalyzer::Create(output_.json_output)); | 215 analyzer(TraceAnalyzer::Create(output_.json_output)); |
216 ASSERT_TRUE(!!analyzer.get()); | 216 ASSERT_TRUE(!!analyzer.get()); |
217 | 217 |
218 TraceEventVector found; | 218 TraceEventVector found; |
219 | 219 |
220 // == | 220 // == |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 EXPECT_STREQ("name2", found[0]->name.c_str()); | 282 EXPECT_STREQ("name2", found[0]->name.c_str()); |
283 EXPECT_STREQ("name4", found[1]->name.c_str()); | 283 EXPECT_STREQ("name4", found[1]->name.c_str()); |
284 } | 284 } |
285 | 285 |
286 TEST_F(TraceEventAnalyzerTest, ArithmeticOperators) { | 286 TEST_F(TraceEventAnalyzerTest, ArithmeticOperators) { |
287 ManualSetUp(); | 287 ManualSetUp(); |
288 | 288 |
289 BeginTracing(); | 289 BeginTracing(); |
290 { | 290 { |
291 // These events are searched for: | 291 // These events are searched for: |
292 TRACE_EVENT_INSTANT2("cat1", "math1", "a", 10, "b", 5); | 292 TRACE_EVENT_INSTANT2("cat1", "math1", TRACE_EVENT_SCOPE_THREAD, |
293 TRACE_EVENT_INSTANT2("cat1", "math2", "a", 10, "b", 10); | 293 "a", 10, "b", 5); |
| 294 TRACE_EVENT_INSTANT2("cat1", "math2", TRACE_EVENT_SCOPE_THREAD, |
| 295 "a", 10, "b", 10); |
294 // Extra events that never match, for noise: | 296 // Extra events that never match, for noise: |
295 TRACE_EVENT_INSTANT2("noise", "math3", "a", 1, "b", 3); | 297 TRACE_EVENT_INSTANT2("noise", "math3", TRACE_EVENT_SCOPE_THREAD, |
296 TRACE_EVENT_INSTANT2("noise", "math4", "c", 10, "d", 5); | 298 "a", 1, "b", 3); |
| 299 TRACE_EVENT_INSTANT2("noise", "math4", TRACE_EVENT_SCOPE_THREAD, |
| 300 "c", 10, "d", 5); |
297 } | 301 } |
298 EndTracing(); | 302 EndTracing(); |
299 | 303 |
300 scoped_ptr<TraceAnalyzer> | 304 scoped_ptr<TraceAnalyzer> |
301 analyzer(TraceAnalyzer::Create(output_.json_output)); | 305 analyzer(TraceAnalyzer::Create(output_.json_output)); |
302 ASSERT_TRUE(analyzer.get()); | 306 ASSERT_TRUE(analyzer.get()); |
303 | 307 |
304 TraceEventVector found; | 308 TraceEventVector found; |
305 | 309 |
306 // Verify that arithmetic operators function: | 310 // Verify that arithmetic operators function: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 analyzer->FindEvents(-Query::EventArg("b") == Query::Int(-10), &found); | 342 analyzer->FindEvents(-Query::EventArg("b") == Query::Int(-10), &found); |
339 EXPECT_EQ(1u, found.size()); | 343 EXPECT_EQ(1u, found.size()); |
340 EXPECT_STREQ("math2", found.front()->name.c_str()); | 344 EXPECT_STREQ("math2", found.front()->name.c_str()); |
341 } | 345 } |
342 | 346 |
343 TEST_F(TraceEventAnalyzerTest, StringPattern) { | 347 TEST_F(TraceEventAnalyzerTest, StringPattern) { |
344 ManualSetUp(); | 348 ManualSetUp(); |
345 | 349 |
346 BeginTracing(); | 350 BeginTracing(); |
347 { | 351 { |
348 TRACE_EVENT_INSTANT0("cat1", "name1"); | 352 TRACE_EVENT_INSTANT0("cat1", "name1", TRACE_EVENT_SCOPE_THREAD); |
349 TRACE_EVENT_INSTANT0("cat1", "name2"); | 353 TRACE_EVENT_INSTANT0("cat1", "name2", TRACE_EVENT_SCOPE_THREAD); |
350 TRACE_EVENT_INSTANT0("cat1", "no match"); | 354 TRACE_EVENT_INSTANT0("cat1", "no match", TRACE_EVENT_SCOPE_THREAD); |
351 TRACE_EVENT_INSTANT0("cat1", "name3x"); | 355 TRACE_EVENT_INSTANT0("cat1", "name3x", TRACE_EVENT_SCOPE_THREAD); |
352 } | 356 } |
353 EndTracing(); | 357 EndTracing(); |
354 | 358 |
355 scoped_ptr<TraceAnalyzer> | 359 scoped_ptr<TraceAnalyzer> |
356 analyzer(TraceAnalyzer::Create(output_.json_output)); | 360 analyzer(TraceAnalyzer::Create(output_.json_output)); |
357 ASSERT_TRUE(analyzer.get()); | 361 ASSERT_TRUE(analyzer.get()); |
358 | 362 |
359 TraceEventVector found; | 363 TraceEventVector found; |
360 | 364 |
361 analyzer->FindEvents(Query::EventName() == Query::Pattern("name?"), &found); | 365 analyzer->FindEvents(Query::EventName() == Query::Pattern("name?"), &found); |
(...skipping 20 matching lines...) Expand all Loading... |
382 // We will search for events that have a duration of greater than 90% of the | 386 // We will search for events that have a duration of greater than 90% of the |
383 // sleep time, so that there is no flakiness. | 387 // sleep time, so that there is no flakiness. |
384 int duration_cutoff_us = (kSleepTime.InMicroseconds() * 9) / 10; | 388 int duration_cutoff_us = (kSleepTime.InMicroseconds() * 9) / 10; |
385 | 389 |
386 BeginTracing(); | 390 BeginTracing(); |
387 { | 391 { |
388 TRACE_EVENT0("cat1", "name1"); // found by duration query | 392 TRACE_EVENT0("cat1", "name1"); // found by duration query |
389 TRACE_EVENT0("noise", "name2"); // not searched for, just noise | 393 TRACE_EVENT0("noise", "name2"); // not searched for, just noise |
390 { | 394 { |
391 TRACE_EVENT0("cat2", "name3"); // found by duration query | 395 TRACE_EVENT0("cat2", "name3"); // found by duration query |
392 TRACE_EVENT_INSTANT0("noise", "name4"); // not searched for, just noise | 396 // next event not searched for, just noise |
| 397 TRACE_EVENT_INSTANT0("noise", "name4", TRACE_EVENT_SCOPE_THREAD); |
393 base::debug::HighResSleepForTraceTest(kSleepTime); | 398 base::debug::HighResSleepForTraceTest(kSleepTime); |
394 TRACE_EVENT0("cat2", "name5"); // not found (duration too short) | 399 TRACE_EVENT0("cat2", "name5"); // not found (duration too short) |
395 } | 400 } |
396 } | 401 } |
397 EndTracing(); | 402 EndTracing(); |
398 | 403 |
399 scoped_ptr<TraceAnalyzer> | 404 scoped_ptr<TraceAnalyzer> |
400 analyzer(TraceAnalyzer::Create(output_.json_output)); | 405 analyzer(TraceAnalyzer::Create(output_.json_output)); |
401 ASSERT_TRUE(analyzer.get()); | 406 ASSERT_TRUE(analyzer.get()); |
402 analyzer->AssociateBeginEndEvents(); | 407 analyzer->AssociateBeginEndEvents(); |
(...skipping 12 matching lines...) Expand all Loading... |
415 } | 420 } |
416 | 421 |
417 // Test AssociateBeginEndEvents | 422 // Test AssociateBeginEndEvents |
418 TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) { | 423 TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) { |
419 ManualSetUp(); | 424 ManualSetUp(); |
420 | 425 |
421 BeginTracing(); | 426 BeginTracing(); |
422 { | 427 { |
423 TRACE_EVENT_END0("cat1", "name1"); // does not match out of order begin | 428 TRACE_EVENT_END0("cat1", "name1"); // does not match out of order begin |
424 TRACE_EVENT0("cat1", "name2"); | 429 TRACE_EVENT0("cat1", "name2"); |
425 TRACE_EVENT_INSTANT0("cat1", "name3"); | 430 TRACE_EVENT_INSTANT0("cat1", "name3", TRACE_EVENT_SCOPE_THREAD); |
426 TRACE_EVENT_BEGIN0("cat1", "name1"); | 431 TRACE_EVENT_BEGIN0("cat1", "name1"); |
427 } | 432 } |
428 EndTracing(); | 433 EndTracing(); |
429 | 434 |
430 scoped_ptr<TraceAnalyzer> | 435 scoped_ptr<TraceAnalyzer> |
431 analyzer(TraceAnalyzer::Create(output_.json_output)); | 436 analyzer(TraceAnalyzer::Create(output_.json_output)); |
432 ASSERT_TRUE(analyzer.get()); | 437 ASSERT_TRUE(analyzer.get()); |
433 analyzer->AssociateBeginEndEvents(); | 438 analyzer->AssociateBeginEndEvents(); |
434 | 439 |
435 TraceEventVector found; | 440 TraceEventVector found; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 | 473 |
469 // Test AssociateAsyncBeginEndEvents | 474 // Test AssociateAsyncBeginEndEvents |
470 TEST_F(TraceEventAnalyzerTest, AsyncBeginEndAssocations) { | 475 TEST_F(TraceEventAnalyzerTest, AsyncBeginEndAssocations) { |
471 ManualSetUp(); | 476 ManualSetUp(); |
472 | 477 |
473 BeginTracing(); | 478 BeginTracing(); |
474 { | 479 { |
475 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xA); // no match / out of order | 480 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xA); // no match / out of order |
476 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xB); | 481 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xB); |
477 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xC); | 482 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xC); |
478 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise | 483 TRACE_EVENT_INSTANT0("cat1", "name1", TRACE_EVENT_SCOPE_THREAD); // noise |
479 TRACE_EVENT0("cat1", "name1"); // noise | 484 TRACE_EVENT0("cat1", "name1"); // noise |
480 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xB); | 485 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xB); |
481 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xC); | 486 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xC); |
482 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xA); // no match / out of order | 487 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xA); // no match / out of order |
483 } | 488 } |
484 EndTracing(); | 489 EndTracing(); |
485 | 490 |
486 scoped_ptr<TraceAnalyzer> | 491 scoped_ptr<TraceAnalyzer> |
487 analyzer(TraceAnalyzer::Create(output_.json_output)); | 492 analyzer(TraceAnalyzer::Create(output_.json_output)); |
488 ASSERT_TRUE(analyzer.get()); | 493 ASSERT_TRUE(analyzer.get()); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 } | 553 } |
549 | 554 |
550 // Test that the TraceAnalyzer custom associations work. | 555 // Test that the TraceAnalyzer custom associations work. |
551 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { | 556 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { |
552 ManualSetUp(); | 557 ManualSetUp(); |
553 | 558 |
554 // Add events that begin/end in pipelined ordering with unique ID parameter | 559 // Add events that begin/end in pipelined ordering with unique ID parameter |
555 // to match up the begin/end pairs. | 560 // to match up the begin/end pairs. |
556 BeginTracing(); | 561 BeginTracing(); |
557 { | 562 { |
558 TRACE_EVENT_INSTANT1("cat1", "end", "id", 1); // no begin match | 563 // no begin match |
559 TRACE_EVENT_INSTANT1("cat2", "begin", "id", 2); // end is cat4 | 564 TRACE_EVENT_INSTANT1("cat1", "end", TRACE_EVENT_SCOPE_THREAD, "id", 1); |
560 TRACE_EVENT_INSTANT1("cat3", "begin", "id", 3); // end is cat5 | 565 // end is cat4 |
561 TRACE_EVENT_INSTANT1("cat4", "end", "id", 2); | 566 TRACE_EVENT_INSTANT1("cat2", "begin", TRACE_EVENT_SCOPE_THREAD, "id", 2); |
562 TRACE_EVENT_INSTANT1("cat5", "end", "id", 3); | 567 // end is cat5 |
563 TRACE_EVENT_INSTANT1("cat6", "begin", "id", 1); // no end match | 568 TRACE_EVENT_INSTANT1("cat3", "begin", TRACE_EVENT_SCOPE_THREAD, "id", 3); |
| 569 TRACE_EVENT_INSTANT1("cat4", "end", TRACE_EVENT_SCOPE_THREAD, "id", 2); |
| 570 TRACE_EVENT_INSTANT1("cat5", "end", TRACE_EVENT_SCOPE_THREAD, "id", 3); |
| 571 // no end match |
| 572 TRACE_EVENT_INSTANT1("cat6", "begin", TRACE_EVENT_SCOPE_THREAD, "id", 1); |
564 } | 573 } |
565 EndTracing(); | 574 EndTracing(); |
566 | 575 |
567 scoped_ptr<TraceAnalyzer> | 576 scoped_ptr<TraceAnalyzer> |
568 analyzer(TraceAnalyzer::Create(output_.json_output)); | 577 analyzer(TraceAnalyzer::Create(output_.json_output)); |
569 ASSERT_TRUE(analyzer.get()); | 578 ASSERT_TRUE(analyzer.get()); |
570 | 579 |
571 // begin, end, and match queries to find proper begin/end pairs. | 580 // begin, end, and match queries to find proper begin/end pairs. |
572 Query begin(Query::EventName() == Query::String("begin")); | 581 Query begin(Query::EventName() == Query::String("begin")); |
573 Query end(Query::EventName() == Query::String("end")); | 582 Query end(Query::EventName() == Query::String("end")); |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true))); | 825 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true))); |
817 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true), | 826 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true), |
818 1, num_events)); | 827 1, num_events)); |
819 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one)); | 828 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one)); |
820 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one)); | 829 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one)); |
821 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); | 830 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); |
822 } | 831 } |
823 | 832 |
824 | 833 |
825 } // namespace trace_analyzer | 834 } // namespace trace_analyzer |
OLD | NEW |