Line data Source code
1 : /*
2 : * Copyright 2016 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 "SkATrace.h"
9 :
10 : #include "SkTraceEvent.h"
11 :
12 : #ifdef SK_BUILD_FOR_ANDROID
13 : #include <dlfcn.h>
14 : #endif
15 :
16 0 : SkATrace::SkATrace() : fBeginSection(nullptr), fEndSection(nullptr), fIsEnabled(nullptr) {
17 : #ifdef SK_BUILD_FOR_ANDROID
18 : if (void* lib = dlopen("libandroid.so", RTLD_NOW | RTLD_LOCAL)) {
19 : fBeginSection = (decltype(fBeginSection))dlsym(lib, "ATrace_beginSection");
20 : fEndSection = (decltype(fEndSection))dlsym(lib, "ATrace_endSection");
21 : fIsEnabled = (decltype(fIsEnabled))dlsym(lib, "ATrace_isEnabled");
22 : }
23 : #endif
24 0 : if (!fIsEnabled) {
25 0 : fIsEnabled = []{ return false; };
26 : }
27 0 : }
28 :
29 0 : SkEventTracer::Handle SkATrace::addTraceEvent(char phase,
30 : const uint8_t* categoryEnabledFlag,
31 : const char* name,
32 : uint64_t id,
33 : int numArgs,
34 : const char** argNames,
35 : const uint8_t* argTypes,
36 : const uint64_t* argValues,
37 : uint8_t flags) {
38 0 : if (fIsEnabled()) {
39 0 : if (TRACE_EVENT_PHASE_COMPLETE == phase ||
40 0 : TRACE_EVENT_PHASE_BEGIN == phase ||
41 : TRACE_EVENT_PHASE_INSTANT == phase) {
42 0 : fBeginSection(name);
43 : }
44 :
45 0 : if (TRACE_EVENT_PHASE_END == phase ||
46 : TRACE_EVENT_PHASE_INSTANT == phase) {
47 0 : fEndSection();
48 : }
49 : }
50 0 : return 0;
51 : }
52 :
53 0 : void SkATrace::updateTraceEventDuration(const uint8_t* categoryEnabledFlag,
54 : const char* name,
55 : SkEventTracer::Handle handle) {
56 : // This is only ever called from a scoped trace event so we will just end the ATrace section.
57 0 : if (fIsEnabled()) {
58 0 : fEndSection();
59 : }
60 0 : }
61 :
62 0 : const uint8_t* SkATrace::getCategoryGroupEnabled(const char* name) {
63 : // Chrome tracing is setup to not repeatly call this function once it has been initialized. So
64 : // we can't use this to do a check for ATrace isEnabled(). Thus we will always return yes here
65 : // and then check to see if ATrace is enabled when beginning and ending a section.
66 : static uint8_t yes = SkEventTracer::kEnabledForRecording_CategoryGroupEnabledFlags;
67 0 : return &yes;
68 : }
69 :
|