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