// 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 #include "base/trace_event/trace_event.h" #include "skia/ext/event_tracer_impl.h" #include "third_party/skia/include/utils/SkEventTracer.h" namespace skia { class SkChromiumEventTracer: public SkEventTracer { const uint8_t* getCategoryGroupEnabled(const char* name) override; const char* getCategoryGroupName(const uint8_t* categoryEnabledFlag) override; 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; 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::trace_event::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::trace_event::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::trace_event::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. if (!SkEventTracer::GetInstance()) SkEventTracer::SetInstance(new skia::SkChromiumEventTracer()); }