170850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik/* 270850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * Copyright (C) 2014 The Android Open Source Project 370850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * 470850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 570850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * you may not use this file except in compliance with the License. 670850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * You may obtain a copy of the License at 770850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * 870850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 970850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * 1070850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * Unless required by applicable law or agreed to in writing, software 1170850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 1270850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1370850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * See the License for the specific language governing permissions and 1470850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik * limitations under the License. 1570850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik */ 1670850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik#ifndef TRACE_UTILS_H 1770850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik#define TRACE_UTILS_H 1870850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 1970850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik#include <utils/Trace.h> 2070850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 2170850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik#define ATRACE_FORMAT(fmt, ...) \ 2270850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik TraceUtils::TraceEnder __traceEnder = (TraceUtils::atraceFormatBegin(fmt, ##__VA_ARGS__), TraceUtils::TraceEnder()) 2370850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 2470850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik#define ATRACE_FORMAT_BEGIN(fmt, ...) \ 2570850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik TraceUtils::atraceFormatBegin(fmt, ##__VA_ARGS__) 2670850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 2770850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craiknamespace android { 2870850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craiknamespace uirenderer { 2970850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 3070850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craikclass TraceUtils { 3170850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craikpublic: 3270850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik class TraceEnder { 3370850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik public: 3470850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik ~TraceEnder() { ATRACE_END(); } 3570850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik }; 3670850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 3770850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik static void atraceFormatBegin(const char* fmt, ...) { 3870850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik if (CC_UNLIKELY(!ATRACE_ENABLED())) return; 3970850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 4070850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik const int BUFFER_SIZE = 256; 4170850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik va_list ap; 4270850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik char buf[BUFFER_SIZE]; 4370850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 4470850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik va_start(ap, fmt); 4570850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik vsnprintf(buf, BUFFER_SIZE, fmt, ap); 4670850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik va_end(ap); 4770850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 4870850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik ATRACE_BEGIN(buf); 4970850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik } 5070850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 5170850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik}; // class TraceUtils 5270850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 5370850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik} /* namespace uirenderer */ 5470850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik} /* namespace android */ 5570850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik 5670850ea258cbf91477efa57a1f1a23cc0044cc93Chris Craik#endif /* TRACE_UTILS_H */ 57