Chromium Code Reviews| 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, 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 |
| OLD | NEW |