blob: ce472f9cb6035b8945dba1cb1f764f218d028107 [file] [log] [blame]
Lingfeng Yangc02cb032020-10-26 14:21:25 -07001// Copyright (C) 2019 The Android Open Source Project
2// Copyright (C) 2019 Google Inc.
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15#include "base/Tracing.h"
16
Doug Horn8de20472020-12-09 13:33:50 -080017#include "perfetto-tracing-only.h"
18
Lingfeng Yangc02cb032020-10-26 14:21:25 -070019#include <string>
20#include <vector>
21
22#include <fcntl.h>
23
24namespace android {
25namespace base {
26
27const bool* tracingDisabledPtr = nullptr;
28
29void initializeTracing() {
Doug Horn8de20472020-12-09 13:33:50 -080030 virtualdeviceperfetto::initialize(&tracingDisabledPtr);
Lingfeng Yangc02cb032020-10-26 14:21:25 -070031}
32
33void enableTracing() {
Doug Horn8de20472020-12-09 13:33:50 -080034 if (virtualdeviceperfetto::queryTraceConfig().tracingDisabled) {
35 virtualdeviceperfetto::enableTracing();
36 }
Lingfeng Yangc02cb032020-10-26 14:21:25 -070037}
38
39void disableTracing() {
Doug Horn8de20472020-12-09 13:33:50 -080040 if (!virtualdeviceperfetto::queryTraceConfig().tracingDisabled) {
41 virtualdeviceperfetto::disableTracing();
42 }
Lingfeng Yangc02cb032020-10-26 14:21:25 -070043}
44
45bool shouldEnableTracing() {
Doug Horn8de20472020-12-09 13:33:50 -080046 return !(virtualdeviceperfetto::queryTraceConfig().tracingDisabled);
Lingfeng Yangc02cb032020-10-26 14:21:25 -070047}
48
49#ifdef __cplusplus
50# define CC_LIKELY( exp ) (__builtin_expect( !!(exp), true ))
51# define CC_UNLIKELY( exp ) (__builtin_expect( !!(exp), false ))
52#else
53# define CC_LIKELY( exp ) (__builtin_expect( !!(exp), 1 ))
54# define CC_UNLIKELY( exp ) (__builtin_expect( !!(exp), 0 ))
55#endif
56
57__attribute__((always_inline)) void beginTrace(const char* name) {
Doug Horn8de20472020-12-09 13:33:50 -080058 if (CC_LIKELY(*tracingDisabledPtr)) return;
59 virtualdeviceperfetto::beginTrace(name);
Lingfeng Yangc02cb032020-10-26 14:21:25 -070060}
61
62__attribute__((always_inline)) void endTrace() {
Doug Horn8de20472020-12-09 13:33:50 -080063 if (CC_LIKELY(*tracingDisabledPtr)) return;
64 virtualdeviceperfetto::endTrace();
Lingfeng Yangc02cb032020-10-26 14:21:25 -070065}
66
67__attribute__((always_inline)) void traceCounter(const char* name, int64_t value) {
Doug Horn8de20472020-12-09 13:33:50 -080068 if (CC_LIKELY(*tracingDisabledPtr)) return;
69 virtualdeviceperfetto::traceCounter(name, value);
Lingfeng Yangc02cb032020-10-26 14:21:25 -070070}
71
72ScopedTrace::ScopedTrace(const char* name) {
Doug Horn8de20472020-12-09 13:33:50 -080073 if (CC_LIKELY(*tracingDisabledPtr)) return;
74 virtualdeviceperfetto::beginTrace(name);
Lingfeng Yangc02cb032020-10-26 14:21:25 -070075}
76
77ScopedTrace::~ScopedTrace() {
Doug Horn8de20472020-12-09 13:33:50 -080078 if (CC_LIKELY(*tracingDisabledPtr)) return;
79 virtualdeviceperfetto::endTrace();
Lingfeng Yangc02cb032020-10-26 14:21:25 -070080}
81
82void setGuestTime(uint64_t t) {
Doug Horn8de20472020-12-09 13:33:50 -080083 virtualdeviceperfetto::setGuestTime(t);
Lingfeng Yangc02cb032020-10-26 14:21:25 -070084}
85
86} // namespace base
87} // namespace android