2 * Copyright 2014 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #include "include/utils/SkEventTracer.h"
10 #include "include/private/SkOnce.h"
15 class SkDefaultEventTracer : public SkEventTracer {
17 addTraceEvent(char phase,
18 const uint8_t* categoryEnabledFlag,
22 const char** argNames,
23 const uint8_t* argTypes,
24 const uint64_t* argValues,
25 uint8_t flags) override { return 0; }
28 updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
30 SkEventTracer::Handle handle) override {}
32 const uint8_t* getCategoryGroupEnabled(const char* name) override {
33 static uint8_t no = 0;
36 const char* getCategoryGroupName(
37 const uint8_t* categoryEnabledFlag) override {
38 static const char* stub = "stub";
43 // We prefer gUserTracer if it's been set, otherwise we fall back on a default tracer;
44 static std::atomic<SkEventTracer*> gUserTracer{nullptr};
46 bool SkEventTracer::SetInstance(SkEventTracer* tracer) {
47 SkEventTracer* expected = nullptr;
48 if (!gUserTracer.compare_exchange_strong(expected, tracer)) {
52 atexit([]() { delete gUserTracer.load(); });
56 SkEventTracer* SkEventTracer::GetInstance() {
57 if (auto tracer = gUserTracer.load(std::memory_order_acquire)) {
61 static SkDefaultEventTracer* defaultTracer;
62 once([] { defaultTracer = new SkDefaultEventTracer; });