Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / skia / src / utils / SkEventTracer.cpp
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 "include/utils/SkEventTracer.h"
9
10 #include "include/private/SkOnce.h"
11
12 #include <stdlib.h>
13 #include <atomic>
14
15 class SkDefaultEventTracer : public SkEventTracer {
16     SkEventTracer::Handle
17         addTraceEvent(char phase,
18                       const uint8_t* categoryEnabledFlag,
19                       const char* name,
20                       uint64_t id,
21                       int numArgs,
22                       const char** argNames,
23                       const uint8_t* argTypes,
24                       const uint64_t* argValues,
25                       uint8_t flags) override { return 0; }
26
27     void
28         updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
29                                  const char* name,
30                                  SkEventTracer::Handle handle) override {}
31
32     const uint8_t* getCategoryGroupEnabled(const char* name) override {
33         static uint8_t no = 0;
34         return &no;
35     }
36     const char* getCategoryGroupName(
37       const uint8_t* categoryEnabledFlag) override {
38         static const char* stub = "stub";
39         return stub;
40     }
41 };
42
43 // We prefer gUserTracer if it's been set, otherwise we fall back on a default tracer;
44 static std::atomic<SkEventTracer*> gUserTracer{nullptr};
45
46 bool SkEventTracer::SetInstance(SkEventTracer* tracer) {
47     SkEventTracer* expected = nullptr;
48     if (!gUserTracer.compare_exchange_strong(expected, tracer)) {
49         delete tracer;
50         return false;
51     }
52     atexit([]() { delete gUserTracer.load(); });
53     return true;
54 }
55
56 SkEventTracer* SkEventTracer::GetInstance() {
57     if (auto tracer = gUserTracer.load(std::memory_order_acquire)) {
58         return tracer;
59     }
60     static SkOnce once;
61     static SkDefaultEventTracer* defaultTracer;
62     once([] { defaultTracer = new SkDefaultEventTracer; });
63     return defaultTracer;
64 }