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

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

Issue 1717283003: tracing: Make ConvertableToTraceFormat move-only scoped_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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
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 <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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698