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

Side by Side Diff: base/debug/trace_event_unittest.cc

Issue 66193005: Independently enable recording and event callback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/debug/trace_event_impl.cc ('k') | content/browser/browser_shutdown_profile_dumper.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) 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/debug/trace_event_unittest.h" 5 #include "base/debug/trace_event_unittest.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 Thread flush_thread("flush"); 97 Thread flush_thread("flush");
98 flush_thread.Start(); 98 flush_thread.Start();
99 flush_thread.message_loop()->PostTask(FROM_HERE, 99 flush_thread.message_loop()->PostTask(FROM_HERE,
100 base::Bind(&TraceEventTestFixture::EndTraceAndFlushAsync, 100 base::Bind(&TraceEventTestFixture::EndTraceAndFlushAsync,
101 base::Unretained(this), 101 base::Unretained(this),
102 &flush_complete_event)); 102 &flush_complete_event));
103 flush_complete_event.Wait(); 103 flush_complete_event.Wait();
104 } 104 }
105 105
106 void EndTraceAndFlushAsync(WaitableEvent* flush_complete_event) { 106 void EndTraceAndFlushAsync(WaitableEvent* flush_complete_event) {
107 while (TraceLog::GetInstance()->IsEnabled()) 107 TraceLog::GetInstance()->SetDisabled();
108 TraceLog::GetInstance()->SetDisabled();
109 TraceLog::GetInstance()->Flush( 108 TraceLog::GetInstance()->Flush(
110 base::Bind(&TraceEventTestFixture::OnTraceDataCollected, 109 base::Bind(&TraceEventTestFixture::OnTraceDataCollected,
111 base::Unretained(static_cast<TraceEventTestFixture*>(this)), 110 base::Unretained(static_cast<TraceEventTestFixture*>(this)),
112 base::Unretained(flush_complete_event))); 111 base::Unretained(flush_complete_event)));
113 } 112 }
114 113
115 void FlushMonitoring() { 114 void FlushMonitoring() {
116 WaitableEvent flush_complete_event(false, false); 115 WaitableEvent flush_complete_event(false, false);
117 FlushMonitoring(&flush_complete_event); 116 FlushMonitoring(&flush_complete_event);
118 flush_complete_event.Wait(); 117 flush_complete_event.Wait();
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 TraceLog::RECORD_UNTIL_FULL); 907 TraceLog::RECORD_UNTIL_FULL);
909 testing::Mock::VerifyAndClear(&observer); 908 testing::Mock::VerifyAndClear(&observer);
910 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); 909 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
911 910
912 // Cleanup. 911 // Cleanup.
913 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 912 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
914 TraceLog::GetInstance()->SetDisabled(); 913 TraceLog::GetInstance()->SetDisabled();
915 TraceLog::GetInstance()->SetDisabled(); 914 TraceLog::GetInstance()->SetDisabled();
916 } 915 }
917 916
918 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) { 917 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) {
919 CategoryFilter cf_inc_all("*"); 918 CategoryFilter cf_inc_all("*");
920 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); 919 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
921 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); 920 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
922 921
923 testing::StrictMock<MockEnabledStateChangedObserver> observer; 922 testing::StrictMock<MockEnabledStateChangedObserver> observer;
924 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 923 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
925 924
926 EXPECT_CALL(observer, OnTraceLogEnabled()) 925 EXPECT_CALL(observer, OnTraceLogEnabled())
927 .Times(0); 926 .Times(0);
928 EXPECT_CALL(observer, OnTraceLogDisabled()) 927 EXPECT_CALL(observer, OnTraceLogDisabled())
929 .Times(0); 928 .Times(1);
930 TraceLog::GetInstance()->SetDisabled(); 929 TraceLog::GetInstance()->SetDisabled();
931 testing::Mock::VerifyAndClear(&observer); 930 testing::Mock::VerifyAndClear(&observer);
932 931
933 // Cleanup. 932 // Cleanup.
934 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 933 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
935 TraceLog::GetInstance()->SetDisabled(); 934 TraceLog::GetInstance()->SetDisabled();
936 } 935 }
937 936
938 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { 937 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) {
939 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 938 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 EXPECT_TRUE(trace_log->IsEnabled()); 1673 EXPECT_TRUE(trace_log->IsEnabled());
1675 trace_log->SetDisabled(); 1674 trace_log->SetDisabled();
1676 EXPECT_FALSE(trace_log->IsEnabled()); 1675 EXPECT_FALSE(trace_log->IsEnabled());
1677 1676
1678 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); 1677 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
1679 EXPECT_TRUE(trace_log->IsEnabled()); 1678 EXPECT_TRUE(trace_log->IsEnabled());
1680 const std::vector<std::string> empty; 1679 const std::vector<std::string> empty;
1681 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL); 1680 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL);
1682 EXPECT_TRUE(trace_log->IsEnabled()); 1681 EXPECT_TRUE(trace_log->IsEnabled());
1683 trace_log->SetDisabled(); 1682 trace_log->SetDisabled();
1684 EXPECT_TRUE(trace_log->IsEnabled()); 1683 EXPECT_FALSE(trace_log->IsEnabled());
1685 trace_log->SetDisabled(); 1684 trace_log->SetDisabled();
1686 EXPECT_FALSE(trace_log->IsEnabled()); 1685 EXPECT_FALSE(trace_log->IsEnabled());
1687 } 1686 }
1688 1687
1689 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { 1688 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) {
1690 TraceLog* trace_log = TraceLog::GetInstance(); 1689 TraceLog* trace_log = TraceLog::GetInstance();
1691 trace_log->SetEnabled(CategoryFilter("foo,bar"), TraceLog::RECORD_UNTIL_FULL); 1690 trace_log->SetEnabled(CategoryFilter("foo,bar"), TraceLog::RECORD_UNTIL_FULL);
1692 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); 1691 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo"));
1693 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); 1692 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar"));
1694 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); 1693 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1970 } 1969 }
1971 1970
1972 class TraceEventCallbackTest : public TraceEventTestFixture { 1971 class TraceEventCallbackTest : public TraceEventTestFixture {
1973 public: 1972 public:
1974 virtual void SetUp() OVERRIDE { 1973 virtual void SetUp() OVERRIDE {
1975 TraceEventTestFixture::SetUp(); 1974 TraceEventTestFixture::SetUp();
1976 ASSERT_EQ(NULL, s_instance); 1975 ASSERT_EQ(NULL, s_instance);
1977 s_instance = this; 1976 s_instance = this;
1978 } 1977 }
1979 virtual void TearDown() OVERRIDE { 1978 virtual void TearDown() OVERRIDE {
1980 while (TraceLog::GetInstance()->IsEnabled()) 1979 TraceLog::GetInstance()->SetDisabled();
1981 TraceLog::GetInstance()->SetDisabled();
1982 ASSERT_TRUE(!!s_instance); 1980 ASSERT_TRUE(!!s_instance);
1983 s_instance = NULL; 1981 s_instance = NULL;
1984 TraceEventTestFixture::TearDown(); 1982 TraceEventTestFixture::TearDown();
1985 } 1983 }
1986 1984
1987 protected: 1985 protected:
1988 std::vector<std::string> collected_events_; 1986 // For TraceEventCallbackAndRecordingX tests.
1989 std::vector<unsigned char> collected_event_phases_; 1987 void VerifyCallbackAndRecordedEvents(size_t expected_callback_count,
1988 size_t expected_recorded_count) {
1989 // Callback events.
1990 EXPECT_EQ(expected_callback_count, collected_events_names_.size());
1991 for (size_t i = 0; i < collected_events_names_.size(); ++i) {
1992 EXPECT_EQ("callback", collected_events_categories_[i]);
1993 EXPECT_EQ("yes", collected_events_names_[i]);
1994 }
1995
1996 // Recorded events.
1997 EXPECT_EQ(expected_recorded_count, trace_parsed_.GetSize());
1998 EXPECT_TRUE(FindTraceEntry(trace_parsed_, "recording"));
1999 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "callback"));
2000 EXPECT_TRUE(FindTraceEntry(trace_parsed_, "yes"));
2001 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "no"));
2002 }
2003
2004 void VerifyCollectedEvent(size_t i,
2005 unsigned phase,
2006 const std::string& category,
2007 const std::string& name) {
2008 EXPECT_EQ(phase, collected_events_phases_[i]);
2009 EXPECT_EQ(category, collected_events_categories_[i]);
2010 EXPECT_EQ(name, collected_events_names_[i]);
2011 }
2012
2013 std::vector<std::string> collected_events_categories_;
2014 std::vector<std::string> collected_events_names_;
2015 std::vector<unsigned char> collected_events_phases_;
1990 std::vector<TimeTicks> collected_events_timestamps_; 2016 std::vector<TimeTicks> collected_events_timestamps_;
1991 2017
1992 static TraceEventCallbackTest* s_instance; 2018 static TraceEventCallbackTest* s_instance;
1993 static void Callback(TimeTicks timestamp, 2019 static void Callback(TimeTicks timestamp,
1994 char phase, 2020 char phase,
1995 const unsigned char* category_enabled, 2021 const unsigned char* category_group_enabled,
1996 const char* name, 2022 const char* name,
1997 unsigned long long id, 2023 unsigned long long id,
1998 int num_args, 2024 int num_args,
1999 const char* const arg_names[], 2025 const char* const arg_names[],
2000 const unsigned char arg_types[], 2026 const unsigned char arg_types[],
2001 const unsigned long long arg_values[], 2027 const unsigned long long arg_values[],
2002 unsigned char flags) { 2028 unsigned char flags) {
2003 s_instance->collected_events_.push_back(name); 2029 s_instance->collected_events_phases_.push_back(phase);
2004 s_instance->collected_event_phases_.push_back(phase); 2030 s_instance->collected_events_categories_.push_back(
2031 TraceLog::GetCategoryGroupName(category_group_enabled));
2032 s_instance->collected_events_names_.push_back(name);
2005 s_instance->collected_events_timestamps_.push_back(timestamp); 2033 s_instance->collected_events_timestamps_.push_back(timestamp);
2006 } 2034 }
2007 }; 2035 };
2008 2036
2009 TraceEventCallbackTest* TraceEventCallbackTest::s_instance; 2037 TraceEventCallbackTest* TraceEventCallbackTest::s_instance;
2010 2038
2011 TEST_F(TraceEventCallbackTest, TraceEventCallback) { 2039 TEST_F(TraceEventCallbackTest, TraceEventCallback) {
2012 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD); 2040 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD);
2013 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2041 TraceLog::GetInstance()->SetEventCallbackEnabled(
2014 TraceLog::RECORD_UNTIL_FULL); 2042 CategoryFilter("*"), Callback);
2015 TRACE_EVENT_INSTANT0("all", "before callback set", TRACE_EVENT_SCOPE_THREAD);
2016 TraceLog::GetInstance()->SetEventCallback(Callback);
2017 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL); 2043 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL);
2018 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL); 2044 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL);
2019 { 2045 {
2020 TRACE_EVENT0("all", "duration"); 2046 TRACE_EVENT0("all", "duration");
2021 TRACE_EVENT_INSTANT0("all", "event3", TRACE_EVENT_SCOPE_GLOBAL); 2047 TRACE_EVENT_INSTANT0("all", "event3", TRACE_EVENT_SCOPE_GLOBAL);
2022 } 2048 }
2023 TraceLog::GetInstance()->SetEventCallback(NULL); 2049 TraceLog::GetInstance()->SetEventCallbackDisabled();
2024 TRACE_EVENT_INSTANT0("all", "after callback removed", 2050 TRACE_EVENT_INSTANT0("all", "after callback removed",
2025 TRACE_EVENT_SCOPE_GLOBAL); 2051 TRACE_EVENT_SCOPE_GLOBAL);
2026 ASSERT_EQ(5u, collected_events_.size()); 2052 ASSERT_EQ(5u, collected_events_names_.size());
2027 EXPECT_EQ("event1", collected_events_[0]); 2053 EXPECT_EQ("event1", collected_events_names_[0]);
2028 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_event_phases_[0]); 2054 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[0]);
2029 EXPECT_EQ("event2", collected_events_[1]); 2055 EXPECT_EQ("event2", collected_events_names_[1]);
2030 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_event_phases_[1]); 2056 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[1]);
2031 EXPECT_EQ("duration", collected_events_[2]); 2057 EXPECT_EQ("duration", collected_events_names_[2]);
2032 EXPECT_EQ(TRACE_EVENT_PHASE_BEGIN, collected_event_phases_[2]); 2058 EXPECT_EQ(TRACE_EVENT_PHASE_BEGIN, collected_events_phases_[2]);
2033 EXPECT_EQ("event3", collected_events_[3]); 2059 EXPECT_EQ("event3", collected_events_names_[3]);
2034 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_event_phases_[3]); 2060 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[3]);
2035 EXPECT_EQ("duration", collected_events_[4]); 2061 EXPECT_EQ("duration", collected_events_names_[4]);
2036 EXPECT_EQ(TRACE_EVENT_PHASE_END, collected_event_phases_[4]); 2062 EXPECT_EQ(TRACE_EVENT_PHASE_END, collected_events_phases_[4]);
2037 for (size_t i = 1; i < collected_events_timestamps_.size(); i++) { 2063 for (size_t i = 1; i < collected_events_timestamps_.size(); i++) {
2038 EXPECT_LE(collected_events_timestamps_[i - 1], 2064 EXPECT_LE(collected_events_timestamps_[i - 1],
2039 collected_events_timestamps_[i]); 2065 collected_events_timestamps_[i]);
2040 } 2066 }
2041 } 2067 }
2042 2068
2043 TEST_F(TraceEventCallbackTest, TraceEventCallbackWhileFull) { 2069 TEST_F(TraceEventCallbackTest, TraceEventCallbackWhileFull) {
2044 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2070 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
2045 TraceLog::RECORD_UNTIL_FULL); 2071 TraceLog::RECORD_UNTIL_FULL);
2046 do { 2072 do {
2047 TRACE_EVENT_INSTANT0("all", "badger badger", TRACE_EVENT_SCOPE_GLOBAL); 2073 TRACE_EVENT_INSTANT0("all", "badger badger", TRACE_EVENT_SCOPE_GLOBAL);
2048 } while ((notifications_received_ & TraceLog::TRACE_BUFFER_FULL) == 0); 2074 } while ((notifications_received_ & TraceLog::TRACE_BUFFER_FULL) == 0);
2049 TraceLog::GetInstance()->SetEventCallback(Callback); 2075 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("*"),
2076 Callback);
2050 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL); 2077 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL);
2051 TraceLog::GetInstance()->SetEventCallback(NULL); 2078 TraceLog::GetInstance()->SetEventCallbackDisabled();
2052 ASSERT_EQ(1u, collected_events_.size()); 2079 ASSERT_EQ(1u, collected_events_names_.size());
2053 EXPECT_EQ("a snake", collected_events_[0]); 2080 EXPECT_EQ("a snake", collected_events_names_[0]);
2081 }
2082
2083 // 1: Enable callback, enable recording, disable callback, disable recording.
2084 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording1) {
2085 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2086 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2087 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"),
2088 Callback);
2089 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2090 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2091 TraceLog::GetInstance()->SetEnabled(
2092 CategoryFilter("recording"), TraceLog::RECORD_UNTIL_FULL);
2093 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2094 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2095 TraceLog::GetInstance()->SetEventCallbackDisabled();
2096 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2097 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2098 EndTraceAndFlush();
2099 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2100 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2101
2102 VerifyCallbackAndRecordedEvents(2, 2);
2103 }
2104
2105 // 2: Enable callback, enable recording, disable recording, disable callback.
2106 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording2) {
2107 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2108 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2109 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"),
2110 Callback);
2111 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2112 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2113 TraceLog::GetInstance()->SetEnabled(
2114 CategoryFilter("recording"), TraceLog::RECORD_UNTIL_FULL);
2115 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2116 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2117 EndTraceAndFlush();
2118 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2119 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2120 TraceLog::GetInstance()->SetEventCallbackDisabled();
2121 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2122 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2123
2124 VerifyCallbackAndRecordedEvents(3, 1);
2125 }
2126
2127 // 3: Enable recording, enable callback, disable callback, disable recording.
2128 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording3) {
2129 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2130 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2131 TraceLog::GetInstance()->SetEnabled(
2132 CategoryFilter("recording"), TraceLog::RECORD_UNTIL_FULL);
2133 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2134 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2135 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"),
2136 Callback);
2137 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2138 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2139 TraceLog::GetInstance()->SetEventCallbackDisabled();
2140 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2141 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2142 EndTraceAndFlush();
2143 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2144 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2145
2146 VerifyCallbackAndRecordedEvents(1, 3);
2147 }
2148
2149 // 4: Enable recording, enable callback, disable recording, disable callback.
2150 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording4) {
2151 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2152 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2153 TraceLog::GetInstance()->SetEnabled(
2154 CategoryFilter("recording"), TraceLog::RECORD_UNTIL_FULL);
2155 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2156 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2157 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"),
2158 Callback);
2159 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2160 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2161 EndTraceAndFlush();
2162 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2163 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2164 TraceLog::GetInstance()->SetEventCallbackDisabled();
2165 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2166 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2167
2168 VerifyCallbackAndRecordedEvents(2, 2);
2169 }
2170
2171 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecordingDuration) {
2172 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("*"),
2173 Callback);
2174 {
2175 TRACE_EVENT0("callback", "duration1");
2176 TraceLog::GetInstance()->SetEnabled(
2177 CategoryFilter("*"), TraceLog::RECORD_UNTIL_FULL);
2178 TRACE_EVENT0("callback", "duration2");
2179 EndTraceAndFlush();
2180 TRACE_EVENT0("callback", "duration3");
2181 }
2182 TraceLog::GetInstance()->SetEventCallbackDisabled();
2183
2184 ASSERT_EQ(6u, collected_events_names_.size());
2185 VerifyCollectedEvent(0, TRACE_EVENT_PHASE_BEGIN, "callback", "duration1");
2186 VerifyCollectedEvent(1, TRACE_EVENT_PHASE_BEGIN, "callback", "duration2");
2187 VerifyCollectedEvent(2, TRACE_EVENT_PHASE_BEGIN, "callback", "duration3");
2188 VerifyCollectedEvent(3, TRACE_EVENT_PHASE_END, "callback", "duration3");
2189 VerifyCollectedEvent(4, TRACE_EVENT_PHASE_END, "callback", "duration2");
2190 VerifyCollectedEvent(5, TRACE_EVENT_PHASE_END, "callback", "duration1");
2054 } 2191 }
2055 2192
2056 TEST_F(TraceEventTestFixture, TraceBufferRingBufferGetReturnChunk) { 2193 TEST_F(TraceEventTestFixture, TraceBufferRingBufferGetReturnChunk) {
2057 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2194 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
2058 TraceLog::RECORD_CONTINUOUSLY); 2195 TraceLog::RECORD_CONTINUOUSLY);
2059 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); 2196 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer();
2060 size_t capacity = buffer->Capacity(); 2197 size_t capacity = buffer->Capacity();
2061 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; 2198 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize;
2062 uint32 last_seq = 0; 2199 uint32 last_seq = 0;
2063 size_t chunk_index; 2200 size_t chunk_index;
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
2440 double timestamp; 2577 double timestamp;
2441 EXPECT_TRUE(item->GetDouble("ts", &timestamp)); 2578 EXPECT_TRUE(item->GetDouble("ts", &timestamp));
2442 EXPECT_GE(timestamp, last_timestamp); 2579 EXPECT_GE(timestamp, last_timestamp);
2443 EXPECT_LE(timestamp, end_time); 2580 EXPECT_LE(timestamp, end_time);
2444 last_timestamp = timestamp; 2581 last_timestamp = timestamp;
2445 } 2582 }
2446 } 2583 }
2447 2584
2448 } // namespace debug 2585 } // namespace debug
2449 } // namespace base 2586 } // namespace base
OLDNEW
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | content/browser/browser_shutdown_profile_dumper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698