Trace.h revision 214c701ec6de8bd4b57f6aec8874fb343c79d874
12ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis/*
22ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * Copyright (C) 2012 The Android Open Source Project
32ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis *
42ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * Licensed under the Apache License, Version 2.0 (the "License");
52ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * you may not use this file except in compliance with the License.
62ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * You may obtain a copy of the License at
72ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis *
82ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis *      http://www.apache.org/licenses/LICENSE-2.0
92ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis *
102ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * Unless required by applicable law or agreed to in writing, software
112ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * distributed under the License is distributed on an "AS IS" BASIS,
122ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * See the License for the specific language governing permissions and
142ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis * limitations under the License.
152ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis */
162ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
172ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#ifndef ANDROID_TRACE_H
182ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#define ANDROID_TRACE_H
192ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
20214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#ifdef HAVE_ANDROID_OS
21214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray
222ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <fcntl.h>
232ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <stdint.h>
242ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <stdio.h>
252ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <string.h>
262ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <sys/stat.h>
272ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <sys/types.h>
282ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <unistd.h>
292ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
302ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <cutils/compiler.h>
312ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <utils/threads.h>
325b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray#include <cutils/trace.h>
332ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
345b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray// See <cutils/trace.h> for more ATRACE_* macros.
352ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
36fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray// ATRACE_NAME traces the beginning and end of the current scope.  To trace
37fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray// the correct start and end times this macro should be declared first in the
38fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray// scope body.
393fc49adfd2887d01e54c4ad6a62eae5383101f62Romain Guy#define ATRACE_NAME(name) android::ScopedTrace ___tracer(ATRACE_TAG, name)
40fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray// ATRACE_CALL is an ATRACE_NAME that uses the current function name.
41fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray#define ATRACE_CALL() ATRACE_NAME(__FUNCTION__)
423fc49adfd2887d01e54c4ad6a62eae5383101f62Romain Guy
432ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennisnamespace android {
442ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
452ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennisclass ScopedTrace {
462ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennispublic:
475b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Rayinline ScopedTrace(uint64_t tag, const char* name)
485b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray    : mTag(tag) {
495b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray    atrace_begin(mTag,name);
505b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray}
512ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
525b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Rayinline ~ScopedTrace() {
535b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray    atrace_end(mTag);
545b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray}
552ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
562ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennisprivate:
572ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis    uint64_t mTag;
582ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis};
592ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
602ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis}; // namespace android
612ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis
62214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#else // HAVE_ANDROID_OS
63214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray
64214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#define ATRACE_NAME(...)
65214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#define ATRACE_CALL()
66214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray
67214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#endif // HAVE_ANDROID_OS
68214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray
692ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#endif // ANDROID_TRACE_H
70