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