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

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

Issue 1115023003: [Startup Tracing] The TraceConfig class [STALE] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review fix Created 5 years, 7 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 <cstdlib> 6 #include <cstdlib>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 29 matching lines...) Expand all
40 const char* key; 40 const char* key;
41 const char* value; 41 const char* value;
42 CompareOp op; 42 CompareOp op;
43 }; 43 };
44 44
45 const int kThreadId = 42; 45 const int kThreadId = 42;
46 const int kAsyncId = 5; 46 const int kAsyncId = 5;
47 const char kAsyncIdStr[] = "0x5"; 47 const char kAsyncIdStr[] = "0x5";
48 const int kAsyncId2 = 6; 48 const int kAsyncId2 = 6;
49 const char kAsyncId2Str[] = "0x6"; 49 const char kAsyncId2Str[] = "0x6";
50 const char kDefaultTraceConfigString[] =
51 "{"
52 "\"enable_sampling\":false,"
53 "\"enable_systrace\":false,"
54 "\"excluded_categories\":[\"*Debug\",\"*Test\"],"
55 "\"record_mode\":\"record-until-full\""
56 "}";
50 57
51 class TraceEventTestFixture : public testing::Test { 58 class TraceEventTestFixture : public testing::Test {
52 public: 59 public:
53 void OnTraceDataCollected( 60 void OnTraceDataCollected(
54 WaitableEvent* flush_complete_event, 61 WaitableEvent* flush_complete_event,
55 const scoped_refptr<base::RefCountedString>& events_str, 62 const scoped_refptr<base::RefCountedString>& events_str,
56 bool has_more_events); 63 bool has_more_events);
57 void OnWatchEventMatched() { 64 void OnWatchEventMatched() {
58 ++event_watch_notification_; 65 ++event_watch_notification_;
59 } 66 }
(...skipping 3013 matching lines...) Expand 10 before | Expand all | Expand 10 after
3073 TraceOptions new_options; 3080 TraceOptions new_options;
3074 EXPECT_TRUE(new_options.SetFromString(original_option.ToString())); 3081 EXPECT_TRUE(new_options.SetFromString(original_option.ToString()));
3075 EXPECT_EQ(original_option.record_mode, new_options.record_mode); 3082 EXPECT_EQ(original_option.record_mode, new_options.record_mode);
3076 EXPECT_EQ(original_option.enable_sampling, new_options.enable_sampling); 3083 EXPECT_EQ(original_option.enable_sampling, new_options.enable_sampling);
3077 EXPECT_EQ(original_option.enable_systrace, new_options.enable_systrace); 3084 EXPECT_EQ(original_option.enable_systrace, new_options.enable_systrace);
3078 } 3085 }
3079 } 3086 }
3080 } 3087 }
3081 } 3088 }
3082 3089
3090 TEST(TraceConfigTest, TraceConfigFromValidLegacyString) {
nednguyen 2015/05/13 18:16:32 "...LegacyStrings"?
Zhen Wang 2015/05/13 20:59:17 Done.
3091 // From trace options strings
3092 TraceConfig config("", "record-until-full");
3093 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
3094 EXPECT_FALSE(config.enable_sampling_);
3095 EXPECT_FALSE(config.enable_systrace_);
3096 EXPECT_STREQ("record-until-full", config.ToTraceOptionsString().c_str());
3097
3098 config = TraceConfig("", "record-continuously");
3099 EXPECT_EQ(RECORD_CONTINUOUSLY, config.record_mode_);
3100 EXPECT_FALSE(config.enable_sampling_);
3101 EXPECT_FALSE(config.enable_systrace_);
3102 EXPECT_STREQ("record-continuously", config.ToTraceOptionsString().c_str());
3103
3104 config = TraceConfig("", "trace-to-console");
3105 EXPECT_EQ(ECHO_TO_CONSOLE, config.record_mode_);
3106 EXPECT_FALSE(config.enable_sampling_);
3107 EXPECT_FALSE(config.enable_systrace_);
3108 EXPECT_STREQ("trace-to-console", config.ToTraceOptionsString().c_str());
3109
3110 config = TraceConfig("", "record-as-much-as-possible");
3111 EXPECT_EQ(RECORD_AS_MUCH_AS_POSSIBLE, config.record_mode_);
3112 EXPECT_FALSE(config.enable_sampling_);
3113 EXPECT_FALSE(config.enable_systrace_);
3114 EXPECT_STREQ("record-as-much-as-possible",
3115 config.ToTraceOptionsString().c_str());
3116
3117 config = TraceConfig("", "record-until-full, enable-sampling");
3118 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
3119 EXPECT_TRUE(config.enable_sampling_);
3120 EXPECT_FALSE(config.enable_systrace_);
3121 EXPECT_STREQ("record-until-full,enable-sampling",
3122 config.ToTraceOptionsString().c_str());
3123
3124 config = TraceConfig("", "enable-systrace, record-continuously");
3125 EXPECT_EQ(RECORD_CONTINUOUSLY, config.record_mode_);
3126 EXPECT_FALSE(config.enable_sampling_);
3127 EXPECT_TRUE(config.enable_systrace_);
3128 EXPECT_STREQ("record-continuously,enable-systrace",
3129 config.ToTraceOptionsString().c_str());
3130
3131 config = TraceConfig("",
3132 "enable-systrace, trace-to-console, enable-sampling");
3133 EXPECT_EQ(ECHO_TO_CONSOLE, config.record_mode_);
3134 EXPECT_TRUE(config.enable_sampling_);
3135 EXPECT_TRUE(config.enable_systrace_);
3136 EXPECT_STREQ("trace-to-console,enable-sampling,enable-systrace",
3137 config.ToTraceOptionsString().c_str());
3138
3139 config = TraceConfig(
3140 "", "record-continuously, record-until-full, trace-to-console");
3141 EXPECT_EQ(ECHO_TO_CONSOLE, config.record_mode_);
3142 EXPECT_FALSE(config.enable_systrace_);
3143 EXPECT_FALSE(config.enable_sampling_);
3144 EXPECT_STREQ("trace-to-console", config.ToTraceOptionsString().c_str());
3145
3146 // From category filter strings
3147 config = TraceConfig("-*Debug,-*Test", "");
3148 EXPECT_STREQ("-*Debug,-*Test", config.ToCategoryFilterString().c_str());
3149
3150 config = TraceConfig("included,-excluded,inc_pattern*,-exc_pattern*", "");
3151 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
3152 config.ToCategoryFilterString().c_str());
3153
3154 config = TraceConfig("only_inc_cat", "");
3155 EXPECT_STREQ("only_inc_cat", config.ToCategoryFilterString().c_str());
3156
3157 config = TraceConfig("-only_exc_cat", "");
3158 EXPECT_STREQ("-only_exc_cat", config.ToCategoryFilterString().c_str());
3159
3160 config = TraceConfig("disabled-by-default-cc,-excluded", "");
3161 EXPECT_STREQ("disabled-by-default-cc,-excluded",
3162 config.ToCategoryFilterString().c_str());
3163
3164 config = TraceConfig("disabled-by-default-cc,included", "");
3165 EXPECT_STREQ("included,disabled-by-default-cc",
3166 config.ToCategoryFilterString().c_str());
3167
3168 config = TraceConfig("DELAY(test.Delay1;16),included", "");
3169 EXPECT_STREQ("included,DELAY(test.Delay1;16)",
3170 config.ToCategoryFilterString().c_str());
3171
3172 // From both trace options and category filter strings
3173 config = TraceConfig("", "");
3174 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
3175 EXPECT_FALSE(config.enable_systrace_);
3176 EXPECT_FALSE(config.enable_sampling_);
3177 EXPECT_STREQ("", config.ToCategoryFilterString().c_str());
3178 EXPECT_STREQ("record-until-full", config.ToTraceOptionsString().c_str());
3179
3180 config = TraceConfig("included,-excluded,inc_pattern*,-exc_pattern*",
3181 "enable-systrace, trace-to-console, enable-sampling");
3182 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
3183 config.ToCategoryFilterString().c_str());
3184 EXPECT_STREQ("trace-to-console,enable-sampling,enable-systrace",
3185 config.ToTraceOptionsString().c_str());
3186
3187 // From both trace options and category filter strings with spaces.
3188 config = TraceConfig(" included , -excluded, inc_pattern*, ,-exc_pattern* ",
3189 "enable-systrace, ,trace-to-console, enable-sampling ");
3190 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
3191 config.ToCategoryFilterString().c_str());
3192 EXPECT_STREQ("trace-to-console,enable-sampling,enable-systrace",
3193 config.ToTraceOptionsString().c_str());
3194 }
3195
3196 TEST(TraceConfigTest, TraceConfigFromInvalidLegacyString) {
nednguyen 2015/05/13 18:16:32 "...LegacyStrings"?
Zhen Wang 2015/05/13 20:59:17 Done.
3197 TraceConfig config("", "foo-bar-baz");
3198 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
3199 EXPECT_FALSE(config.enable_systrace_);
3200 EXPECT_FALSE(config.enable_sampling_);
3201 EXPECT_STREQ("", config.ToCategoryFilterString().c_str());
3202 EXPECT_STREQ("record-until-full", config.ToTraceOptionsString().c_str());
3203
3204 config = TraceConfig("arbitrary-category", "foo-bar-baz, enable-systrace");
3205 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
3206 EXPECT_TRUE(config.enable_systrace_);
3207 EXPECT_FALSE(config.enable_sampling_);
3208 EXPECT_STREQ("arbitrary-category", config.ToCategoryFilterString().c_str());
3209 EXPECT_STREQ("record-until-full,enable-systrace",
3210 config.ToTraceOptionsString().c_str());
3211 }
3212
3213 TEST(TraceConfigTest, ConstructDefaultTraceConfig) {
3214 // Make sure that upon an empty string, we fall back to the default config.
3215 TraceConfig tc;
3216 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
3217 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3218 EXPECT_FALSE(tc.enable_sampling_);
3219 EXPECT_FALSE(tc.enable_systrace_);
3220 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
3221 EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category"));
3222 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug"));
3223 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1"));
3224 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryTest,Category2"));
3225 }
3226
3227 TEST(TraceConfigTest, TraceConfigFromValidString) {
3228 // Using an arbitrary non-empty config string.
3229 const char config_string[] =
3230 "{"
3231 "\"enable_sampling\":true,"
3232 "\"enable_systrace\":true,"
3233 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"],"
3234 "\"included_categories\":[\"included\",\"inc_pattern*\"],"
3235 "\"record_mode\":\"record-continuously\","
3236 "\"synthetic_delays\":[\"test.Delay1;16\"]"
3237 "}";
3238 TraceConfig tc(config_string);
3239 EXPECT_STREQ(config_string, tc.ToString().c_str());
3240 EXPECT_TRUE(tc.record_mode_ == RECORD_CONTINUOUSLY);
3241 EXPECT_TRUE(tc.enable_sampling_);
3242 EXPECT_TRUE(tc.enable_systrace_);
3243 EXPECT_STREQ(
3244 "included,inc_pattern*,-excluded,-exc_pattern*,DELAY(test.Delay1;16)",
3245 tc.ToCategoryFilterString().c_str());
3246 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included"));
3247 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded"));
3248 EXPECT_TRUE(tc.IsCategoryGroupEnabled("inc_pattern_category"));
3249 EXPECT_FALSE(tc.IsCategoryGroupEnabled("exc_pattern_category"));
3250 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded"));
3251 EXPECT_FALSE(tc.IsCategoryGroupEnabled("not-excluded-nor-included"));
3252 EXPECT_FALSE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug"));
3253 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1"));
3254 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest,Category2"));
3255
3256 // Clear
3257 tc.Clear();
3258 EXPECT_STREQ(tc.ToString().c_str(),
3259 "{"
3260 "\"enable_sampling\":false,"
3261 "\"enable_systrace\":false,"
3262 "\"record_mode\":\"record-until-full\""
3263 "}");
3264 }
3265
3266 TEST(TraceConfigTest, TraceConfigFromInvalidString) {
3267 // The config string needs to be a dictionary correctly formatted as a JSON
3268 // string. Otherwise, it will fall back to the default initialization.
3269 TraceConfig tc("");
3270 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
3271 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3272 EXPECT_FALSE(tc.enable_sampling_);
3273 EXPECT_FALSE(tc.enable_systrace_);
3274 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
3275
3276 tc = TraceConfig("This is an invalid config string.");
3277 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
3278 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3279 EXPECT_FALSE(tc.enable_sampling_);
3280 EXPECT_FALSE(tc.enable_systrace_);
3281 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
3282
3283 tc = TraceConfig("[\"This\", \"is\", \"not\", \"a\", \"dictionary\"]");
3284 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
3285 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3286 EXPECT_FALSE(tc.enable_sampling_);
3287 EXPECT_FALSE(tc.enable_systrace_);
3288 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
3289
3290 tc = TraceConfig("{\"record_mode\": invalid-value-needs-double-quote}");
3291 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
3292 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3293 EXPECT_FALSE(tc.enable_sampling_);
3294 EXPECT_FALSE(tc.enable_systrace_);
3295 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
3296
3297 // If the config string a dictionary formatted as a JSON string, it will
3298 // initialize TraceConfig with best effort.
3299 tc = TraceConfig("{}");
3300 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3301 EXPECT_FALSE(tc.enable_sampling_);
3302 EXPECT_FALSE(tc.enable_systrace_);
3303 EXPECT_STREQ("", tc.ToCategoryFilterString().c_str());
3304
3305 tc = TraceConfig("{\"arbitrary-key\":\"arbitrary-value\"}");
3306 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3307 EXPECT_FALSE(tc.enable_sampling_);
3308 EXPECT_FALSE(tc.enable_systrace_);
3309 EXPECT_STREQ("", tc.ToCategoryFilterString().c_str());
3310
3311 const char invalid_config_string[] =
3312 "{"
3313 "\"enable_sampling\":\"true\","
3314 "\"enable_systrace\":1,"
3315 "\"excluded_categories\":[\"excluded\"],"
3316 "\"included_categories\":\"not a list\","
3317 "\"record_mode\":\"arbitrary-mode\","
3318 "\"synthetic_delays\":[\"test.Delay1;16\"]"
3319 "}";
3320 tc = TraceConfig(invalid_config_string);
3321 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
3322 EXPECT_FALSE(tc.enable_sampling_);
3323 EXPECT_FALSE(tc.enable_systrace_);
3324 EXPECT_STREQ("-excluded,DELAY(test.Delay1;16)",
3325 tc.ToCategoryFilterString().c_str());
3326 }
3327
3328 TEST(TraceConfigTest, MergingTraceConfigs) {
3329 // Merge
3330 TraceConfig tc;
3331 TraceConfig tc2("included,-excluded,inc_pattern*,-exc_pattern*", "");
3332 tc.Merge(tc2);
3333 EXPECT_STREQ("{"
3334 "\"enable_sampling\":false,"
3335 "\"enable_systrace\":false,"
3336 "\"excluded_categories\":["
3337 "\"*Debug\",\"*Test\",\"excluded\",\"exc_pattern*\""
3338 "],"
3339 "\"record_mode\":\"record-until-full\""
3340 "}",
3341 tc.ToString().c_str());
3342 }
3343
3344 TEST(TraceConfigTest, IsCategoryGroupEnabled) {
3345 // Enabling a disabled- category does not require all categories to be traced
3346 // to be included.
3347 TraceConfig tc("disabled-by-default-cc,-excluded", "");
3348 EXPECT_STREQ("disabled-by-default-cc,-excluded",
3349 tc.ToCategoryFilterString().c_str());
3350 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-cc"));
3351 EXPECT_TRUE(tc.IsCategoryGroupEnabled("some_other_group"));
3352 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded"));
3353
3354 // Enabled a disabled- category and also including makes all categories to
3355 // be traced require including.
3356 tc = TraceConfig("disabled-by-default-cc,included", "");
3357 EXPECT_STREQ("included,disabled-by-default-cc",
3358 tc.ToCategoryFilterString().c_str());
3359 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-cc"));
3360 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included"));
3361 EXPECT_FALSE(tc.IsCategoryGroupEnabled("other_included"));
3362 }
3363
3364 TEST(TraceConfigTest, IsEmptyOrContainsLeadingOrTrailingWhitespace) {
3365 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches
3366 // categories that are explicitly forbidden.
3367 // This method is called in a DCHECK to assert that we don't have these types
3368 // of strings as categories.
3369 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3370 " bad_category "));
3371 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3372 " bad_category"));
3373 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3374 "bad_category "));
3375 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3376 " bad_category"));
3377 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3378 "bad_category "));
3379 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3380 " bad_category "));
3381 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3382 ""));
3383 EXPECT_FALSE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
3384 "good_category"));
3385 }
3386
3083 } // namespace trace_event 3387 } // namespace trace_event
3084 } // namespace base 3388 } // namespace base
OLDNEW
« base/trace_event/trace_event_impl.cc ('K') | « base/trace_event/trace_event_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698