16169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org/*
26169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org * Copyright 2014 Google Inc.
36169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org *
46169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
56169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org * found in the LICENSE file.
66169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org */
76169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
86169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org#include "SkEventTracer.h"
96169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org#include "SkOnce.h"
106169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
116169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.orgclass SkDefaultEventTracer: public SkEventTracer {
124c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com    virtual SkEventTracer::Handle
136169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org        addTraceEvent(char phase,
146169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      const uint8_t* categoryEnabledFlag,
156169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      const char* name,
166169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      uint64_t id,
176169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      int numArgs,
186169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      const char** argNames,
196169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      const uint8_t* argTypes,
206169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      const uint64_t* argValues,
216169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org                      uint8_t flags) SK_OVERRIDE { return 0; }
224c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com
234c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com    virtual void
244c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com        updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
254c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com                                 const char* name,
263458a1736feae84eba985591a8ab8d26530d96c8commit-bot@chromium.org                                 SkEventTracer::Handle handle) SK_OVERRIDE {};
276169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
286169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org    virtual const uint8_t* getCategoryGroupEnabled(const char* name) SK_OVERRIDE {
296169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org        static uint8_t no = 0;
306169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org        return &no;
316169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org    };
326169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org    virtual const char* getCategoryGroupName(
332859f9fbf3764d401b3b9b27f3d9e9bddeaf3a14commit-bot@chromium.org      const uint8_t* categoryEnabledFlag) SK_OVERRIDE {
346169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org        static const char* dummy = "dummy";
356169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org        return dummy;
366169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org    };
376169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org};
386169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
391b81877880253c75f835eede9a8ee21b9e7b584amtkleinSkEventTracer* SkEventTracer::gInstance;
406169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
411b81877880253c75f835eede9a8ee21b9e7b584amtkleinstatic void cleanup_tracer() {
421b81877880253c75f835eede9a8ee21b9e7b584amtklein    // calling SetInstance will delete the existing instance.
431b81877880253c75f835eede9a8ee21b9e7b584amtklein    SkEventTracer::SetInstance(NULL);
441b81877880253c75f835eede9a8ee21b9e7b584amtklein}
451b81877880253c75f835eede9a8ee21b9e7b584amtklein
461b81877880253c75f835eede9a8ee21b9e7b584amtkleinstatic void intialize_default_tracer(SkEventTracer* current_instance) {
47da5c6d64b05813660fa578cb5f8ef0dd146726f4commit-bot@chromium.org    if (NULL == current_instance) {
48da5c6d64b05813660fa578cb5f8ef0dd146726f4commit-bot@chromium.org        SkEventTracer::SetInstance(SkNEW(SkDefaultEventTracer));
49da5c6d64b05813660fa578cb5f8ef0dd146726f4commit-bot@chromium.org    }
501b81877880253c75f835eede9a8ee21b9e7b584amtklein    atexit(cleanup_tracer);
516169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org}
526169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
536169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org
546169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.orgSkEventTracer* SkEventTracer::GetInstance() {
556169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org    SK_DECLARE_STATIC_ONCE(once);
561b81877880253c75f835eede9a8ee21b9e7b584amtklein    SkOnce(&once, intialize_default_tracer, SkEventTracer::gInstance);
5749f085dddff10473b6ebf832a974288300224e60bsalomon    SkASSERT(SkEventTracer::gInstance);
586169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org    return SkEventTracer::gInstance;
596169f2b4da39099b4e593f5ff85538dfe2f0249ecommit-bot@chromium.org}
60