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

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

Issue 8900001: Add searching features to new TraceEventVector class for tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: const ref params Created 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/test/trace_event_analyzer.cc ('k') | chrome/test/gpu/gpu_feature_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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/test/trace_event_analyzer.h" 6 #include "base/test/trace_event_analyzer.h"
7 #include "testing/gmock/include/gmock/gmock.h" 7 #include "testing/gmock/include/gmock/gmock.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace trace_analyzer { 10 namespace trace_analyzer {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 // Create an empty JSON event string: 59 // Create an empty JSON event string:
60 buffer_.Start(); 60 buffer_.Start();
61 buffer_.Finish(); 61 buffer_.Finish();
62 62
63 scoped_ptr<TraceAnalyzer> 63 scoped_ptr<TraceAnalyzer>
64 analyzer(TraceAnalyzer::Create(output_.json_output)); 64 analyzer(TraceAnalyzer::Create(output_.json_output));
65 ASSERT_TRUE(analyzer.get()); 65 ASSERT_TRUE(analyzer.get());
66 66
67 // Search for all events and verify that nothing is returned. 67 // Search for all events and verify that nothing is returned.
68 TraceAnalyzer::TraceEventVector found; 68 TraceEventVector found;
69 analyzer->FindEvents(Query::Bool(true), &found); 69 analyzer->FindEvents(Query::Bool(true), &found);
70 EXPECT_EQ(0u, found.size()); 70 EXPECT_EQ(0u, found.size());
71 } 71 }
72 72
73 TEST_F(TraceEventAnalyzerTest, TraceEvent) { 73 TEST_F(TraceEventAnalyzerTest, TraceEvent) {
74 using namespace trace_analyzer; 74 using namespace trace_analyzer;
75 ManualSetUp(); 75 ManualSetUp();
76 76
77 int int_num = 2; 77 int int_num = 2;
78 double double_num = 3.5; 78 double double_num = 3.5;
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 TRACE_EVENT_INSTANT1("cat1", "name2", "num", 2); 214 TRACE_EVENT_INSTANT1("cat1", "name2", "num", 2);
215 TRACE_EVENT_INSTANT1("cat2", "name3", "num", 3); 215 TRACE_EVENT_INSTANT1("cat2", "name3", "num", 3);
216 TRACE_EVENT_INSTANT1("cat2", "name4", "num", 4); 216 TRACE_EVENT_INSTANT1("cat2", "name4", "num", 4);
217 } 217 }
218 EndTracing(); 218 EndTracing();
219 219
220 scoped_ptr<TraceAnalyzer> 220 scoped_ptr<TraceAnalyzer>
221 analyzer(TraceAnalyzer::Create(output_.json_output)); 221 analyzer(TraceAnalyzer::Create(output_.json_output));
222 ASSERT_TRUE(!!analyzer.get()); 222 ASSERT_TRUE(!!analyzer.get());
223 223
224 TraceAnalyzer::TraceEventVector found; 224 TraceEventVector found;
225 225
226 // == 226 // ==
227 227
228 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1"), &found); 228 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1"), &found);
229 ASSERT_EQ(2u, found.size()); 229 ASSERT_EQ(2u, found.size());
230 EXPECT_STREQ("name1", found[0]->name.c_str()); 230 EXPECT_STREQ("name1", found[0]->name.c_str());
231 EXPECT_STREQ("name2", found[1]->name.c_str()); 231 EXPECT_STREQ("name2", found[1]->name.c_str());
232 232
233 analyzer->FindEvents(Query(EVENT_ARG, "num") == Query::Int(2), &found); 233 analyzer->FindEvents(Query(EVENT_ARG, "num") == Query::Int(2), &found);
234 ASSERT_EQ(1u, found.size()); 234 ASSERT_EQ(1u, found.size());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 // Extra events that never match, for noise: 301 // Extra events that never match, for noise:
302 TRACE_EVENT_INSTANT2("noise", "math3", "a", 1, "b", 3); 302 TRACE_EVENT_INSTANT2("noise", "math3", "a", 1, "b", 3);
303 TRACE_EVENT_INSTANT2("noise", "math4", "c", 10, "d", 5); 303 TRACE_EVENT_INSTANT2("noise", "math4", "c", 10, "d", 5);
304 } 304 }
305 EndTracing(); 305 EndTracing();
306 306
307 scoped_ptr<TraceAnalyzer> 307 scoped_ptr<TraceAnalyzer>
308 analyzer(TraceAnalyzer::Create(output_.json_output)); 308 analyzer(TraceAnalyzer::Create(output_.json_output));
309 ASSERT_TRUE(analyzer.get()); 309 ASSERT_TRUE(analyzer.get());
310 310
311 TraceAnalyzer::TraceEventVector found; 311 TraceEventVector found;
312 312
313 // Verify that arithmetic operators function: 313 // Verify that arithmetic operators function:
314 314
315 // + 315 // +
316 analyzer->FindEvents(Query(EVENT_ARG, "a") + Query(EVENT_ARG, "b") == 316 analyzer->FindEvents(Query(EVENT_ARG, "a") + Query(EVENT_ARG, "b") ==
317 Query::Int(20), &found); 317 Query::Int(20), &found);
318 EXPECT_EQ(1u, found.size()); 318 EXPECT_EQ(1u, found.size());
319 EXPECT_STREQ("math2", found.front()->name.c_str()); 319 EXPECT_STREQ("math2", found.front()->name.c_str());
320 320
321 // - 321 // -
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 TRACE_EVENT_INSTANT0("cat1", "name2"); 357 TRACE_EVENT_INSTANT0("cat1", "name2");
358 TRACE_EVENT_INSTANT0("cat1", "no match"); 358 TRACE_EVENT_INSTANT0("cat1", "no match");
359 TRACE_EVENT_INSTANT0("cat1", "name3x"); 359 TRACE_EVENT_INSTANT0("cat1", "name3x");
360 } 360 }
361 EndTracing(); 361 EndTracing();
362 362
363 scoped_ptr<TraceAnalyzer> 363 scoped_ptr<TraceAnalyzer>
364 analyzer(TraceAnalyzer::Create(output_.json_output)); 364 analyzer(TraceAnalyzer::Create(output_.json_output));
365 ASSERT_TRUE(analyzer.get()); 365 ASSERT_TRUE(analyzer.get());
366 366
367 TraceAnalyzer::TraceEventVector found; 367 TraceEventVector found;
368 368
369 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name?"), &found); 369 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name?"), &found);
370 ASSERT_EQ(2u, found.size()); 370 ASSERT_EQ(2u, found.size());
371 EXPECT_STREQ("name1", found[0]->name.c_str()); 371 EXPECT_STREQ("name1", found[0]->name.c_str());
372 EXPECT_STREQ("name2", found[1]->name.c_str()); 372 EXPECT_STREQ("name2", found[1]->name.c_str());
373 373
374 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name*"), &found); 374 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name*"), &found);
375 ASSERT_EQ(3u, found.size()); 375 ASSERT_EQ(3u, found.size());
376 EXPECT_STREQ("name1", found[0]->name.c_str()); 376 EXPECT_STREQ("name1", found[0]->name.c_str());
377 EXPECT_STREQ("name2", found[1]->name.c_str()); 377 EXPECT_STREQ("name2", found[1]->name.c_str());
(...skipping 25 matching lines...) Expand all
403 TRACE_EVENT0("cat2", "name5"); // not found (duration too short) 403 TRACE_EVENT0("cat2", "name5"); // not found (duration too short)
404 } 404 }
405 } 405 }
406 EndTracing(); 406 EndTracing();
407 407
408 scoped_ptr<TraceAnalyzer> 408 scoped_ptr<TraceAnalyzer>
409 analyzer(TraceAnalyzer::Create(output_.json_output)); 409 analyzer(TraceAnalyzer::Create(output_.json_output));
410 ASSERT_TRUE(analyzer.get()); 410 ASSERT_TRUE(analyzer.get());
411 analyzer->AssociateBeginEndEvents(); 411 analyzer->AssociateBeginEndEvents();
412 412
413 TraceAnalyzer::TraceEventVector found; 413 TraceEventVector found;
414 analyzer->FindEvents(Query::MatchBeginWithEnd() && 414 analyzer->FindEvents(Query::MatchBeginWithEnd() &&
415 Query(EVENT_DURATION) > Query::Int(duration_cutoff_us) && 415 Query(EVENT_DURATION) > Query::Int(duration_cutoff_us) &&
416 (Query(EVENT_CATEGORY) == Query::String("cat1") || 416 (Query(EVENT_CATEGORY) == Query::String("cat1") ||
417 Query(EVENT_CATEGORY) == Query::String("cat2") || 417 Query(EVENT_CATEGORY) == Query::String("cat2") ||
418 Query(EVENT_CATEGORY) == Query::String("cat3")), &found); 418 Query(EVENT_CATEGORY) == Query::String("cat3")), &found);
419 ASSERT_EQ(2u, found.size()); 419 ASSERT_EQ(2u, found.size());
420 EXPECT_STREQ("name1", found[0]->name.c_str()); 420 EXPECT_STREQ("name1", found[0]->name.c_str());
421 EXPECT_STREQ("name3", found[1]->name.c_str()); 421 EXPECT_STREQ("name3", found[1]->name.c_str());
422 } 422 }
423 423
424 // Test AssociateBeginEndEvents 424 // Test AssociateBeginEndEvents
425 TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) { 425 TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) {
426 using namespace trace_analyzer; 426 using namespace trace_analyzer;
427 ManualSetUp(); 427 ManualSetUp();
428 428
429 BeginTracing(); 429 BeginTracing();
430 { 430 {
431 TRACE_EVENT_END0("cat1", "name1"); // does not match out of order begin 431 TRACE_EVENT_END0("cat1", "name1"); // does not match out of order begin
432 TRACE_EVENT0("cat1", "name2"); 432 TRACE_EVENT0("cat1", "name2");
433 TRACE_EVENT_INSTANT0("cat1", "name3"); 433 TRACE_EVENT_INSTANT0("cat1", "name3");
434 TRACE_EVENT_BEGIN0("cat1", "name1"); 434 TRACE_EVENT_BEGIN0("cat1", "name1");
435 } 435 }
436 EndTracing(); 436 EndTracing();
437 437
438 scoped_ptr<TraceAnalyzer> 438 scoped_ptr<TraceAnalyzer>
439 analyzer(TraceAnalyzer::Create(output_.json_output)); 439 analyzer(TraceAnalyzer::Create(output_.json_output));
440 ASSERT_TRUE(analyzer.get()); 440 ASSERT_TRUE(analyzer.get());
441 analyzer->AssociateBeginEndEvents(); 441 analyzer->AssociateBeginEndEvents();
442 442
443 TraceAnalyzer::TraceEventVector found; 443 TraceEventVector found;
444 analyzer->FindEvents(Query::MatchBeginWithEnd(), &found); 444 analyzer->FindEvents(Query::MatchBeginWithEnd(), &found);
445 ASSERT_EQ(1u, found.size()); 445 ASSERT_EQ(1u, found.size());
446 EXPECT_STREQ("name2", found[0]->name.c_str()); 446 EXPECT_STREQ("name2", found[0]->name.c_str());
447 } 447 }
448 448
449 // Test MergeAssociatedEventArgs
450 TEST_F(TraceEventAnalyzerTest, MergeAssociatedEventArgs) {
451 using namespace trace_analyzer;
452 ManualSetUp();
453
454 const char* arg_string = "arg_string";
455 BeginTracing();
456 {
457 TRACE_EVENT1("cat1", "name1", "arg", arg_string);
458 }
459 EndTracing();
460
461 scoped_ptr<TraceAnalyzer>
462 analyzer(TraceAnalyzer::Create(output_.json_output));
463 ASSERT_TRUE(analyzer.get());
464 analyzer->AssociateBeginEndEvents();
465
466 TraceEventVector found;
467 analyzer->FindEvents(Query(EVENT_NAME) == Query::String("name1") &&
468 Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_END), &found);
469 ASSERT_EQ(1u, found.size());
470 std::string arg_actual;
471 EXPECT_FALSE(found[0]->GetArgAsString("arg", &arg_actual));
472
473 analyzer->MergeAssociatedEventArgs();
474 EXPECT_TRUE(found[0]->GetArgAsString("arg", &arg_actual));
475 EXPECT_STREQ(arg_string, arg_actual.c_str());
476 }
477
449 // Test AssociateStartFinishEvents 478 // Test AssociateStartFinishEvents
450 TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) { 479 TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) {
451 using namespace trace_analyzer; 480 using namespace trace_analyzer;
452 ManualSetUp(); 481 ManualSetUp();
453 482
454 BeginTracing(); 483 BeginTracing();
455 { 484 {
456 TRACE_EVENT_FINISH0("cat1", "name1", 0xA); // does not match / out of order 485 TRACE_EVENT_FINISH0("cat1", "name1", 0xA); // does not match / out of order
457 TRACE_EVENT_START0("cat1", "name1", 0xB); 486 TRACE_EVENT_START0("cat1", "name1", 0xB);
458 TRACE_EVENT_START0("cat1", "name1", 0xC); 487 TRACE_EVENT_START0("cat1", "name1", 0xC);
459 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise 488 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise
460 TRACE_EVENT0("cat1", "name1"); // noise 489 TRACE_EVENT0("cat1", "name1"); // noise
461 TRACE_EVENT_FINISH0("cat1", "name1", 0xB); 490 TRACE_EVENT_FINISH0("cat1", "name1", 0xB);
462 TRACE_EVENT_FINISH0("cat1", "name1", 0xC); 491 TRACE_EVENT_FINISH0("cat1", "name1", 0xC);
463 TRACE_EVENT_START0("cat1", "name1", 0xA); // does not match / out of order 492 TRACE_EVENT_START0("cat1", "name1", 0xA); // does not match / out of order
464 } 493 }
465 EndTracing(); 494 EndTracing();
466 495
467 scoped_ptr<TraceAnalyzer> 496 scoped_ptr<TraceAnalyzer>
468 analyzer(TraceAnalyzer::Create(output_.json_output)); 497 analyzer(TraceAnalyzer::Create(output_.json_output));
469 ASSERT_TRUE(analyzer.get()); 498 ASSERT_TRUE(analyzer.get());
470 analyzer->AssociateStartFinishEvents(); 499 analyzer->AssociateStartFinishEvents();
471 500
472 TraceAnalyzer::TraceEventVector found; 501 TraceEventVector found;
473 analyzer->FindEvents(Query::MatchStartWithFinish(), &found); 502 analyzer->FindEvents(Query::MatchStartWithFinish(), &found);
474 ASSERT_EQ(2u, found.size()); 503 ASSERT_EQ(2u, found.size());
475 EXPECT_STRCASEEQ("B", found[0]->id.c_str()); 504 EXPECT_STRCASEEQ("B", found[0]->id.c_str());
476 EXPECT_STRCASEEQ("C", found[1]->id.c_str()); 505 EXPECT_STRCASEEQ("C", found[1]->id.c_str());
477 } 506 }
478 507
479 // Test that the TraceAnalyzer custom associations work. 508 // Test that the TraceAnalyzer custom associations work.
480 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { 509 TEST_F(TraceEventAnalyzerTest, CustomAssociations) {
481 using namespace trace_analyzer; 510 using namespace trace_analyzer;
482 ManualSetUp(); 511 ManualSetUp();
(...skipping 14 matching lines...) Expand all
497 scoped_ptr<TraceAnalyzer> 526 scoped_ptr<TraceAnalyzer>
498 analyzer(TraceAnalyzer::Create(output_.json_output)); 527 analyzer(TraceAnalyzer::Create(output_.json_output));
499 ASSERT_TRUE(analyzer.get()); 528 ASSERT_TRUE(analyzer.get());
500 529
501 // begin, end, and match queries to find proper begin/end pairs. 530 // begin, end, and match queries to find proper begin/end pairs.
502 Query begin(Query(EVENT_NAME) == Query::String("begin")); 531 Query begin(Query(EVENT_NAME) == Query::String("begin"));
503 Query end(Query(EVENT_NAME) == Query::String("end")); 532 Query end(Query(EVENT_NAME) == Query::String("end"));
504 Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id")); 533 Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id"));
505 analyzer->AssociateEvents(begin, end, match); 534 analyzer->AssociateEvents(begin, end, match);
506 535
507 TraceAnalyzer::TraceEventVector found; 536 TraceEventVector found;
508 537
509 // cat1 has no other_event. 538 // cat1 has no other_event.
510 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") && 539 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") &&
511 Query(EVENT_HAS_OTHER), &found); 540 Query(EVENT_HAS_OTHER), &found);
512 EXPECT_EQ(0u, found.size()); 541 EXPECT_EQ(0u, found.size());
513 542
514 // cat1 has no other_event. 543 // cat1 has no other_event.
515 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") && 544 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") &&
516 !Query(EVENT_HAS_OTHER), &found); 545 !Query(EVENT_HAS_OTHER), &found);
517 EXPECT_EQ(1u, found.size()); 546 EXPECT_EQ(1u, found.size());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 EXPECT_TRUE((Query::Bool(true) == Query::Double(1.0f)).Evaluate(dummy)); 592 EXPECT_TRUE((Query::Bool(true) == Query::Double(1.0f)).Evaluate(dummy));
564 EXPECT_TRUE((Query::Bool(false) == Query::Double(0.0f)).Evaluate(dummy)); 593 EXPECT_TRUE((Query::Bool(false) == Query::Double(0.0f)).Evaluate(dummy));
565 } 594 }
566 595
567 // Test GetRateStats. 596 // Test GetRateStats.
568 TEST_F(TraceEventAnalyzerTest, RateStats) { 597 TEST_F(TraceEventAnalyzerTest, RateStats) {
569 using namespace trace_analyzer; 598 using namespace trace_analyzer;
570 599
571 std::vector<TraceEvent> events; 600 std::vector<TraceEvent> events;
572 events.reserve(100); 601 events.reserve(100);
573 TraceAnalyzer::TraceEventVector event_ptrs; 602 TraceEventVector event_ptrs;
574 TraceEvent event; 603 TraceEvent event;
575 event.timestamp = 0.0; 604 event.timestamp = 0.0;
576 double little_delta = 1.0; 605 double little_delta = 1.0;
577 double big_delta = 10.0; 606 double big_delta = 10.0;
578 TraceAnalyzer::Stats stats; 607 RateStats stats;
579 608
580 for (int i = 0; i < 10; ++i) { 609 for (int i = 0; i < 10; ++i) {
581 event.timestamp += little_delta; 610 event.timestamp += little_delta;
582 events.push_back(event); 611 events.push_back(event);
583 event_ptrs.push_back(&events.back()); 612 event_ptrs.push_back(&events.back());
584 } 613 }
585 614
586 ASSERT_TRUE(TraceAnalyzer::GetRateStats(event_ptrs, &stats)); 615 ASSERT_TRUE(GetRateStats(event_ptrs, &stats));
587 EXPECT_EQ(little_delta, stats.mean_us); 616 EXPECT_EQ(little_delta, stats.mean_us);
588 EXPECT_EQ(little_delta, stats.min_us); 617 EXPECT_EQ(little_delta, stats.min_us);
589 EXPECT_EQ(little_delta, stats.max_us); 618 EXPECT_EQ(little_delta, stats.max_us);
590 EXPECT_EQ(0.0, stats.standard_deviation_us); 619 EXPECT_EQ(0.0, stats.standard_deviation_us);
591 620
592 event.timestamp += big_delta; 621 event.timestamp += big_delta;
593 events.push_back(event); 622 events.push_back(event);
594 event_ptrs.push_back(&events.back()); 623 event_ptrs.push_back(&events.back());
595 624
596 ASSERT_TRUE(TraceAnalyzer::GetRateStats(event_ptrs, &stats)); 625 ASSERT_TRUE(GetRateStats(event_ptrs, &stats));
597 EXPECT_LT(little_delta, stats.mean_us); 626 EXPECT_LT(little_delta, stats.mean_us);
598 EXPECT_EQ(little_delta, stats.min_us); 627 EXPECT_EQ(little_delta, stats.min_us);
599 EXPECT_EQ(big_delta, stats.max_us); 628 EXPECT_EQ(big_delta, stats.max_us);
600 EXPECT_LT(0.0, stats.standard_deviation_us); 629 EXPECT_LT(0.0, stats.standard_deviation_us);
601 630
602 TraceAnalyzer::TraceEventVector few_event_ptrs; 631 TraceEventVector few_event_ptrs;
603 few_event_ptrs.push_back(&event); 632 few_event_ptrs.push_back(&event);
604 few_event_ptrs.push_back(&event); 633 few_event_ptrs.push_back(&event);
605 ASSERT_FALSE(TraceAnalyzer::GetRateStats(few_event_ptrs, &stats)); 634 ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats));
606 few_event_ptrs.push_back(&event); 635 few_event_ptrs.push_back(&event);
607 ASSERT_TRUE(TraceAnalyzer::GetRateStats(few_event_ptrs, &stats)); 636 ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats));
637 }
638
639 // Test FindFirstOf and FindLastOf.
640 TEST_F(TraceEventAnalyzerTest, FindOf) {
641 using namespace trace_analyzer;
642
643 size_t num_events = 100;
644 size_t index = 0;
645 TraceEventVector event_ptrs;
646 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index));
647 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 10, &index));
648 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 0, &index));
649 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 10, &index));
650
651 std::vector<TraceEvent> events;
652 events.resize(num_events);
653 for (size_t i = 0; i < events.size(); ++i)
654 event_ptrs.push_back(&events[i]);
655 size_t bam_index = num_events/2;
656 events[bam_index].name = "bam";
657 Query query_bam = Query(EVENT_NAME) == Query::String(events[bam_index].name);
658
659 // FindFirstOf
660 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(false), 0, &index));
661 EXPECT_TRUE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index));
662 EXPECT_EQ(0u, index);
663 EXPECT_TRUE(FindFirstOf(event_ptrs, Query::Bool(true), 5, &index));
664 EXPECT_EQ(5u, index);
665
666 EXPECT_FALSE(FindFirstOf(event_ptrs, query_bam, bam_index + 1, &index));
667 EXPECT_TRUE(FindFirstOf(event_ptrs, query_bam, 0, &index));
668 EXPECT_EQ(bam_index, index);
669 EXPECT_TRUE(FindFirstOf(event_ptrs, query_bam, bam_index, &index));
670 EXPECT_EQ(bam_index, index);
671
672 // FindLastOf
673 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(false), 1000, &index));
674 EXPECT_TRUE(FindLastOf(event_ptrs, Query::Bool(true), 1000, &index));
675 EXPECT_EQ(num_events - 1, index);
676 EXPECT_TRUE(FindLastOf(event_ptrs, Query::Bool(true), num_events - 5,
677 &index));
678 EXPECT_EQ(num_events - 5, index);
679
680 EXPECT_FALSE(FindLastOf(event_ptrs, query_bam, bam_index - 1, &index));
681 EXPECT_TRUE(FindLastOf(event_ptrs, query_bam, num_events, &index));
682 EXPECT_EQ(bam_index, index);
683 EXPECT_TRUE(FindLastOf(event_ptrs, query_bam, bam_index, &index));
684 EXPECT_EQ(bam_index, index);
685 }
686
687 // Test FindClosest.
688 TEST_F(TraceEventAnalyzerTest, FindClosest) {
689 using namespace trace_analyzer;
690
691 size_t index_1 = 0;
692 size_t index_2 = 0;
693 TraceEventVector event_ptrs;
694 EXPECT_FALSE(FindClosest(event_ptrs, Query::Bool(true), 0,
695 &index_1, &index_2));
696
697 size_t num_events = 5;
698 std::vector<TraceEvent> events;
699 events.resize(num_events);
700 for (size_t i = 0; i < events.size(); ++i) {
701 // timestamps go up exponentially so the lower index is always closer in
702 // time than the higher index.
703 events[i].timestamp = static_cast<double>(i) * static_cast<double>(i);
704 event_ptrs.push_back(&events[i]);
705 }
706 events[0].name = "one";
707 events[2].name = "two";
708 events[4].name = "three";
709 Query query_named = Query(EVENT_NAME) != Query::String("");
710 Query query_one = Query(EVENT_NAME) == Query::String("one");
711
712 // Only one event matches query_one, so two closest can't be found.
713 EXPECT_FALSE(FindClosest(event_ptrs, query_one, 0, &index_1, &index_2));
714
715 EXPECT_TRUE(FindClosest(event_ptrs, query_one, 3, &index_1, NULL));
716 EXPECT_EQ(0u, index_1);
717
718 EXPECT_TRUE(FindClosest(event_ptrs, query_named, 1, &index_1, &index_2));
719 EXPECT_EQ(0u, index_1);
720 EXPECT_EQ(2u, index_2);
721
722 EXPECT_TRUE(FindClosest(event_ptrs, query_named, 4, &index_1, &index_2));
723 EXPECT_EQ(4u, index_1);
724 EXPECT_EQ(2u, index_2);
725
726 EXPECT_TRUE(FindClosest(event_ptrs, query_named, 3, &index_1, &index_2));
727 EXPECT_EQ(2u, index_1);
728 EXPECT_EQ(0u, index_2);
729 }
730
731 // Test CountMatches.
732 TEST_F(TraceEventAnalyzerTest, CountMatches) {
733 using namespace trace_analyzer;
734
735 TraceEventVector event_ptrs;
736 EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(true), 0, 10));
737
738 size_t num_events = 5;
739 size_t num_named = 3;
740 std::vector<TraceEvent> events;
741 events.resize(num_events);
742 for (size_t i = 0; i < events.size(); ++i)
743 event_ptrs.push_back(&events[i]);
744 events[0].name = "one";
745 events[2].name = "two";
746 events[4].name = "three";
747 Query query_named = Query(EVENT_NAME) != Query::String("");
748 Query query_one = Query(EVENT_NAME) == Query::String("one");
749
750 EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(false)));
751 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true)));
752 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true),
753 1, num_events));
754 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one));
755 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one));
756 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named));
608 } 757 }
609 758
610 759
611 } // namespace trace_analyzer 760 } // namespace trace_analyzer
612 761
OLDNEW
« no previous file with comments | « base/test/trace_event_analyzer.cc ('k') | chrome/test/gpu/gpu_feature_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698