| 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 <math.h> | 5 #include <math.h> |
| 6 #include <stddef.h> | 6 #include <stddef.h> |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <cstdlib> | 9 #include <cstdlib> |
| 10 | 10 |
| (...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1230 EndTraceAndFlush(); | 1230 EndTraceAndFlush(); |
| 1231 } | 1231 } |
| 1232 } | 1232 } |
| 1233 | 1233 |
| 1234 TEST_F(TraceEventTestFixture, AddMetadataEvent) { | 1234 TEST_F(TraceEventTestFixture, AddMetadataEvent) { |
| 1235 int num_calls = 0; | 1235 int num_calls = 0; |
| 1236 | 1236 |
| 1237 class Convertable : public ConvertableToTraceFormat { | 1237 class Convertable : public ConvertableToTraceFormat { |
| 1238 public: | 1238 public: |
| 1239 explicit Convertable(int* num_calls) : num_calls_(num_calls) {} | 1239 explicit Convertable(int* num_calls) : num_calls_(num_calls) {} |
| 1240 ~Convertable() override {} |
| 1240 void AppendAsTraceFormat(std::string* out) const override { | 1241 void AppendAsTraceFormat(std::string* out) const override { |
| 1241 (*num_calls_)++; | 1242 (*num_calls_)++; |
| 1242 out->append("\"metadata_value\""); | 1243 out->append("\"metadata_value\""); |
| 1243 } | 1244 } |
| 1244 | 1245 |
| 1245 private: | 1246 private: |
| 1246 ~Convertable() override {} | |
| 1247 int* num_calls_; | 1247 int* num_calls_; |
| 1248 }; | 1248 }; |
| 1249 | 1249 |
| 1250 scoped_refptr<ConvertableToTraceFormat> convertable = | 1250 scoped_ptr<ConvertableToTraceFormat> conv1(new Convertable(&num_calls)); |
| 1251 new Convertable(&num_calls); | 1251 scoped_ptr<Convertable> conv2(new Convertable(&num_calls)); |
| 1252 | 1252 |
| 1253 BeginTrace(); | 1253 BeginTrace(); |
| 1254 TRACE_EVENT_API_ADD_METADATA_EVENT( | 1254 TRACE_EVENT_API_ADD_METADATA_EVENT( |
| 1255 TraceLog::GetCategoryGroupEnabled("__metadata"), "metadata_event_name", | 1255 TraceLog::GetCategoryGroupEnabled("__metadata"), "metadata_event_1", |
| 1256 "metadata_arg_name", convertable); | 1256 "metadata_arg_name", std::move(conv1)); |
| 1257 | 1257 TRACE_EVENT_API_ADD_METADATA_EVENT( |
| 1258 TraceLog::GetCategoryGroupEnabled("__metadata"), "metadata_event_2", |
| 1259 "metadata_arg_name", std::move(conv2)); |
| 1258 // |AppendAsTraceFormat| should only be called on flush, not when the event | 1260 // |AppendAsTraceFormat| should only be called on flush, not when the event |
| 1259 // is added. | 1261 // is added. |
| 1260 ASSERT_EQ(0, num_calls); | 1262 ASSERT_EQ(0, num_calls); |
| 1261 EndTraceAndFlush(); | 1263 EndTraceAndFlush(); |
| 1262 ASSERT_EQ(1, num_calls); | 1264 ASSERT_EQ(2, num_calls); |
| 1263 EXPECT_TRUE(FindNamePhaseKeyValue("metadata_event_name", "M", | 1265 EXPECT_TRUE(FindNamePhaseKeyValue("metadata_event_1", "M", |
| 1266 "metadata_arg_name", "metadata_value")); |
| 1267 EXPECT_TRUE(FindNamePhaseKeyValue("metadata_event_2", "M", |
| 1264 "metadata_arg_name", "metadata_value")); | 1268 "metadata_arg_name", "metadata_value")); |
| 1265 | 1269 |
| 1266 // The metadata event should only be adde to the current trace. In this new | 1270 // The metadata event should only be adde to the current trace. In this new |
| 1267 // trace, the event should not appear. | 1271 // trace, the event should not appear. |
| 1268 BeginTrace(); | 1272 BeginTrace(); |
| 1269 EndTraceAndFlush(); | 1273 EndTraceAndFlush(); |
| 1270 ASSERT_EQ(1, num_calls); | 1274 ASSERT_EQ(2, num_calls); |
| 1271 } | 1275 } |
| 1272 | 1276 |
| 1273 // Test that categories work. | 1277 // Test that categories work. |
| 1274 TEST_F(TraceEventTestFixture, Categories) { | 1278 TEST_F(TraceEventTestFixture, Categories) { |
| 1275 // Test that categories that are used can be retrieved whether trace was | 1279 // Test that categories that are used can be retrieved whether trace was |
| 1276 // enabled or disabled when the trace event was encountered. | 1280 // enabled or disabled when the trace event was encountered. |
| 1277 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD); | 1281 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1278 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD); | 1282 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1279 BeginTrace(); | 1283 BeginTrace(); |
| 1280 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD); | 1284 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD); |
| (...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2029 } | 2033 } |
| 2030 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 2034 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 2031 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); | 2035 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); |
| 2032 | 2036 |
| 2033 EndTraceAndFlush(); | 2037 EndTraceAndFlush(); |
| 2034 } | 2038 } |
| 2035 | 2039 |
| 2036 class MyData : public ConvertableToTraceFormat { | 2040 class MyData : public ConvertableToTraceFormat { |
| 2037 public: | 2041 public: |
| 2038 MyData() {} | 2042 MyData() {} |
| 2043 ~MyData() override {} |
| 2039 | 2044 |
| 2040 void AppendAsTraceFormat(std::string* out) const override { | 2045 void AppendAsTraceFormat(std::string* out) const override { |
| 2041 out->append("{\"foo\":1}"); | 2046 out->append("{\"foo\":1}"); |
| 2042 } | 2047 } |
| 2043 | 2048 |
| 2044 private: | 2049 private: |
| 2045 ~MyData() override {} | |
| 2046 DISALLOW_COPY_AND_ASSIGN(MyData); | 2050 DISALLOW_COPY_AND_ASSIGN(MyData); |
| 2047 }; | 2051 }; |
| 2048 | 2052 |
| 2049 TEST_F(TraceEventTestFixture, ConvertableTypes) { | 2053 TEST_F(TraceEventTestFixture, ConvertableTypes) { |
| 2050 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 2054 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 2051 TraceLog::RECORDING_MODE); | 2055 TraceLog::RECORDING_MODE); |
| 2052 | 2056 |
| 2053 scoped_refptr<ConvertableToTraceFormat> data(new MyData()); | 2057 scoped_ptr<ConvertableToTraceFormat> data(new MyData()); |
| 2054 scoped_refptr<ConvertableToTraceFormat> data1(new MyData()); | 2058 scoped_ptr<ConvertableToTraceFormat> data1(new MyData()); |
| 2055 scoped_refptr<ConvertableToTraceFormat> data2(new MyData()); | 2059 scoped_ptr<ConvertableToTraceFormat> data2(new MyData()); |
| 2056 TRACE_EVENT1("foo", "bar", "data", data); | 2060 TRACE_EVENT1("foo", "bar", "data", std::move(data)); |
| 2057 TRACE_EVENT2("foo", "baz", | 2061 TRACE_EVENT2("foo", "baz", "data1", std::move(data1), "data2", |
| 2058 "data1", data1, | 2062 std::move(data2)); |
| 2059 "data2", data2); | |
| 2060 | 2063 |
| 2061 | 2064 // Check that scoped_ptr<DerivedClassOfConvertable> are properly treated as |
| 2062 scoped_refptr<ConvertableToTraceFormat> convertData1(new MyData()); | 2065 // convertable and not accidentally casted to bool. |
| 2063 scoped_refptr<ConvertableToTraceFormat> convertData2(new MyData()); | 2066 scoped_ptr<MyData> convertData1(new MyData()); |
| 2064 TRACE_EVENT2( | 2067 scoped_ptr<MyData> convertData2(new MyData()); |
| 2065 "foo", | 2068 scoped_ptr<MyData> convertData3(new MyData()); |
| 2066 "string_first", | 2069 scoped_ptr<MyData> convertData4(new MyData()); |
| 2067 "str", | 2070 TRACE_EVENT2("foo", "string_first", "str", "string value 1", "convert", |
| 2068 "string value 1", | 2071 std::move(convertData1)); |
| 2069 "convert", | 2072 TRACE_EVENT2("foo", "string_second", "convert", std::move(convertData2), |
| 2070 convertData1); | 2073 "str", "string value 2"); |
| 2071 TRACE_EVENT2( | 2074 TRACE_EVENT2("foo", "both_conv", "convert1", std::move(convertData3), |
| 2072 "foo", | 2075 "convert2", std::move(convertData4)); |
| 2073 "string_second", | |
| 2074 "convert", | |
| 2075 convertData2, | |
| 2076 "str", | |
| 2077 "string value 2"); | |
| 2078 EndTraceAndFlush(); | 2076 EndTraceAndFlush(); |
| 2079 | 2077 |
| 2080 // One arg version. | 2078 // One arg version. |
| 2081 DictionaryValue* dict = FindNamePhase("bar", "X"); | 2079 DictionaryValue* dict = FindNamePhase("bar", "X"); |
| 2082 ASSERT_TRUE(dict); | 2080 ASSERT_TRUE(dict); |
| 2083 | 2081 |
| 2084 const DictionaryValue* args_dict = NULL; | 2082 const DictionaryValue* args_dict = NULL; |
| 2085 dict->GetDictionary("args", &args_dict); | 2083 dict->GetDictionary("args", &args_dict); |
| 2086 ASSERT_TRUE(args_dict); | 2084 ASSERT_TRUE(args_dict); |
| 2087 | 2085 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2142 EXPECT_TRUE(args_dict->GetString("str", &str_value)); | 2140 EXPECT_TRUE(args_dict->GetString("str", &str_value)); |
| 2143 EXPECT_STREQ("string value 2", str_value.c_str()); | 2141 EXPECT_STREQ("string value 2", str_value.c_str()); |
| 2144 | 2142 |
| 2145 value = NULL; | 2143 value = NULL; |
| 2146 convertable_dict = NULL; | 2144 convertable_dict = NULL; |
| 2147 foo_val = 0; | 2145 foo_val = 0; |
| 2148 EXPECT_TRUE(args_dict->Get("convert", &value)); | 2146 EXPECT_TRUE(args_dict->Get("convert", &value)); |
| 2149 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); | 2147 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); |
| 2150 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); | 2148 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); |
| 2151 EXPECT_EQ(1, foo_val); | 2149 EXPECT_EQ(1, foo_val); |
| 2150 |
| 2151 dict = FindNamePhase("both_conv", "X"); |
| 2152 ASSERT_TRUE(dict); |
| 2153 |
| 2154 args_dict = NULL; |
| 2155 dict->GetDictionary("args", &args_dict); |
| 2156 ASSERT_TRUE(args_dict); |
| 2157 |
| 2158 value = NULL; |
| 2159 convertable_dict = NULL; |
| 2160 foo_val = 0; |
| 2161 EXPECT_TRUE(args_dict->Get("convert1", &value)); |
| 2162 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); |
| 2163 EXPECT_TRUE(args_dict->Get("convert2", &value)); |
| 2164 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); |
| 2152 } | 2165 } |
| 2153 | 2166 |
| 2154 TEST_F(TraceEventTestFixture, PrimitiveArgs) { | 2167 TEST_F(TraceEventTestFixture, PrimitiveArgs) { |
| 2155 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 2168 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 2156 TraceLog::RECORDING_MODE); | 2169 TraceLog::RECORDING_MODE); |
| 2157 | 2170 |
| 2158 TRACE_EVENT1("foo", "event1", "int_one", 1); | 2171 TRACE_EVENT1("foo", "event1", "int_one", 1); |
| 2159 TRACE_EVENT1("foo", "event2", "int_neg_ten", -10); | 2172 TRACE_EVENT1("foo", "event2", "int_neg_ten", -10); |
| 2160 TRACE_EVENT1("foo", "event3", "float_one", 1.0f); | 2173 TRACE_EVENT1("foo", "event3", "float_one", 1.0f); |
| 2161 TRACE_EVENT1("foo", "event4", "float_half", .5f); | 2174 TRACE_EVENT1("foo", "event4", "float_half", .5f); |
| (...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3067 } | 3080 } |
| 3068 | 3081 |
| 3069 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { | 3082 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { |
| 3070 const char filter[] = "DELAY(test.Delay;16;oneshot)"; | 3083 const char filter[] = "DELAY(test.Delay;16;oneshot)"; |
| 3071 TraceConfig config(filter, ""); | 3084 TraceConfig config(filter, ""); |
| 3072 EXPECT_EQ(filter, config.ToCategoryFilterString()); | 3085 EXPECT_EQ(filter, config.ToCategoryFilterString()); |
| 3073 } | 3086 } |
| 3074 | 3087 |
| 3075 } // namespace trace_event | 3088 } // namespace trace_event |
| 3076 } // namespace base | 3089 } // namespace base |
| OLD | NEW |