/*
* 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;
}