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 209b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__) 21214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray 222ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#include <stdint.h> 2322dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian 245b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray#include <cutils/trace.h> 252ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis 265b2d36e38adcc09e72f81b06c324bf3c5c92e043Alex Ray// See <cutils/trace.h> for more ATRACE_* macros. 272ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis 2801937ee2b9ad00ac72162c92d838f2520ab5ae8dJosh Gao// ATRACE_NAME traces from its location until the end of its enclosing scope. 2901937ee2b9ad00ac72162c92d838f2520ab5ae8dJosh Gao#define _PASTE(x, y) x ## y 3001937ee2b9ad00ac72162c92d838f2520ab5ae8dJosh Gao#define PASTE(x, y) _PASTE(x,y) 3101937ee2b9ad00ac72162c92d838f2520ab5ae8dJosh Gao#define ATRACE_NAME(name) android::ScopedTrace PASTE(___tracer, __LINE__) (ATRACE_TAG, name) 3222dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian 33fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray// ATRACE_CALL is an ATRACE_NAME that uses the current function name. 34fcb349ff75272c802519a20abc0e083c35bbe8cfAlex Ray#define ATRACE_CALL() ATRACE_NAME(__FUNCTION__) 353fc49adfd2887d01e54c4ad6a62eae5383101f62Romain Guy 362ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennisnamespace android { 372ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis 382ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennisclass ScopedTrace { 392ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennispublic: 4022dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian inline ScopedTrace(uint64_t tag, const char* name) : mTag(tag) { 4122dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian atrace_begin(mTag, name); 4222dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian } 4322dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian 4422dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian inline ~ScopedTrace() { 4522dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian atrace_end(mTag); 4622dbf3947fedf988e714a4703ddf85fc41413f90Mathias Agopian } 472ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis 482ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennisprivate: 492ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis uint64_t mTag; 502ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis}; 512ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis 522ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis}; // namespace android 532ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis 549b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#else // !__ANDROID__ 55214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray 56214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#define ATRACE_NAME(...) 57214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray#define ATRACE_CALL() 58214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray 599b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#endif // __ANDROID__ 60214c701ec6de8bd4b57f6aec8874fb343c79d874Tim Murray 612ccfe1a0606f59b5cefd177f9dd5c837d0ea2d0bJamie Gennis#endif // ANDROID_TRACE_H 62