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