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 <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 Loading... |
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 Loading... |
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, TraceConfigFromValidLegacyStrings) { |
| 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, TraceConfigFromInvalidLegacyStrings) { |
| 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 const char* const configs[] = { |
| 3213 "", |
| 3214 "DELAY(", |
| 3215 "DELAY(;", |
| 3216 "DELAY(;)", |
| 3217 "DELAY(test.Delay)", |
| 3218 "DELAY(test.Delay;)" |
| 3219 }; |
| 3220 for (size_t i = 0; i < arraysize(configs); i++) { |
| 3221 TraceConfig tc(configs[i], ""); |
| 3222 EXPECT_EQ(0u, tc.GetSyntheticDelayValues().size()); |
| 3223 } |
| 3224 } |
| 3225 |
| 3226 TEST(TraceConfigTest, ConstructDefaultTraceConfig) { |
| 3227 // Make sure that upon an empty string, we fall back to the default config. |
| 3228 TraceConfig tc; |
| 3229 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| 3230 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3231 EXPECT_FALSE(tc.enable_sampling_); |
| 3232 EXPECT_FALSE(tc.enable_systrace_); |
| 3233 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| 3234 EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category")); |
| 3235 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
| 3236 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
| 3237 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryTest,Category2")); |
| 3238 } |
| 3239 |
| 3240 TEST(TraceConfigTest, TraceConfigFromValidString) { |
| 3241 // Using an arbitrary non-empty config string. |
| 3242 const char config_string[] = |
| 3243 "{" |
| 3244 "\"enable_sampling\":true," |
| 3245 "\"enable_systrace\":true," |
| 3246 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," |
| 3247 "\"included_categories\":[\"included\",\"inc_pattern*\"]," |
| 3248 "\"record_mode\":\"record-continuously\"," |
| 3249 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" |
| 3250 "}"; |
| 3251 TraceConfig tc(config_string); |
| 3252 EXPECT_STREQ(config_string, tc.ToString().c_str()); |
| 3253 EXPECT_TRUE(tc.record_mode_ == RECORD_CONTINUOUSLY); |
| 3254 EXPECT_TRUE(tc.enable_sampling_); |
| 3255 EXPECT_TRUE(tc.enable_systrace_); |
| 3256 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*," |
| 3257 "DELAY(test.Delay1;16),DELAY(test.Delay2;32)", |
| 3258 tc.ToCategoryFilterString().c_str()); |
| 3259 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included")); |
| 3260 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded")); |
| 3261 EXPECT_TRUE(tc.IsCategoryGroupEnabled("inc_pattern_category")); |
| 3262 EXPECT_FALSE(tc.IsCategoryGroupEnabled("exc_pattern_category")); |
| 3263 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded")); |
| 3264 EXPECT_FALSE(tc.IsCategoryGroupEnabled("not-excluded-nor-included")); |
| 3265 EXPECT_FALSE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
| 3266 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
| 3267 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest,Category2")); |
| 3268 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,DELAY(test.Delay1;16)")); |
| 3269 EXPECT_FALSE(tc.IsCategoryGroupEnabled("DELAY(test.Delay1;16)")); |
| 3270 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size()); |
| 3271 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str()); |
| 3272 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str()); |
| 3273 |
| 3274 // Clear |
| 3275 tc.Clear(); |
| 3276 EXPECT_STREQ(tc.ToString().c_str(), |
| 3277 "{" |
| 3278 "\"enable_sampling\":false," |
| 3279 "\"enable_systrace\":false," |
| 3280 "\"record_mode\":\"record-until-full\"" |
| 3281 "}"); |
| 3282 } |
| 3283 |
| 3284 TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| 3285 // The config string needs to be a dictionary correctly formatted as a JSON |
| 3286 // string. Otherwise, it will fall back to the default initialization. |
| 3287 TraceConfig tc(""); |
| 3288 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| 3289 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3290 EXPECT_FALSE(tc.enable_sampling_); |
| 3291 EXPECT_FALSE(tc.enable_systrace_); |
| 3292 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| 3293 |
| 3294 tc = TraceConfig("This is an invalid config string."); |
| 3295 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| 3296 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3297 EXPECT_FALSE(tc.enable_sampling_); |
| 3298 EXPECT_FALSE(tc.enable_systrace_); |
| 3299 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| 3300 |
| 3301 tc = TraceConfig("[\"This\", \"is\", \"not\", \"a\", \"dictionary\"]"); |
| 3302 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| 3303 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3304 EXPECT_FALSE(tc.enable_sampling_); |
| 3305 EXPECT_FALSE(tc.enable_systrace_); |
| 3306 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| 3307 |
| 3308 tc = TraceConfig("{\"record_mode\": invalid-value-needs-double-quote}"); |
| 3309 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| 3310 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3311 EXPECT_FALSE(tc.enable_sampling_); |
| 3312 EXPECT_FALSE(tc.enable_systrace_); |
| 3313 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| 3314 |
| 3315 // If the config string a dictionary formatted as a JSON string, it will |
| 3316 // initialize TraceConfig with best effort. |
| 3317 tc = TraceConfig("{}"); |
| 3318 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3319 EXPECT_FALSE(tc.enable_sampling_); |
| 3320 EXPECT_FALSE(tc.enable_systrace_); |
| 3321 EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| 3322 |
| 3323 tc = TraceConfig("{\"arbitrary-key\":\"arbitrary-value\"}"); |
| 3324 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3325 EXPECT_FALSE(tc.enable_sampling_); |
| 3326 EXPECT_FALSE(tc.enable_systrace_); |
| 3327 EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| 3328 |
| 3329 const char invalid_config_string[] = |
| 3330 "{" |
| 3331 "\"enable_sampling\":\"true\"," |
| 3332 "\"enable_systrace\":1," |
| 3333 "\"excluded_categories\":[\"excluded\"]," |
| 3334 "\"included_categories\":\"not a list\"," |
| 3335 "\"record_mode\":\"arbitrary-mode\"," |
| 3336 "\"synthetic_delays\":[\"test.Delay1;16\"," |
| 3337 "\"invalid-delay\"," |
| 3338 "\"test.Delay2;32\"]" |
| 3339 "}"; |
| 3340 tc = TraceConfig(invalid_config_string); |
| 3341 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL); |
| 3342 EXPECT_FALSE(tc.enable_sampling_); |
| 3343 EXPECT_FALSE(tc.enable_systrace_); |
| 3344 EXPECT_STREQ("-excluded,DELAY(test.Delay1;16),DELAY(test.Delay2;32)", |
| 3345 tc.ToCategoryFilterString().c_str()); |
| 3346 } |
| 3347 |
| 3348 TEST(TraceConfigTest, MergingTraceConfigs) { |
| 3349 // Merge |
| 3350 TraceConfig tc; |
| 3351 TraceConfig tc2("included,-excluded,inc_pattern*,-exc_pattern*", ""); |
| 3352 tc.Merge(tc2); |
| 3353 EXPECT_STREQ("{" |
| 3354 "\"enable_sampling\":false," |
| 3355 "\"enable_systrace\":false," |
| 3356 "\"excluded_categories\":[" |
| 3357 "\"*Debug\",\"*Test\",\"excluded\",\"exc_pattern*\"" |
| 3358 "]," |
| 3359 "\"record_mode\":\"record-until-full\"" |
| 3360 "}", |
| 3361 tc.ToString().c_str()); |
| 3362 |
| 3363 tc = TraceConfig("DELAY(test.Delay1;16)", ""); |
| 3364 tc2 = TraceConfig("DELAY(test.Delay2;32)", ""); |
| 3365 tc.Merge(tc2); |
| 3366 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size()); |
| 3367 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str()); |
| 3368 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str()); |
| 3369 } |
| 3370 |
| 3371 TEST(TraceConfigTest, IsCategoryGroupEnabled) { |
| 3372 // Enabling a disabled- category does not require all categories to be traced |
| 3373 // to be included. |
| 3374 TraceConfig tc("disabled-by-default-cc,-excluded", ""); |
| 3375 EXPECT_STREQ("disabled-by-default-cc,-excluded", |
| 3376 tc.ToCategoryFilterString().c_str()); |
| 3377 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-cc")); |
| 3378 EXPECT_TRUE(tc.IsCategoryGroupEnabled("some_other_group")); |
| 3379 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded")); |
| 3380 |
| 3381 // Enabled a disabled- category and also including makes all categories to |
| 3382 // be traced require including. |
| 3383 tc = TraceConfig("disabled-by-default-cc,included", ""); |
| 3384 EXPECT_STREQ("included,disabled-by-default-cc", |
| 3385 tc.ToCategoryFilterString().c_str()); |
| 3386 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-cc")); |
| 3387 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included")); |
| 3388 EXPECT_FALSE(tc.IsCategoryGroupEnabled("other_included")); |
| 3389 } |
| 3390 |
| 3391 TEST(TraceConfigTest, IsEmptyOrContainsLeadingOrTrailingWhitespace) { |
| 3392 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches |
| 3393 // categories that are explicitly forbidden. |
| 3394 // This method is called in a DCHECK to assert that we don't have these types |
| 3395 // of strings as categories. |
| 3396 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3397 " bad_category ")); |
| 3398 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3399 " bad_category")); |
| 3400 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3401 "bad_category ")); |
| 3402 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3403 " bad_category")); |
| 3404 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3405 "bad_category ")); |
| 3406 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3407 " bad_category ")); |
| 3408 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3409 "")); |
| 3410 EXPECT_FALSE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
| 3411 "good_category")); |
| 3412 } |
| 3413 |
3083 } // namespace trace_event | 3414 } // namespace trace_event |
3084 } // namespace base | 3415 } // namespace base |
OLD | NEW |