123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- * 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 "include/private/SkOnce.h"
- #include "include/utils/SkEventTracer.h"
- #include <atomic>
- #include <stdlib.h>
- class SkDefaultEventTracer : public SkEventTracer {
- 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) override { return 0; }
- void
- updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
- const char* name,
- SkEventTracer::Handle handle) override {}
- const uint8_t* getCategoryGroupEnabled(const char* name) override {
- static uint8_t no = 0;
- return &no;
- }
- const char* getCategoryGroupName(
- const uint8_t* categoryEnabledFlag) override {
- static const char* dummy = "dummy";
- return dummy;
- }
- };
- // We prefer gUserTracer if it's been set, otherwise we fall back on a default tracer;
- static std::atomic<SkEventTracer*> gUserTracer{nullptr};
- bool SkEventTracer::SetInstance(SkEventTracer* tracer) {
- SkEventTracer* expected = nullptr;
- if (!gUserTracer.compare_exchange_strong(expected, tracer)) {
- delete tracer;
- return false;
- }
- atexit([]() { delete gUserTracer.load(); });
- return true;
- }
- SkEventTracer* SkEventTracer::GetInstance() {
- if (auto tracer = gUserTracer.load(std::memory_order_acquire)) {
- return tracer;
- }
- static SkOnce once;
- static SkDefaultEventTracer* defaultTracer;
- once([] { defaultTracer = new SkDefaultEventTracer; });
- return defaultTracer;
- }
|