13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* 23d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. 33d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Not a Contribution. 43d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 53d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Copyright (C) 2012 The Android Open Source Project 63d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 73d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Licensed under the Apache License, Version 2.0 (the "License"); 83d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * you may not use this file except in compliance with the License. 93d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * You may obtain a copy of the License at 103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * http://www.apache.org/licenses/LICENSE-2.0 123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Unless required by applicable law or agreed to in writing, software 143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * distributed under the License is distributed on an "AS IS" BASIS, 153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * See the License for the specific language governing permissions and 173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * limitations under the License. 183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel */ 193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifndef __QCAMERATRACE_H__ 213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define __QCAMERATRACE_H__ 223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/Trace.h> 24e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#include "camscope_packet_type.h" 253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifdef QCAMERA_REDEFINE_LOG 273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define CAM_MODULE CAM_HAL_MODULE 283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" { 293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "mm_camera_dbg.h" 303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_CALL 343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_NAME 353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_BEGIN 363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_INT 373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_END 383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_BEGIN_SNPRINTF 393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef KPI_ATRACE_BEGIN 403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef KPI_ATRACE_END 413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef KPI_ATRACE_INT 423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_TAG 433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_BEGIN_DBG 443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_INT_DBG 453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#undef ATRACE_END_DBG 463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_ONLY 1 483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_DBG 2 493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define CAMERA_TRACE_BUF 32 513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_TAG ATRACE_TAG_CAMERA 533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel//to enable only KPI logs 553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_ATRACE_BEGIN(name) ({\ 563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelif (gKpiDebugLevel >= KPI_ONLY) { \ 573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_begin(ATRACE_TAG, name); \ 583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}\ 593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_ATRACE_END() ({\ 623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelif (gKpiDebugLevel >= KPI_ONLY) { \ 633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_end(ATRACE_TAG); \ 643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}\ 653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_ATRACE_INT(name,val) ({\ 683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelif (gKpiDebugLevel >= KPI_ONLY) { \ 693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_int(ATRACE_TAG, name, val); \ 703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}\ 713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_BEGIN_SNPRINTF(fmt_str, ...) \ 753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (gKpiDebugLevel >= KPI_DBG) { \ 763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char trace_tag[CAMERA_TRACE_BUF]; \ 773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(trace_tag, CAMERA_TRACE_BUF, fmt_str, ##__VA_ARGS__); \ 783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ATRACE_BEGIN(trace_tag); \ 793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_BEGIN_DBG(name) ({\ 823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelif (gKpiDebugLevel >= KPI_DBG) { \ 833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_begin(ATRACE_TAG, name); \ 843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}\ 853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_END_DBG() ({\ 883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelif (gKpiDebugLevel >= KPI_DBG) { \ 893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_end(ATRACE_TAG); \ 903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}\ 913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_INT_DBG(name,val) ({\ 943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelif (gKpiDebugLevel >= KPI_DBG) { \ 953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_int(ATRACE_TAG, name, val); \ 963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}\ 973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_BEGIN ATRACE_BEGIN_DBG 1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_INT ATRACE_INT_DBG 1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_END ATRACE_END_DBG 1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 103e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_MAX_STRING_LENGTH 64 104e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 105e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel/* Initializes CameraScope tool */ 106e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelvoid camscope_init(camscope_section_type camscope_section); 107e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 108e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel/* Cleans up CameraScope tool */ 109e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelvoid camscope_destroy(camscope_section_type camscope_section); 110e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 111e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel/* Reserves a number of bytes on the memstore flushing to the 112e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel * file system if remaining space is insufficient */ 113e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudeluint32_t camscope_reserve(camscope_section_type camscope_section, 114e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel uint32_t num_bytes_to_reserve); 115e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 116e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel/* Store the data to the memstore and calculate remaining space */ 117e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelvoid camscope_store_data(camscope_section_type camscope_section, 118e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel void* data, uint32_t size); 119e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 120e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel/* Lock the camscope mutex lock for the given camscope section */ 121e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelvoid camscope_mutex_lock(camscope_section_type camscope_section); 122e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 123e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel/* Unlock the camscope mutex lock for the given camscope section */ 124e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelvoid camscope_mutex_unlock(camscope_section_type camscope_section); 125e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 126e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_SYSTRACE_TIME_MARKER() { \ 127e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_frame_count != 0) { \ 128e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_flags & CAMSCOPE_ON_FLAG) { \ 129e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel struct timeval t_domain; \ 130e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel char trace_time_conv[CAMSCOPE_MAX_STRING_LENGTH]; \ 131e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel gettimeofday(&t_domain, NULL); \ 132e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel snprintf(trace_time_conv, sizeof(trace_time_conv), \ 133e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel "_CAMSCOPE_TIME_CONV_:%ld:%ld", t_domain.tv_sec, \ 134e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel t_domain.tv_usec); \ 135e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel atrace_int(ATRACE_TAG_ALWAYS, trace_time_conv, 0); \ 136e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 137e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 138e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} 139e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 140e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_MASK(mask) { \ 141e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel char prop[PROPERTY_VALUE_MAX]; \ 142e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel property_get("persist.camera.kpi.camscope", prop, "0"); \ 143e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel mask = atoi(prop); \ 144e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} 145e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 146e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_FRAME_COUNT_MASK(mask) { \ 147e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel char prop[PROPERTY_VALUE_MAX]; \ 148e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel property_get("persist.camera.kpi.camscope_cnt", prop, "0"); \ 149e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel mask = atoi(prop); \ 150e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} 151e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 152e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_UPDATE_FLAGS(camscope_section, camscope_prop) { \ 153e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_frame_count != 0) { \ 154e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel static uint32_t camscope_frame_counter = 0; \ 155e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (camscope_frame_counter >= kpi_camscope_frame_count) { \ 156e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel uint32_t prev_prop = camscope_prop; \ 157e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_MASK(camscope_prop); \ 158e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel uint32_t is_prev_prop_on = (prev_prop & CAMSCOPE_ON_FLAG) \ 159e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel ? 1 : 0; \ 160e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel uint32_t is_prop_on = (camscope_prop & CAMSCOPE_ON_FLAG) \ 161e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel ? 1 : 0; \ 162e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (is_prev_prop_on ^ is_prop_on) { \ 163e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (is_prop_on) { \ 164e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_init(camscope_section); \ 165e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } else { \ 166e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_destroy(camscope_section); \ 167e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 168e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 169e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_SYSTRACE_TIME_MARKER(); \ 170e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_frame_counter = 0; \ 171e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 172e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel else { \ 173e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel ++camscope_frame_counter; \ 174e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 175e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 176e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} 177e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 178e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_INIT(camscope_section) { \ 179e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_FRAME_COUNT_MASK(kpi_camscope_frame_count); \ 180e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_frame_count != 0) { \ 181e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_MASK(kpi_camscope_flags); \ 182e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_flags & CAMSCOPE_ON_FLAG) { \ 183e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_init(camscope_section); \ 184e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_SYSTRACE_TIME_MARKER(); \ 185e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 186e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 187e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} 188e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 189e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define CAMSCOPE_DESTROY(camscope_section) { \ 190e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_frame_count != 0) { \ 191e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel if (kpi_camscope_flags & CAMSCOPE_ON_FLAG) { \ 192e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_destroy(camscope_section); \ 193e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 194e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } \ 195e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} 196e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 197e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define KPI_ATRACE_CAMSCOPE_BEGIN(camscope_name) ({\ 198e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelif (camscope_name < CAMSCOPE_EVENT_NAME_SIZE && \ 199e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name >= 0) { \ 200e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel KPI_ATRACE_BEGIN(camscope_atrace_names[camscope_name]); \ 201e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} \ 202e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelcamscope_sw_base_log((uint32_t)CAMSCOPE_SECTION_HAL, \ 203e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_KPI_MASK, \ 204e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_SYNC_BEGIN, \ 205e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name); \ 206e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}) 207e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 208e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define KPI_ATRACE_CAMSCOPE_END(camscope_name) ({\ 209e80ad7c01b6fb44006dc55546b700fca34bb00edThierry StrudelKPI_ATRACE_END(); \ 210e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelcamscope_sw_base_log((uint32_t)CAMSCOPE_SECTION_HAL, \ 211e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_KPI_MASK, \ 212e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_SYNC_END, \ 213e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name); \ 214e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}) 215e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 216e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel// This macro only works with counter values that act like begin/end 217e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define KPI_ATRACE_CAMSCOPE_INT(name, camscope_name, counter) ({\ 218e80ad7c01b6fb44006dc55546b700fca34bb00edThierry StrudelKPI_ATRACE_INT(name, counter); \ 219e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelcamscope_timing_log((uint32_t)CAMSCOPE_SECTION_HAL, \ 220e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_KPI_MASK, \ 221e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel counter ? CAMSCOPE_ASYNC_BEGIN : CAMSCOPE_ASYNC_END, \ 222e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name, 0); \ 223e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}) 224e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 225e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define ATRACE_CAMSCOPE_BEGIN(camscope_name) ({\ 226e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelif (camscope_name < CAMSCOPE_EVENT_NAME_SIZE && \ 227e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name >= 0) { \ 228e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel ATRACE_BEGIN_DBG(camscope_atrace_names[camscope_name]); \ 229e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel} \ 230e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelcamscope_sw_base_log((uint32_t)CAMSCOPE_SECTION_HAL, \ 231e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_KPI_DBG_MASK, \ 232e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_SYNC_BEGIN, \ 233e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name); \ 234e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}) 235e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 236e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define ATRACE_CAMSCOPE_END(camscope_name) ({\ 237e80ad7c01b6fb44006dc55546b700fca34bb00edThierry StrudelATRACE_END_DBG(); \ 238e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelcamscope_sw_base_log(CAMSCOPE_SECTION_HAL, \ 239e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_KPI_DBG_MASK, \ 240e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel CAMSCOPE_SYNC_END, \ 241e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel camscope_name); \ 242e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}) 243e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 244e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define KPI_ATRACE_CAMSCOPE_NAME(camscope_name) qcamera::CamscopeTraceKpi ___tracer(camscope_name) 245e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define ATRACE_CAMSCOPE_NAME(camscope_name) qcamera::CamscopeTraceDbg ___tracer(camscope_name) 246e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define KPI_ATRACE_CAMSCOPE_CALL(camscope_name) KPI_ATRACE_CAMSCOPE_NAME(camscope_name) 247e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel#define ATRACE_CAMSCOPE_CALL(camscope_name) ATRACE_CAMSCOPE_NAME(camscope_name) 248e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 2493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_ATRACE_NAME(name) qcamera::ScopedTraceKpi ___tracer(ATRACE_TAG, name) 2503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_NAME(name) qcamera::ScopedTraceDbg ___tracer(ATRACE_TAG, name) 2513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define KPI_ATRACE_CALL() KPI_ATRACE_NAME(__FUNCTION__) 2523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ATRACE_CALL() ATRACE_NAME(__FUNCTION__) 2533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelnamespace qcamera { 2553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern volatile uint32_t gKpiDebugLevel; 2563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelclass ScopedTraceKpi { 2573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelpublic: 2583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel inline ScopedTraceKpi(uint64_t tag, const char *name) 2593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel : mTag(tag) { 2603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (gKpiDebugLevel >= KPI_ONLY) { 2613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_begin(mTag,name); 2623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel inline ~ScopedTraceKpi() { 2663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (gKpiDebugLevel >= KPI_ONLY) { 2673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_end(mTag); 2683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel private: 2723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel uint64_t mTag; 2733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 2743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelclass ScopedTraceDbg { 2763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelpublic: 2773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel inline ScopedTraceDbg(uint64_t tag, const char *name) 2783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel : mTag(tag) { 2793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (gKpiDebugLevel >= KPI_DBG) { 2803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_begin(mTag,name); 2813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel inline ~ScopedTraceDbg() { 2853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (gKpiDebugLevel >= KPI_DBG) { 2863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel atrace_end(mTag); 2873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel private: 2913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel uint64_t mTag; 2923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 293e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 294e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelclass CamscopeTraceKpi { 295e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelpublic: 296e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel inline CamscopeTraceKpi(const uint32_t camscope_name) 297e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel : mCamscopeName(camscope_name) { 298e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel KPI_ATRACE_CAMSCOPE_BEGIN(mCamscopeName); 299e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 300e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 301e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel inline ~CamscopeTraceKpi() { 302e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel KPI_ATRACE_CAMSCOPE_END(mCamscopeName); 303e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 304e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 305e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel private: 306e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel const uint32_t mCamscopeName; 307e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}; 308e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 309e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelclass CamscopeTraceDbg { 310e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudelpublic: 311e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel inline CamscopeTraceDbg(const uint32_t camscope_name) 312e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel : mCamscopeName(camscope_name) { 313e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel ATRACE_CAMSCOPE_BEGIN(mCamscopeName); 314e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 315e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 316e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel inline ~CamscopeTraceDbg() { 317e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel ATRACE_CAMSCOPE_END(mCamscopeName); 318e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 319e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 320e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel private: 321e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel const uint32_t mCamscopeName; 322e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel}; 3233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 3243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern volatile uint32_t gKpiDebugLevel; 3263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif /* __QCAMREATRACE_H__ */ 328