/****************************************************************************** * * Copyright (C) 2018 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. * ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ /** ****************************************************************************** * @file ihevce_profile.h * * @brief * This file contains profiling related definitions * * @author * Ittiam ****************************************************************************** */ #ifndef _IHEVCE_PROFILE_H_ #define _IHEVCE_PROFILE_H_ /*****************************************************************************/ /* Constant Macros */ /*****************************************************************************/ #define PROFILE_ENABLE 0 typedef struct { /* Note that time below will be in units of micro seconds */ /* Time before process call */ ULWORD64 u8_time_start; /* Time after process call */ ULWORD64 u8_time_end; /* Time taken by the last process call */ ULWORD64 u8_cur_time; /* Sum total of the time taken by process calls so far */ ULWORD64 u8_total_time; /*Avg time taken by a process so far */ ULWORD64 u8_avg_time; /* Peak time taken by a process so far */ ULWORD64 u8_peak_time; /* Number of process calls so far. * Required for calc of avg time taken per process call */ UWORD32 u4_num_profile_calls; /* This flag is present to check that every * profile_start() will have a corresponding * arm_profile_sample_time_end() */ UWORD8 u1_sample_taken_flag; } profile_database_t; typedef struct { WORD32 tv_sec; /* Time in seconds. */ WORD32 tv_usec; /* Time in micro seconds. */ } timeval_t; /*****************************************************************************/ /* Function Declarations */ /*****************************************************************************/ void profile_sample_time_start(); void profile_sample_time_end(); void profile_print_stats(); int profile_get_avg_time(profile_database_t *ps_profile_data); int profile_get_peak_time(profile_database_t *ps_profile_data); int profile_convert_to_milli_sec(profile_database_t *ps_profile_data); ULWORD64 profile_sample_time(); /* Should be called after each process call */ void profile_stop(profile_database_t *ps_profile_data, char *msg); /* Should be called before every process call */ void profile_start(profile_database_t *ps_profile_data); /* Should be called after codec instance initialization */ void init_profiler(profile_database_t *ps_profile_data); /* Should be called at the end of processing */ void profile_end(profile_database_t *ps_profile_data, char *msg); #if PROFILE_ENABLE #define PROFILE_INIT(x) init_profiler(x) #define PROFILE_START(x) profile_start(x) #define PROFILE_STOP(x, y) profile_stop(x, y) #define PROFILE_END(x, y) profile_end(x, y) #else /* #if PROFILE_ENABLE */ #define PROFILE_INIT(x) #define PROFILE_START(x) #define PROFILE_STOP(x, y) #define PROFILE_END(x, y) #endif /* #if PROFILE_ENABLE */ #endif /* _IHEVCE_PROFILE_H_ */