diff options
Diffstat (limited to 'chromium/skia/ext/event_tracer_impl.cc')
-rw-r--r-- | chromium/skia/ext/event_tracer_impl.cc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/chromium/skia/ext/event_tracer_impl.cc b/chromium/skia/ext/event_tracer_impl.cc new file mode 100644 index 00000000000..4974b0064af --- /dev/null +++ b/chromium/skia/ext/event_tracer_impl.cc @@ -0,0 +1,78 @@ +// 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()); +} |