Home | History | Annotate | Download | only in utils
      1 /*
      2  * Copyright 2014 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkEventTracer.h"
      9 #include "SkOnce.h"
     10 
     11 class SkDefaultEventTracer: public SkEventTracer {
     12     virtual SkEventTracer::Handle
     13         addTraceEvent(char phase,
     14                       const uint8_t* categoryEnabledFlag,
     15                       const char* name,
     16                       uint64_t id,
     17                       int numArgs,
     18                       const char** argNames,
     19                       const uint8_t* argTypes,
     20                       const uint64_t* argValues,
     21                       uint8_t flags) SK_OVERRIDE { return 0; }
     22 
     23     virtual void
     24         updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
     25                                  const char* name,
     26                                  SkEventTracer::Handle handle) SK_OVERRIDE {};
     27 
     28     virtual const uint8_t* getCategoryGroupEnabled(const char* name) SK_OVERRIDE {
     29         static uint8_t no = 0;
     30         return &no;
     31     };
     32     virtual const char* getCategoryGroupName(
     33       const uint8_t* categoryEnabledFlag) SK_OVERRIDE {
     34         static const char* dummy = "dummy";
     35         return dummy;
     36     };
     37 };
     38 
     39 SkEventTracer* SkEventTracer::gInstance;
     40 
     41 static void cleanup_tracer() {
     42     // calling SetInstance will delete the existing instance.
     43     SkEventTracer::SetInstance(NULL);
     44 }
     45 
     46 static void intialize_default_tracer(SkEventTracer* current_instance) {
     47     if (NULL == current_instance) {
     48         SkEventTracer::SetInstance(SkNEW(SkDefaultEventTracer));
     49     }
     50     atexit(cleanup_tracer);
     51 }
     52 
     53 
     54 SkEventTracer* SkEventTracer::GetInstance() {
     55     SK_DECLARE_STATIC_ONCE(once);
     56     SkOnce(&once, intialize_default_tracer, SkEventTracer::gInstance);
     57     SkASSERT(SkEventTracer::gInstance);
     58     return SkEventTracer::gInstance;
     59 }
     60