/* * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. * Not a Contribution. * * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __QCAMERATRACE_H__ #define __QCAMERATRACE_H__ #include <utils/Trace.h> #ifdef QCAMERA_REDEFINE_LOG #define CAM_MODULE CAM_HAL_MODULE extern "C" { #include "mm_camera_dbg.h" } #endif #undef ATRACE_CALL #undef ATRACE_NAME #undef ATRACE_BEGIN #undef ATRACE_INT #undef ATRACE_END #undef ATRACE_BEGIN_SNPRINTF #undef KPI_ATRACE_BEGIN #undef KPI_ATRACE_END #undef KPI_ATRACE_INT #undef ATRACE_TAG #undef ATRACE_BEGIN_DBG #undef ATRACE_INT_DBG #undef ATRACE_END_DBG #define KPI_ONLY 1 #define KPI_DBG 2 #define CAMERA_TRACE_BUF 32 #define ATRACE_TAG ATRACE_TAG_CAMERA //to enable only KPI logs #define KPI_ATRACE_BEGIN(name) ({\ if (gKpiDebugLevel >= KPI_ONLY) { \ atrace_begin(ATRACE_TAG, name); \ }\ }) #define KPI_ATRACE_END() ({\ if (gKpiDebugLevel >= KPI_ONLY) { \ atrace_end(ATRACE_TAG); \ }\ }) #define KPI_ATRACE_ASYNC_BEGIN(name, cookie) ({\ if (gKpiDebugLevel >= KPI_ONLY) { \ ATRACE_ASYNC_BEGIN(name, cookie); \ }\ }) #define KPI_ATRACE_ASYNC_END(name, cookie) ({\ if (gKpiDebugLevel >= KPI_ONLY) { \ ATRACE_ASYNC_END(name, cookie); \ }\ }) #define KPI_ATRACE_INT(name,val) ({\ if (gKpiDebugLevel >= KPI_ONLY) { \ atrace_int(ATRACE_TAG, name, val); \ }\ }) #define ATRACE_BEGIN_SNPRINTF(fmt_str, ...) \ if (gKpiDebugLevel >= KPI_DBG) { \ char trace_tag[CAMERA_TRACE_BUF]; \ snprintf(trace_tag, CAMERA_TRACE_BUF, fmt_str, ##__VA_ARGS__); \ ATRACE_BEGIN(trace_tag); \ } #define ATRACE_BEGIN_DBG(name) ({\ if (gKpiDebugLevel >= KPI_DBG) { \ atrace_begin(ATRACE_TAG, name); \ }\ }) #define ATRACE_END_DBG() ({\ if (gKpiDebugLevel >= KPI_DBG) { \ atrace_end(ATRACE_TAG); \ }\ }) #define ATRACE_INT_DBG(name,val) ({\ if (gKpiDebugLevel >= KPI_DBG) { \ atrace_int(ATRACE_TAG, name, val); \ }\ }) #define ATRACE_BEGIN ATRACE_BEGIN_DBG #define ATRACE_INT ATRACE_INT_DBG #define ATRACE_END ATRACE_END_DBG #define KPI_ATRACE_NAME(name) qcamera::ScopedTraceKpi ___tracer(ATRACE_TAG, name) #define ATRACE_NAME(name) qcamera::ScopedTraceDbg ___tracer(ATRACE_TAG, name) #define KPI_ATRACE_CALL() KPI_ATRACE_NAME(__FUNCTION__) #define ATRACE_CALL() ATRACE_NAME(__FUNCTION__) namespace qcamera { extern volatile uint32_t gKpiDebugLevel; class ScopedTraceKpi { public: inline ScopedTraceKpi(uint64_t tag, const char *name) : mTag(tag) { if (gKpiDebugLevel >= KPI_ONLY) { atrace_begin(mTag,name); } } inline ~ScopedTraceKpi() { if (gKpiDebugLevel >= KPI_ONLY) { atrace_end(mTag); } } private: uint64_t mTag; }; class ScopedTraceDbg { public: inline ScopedTraceDbg(uint64_t tag, const char *name) : mTag(tag) { if (gKpiDebugLevel >= KPI_DBG) { atrace_begin(mTag,name); } } inline ~ScopedTraceDbg() { if (gKpiDebugLevel >= KPI_DBG) { atrace_end(mTag); } } private: uint64_t mTag; }; }; extern volatile uint32_t gKpiDebugLevel; #endif /* __QCAMREATRACE_H__ */