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

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

Issue 1776673002: base: Add blame context (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Windows build fix. Created 4 years, 9 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
« no previous file with comments | « base/test/trace_event_analyzer.cc ('k') | base/trace_event/blame_context.h » ('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) 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/memory/ref_counted_memory.h" 9 #include "base/memory/ref_counted_memory.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
11 #include "base/test/trace_event_analyzer.h" 11 #include "base/test/trace_event_analyzer.h"
12 #include "base/threading/platform_thread.h" 12 #include "base/threading/platform_thread.h"
13 #include "base/trace_event/trace_buffer.h" 13 #include "base/trace_event/trace_buffer.h"
14 #include "base/trace_event/trace_event_argument.h"
14 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 namespace trace_analyzer { 18 namespace trace_analyzer {
18 19
19 namespace { 20 namespace {
20 21
21 class TraceEventAnalyzerTest : public testing::Test { 22 class TraceEventAnalyzerTest : public testing::Test {
22 public: 23 public:
23 void ManualSetUp(); 24 void ManualSetUp();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 int int_num = 2; 92 int int_num = 2;
92 double double_num = 3.5; 93 double double_num = 3.5;
93 const char str[] = "the string"; 94 const char str[] = "the string";
94 95
95 TraceEvent event; 96 TraceEvent event;
96 event.arg_numbers["false"] = 0.0; 97 event.arg_numbers["false"] = 0.0;
97 event.arg_numbers["true"] = 1.0; 98 event.arg_numbers["true"] = 1.0;
98 event.arg_numbers["int"] = static_cast<double>(int_num); 99 event.arg_numbers["int"] = static_cast<double>(int_num);
99 event.arg_numbers["double"] = double_num; 100 event.arg_numbers["double"] = double_num;
100 event.arg_strings["string"] = str; 101 event.arg_strings["string"] = str;
102 event.arg_values["dict"] = make_scoped_ptr(new base::DictionaryValue());
101 103
102 ASSERT_TRUE(event.HasNumberArg("false")); 104 ASSERT_TRUE(event.HasNumberArg("false"));
103 ASSERT_TRUE(event.HasNumberArg("true")); 105 ASSERT_TRUE(event.HasNumberArg("true"));
104 ASSERT_TRUE(event.HasNumberArg("int")); 106 ASSERT_TRUE(event.HasNumberArg("int"));
105 ASSERT_TRUE(event.HasNumberArg("double")); 107 ASSERT_TRUE(event.HasNumberArg("double"));
106 ASSERT_TRUE(event.HasStringArg("string")); 108 ASSERT_TRUE(event.HasStringArg("string"));
107 ASSERT_FALSE(event.HasNumberArg("notfound")); 109 ASSERT_FALSE(event.HasNumberArg("notfound"));
108 ASSERT_FALSE(event.HasStringArg("notfound")); 110 ASSERT_FALSE(event.HasStringArg("notfound"));
111 ASSERT_TRUE(event.HasArg("dict"));
112 ASSERT_FALSE(event.HasArg("notfound"));
109 113
110 EXPECT_FALSE(event.GetKnownArgAsBool("false")); 114 EXPECT_FALSE(event.GetKnownArgAsBool("false"));
111 EXPECT_TRUE(event.GetKnownArgAsBool("true")); 115 EXPECT_TRUE(event.GetKnownArgAsBool("true"));
112 EXPECT_EQ(int_num, event.GetKnownArgAsInt("int")); 116 EXPECT_EQ(int_num, event.GetKnownArgAsInt("int"));
113 EXPECT_EQ(double_num, event.GetKnownArgAsDouble("double")); 117 EXPECT_EQ(double_num, event.GetKnownArgAsDouble("double"));
114 EXPECT_STREQ(str, event.GetKnownArgAsString("string").c_str()); 118 EXPECT_STREQ(str, event.GetKnownArgAsString("string").c_str());
119
120 scoped_ptr<base::Value> arg;
121 EXPECT_TRUE(event.GetArgAsValue("dict", &arg));
122 EXPECT_EQ(base::Value::TYPE_DICTIONARY, arg->GetType());
115 } 123 }
116 124
117 TEST_F(TraceEventAnalyzerTest, QueryEventMember) { 125 TEST_F(TraceEventAnalyzerTest, QueryEventMember) {
118 ManualSetUp(); 126 ManualSetUp();
119 127
120 TraceEvent event; 128 TraceEvent event;
121 event.thread.process_id = 3; 129 event.thread.process_id = 3;
122 event.thread.thread_id = 4; 130 event.thread.thread_id = 4;
123 event.timestamp = 1.5; 131 event.timestamp = 1.5;
124 event.phase = TRACE_EVENT_PHASE_BEGIN; 132 event.phase = TRACE_EVENT_PHASE_BEGIN;
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 EXPECT_TRUE((Query::Bool(false) == Query::Int(0)).Evaluate(dummy)); 713 EXPECT_TRUE((Query::Bool(false) == Query::Int(0)).Evaluate(dummy));
706 EXPECT_TRUE((Query::Bool(true) == Query::Double(1.0f)).Evaluate(dummy)); 714 EXPECT_TRUE((Query::Bool(true) == Query::Double(1.0f)).Evaluate(dummy));
707 EXPECT_TRUE((Query::Bool(false) == Query::Double(0.0f)).Evaluate(dummy)); 715 EXPECT_TRUE((Query::Bool(false) == Query::Double(0.0f)).Evaluate(dummy));
708 } 716 }
709 717
710 // Test GetRateStats. 718 // Test GetRateStats.
711 TEST_F(TraceEventAnalyzerTest, RateStats) { 719 TEST_F(TraceEventAnalyzerTest, RateStats) {
712 std::vector<TraceEvent> events; 720 std::vector<TraceEvent> events;
713 events.reserve(100); 721 events.reserve(100);
714 TraceEventVector event_ptrs; 722 TraceEventVector event_ptrs;
715 TraceEvent event; 723 double timestamp = 0.0;
716 event.timestamp = 0.0;
717 double little_delta = 1.0; 724 double little_delta = 1.0;
718 double big_delta = 10.0; 725 double big_delta = 10.0;
719 double tiny_delta = 0.1; 726 double tiny_delta = 0.1;
720 RateStats stats; 727 RateStats stats;
721 RateStatsOptions options; 728 RateStatsOptions options;
722 729
723 // Insert 10 events, each apart by little_delta. 730 // Insert 10 events, each apart by little_delta.
724 for (int i = 0; i < 10; ++i) { 731 for (int i = 0; i < 10; ++i) {
725 event.timestamp += little_delta; 732 timestamp += little_delta;
726 events.push_back(event); 733 TraceEvent event;
734 event.timestamp = timestamp;
735 events.push_back(std::move(event));
727 event_ptrs.push_back(&events.back()); 736 event_ptrs.push_back(&events.back());
728 } 737 }
729 738
730 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, NULL)); 739 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, NULL));
731 EXPECT_EQ(little_delta, stats.mean_us); 740 EXPECT_EQ(little_delta, stats.mean_us);
732 EXPECT_EQ(little_delta, stats.min_us); 741 EXPECT_EQ(little_delta, stats.min_us);
733 EXPECT_EQ(little_delta, stats.max_us); 742 EXPECT_EQ(little_delta, stats.max_us);
734 EXPECT_EQ(0.0, stats.standard_deviation_us); 743 EXPECT_EQ(0.0, stats.standard_deviation_us);
735 744
736 // Add an event apart by big_delta. 745 // Add an event apart by big_delta.
737 event.timestamp += big_delta; 746 {
738 events.push_back(event); 747 timestamp += big_delta;
739 event_ptrs.push_back(&events.back()); 748 TraceEvent event;
749 event.timestamp = timestamp;
750 events.push_back(std::move(event));
751 event_ptrs.push_back(&events.back());
752 }
740 753
741 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, NULL)); 754 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, NULL));
742 EXPECT_LT(little_delta, stats.mean_us); 755 EXPECT_LT(little_delta, stats.mean_us);
743 EXPECT_EQ(little_delta, stats.min_us); 756 EXPECT_EQ(little_delta, stats.min_us);
744 EXPECT_EQ(big_delta, stats.max_us); 757 EXPECT_EQ(big_delta, stats.max_us);
745 EXPECT_LT(0.0, stats.standard_deviation_us); 758 EXPECT_LT(0.0, stats.standard_deviation_us);
746 759
747 // Trim off the biggest delta and verify stats. 760 // Trim off the biggest delta and verify stats.
748 options.trim_min = 0; 761 options.trim_min = 0;
749 options.trim_max = 1; 762 options.trim_max = 1;
750 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, &options)); 763 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, &options));
751 EXPECT_EQ(little_delta, stats.mean_us); 764 EXPECT_EQ(little_delta, stats.mean_us);
752 EXPECT_EQ(little_delta, stats.min_us); 765 EXPECT_EQ(little_delta, stats.min_us);
753 EXPECT_EQ(little_delta, stats.max_us); 766 EXPECT_EQ(little_delta, stats.max_us);
754 EXPECT_EQ(0.0, stats.standard_deviation_us); 767 EXPECT_EQ(0.0, stats.standard_deviation_us);
755 768
756 // Add an event apart by tiny_delta. 769 // Add an event apart by tiny_delta.
757 event.timestamp += tiny_delta; 770 {
758 events.push_back(event); 771 timestamp += tiny_delta;
759 event_ptrs.push_back(&events.back()); 772 TraceEvent event;
773 event.timestamp = timestamp;
774 events.push_back(std::move(event));
775 event_ptrs.push_back(&events.back());
776 }
760 777
761 // Trim off both the biggest and tiniest delta and verify stats. 778 // Trim off both the biggest and tiniest delta and verify stats.
762 options.trim_min = 1; 779 options.trim_min = 1;
763 options.trim_max = 1; 780 options.trim_max = 1;
764 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, &options)); 781 ASSERT_TRUE(GetRateStats(event_ptrs, &stats, &options));
765 EXPECT_EQ(little_delta, stats.mean_us); 782 EXPECT_EQ(little_delta, stats.mean_us);
766 EXPECT_EQ(little_delta, stats.min_us); 783 EXPECT_EQ(little_delta, stats.min_us);
767 EXPECT_EQ(little_delta, stats.max_us); 784 EXPECT_EQ(little_delta, stats.max_us);
768 EXPECT_EQ(0.0, stats.standard_deviation_us); 785 EXPECT_EQ(0.0, stats.standard_deviation_us);
769 786
770 // Verify smallest allowed number of events. 787 // Verify smallest allowed number of events.
771 TraceEventVector few_event_ptrs; 788 {
772 few_event_ptrs.push_back(&event); 789 TraceEvent event;
773 few_event_ptrs.push_back(&event); 790 TraceEventVector few_event_ptrs;
774 ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, NULL)); 791 few_event_ptrs.push_back(&event);
775 few_event_ptrs.push_back(&event); 792 few_event_ptrs.push_back(&event);
776 ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats, NULL)); 793 ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, NULL));
794 few_event_ptrs.push_back(&event);
795 ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats, NULL));
777 796
778 // Trim off more than allowed and verify failure. 797 // Trim off more than allowed and verify failure.
779 options.trim_min = 0; 798 options.trim_min = 0;
780 options.trim_max = 1; 799 options.trim_max = 1;
781 ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, &options)); 800 ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats, &options));
801 }
782 } 802 }
783 803
784 // Test FindFirstOf and FindLastOf. 804 // Test FindFirstOf and FindLastOf.
785 TEST_F(TraceEventAnalyzerTest, FindOf) { 805 TEST_F(TraceEventAnalyzerTest, FindOf) {
786 size_t num_events = 100; 806 size_t num_events = 100;
787 size_t index = 0; 807 size_t index = 0;
788 TraceEventVector event_ptrs; 808 TraceEventVector event_ptrs;
789 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index)); 809 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index));
790 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 10, &index)); 810 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 10, &index));
791 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 0, &index)); 811 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 0, &index));
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 908
889 EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(false))); 909 EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(false)));
890 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true))); 910 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true)));
891 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true), 911 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true),
892 1, num_events)); 912 1, num_events));
893 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one)); 913 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one));
894 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one)); 914 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one));
895 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); 915 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named));
896 } 916 }
897 917
918 TEST_F(TraceEventAnalyzerTest, ComplexArgument) {
919 ManualSetUp();
920
921 BeginTracing();
922 {
923 scoped_ptr<base::trace_event::TracedValue> value(
924 new base::trace_event::TracedValue);
925 value->SetString("property", "value");
926 TRACE_EVENT1("cat", "name", "arg", std::move(value));
927 }
928 EndTracing();
929
930 scoped_ptr<TraceAnalyzer> analyzer(
931 TraceAnalyzer::Create(output_.json_output));
932 ASSERT_TRUE(analyzer.get());
933
934 TraceEventVector events;
935 analyzer->FindEvents(Query::EventName() == Query::String("name"), &events);
936
937 EXPECT_EQ(1u, events.size());
938 EXPECT_EQ("cat", events[0]->category);
939 EXPECT_EQ("name", events[0]->name);
940 EXPECT_TRUE(events[0]->HasArg("arg"));
941
942 scoped_ptr<base::Value> arg;
943 events[0]->GetArgAsValue("arg", &arg);
944 base::DictionaryValue* arg_dict;
945 EXPECT_TRUE(arg->GetAsDictionary(&arg_dict));
946 std::string property;
947 EXPECT_TRUE(arg_dict->GetString("property", &property));
948 EXPECT_EQ("value", property);
949 }
898 950
899 } // namespace trace_analyzer 951 } // namespace trace_analyzer
OLDNEW
« no previous file with comments | « base/test/trace_event_analyzer.cc ('k') | base/trace_event/blame_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698