| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/debug/trace_event.h" |
| #include "skia/ext/event_tracer_impl.h" |
| #include "third_party/skia/include/utils/SkEventTracer.h" |
| |
| namespace skia { |
| |
| class SkChromiumEventTracer: public SkEventTracer { |
| virtual const uint8_t* getCategoryGroupEnabled(const char* name) OVERRIDE; |
| virtual const char* getCategoryGroupName( |
| const uint8_t* categoryEnabledFlag) OVERRIDE; |
| virtual SkEventTracer::Handle |
| addTraceEvent(char phase, |
| const uint8_t* categoryEnabledFlag, |
| const char* name, |
| uint64_t id, |
| int32_t numArgs, |
| const char** argNames, |
| const uint8_t* argTypes, |
| const uint64_t* argValues, |
| uint8_t flags) OVERRIDE; |
| virtual void |
| updateTraceEventDuration(const uint8_t* categoryEnabledFlag, |
| const char *name, |
| SkEventTracer::Handle handle) OVERRIDE; |
| }; |
| |
| const uint8_t* |
| SkChromiumEventTracer::getCategoryGroupEnabled(const char* name) { |
| return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(name); |
| } |
| |
| const char* SkChromiumEventTracer::getCategoryGroupName( |
| const uint8_t* categoryEnabledFlag) { |
| return base::debug::TraceLog::GetCategoryGroupName( |
| categoryEnabledFlag); |
| } |
| |
| SkEventTracer::Handle |
| SkChromiumEventTracer::addTraceEvent(char phase, |
| const uint8_t* categoryEnabledFlag, |
| const char* name, |
| uint64_t id, |
| int32_t numArgs, |
| const char** argNames, |
| const uint8_t* argTypes, |
| const uint64_t* argValues, |
| uint8_t flags) { |
| base::debug::TraceEventHandle handle = TRACE_EVENT_API_ADD_TRACE_EVENT( |
| phase, categoryEnabledFlag, name, id, numArgs, argNames, |
| argTypes, (const long long unsigned int*) argValues, NULL, flags); |
| SkEventTracer::Handle result; |
| memcpy(&result, &handle, sizeof(result)); |
| return result; |
| } |
| |
| void |
| SkChromiumEventTracer::updateTraceEventDuration( |
| const uint8_t* categoryEnabledFlag, |
| const char *name, |
| SkEventTracer::Handle handle) { |
| base::debug::TraceEventHandle traceEventHandle; |
| memcpy(&traceEventHandle, &handle, sizeof(handle)); |
| TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( |
| categoryEnabledFlag, name, traceEventHandle); |
| } |
| |
| } // namespace skia |
| |
| |
| void InitSkiaEventTracer() { |
| // Initialize the binding to Skia's tracing events. Skia will |
| // take ownership of and clean up the memory allocated here. |
| SkEventTracer::SetInstance(new skia::SkChromiumEventTracer()); |
| } |