1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/debug/trace_event.h" 6 #include "skia/ext/event_tracer_impl.h" 7 #include "third_party/skia/include/utils/SkEventTracer.h" 8 9 namespace skia { 10 11 class SkChromiumEventTracer: public SkEventTracer { 12 virtual const uint8_t* getCategoryGroupEnabled(const char* name) OVERRIDE; 13 virtual const char* getCategoryGroupName( 14 const uint8_t* categoryEnabledFlag) OVERRIDE; 15 virtual SkEventTracer::Handle 16 addTraceEvent(char phase, 17 const uint8_t* categoryEnabledFlag, 18 const char* name, 19 uint64_t id, 20 int32_t numArgs, 21 const char** argNames, 22 const uint8_t* argTypes, 23 const uint64_t* argValues, 24 uint8_t flags) OVERRIDE; 25 virtual void 26 updateTraceEventDuration(const uint8_t* categoryEnabledFlag, 27 const char *name, 28 SkEventTracer::Handle handle) OVERRIDE; 29 }; 30 31 const uint8_t* 32 SkChromiumEventTracer::getCategoryGroupEnabled(const char* name) { 33 return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(name); 34 } 35 36 const char* SkChromiumEventTracer::getCategoryGroupName( 37 const uint8_t* categoryEnabledFlag) { 38 return base::debug::TraceLog::GetCategoryGroupName( 39 categoryEnabledFlag); 40 } 41 42 SkEventTracer::Handle 43 SkChromiumEventTracer::addTraceEvent(char phase, 44 const uint8_t* categoryEnabledFlag, 45 const char* name, 46 uint64_t id, 47 int32_t numArgs, 48 const char** argNames, 49 const uint8_t* argTypes, 50 const uint64_t* argValues, 51 uint8_t flags) { 52 base::debug::TraceEventHandle handle = TRACE_EVENT_API_ADD_TRACE_EVENT( 53 phase, categoryEnabledFlag, name, id, numArgs, argNames, 54 argTypes, (const long long unsigned int*) argValues, NULL, flags); 55 SkEventTracer::Handle result; 56 memcpy(&result, &handle, sizeof(result)); 57 return result; 58 } 59 60 void 61 SkChromiumEventTracer::updateTraceEventDuration( 62 const uint8_t* categoryEnabledFlag, 63 const char *name, 64 SkEventTracer::Handle handle) { 65 base::debug::TraceEventHandle traceEventHandle; 66 memcpy(&traceEventHandle, &handle, sizeof(handle)); 67 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( 68 categoryEnabledFlag, name, traceEventHandle); 69 } 70 71 } // namespace skia 72 73 74 void InitSkiaEventTracer() { 75 // Initialize the binding to Skia's tracing events. Skia will 76 // take ownership of and clean up the memory allocated here. 77 SkEventTracer::SetInstance(new skia::SkChromiumEventTracer()); 78 } 79