1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2015 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __MPP_TIME_H__ 7*437bfbebSnyanmisaka #define __MPP_TIME_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include <unistd.h> 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka #include "mpp_thread.h" 12*437bfbebSnyanmisaka 13*437bfbebSnyanmisaka #define msleep(x) usleep((x)*1000) 14*437bfbebSnyanmisaka 15*437bfbebSnyanmisaka typedef void* MppClock; 16*437bfbebSnyanmisaka typedef void* MppTimer; 17*437bfbebSnyanmisaka typedef void* MppStopwatch; 18*437bfbebSnyanmisaka 19*437bfbebSnyanmisaka #ifdef __cplusplus 20*437bfbebSnyanmisaka extern "C" { 21*437bfbebSnyanmisaka #endif 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka rk_s64 mpp_time(); 24*437bfbebSnyanmisaka void mpp_time_diff(rk_s64 start, rk_s64 end, rk_s64 limit, const char *fmt); 25*437bfbebSnyanmisaka 26*437bfbebSnyanmisaka /* 27*437bfbebSnyanmisaka * Clock create / destroy / enable / disable function 28*437bfbebSnyanmisaka * Note when clock is create it is default disabled user need to call enable 29*437bfbebSnyanmisaka * fucntion with enable = 1 to enable the clock. 30*437bfbebSnyanmisaka * User can use enable function with enable = 0 to disable the clock. 31*437bfbebSnyanmisaka */ 32*437bfbebSnyanmisaka MppClock mpp_clock_get(const char *name); 33*437bfbebSnyanmisaka void mpp_clock_put(MppClock clock); 34*437bfbebSnyanmisaka void mpp_clock_enable(MppClock clock, rk_u32 enable); 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka /* 37*437bfbebSnyanmisaka * Clock basic operation function: 38*437bfbebSnyanmisaka * start : let clock start timing counter 39*437bfbebSnyanmisaka * pause : let clock pause and return the diff to start time 40*437bfbebSnyanmisaka * reset : let clock counter to all zero 41*437bfbebSnyanmisaka */ 42*437bfbebSnyanmisaka rk_s64 mpp_clock_start(MppClock clock); 43*437bfbebSnyanmisaka rk_s64 mpp_clock_pause(MppClock clock); 44*437bfbebSnyanmisaka rk_s64 mpp_clock_reset(MppClock clock); 45*437bfbebSnyanmisaka 46*437bfbebSnyanmisaka /* 47*437bfbebSnyanmisaka * These clock helper function can only be call when clock is paused: 48*437bfbebSnyanmisaka * mpp_clock_get_sum - Return clock sum up total value 49*437bfbebSnyanmisaka * mpp_clock_get_count - Return clock sum up counter value 50*437bfbebSnyanmisaka * mpp_clock_get_name - Return clock name 51*437bfbebSnyanmisaka */ 52*437bfbebSnyanmisaka rk_s64 mpp_clock_get_sum(MppClock clock); 53*437bfbebSnyanmisaka rk_s64 mpp_clock_get_count(MppClock clock); 54*437bfbebSnyanmisaka const char *mpp_clock_get_name(MppClock clock); 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka /* 57*437bfbebSnyanmisaka * MppTimer is for timer with callback function 58*437bfbebSnyanmisaka * It will provide the ability to repeat doing something until it is 59*437bfbebSnyanmisaka * disalble or put. 60*437bfbebSnyanmisaka * 61*437bfbebSnyanmisaka * Timer work flow: 62*437bfbebSnyanmisaka * 63*437bfbebSnyanmisaka * 1. mpp_timer_get 64*437bfbebSnyanmisaka * 2. mpp_timer_set_callback 65*437bfbebSnyanmisaka * 3. mpp_timer_set_timing(initial, interval) 66*437bfbebSnyanmisaka * 4. mpp_timer_set_enable(initial, 1) 67*437bfbebSnyanmisaka * ... running ... 68*437bfbebSnyanmisaka * 5. mpp_timer_set_enable(initial, 0) 69*437bfbebSnyanmisaka * 6. mpp_timer_put 70*437bfbebSnyanmisaka */ 71*437bfbebSnyanmisaka MppTimer mpp_timer_get(const char *name); 72*437bfbebSnyanmisaka void mpp_timer_set_callback(MppTimer timer, MppThreadFunc func, void *ctx); 73*437bfbebSnyanmisaka void mpp_timer_set_timing(MppTimer timer, rk_s32 initial, rk_s32 interval); 74*437bfbebSnyanmisaka void mpp_timer_set_enable(MppTimer timer, rk_s32 enable); 75*437bfbebSnyanmisaka void mpp_timer_put(MppTimer timer); 76*437bfbebSnyanmisaka 77*437bfbebSnyanmisaka /* 78*437bfbebSnyanmisaka * MppStopwatch is for timer to record event and time 79*437bfbebSnyanmisaka * 80*437bfbebSnyanmisaka * Stopwatch work flow: 81*437bfbebSnyanmisaka * 82*437bfbebSnyanmisaka * 1. mpp_stopwatch_get 83*437bfbebSnyanmisaka * 2. mpp_stopwatch_setup(max_count, show_on_exit) 84*437bfbebSnyanmisaka * 3. mpp_stopwatch_record(event) 85*437bfbebSnyanmisaka * ... running ... 86*437bfbebSnyanmisaka * 4. mpp_stopwatch_record(event) 87*437bfbebSnyanmisaka * 5. mpp_stopwatch_put (show events and time) 88*437bfbebSnyanmisaka */ 89*437bfbebSnyanmisaka MppStopwatch mpp_stopwatch_get(const char *name); 90*437bfbebSnyanmisaka void mpp_stopwatch_set_show_on_exit(MppStopwatch stopwatch, rk_s32 show_on_exit); 91*437bfbebSnyanmisaka void mpp_stopwatch_record(MppStopwatch stopwatch, const char *event); 92*437bfbebSnyanmisaka void mpp_stopwatch_put(MppStopwatch timer); 93*437bfbebSnyanmisaka rk_s64 mpp_stopwatch_elapsed_time(MppStopwatch stopwatch); 94*437bfbebSnyanmisaka 95*437bfbebSnyanmisaka #ifdef __cplusplus 96*437bfbebSnyanmisaka } 97*437bfbebSnyanmisaka #endif 98*437bfbebSnyanmisaka 99*437bfbebSnyanmisaka #endif /*__MPP_TIME_H__*/ 100