1 /* 2 * xcam_obj_debug.h - object profiling and debug 3 * 4 * Copyright (c) 2015 Intel Corporation 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * Author: Wind Yuan <feng.yuan@intel.com> 19 */ 20 21 #ifndef XCAM_OBJ_DEBUG_H 22 #define XCAM_OBJ_DEBUG_H 23 24 #include <stdio.h> 25 26 // default duration of frame numbers 27 #define XCAM_OBJ_DUR_FRAME_NUM 30 28 29 #define XCAM_STATIC_FPS_CALCULATION(objname, count) \ 30 do{ \ 31 static uint32_t num_frame = 0; \ 32 static struct timeval last_sys_time; \ 33 static struct timeval first_sys_time; \ 34 static bool b_last_sys_time_init = false; \ 35 if (!b_last_sys_time_init) { \ 36 gettimeofday (&last_sys_time, NULL); \ 37 gettimeofday (&first_sys_time, NULL); \ 38 b_last_sys_time_init = true; \ 39 } else { \ 40 if ((num_frame%count)==0) { \ 41 double total, current; \ 42 struct timeval cur_sys_time; \ 43 gettimeofday (&cur_sys_time, NULL); \ 44 total = (cur_sys_time.tv_sec - first_sys_time.tv_sec)*1.0f + \ 45 (cur_sys_time.tv_usec - first_sys_time.tv_usec)/1000000.0f; \ 46 current = (cur_sys_time.tv_sec - last_sys_time.tv_sec)*1.0f + \ 47 (cur_sys_time.tv_usec - last_sys_time.tv_usec)/1000000.0f; \ 48 printf("%s Current fps: %.2f, Total avg fps: %.2f\n", \ 49 #objname, ((float)(count))/current, (float)num_frame/total); \ 50 last_sys_time = cur_sys_time; \ 51 } \ 52 } \ 53 ++num_frame; \ 54 }while(0) 55 56 #define XCAM_STATIC_PROFILING_START(name) \ 57 static unsigned int name##_times = 0; \ 58 static struct timeval name##_start_time; \ 59 static struct timeval name##_end_time; \ 60 gettimeofday (& name##_start_time, NULL); \ 61 ++ name##_times; 62 63 #define XCAM_STATIC_PROFILING_END(name, times_of_print) \ 64 static double name##_sum_time = 0; \ 65 gettimeofday (& name##_end_time, NULL); \ 66 name##_sum_time += (name##_end_time.tv_sec - name##_start_time.tv_sec)*1000.0f + \ 67 (name##_end_time.tv_usec - name##_start_time.tv_usec)/1000.0f; \ 68 if (name##_times >= times_of_print) { \ 69 printf ("profiling %s, fps:%.2f duration:%.2fms\n", #name, \ 70 (name##_times*1000.0f/name##_sum_time), name##_sum_time/name##_times); \ 71 name##_times = 0; \ 72 name##_sum_time = 0.0; \ 73 } 74 75 #if ENABLE_PROFILING 76 #define XCAM_OBJ_PROFILING_DEFINES \ 77 struct timeval _profiling_start_time; \ 78 uint32_t _profiling_times; \ 79 double _profiling_sum_duration 80 81 #define XCAM_OBJ_PROFILING_INIT \ 82 xcam_mem_clear (_profiling_start_time); \ 83 _profiling_times = 0; \ 84 _profiling_sum_duration = 0.0 85 86 #define XCAM_OBJ_PROFILING_START \ 87 gettimeofday (&_profiling_start_time, NULL) 88 89 #define XCAM_OBJ_PROFILING_END(name, times) \ 90 struct timeval profiling_now; \ 91 gettimeofday (&profiling_now, NULL); \ 92 _profiling_sum_duration += \ 93 (profiling_now.tv_sec - _profiling_start_time.tv_sec) * 1000.0f + \ 94 (profiling_now.tv_usec - _profiling_start_time.tv_usec) / 1000.0f; \ 95 ++_profiling_times; \ 96 if (_profiling_times >= times) { \ 97 char buf[1024]; \ 98 snprintf (buf, 1024, "profiling %s,average duration:%.2fms\n", \ 99 (name), (_profiling_sum_duration/times)); \ 100 printf ("%s", buf); \ 101 _profiling_times = 0; \ 102 _profiling_sum_duration = 0.0; \ 103 } 104 #else 105 #define XCAM_OBJ_PROFILING_DEFINES 106 #define XCAM_OBJ_PROFILING_INIT 107 #define XCAM_OBJ_PROFILING_START 108 #define XCAM_OBJ_PROFILING_END(name, times) 109 #endif 110 111 #endif //XCAM_OBJ_DEBUG_H 112