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

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

Issue 2034393004: Allow multiple logging::LogMessage{Handler,Listener}s Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: only keep scoped API Created 4 years, 4 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 "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 3019 matching lines...) Expand 10 before | Expand all | Expand 10 after
3030 BeginTrace(); 3030 BeginTrace();
3031 thread.task_runner()->PostTask( 3031 thread.task_runner()->PostTask(
3032 FROM_HERE, Bind(&TraceWithAllMacroVariants, &task_complete_event)); 3032 FROM_HERE, Bind(&TraceWithAllMacroVariants, &task_complete_event));
3033 task_complete_event.Wait(); 3033 task_complete_event.Wait();
3034 task_complete_event.Reset(); 3034 task_complete_event.Reset();
3035 EndTraceAndFlushInThreadWithMessageLoop(); 3035 EndTraceAndFlushInThreadWithMessageLoop();
3036 ValidateAllTraceMacrosCreatedData(trace_parsed_); 3036 ValidateAllTraceMacrosCreatedData(trace_parsed_);
3037 } 3037 }
3038 3038
3039 std::string* g_log_buffer = NULL; 3039 std::string* g_log_buffer = NULL;
3040 bool MockLogMessageHandler(int, const char*, int, size_t, 3040 class MockLogMessageListener : logging::LogMessageListener {
3041 const std::string& str) { 3041 public:
3042 if (!g_log_buffer) 3042 void OnMessage(int severity, const char* file, int line,
3043 g_log_buffer = new std::string(); 3043 size_t message_start, const std::string& str) override {
3044 g_log_buffer->append(str); 3044 if (!g_log_buffer)
3045 return false; 3045 g_log_buffer = new std::string();
3046 } 3046 g_log_buffer->append(str);
3047 }
3048 };
3047 3049
3048 TEST_F(TraceEventTestFixture, EchoToConsole) { 3050 TEST_F(TraceEventTestFixture, EchoToConsole) {
3049 logging::LogMessageHandlerFunction old_log_message_handler = 3051 MockLogMessageListener l;
3050 logging::GetLogMessageHandler();
3051 logging::SetLogMessageHandler(MockLogMessageHandler);
3052 3052
3053 TraceLog::GetInstance()->SetEnabled( 3053 TraceLog::GetInstance()->SetEnabled(
3054 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE), 3054 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE),
3055 TraceLog::RECORDING_MODE); 3055 TraceLog::RECORDING_MODE);
3056 TRACE_EVENT_BEGIN0("a", "begin_end"); 3056 TRACE_EVENT_BEGIN0("a", "begin_end");
3057 { 3057 {
3058 TRACE_EVENT0("b", "duration"); 3058 TRACE_EVENT0("b", "duration");
3059 TRACE_EVENT0("b1", "duration1"); 3059 TRACE_EVENT0("b1", "duration1");
3060 } 3060 }
3061 TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL); 3061 TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL);
3062 TRACE_EVENT_END0("a", "begin_end"); 3062 TRACE_EVENT_END0("a", "begin_end");
3063 3063
3064 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b")); 3064 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b"));
3065 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b")); 3065 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b"));
3066 EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[b1]\x1b")); 3066 EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[b1]\x1b"));
3067 EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[b1] (")); 3067 EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[b1] ("));
3068 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b] (")); 3068 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b] ("));
3069 EXPECT_NE(std::string::npos, g_log_buffer->find("| instant[c]\x1b")); 3069 EXPECT_NE(std::string::npos, g_log_buffer->find("| instant[c]\x1b"));
3070 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a] (")); 3070 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a] ("));
3071 3071
3072 EndTraceAndFlush(); 3072 EndTraceAndFlush();
3073 delete g_log_buffer; 3073 delete g_log_buffer;
3074 logging::SetLogMessageHandler(old_log_message_handler);
3075 g_log_buffer = NULL; 3074 g_log_buffer = NULL;
3076 } 3075 }
3077 3076
3078 bool LogMessageHandlerWithTraceEvent(int, const char*, int, size_t, 3077 class LogMessageListenerWithTraceEvent : logging::LogMessageListener {
3079 const std::string&) { 3078 public:
3080 TRACE_EVENT0("log", "trace_event"); 3079 void OnMessage(int severity, const char* file, int line,
3081 return false; 3080 size_t message_start, const std::string& str) override {
3082 } 3081 TRACE_EVENT0("log", "trace_event");
3082 }
3083 };
3083 3084
3084 TEST_F(TraceEventTestFixture, EchoToConsoleTraceEventRecursion) { 3085 TEST_F(TraceEventTestFixture, EchoToConsoleTraceEventRecursion) {
3085 logging::LogMessageHandlerFunction old_log_message_handler = 3086 LogMessageListenerWithTraceEvent l;
3086 logging::GetLogMessageHandler();
3087 logging::SetLogMessageHandler(LogMessageHandlerWithTraceEvent);
3088 3087
3089 TraceLog::GetInstance()->SetEnabled( 3088 TraceLog::GetInstance()->SetEnabled(
3090 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE), 3089 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE),
3091 TraceLog::RECORDING_MODE); 3090 TraceLog::RECORDING_MODE);
3092 { 3091 {
3093 // This should not cause deadlock or infinite recursion. 3092 // This should not cause deadlock or infinite recursion.
3094 TRACE_EVENT0("b", "duration"); 3093 TRACE_EVENT0("b", "duration");
3095 } 3094 }
3096 3095
3097 EndTraceAndFlush(); 3096 EndTraceAndFlush();
3098 logging::SetLogMessageHandler(old_log_message_handler);
3099 } 3097 }
3100 3098
3101 TEST_F(TraceEventTestFixture, TimeOffset) { 3099 TEST_F(TraceEventTestFixture, TimeOffset) {
3102 BeginTrace(); 3100 BeginTrace();
3103 // Let TraceLog timer start from 0. 3101 // Let TraceLog timer start from 0.
3104 TimeDelta time_offset = TimeTicks::Now() - TimeTicks(); 3102 TimeDelta time_offset = TimeTicks::Now() - TimeTicks();
3105 TraceLog::GetInstance()->SetTimeOffset(time_offset); 3103 TraceLog::GetInstance()->SetTimeOffset(time_offset);
3106 3104
3107 { 3105 {
3108 TRACE_EVENT0("all", "duration1"); 3106 TRACE_EVENT0("all", "duration1");
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3175 3173
3176 TEST_F(TraceEventTestFixture, ClockSyncEventsAreAlwaysAddedToTrace) { 3174 TEST_F(TraceEventTestFixture, ClockSyncEventsAreAlwaysAddedToTrace) {
3177 BeginSpecificTrace("-*"); 3175 BeginSpecificTrace("-*");
3178 TRACE_EVENT_CLOCK_SYNC_RECEIVER(1); 3176 TRACE_EVENT_CLOCK_SYNC_RECEIVER(1);
3179 EndTraceAndFlush(); 3177 EndTraceAndFlush();
3180 EXPECT_TRUE(FindNamePhase("clock_sync", "c")); 3178 EXPECT_TRUE(FindNamePhase("clock_sync", "c"));
3181 } 3179 }
3182 3180
3183 } // namespace trace_event 3181 } // namespace trace_event
3184 } // namespace base 3182 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698