| 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 "base/trace_event/trace_event.h" | 5 #include "base/trace_event/trace_event.h" | 
| 6 | 6 | 
| 7 #include <math.h> | 7 #include <math.h> | 
| 8 #include <stddef.h> | 8 #include <stddef.h> | 
| 9 #include <stdint.h> | 9 #include <stdint.h> | 
| 10 | 10 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 23 #include "base/memory/singleton.h" | 23 #include "base/memory/singleton.h" | 
| 24 #include "base/process/process_handle.h" | 24 #include "base/process/process_handle.h" | 
| 25 #include "base/single_thread_task_runner.h" | 25 #include "base/single_thread_task_runner.h" | 
| 26 #include "base/stl_util.h" | 26 #include "base/stl_util.h" | 
| 27 #include "base/strings/pattern.h" | 27 #include "base/strings/pattern.h" | 
| 28 #include "base/strings/stringprintf.h" | 28 #include "base/strings/stringprintf.h" | 
| 29 #include "base/synchronization/waitable_event.h" | 29 #include "base/synchronization/waitable_event.h" | 
| 30 #include "base/threading/platform_thread.h" | 30 #include "base/threading/platform_thread.h" | 
| 31 #include "base/threading/thread.h" | 31 #include "base/threading/thread.h" | 
| 32 #include "base/time/time.h" | 32 #include "base/time/time.h" | 
|  | 33 #include "base/trace_event/event_name_filter.h" | 
|  | 34 #include "base/trace_event/heap_profiler_event_filter.h" | 
| 33 #include "base/trace_event/trace_buffer.h" | 35 #include "base/trace_event/trace_buffer.h" | 
| 34 #include "base/trace_event/trace_event.h" | 36 #include "base/trace_event/trace_event.h" | 
|  | 37 #include "base/trace_event/trace_event_filter.h" | 
|  | 38 #include "base/trace_event/trace_event_filter_test_utils.h" | 
| 35 #include "base/trace_event/trace_event_synthetic_delay.h" | 39 #include "base/trace_event/trace_event_synthetic_delay.h" | 
| 36 #include "base/values.h" | 40 #include "base/values.h" | 
| 37 #include "testing/gmock/include/gmock/gmock.h" | 41 #include "testing/gmock/include/gmock/gmock.h" | 
| 38 #include "testing/gtest/include/gtest/gtest.h" | 42 #include "testing/gtest/include/gtest/gtest.h" | 
| 39 | 43 | 
| 40 namespace base { | 44 namespace base { | 
| 41 namespace trace_event { | 45 namespace trace_event { | 
| 42 | 46 | 
| 43 namespace { | 47 namespace { | 
| 44 | 48 | 
| (...skipping 2904 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2949   config1.Merge(config2); | 2953   config1.Merge(config2); | 
| 2950   EXPECT_EQ(2u, config1.GetSyntheticDelayValues().size()); | 2954   EXPECT_EQ(2u, config1.GetSyntheticDelayValues().size()); | 
| 2951 } | 2955 } | 
| 2952 | 2956 | 
| 2953 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { | 2957 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { | 
| 2954   const char filter[] = "DELAY(test.Delay;16;oneshot)"; | 2958   const char filter[] = "DELAY(test.Delay;16;oneshot)"; | 
| 2955   TraceConfig config(filter, ""); | 2959   TraceConfig config(filter, ""); | 
| 2956   EXPECT_EQ(filter, config.ToCategoryFilterString()); | 2960   EXPECT_EQ(filter, config.ToCategoryFilterString()); | 
| 2957 } | 2961 } | 
| 2958 | 2962 | 
| 2959 class TestEventFilter : public TraceLog::TraceEventFilter { |  | 
| 2960  public: |  | 
| 2961   bool FilterTraceEvent(const TraceEvent& trace_event) const override { |  | 
| 2962     filter_trace_event_hit_count_++; |  | 
| 2963     return filter_return_value_; |  | 
| 2964   } |  | 
| 2965 |  | 
| 2966   void EndEvent(const char* category_group, const char* name) override { |  | 
| 2967     end_event_hit_count_++; |  | 
| 2968   } |  | 
| 2969 |  | 
| 2970   static void set_filter_return_value(bool value) { |  | 
| 2971     filter_return_value_ = value; |  | 
| 2972   } |  | 
| 2973 |  | 
| 2974   static size_t filter_trace_event_hit_count() { |  | 
| 2975     return filter_trace_event_hit_count_; |  | 
| 2976   } |  | 
| 2977   static size_t end_event_hit_count() { return end_event_hit_count_; } |  | 
| 2978 |  | 
| 2979   static void clear_counts() { |  | 
| 2980     filter_trace_event_hit_count_ = 0; |  | 
| 2981     end_event_hit_count_ = 0; |  | 
| 2982   } |  | 
| 2983 |  | 
| 2984  private: |  | 
| 2985   static size_t filter_trace_event_hit_count_; |  | 
| 2986   static size_t end_event_hit_count_; |  | 
| 2987   static bool filter_return_value_; |  | 
| 2988 }; |  | 
| 2989 |  | 
| 2990 size_t TestEventFilter::filter_trace_event_hit_count_ = 0; |  | 
| 2991 size_t TestEventFilter::end_event_hit_count_ = 0; |  | 
| 2992 bool TestEventFilter::filter_return_value_ = false; |  | 
| 2993 |  | 
| 2994 std::unique_ptr<TraceLog::TraceEventFilter> ConstructTestEventFilter() { |  | 
| 2995   return WrapUnique(new TestEventFilter); |  | 
| 2996 } |  | 
| 2997 |  | 
| 2998 TEST_F(TraceEventTestFixture, TraceFilteringMode) { | 2963 TEST_F(TraceEventTestFixture, TraceFilteringMode) { | 
| 2999   const char config_json[] = | 2964   const char config_json[] = | 
| 3000       "{" | 2965       "{" | 
| 3001       "  \"event_filters\": [" | 2966       "  \"event_filters\": [" | 
| 3002       "     {" | 2967       "     {" | 
| 3003       "       \"filter_predicate\": \"testing_predicate\", " | 2968       "       \"filter_predicate\": \"testing_predicate\", " | 
| 3004       "       \"included_categories\": [\"*\"]" | 2969       "       \"included_categories\": [\"*\"]" | 
| 3005       "     }" | 2970       "     }" | 
| 3006       "  ]" | 2971       "  ]" | 
| 3007       "}"; | 2972       "}"; | 
| 3008 | 2973 | 
| 3009   // Run RECORDING_MODE within FILTERING_MODE: | 2974   // Run RECORDING_MODE within FILTERING_MODE: | 
|  | 2975   TestEventFilter::HitsCounter filter_hits_counter; | 
| 3010   TestEventFilter::set_filter_return_value(true); | 2976   TestEventFilter::set_filter_return_value(true); | 
| 3011   TraceLog::SetTraceEventFilterConstructorForTesting(ConstructTestEventFilter); | 2977   TraceLog::GetInstance()->SetFilterFactoryForTesting(TestEventFilter::Factory); | 
| 3012 | 2978 | 
| 3013   // Only filtering mode is enabled with test filters. | 2979   // Only filtering mode is enabled with test filters. | 
| 3014   TraceLog::GetInstance()->SetEnabled(TraceConfig(config_json), | 2980   TraceLog::GetInstance()->SetEnabled(TraceConfig(config_json), | 
| 3015                                       TraceLog::FILTERING_MODE); | 2981                                       TraceLog::FILTERING_MODE); | 
| 3016   EXPECT_EQ(TraceLog::FILTERING_MODE, TraceLog::GetInstance()->enabled_modes()); | 2982   EXPECT_EQ(TraceLog::FILTERING_MODE, TraceLog::GetInstance()->enabled_modes()); | 
| 3017   { | 2983   { | 
| 3018     void* ptr = this; | 2984     void* ptr = this; | 
| 3019     TRACE_EVENT0("c0", "name0"); | 2985     TRACE_EVENT0("c0", "name0"); | 
| 3020     TRACE_EVENT_ASYNC_BEGIN0("c1", "name1", ptr); | 2986     TRACE_EVENT_ASYNC_BEGIN0("c1", "name1", ptr); | 
| 3021     TRACE_EVENT_INSTANT0("c0", "name0", TRACE_EVENT_SCOPE_THREAD); | 2987     TRACE_EVENT_INSTANT0("c0", "name0", TRACE_EVENT_SCOPE_THREAD); | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 3041   TraceLog::GetInstance()->SetDisabled(TraceLog::FILTERING_MODE); | 3007   TraceLog::GetInstance()->SetDisabled(TraceLog::FILTERING_MODE); | 
| 3042   EXPECT_EQ(0, TraceLog::GetInstance()->enabled_modes()); | 3008   EXPECT_EQ(0, TraceLog::GetInstance()->enabled_modes()); | 
| 3043 | 3009 | 
| 3044   EndTraceAndFlush(); | 3010   EndTraceAndFlush(); | 
| 3045   EXPECT_FALSE(FindMatchingValue("cat", "c0")); | 3011   EXPECT_FALSE(FindMatchingValue("cat", "c0")); | 
| 3046   EXPECT_FALSE(FindMatchingValue("cat", "c1")); | 3012   EXPECT_FALSE(FindMatchingValue("cat", "c1")); | 
| 3047   EXPECT_FALSE(FindMatchingValue("name", "name0")); | 3013   EXPECT_FALSE(FindMatchingValue("name", "name0")); | 
| 3048   EXPECT_FALSE(FindMatchingValue("name", "name1")); | 3014   EXPECT_FALSE(FindMatchingValue("name", "name1")); | 
| 3049   EXPECT_TRUE(FindMatchingValue("cat", "c2")); | 3015   EXPECT_TRUE(FindMatchingValue("cat", "c2")); | 
| 3050   EXPECT_TRUE(FindMatchingValue("name", "name2")); | 3016   EXPECT_TRUE(FindMatchingValue("name", "name2")); | 
| 3051   EXPECT_EQ(6u, TestEventFilter::filter_trace_event_hit_count()); | 3017   EXPECT_EQ(6u, filter_hits_counter.filter_trace_event_hit_count); | 
| 3052   EXPECT_EQ(3u, TestEventFilter::end_event_hit_count()); | 3018   EXPECT_EQ(3u, filter_hits_counter.end_event_hit_count); | 
| 3053   Clear(); | 3019   Clear(); | 
| 3054   TestEventFilter::clear_counts(); | 3020   filter_hits_counter.Reset(); | 
| 3055 | 3021 | 
| 3056   // Run FILTERING_MODE within RECORDING_MODE: | 3022   // Run FILTERING_MODE within RECORDING_MODE: | 
| 3057   // Only recording mode is enabled and all events must be recorded. | 3023   // Only recording mode is enabled and all events must be recorded. | 
| 3058   TraceLog::GetInstance()->SetEnabled(TraceConfig("", ""), | 3024   TraceLog::GetInstance()->SetEnabled(TraceConfig("", ""), | 
| 3059                                       TraceLog::RECORDING_MODE); | 3025                                       TraceLog::RECORDING_MODE); | 
| 3060   EXPECT_EQ(TraceLog::RECORDING_MODE, TraceLog::GetInstance()->enabled_modes()); | 3026   EXPECT_EQ(TraceLog::RECORDING_MODE, TraceLog::GetInstance()->enabled_modes()); | 
| 3061   { | 3027   { | 
| 3062     TRACE_EVENT0("c0", "name0"); | 3028     TRACE_EVENT0("c0", "name0"); | 
| 3063   } | 3029   } | 
| 3064 | 3030 | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 3083   TraceLog::GetInstance()->SetDisabled(TraceLog::RECORDING_MODE); | 3049   TraceLog::GetInstance()->SetDisabled(TraceLog::RECORDING_MODE); | 
| 3084   EXPECT_EQ(0, TraceLog::GetInstance()->enabled_modes()); | 3050   EXPECT_EQ(0, TraceLog::GetInstance()->enabled_modes()); | 
| 3085 | 3051 | 
| 3086   EndTraceAndFlush(); | 3052   EndTraceAndFlush(); | 
| 3087   EXPECT_TRUE(FindMatchingValue("cat", "c0")); | 3053   EXPECT_TRUE(FindMatchingValue("cat", "c0")); | 
| 3088   EXPECT_TRUE(FindMatchingValue("cat", "c2")); | 3054   EXPECT_TRUE(FindMatchingValue("cat", "c2")); | 
| 3089   EXPECT_TRUE(FindMatchingValue("name", "name0")); | 3055   EXPECT_TRUE(FindMatchingValue("name", "name0")); | 
| 3090   EXPECT_TRUE(FindMatchingValue("name", "name2")); | 3056   EXPECT_TRUE(FindMatchingValue("name", "name2")); | 
| 3091   EXPECT_FALSE(FindMatchingValue("cat", "c1")); | 3057   EXPECT_FALSE(FindMatchingValue("cat", "c1")); | 
| 3092   EXPECT_FALSE(FindMatchingValue("name", "name1")); | 3058   EXPECT_FALSE(FindMatchingValue("name", "name1")); | 
| 3093   EXPECT_EQ(1u, TestEventFilter::filter_trace_event_hit_count()); | 3059   EXPECT_EQ(1u, filter_hits_counter.filter_trace_event_hit_count); | 
| 3094   EXPECT_EQ(1u, TestEventFilter::end_event_hit_count()); | 3060   EXPECT_EQ(1u, filter_hits_counter.end_event_hit_count); | 
| 3095   Clear(); | 3061   Clear(); | 
| 3096   TestEventFilter::clear_counts(); |  | 
| 3097 } | 3062 } | 
| 3098 | 3063 | 
| 3099 TEST_F(TraceEventTestFixture, EventFiltering) { | 3064 TEST_F(TraceEventTestFixture, EventFiltering) { | 
| 3100   const char config_json[] = | 3065   const char config_json[] = | 
| 3101       "{" | 3066       "{" | 
| 3102       "  \"included_categories\": [" | 3067       "  \"included_categories\": [" | 
| 3103       "    \"filtered_cat\"," | 3068       "    \"filtered_cat\"," | 
| 3104       "    \"unfiltered_cat\"]," | 3069       "    \"unfiltered_cat\"]," | 
| 3105       "  \"event_filters\": [" | 3070       "  \"event_filters\": [" | 
| 3106       "     {" | 3071       "     {" | 
| 3107       "       \"filter_predicate\": \"testing_predicate\", " | 3072       "       \"filter_predicate\": \"testing_predicate\", " | 
| 3108       "       \"included_categories\": [\"filtered_cat\"]" | 3073       "       \"included_categories\": [\"filtered_cat\"]" | 
| 3109       "     }" | 3074       "     }" | 
| 3110       "    " | 3075       "    " | 
| 3111       "  ]" | 3076       "  ]" | 
| 3112       "}"; | 3077       "}"; | 
| 3113 | 3078 | 
|  | 3079   TestEventFilter::HitsCounter filter_hits_counter; | 
| 3114   TestEventFilter::set_filter_return_value(true); | 3080   TestEventFilter::set_filter_return_value(true); | 
| 3115   TraceLog::SetTraceEventFilterConstructorForTesting(ConstructTestEventFilter); | 3081   TraceLog::GetInstance()->SetFilterFactoryForTesting(TestEventFilter::Factory); | 
|  | 3082 | 
| 3116   TraceConfig trace_config(config_json); | 3083   TraceConfig trace_config(config_json); | 
| 3117   TraceLog::GetInstance()->SetEnabled( | 3084   TraceLog::GetInstance()->SetEnabled( | 
| 3118       trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); | 3085       trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); | 
| 3119   ASSERT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 3086   ASSERT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 
| 3120 | 3087 | 
| 3121   TRACE_EVENT0("filtered_cat", "a snake"); | 3088   TRACE_EVENT0("filtered_cat", "a snake"); | 
| 3122   TRACE_EVENT0("filtered_cat", "a mushroom"); | 3089   TRACE_EVENT0("filtered_cat", "a mushroom"); | 
| 3123   TRACE_EVENT0("unfiltered_cat", "a horse"); | 3090   TRACE_EVENT0("unfiltered_cat", "a horse"); | 
| 3124 | 3091 | 
| 3125   // This is scoped so we can test the end event being filtered. | 3092   // This is scoped so we can test the end event being filtered. | 
| 3126   { TRACE_EVENT0("filtered_cat", "another cat whoa"); } | 3093   { TRACE_EVENT0("filtered_cat", "another cat whoa"); } | 
| 3127 | 3094 | 
| 3128   EndTraceAndFlush(); | 3095   EndTraceAndFlush(); | 
| 3129 | 3096 | 
| 3130   EXPECT_EQ(3u, TestEventFilter::filter_trace_event_hit_count()); | 3097   EXPECT_EQ(3u, filter_hits_counter.filter_trace_event_hit_count); | 
| 3131   EXPECT_EQ(1u, TestEventFilter::end_event_hit_count()); | 3098   EXPECT_EQ(1u, filter_hits_counter.end_event_hit_count); | 
| 3132   TestEventFilter::clear_counts(); |  | 
| 3133 } | 3099 } | 
| 3134 | 3100 | 
| 3135 TEST_F(TraceEventTestFixture, EventWhitelistFiltering) { | 3101 TEST_F(TraceEventTestFixture, EventWhitelistFiltering) { | 
| 3136   std::string config_json = StringPrintf( | 3102   std::string config_json = StringPrintf( | 
| 3137       "{" | 3103       "{" | 
| 3138       "  \"included_categories\": [" | 3104       "  \"included_categories\": [" | 
| 3139       "    \"filtered_cat\"," | 3105       "    \"filtered_cat\"," | 
| 3140       "    \"unfiltered_cat\"]," | 3106       "    \"unfiltered_cat\"]," | 
| 3141       "  \"event_filters\": [" | 3107       "  \"event_filters\": [" | 
| 3142       "     {" | 3108       "     {" | 
| 3143       "       \"filter_predicate\": \"%s\", " | 3109       "       \"filter_predicate\": \"%s\", " | 
| 3144       "       \"included_categories\": [\"*\"], " | 3110       "       \"included_categories\": [\"*\"], " | 
| 3145       "       \"excluded_categories\": [\"unfiltered_cat\"], " | 3111       "       \"excluded_categories\": [\"unfiltered_cat\"], " | 
| 3146       "       \"filter_args\": {" | 3112       "       \"filter_args\": {" | 
| 3147       "           \"event_name_whitelist\": [\"a snake\", \"a dog\"]" | 3113       "           \"event_name_whitelist\": [\"a snake\", \"a dog\"]" | 
| 3148       "         }" | 3114       "         }" | 
| 3149       "     }" | 3115       "     }" | 
| 3150       "    " | 3116       "    " | 
| 3151       "  ]" | 3117       "  ]" | 
| 3152       "}", | 3118       "}", | 
| 3153       TraceLog::TraceEventFilter::kEventWhitelistPredicate); | 3119       EventNameFilter::kName); | 
| 3154 | 3120 | 
| 3155   TraceConfig trace_config(config_json); | 3121   TraceConfig trace_config(config_json); | 
| 3156   TraceLog::GetInstance()->SetEnabled( | 3122   TraceLog::GetInstance()->SetEnabled( | 
| 3157       trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); | 3123       trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); | 
| 3158   EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 3124   EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 
| 3159 | 3125 | 
| 3160   TRACE_EVENT0("filtered_cat", "a snake"); | 3126   TRACE_EVENT0("filtered_cat", "a snake"); | 
| 3161   TRACE_EVENT0("filtered_cat", "a mushroom"); | 3127   TRACE_EVENT0("filtered_cat", "a mushroom"); | 
| 3162   TRACE_EVENT0("unfiltered_cat", "a cat"); | 3128   TRACE_EVENT0("unfiltered_cat", "a cat"); | 
| 3163 | 3129 | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 3175       "    \"filtered_cat\"," | 3141       "    \"filtered_cat\"," | 
| 3176       "    \"unfiltered_cat\"]," | 3142       "    \"unfiltered_cat\"]," | 
| 3177       "  \"excluded_categories\": [\"excluded_cat\"]," | 3143       "  \"excluded_categories\": [\"excluded_cat\"]," | 
| 3178       "  \"event_filters\": [" | 3144       "  \"event_filters\": [" | 
| 3179       "     {" | 3145       "     {" | 
| 3180       "       \"filter_predicate\": \"%s\", " | 3146       "       \"filter_predicate\": \"%s\", " | 
| 3181       "       \"included_categories\": [\"*\"]" | 3147       "       \"included_categories\": [\"*\"]" | 
| 3182       "     }" | 3148       "     }" | 
| 3183       "  ]" | 3149       "  ]" | 
| 3184       "}", | 3150       "}", | 
| 3185       TraceLog::TraceEventFilter::kHeapProfilerPredicate); | 3151       HeapProfilerEventFilter::kName); | 
| 3186 | 3152 | 
| 3187   TraceConfig trace_config(config_json); | 3153   TraceConfig trace_config(config_json); | 
| 3188   TraceLog::GetInstance()->SetEnabled( | 3154   TraceLog::GetInstance()->SetEnabled( | 
| 3189       trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); | 3155       trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); | 
| 3190   EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 3156   EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 
| 3191 | 3157 | 
| 3192   TRACE_EVENT0("filtered_cat", "a snake"); | 3158   TRACE_EVENT0("filtered_cat", "a snake"); | 
| 3193   TRACE_EVENT0("excluded_cat", "a mushroom"); | 3159   TRACE_EVENT0("excluded_cat", "a mushroom"); | 
| 3194   TRACE_EVENT0("unfiltered_cat", "a cat"); | 3160   TRACE_EVENT0("unfiltered_cat", "a cat"); | 
| 3195 | 3161 | 
| 3196   EndTraceAndFlush(); | 3162   EndTraceAndFlush(); | 
| 3197 | 3163 | 
| 3198   // The predicate should not change behavior of the trace events. | 3164   // The predicate should not change behavior of the trace events. | 
| 3199   EXPECT_TRUE(FindMatchingValue("name", "a snake")); | 3165   EXPECT_TRUE(FindMatchingValue("name", "a snake")); | 
| 3200   EXPECT_FALSE(FindMatchingValue("name", "a mushroom")); | 3166   EXPECT_FALSE(FindMatchingValue("name", "a mushroom")); | 
| 3201   EXPECT_TRUE(FindMatchingValue("name", "a cat")); | 3167   EXPECT_TRUE(FindMatchingValue("name", "a cat")); | 
| 3202 } | 3168 } | 
| 3203 | 3169 | 
| 3204 TEST_F(TraceEventTestFixture, ClockSyncEventsAreAlwaysAddedToTrace) { | 3170 TEST_F(TraceEventTestFixture, ClockSyncEventsAreAlwaysAddedToTrace) { | 
| 3205   BeginSpecificTrace("-*"); | 3171   BeginSpecificTrace("-*"); | 
| 3206   TRACE_EVENT_CLOCK_SYNC_RECEIVER(1); | 3172   TRACE_EVENT_CLOCK_SYNC_RECEIVER(1); | 
| 3207   EndTraceAndFlush(); | 3173   EndTraceAndFlush(); | 
| 3208   EXPECT_TRUE(FindNamePhase("clock_sync", "c")); | 3174   EXPECT_TRUE(FindNamePhase("clock_sync", "c")); | 
| 3209 } | 3175 } | 
| 3210 | 3176 | 
| 3211 }  // namespace trace_event | 3177 }  // namespace trace_event | 
| 3212 }  // namespace base | 3178 }  // namespace base | 
| OLD | NEW | 
|---|