/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkEventTracer.h" #include "SkOnce.h" class SkDefaultEventTracer: public SkEventTracer { virtual SkEventTracer::Handle addTraceEvent(char phase, const uint8_t* categoryEnabledFlag, const char* name, uint64_t id, int numArgs, const char** argNames, const uint8_t* argTypes, const uint64_t* argValues, uint8_t flags) SK_OVERRIDE { return 0; } virtual void updateTraceEventDuration(const uint8_t* categoryEnabledFlag, const char* name, SkEventTracer::Handle handle) SK_OVERRIDE {}; virtual const uint8_t* getCategoryGroupEnabled(const char* name) SK_OVERRIDE { static uint8_t no = 0; return &no; }; virtual const char* getCategoryGroupName( const uint8_t* categoryEnabledFlag) SK_OVERRIDE { static const char* dummy = "dummy"; return dummy; }; }; SkEventTracer* SkEventTracer::gInstance; static void cleanup_tracer() { // calling SetInstance will delete the existing instance. SkEventTracer::SetInstance(NULL); } static void intialize_default_tracer(SkEventTracer* current_instance) { if (NULL == current_instance) { SkEventTracer::SetInstance(SkNEW(SkDefaultEventTracer)); } atexit(cleanup_tracer); } SkEventTracer* SkEventTracer::GetInstance() { SK_DECLARE_STATIC_ONCE(once); SkOnce(&once, intialize_default_tracer, SkEventTracer::gInstance); SkASSERT(NULL != SkEventTracer::gInstance); return SkEventTracer::gInstance; }