diff --git a/include/timings.h b/include/timings.h new file mode 100644 index 00000000..ffcf8a3f --- /dev/null +++ b/include/timings.h @@ -0,0 +1,23 @@ +#ifndef ROFI_TIMINGS_H +#define ROFI_TIMINGS_H +#include +#if TIMINGS + +void rofi_timings_init ( void ); +void rofi_timings_tick ( char const *str, int line, char const *msg ); +void rofi_timings_quit ( void ); + +#define TIMINGS_START() rofi_timings_init (); +#define TICK() rofi_timings_tick ( __FUNCTION__, __LINE__, "" ); +#define TICK_N( a ) rofi_timings_tick ( __FUNCTION__, __LINE__, a ); +#define TIMINGS_STOP() rofi_timings_quit (); + +#else + +#define TIMINGS_START() +#define TIMINGS_STOP() +#define TICK() +#define TICK_N( a ) + +#endif // TIMINGS +#endif // ROFI_TIMINGS_H diff --git a/source/timings.c b/source/timings.c new file mode 100644 index 00000000..d7375e80 --- /dev/null +++ b/source/timings.c @@ -0,0 +1,62 @@ +/** + * rofi + * + * MIT/X11 License + * Copyright (c) 2015 Qball Cow + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "rofi.h" +#include "timings.h" +#if TIMINGS +GTimer *global_timer = NULL; +double global_timer_last = 0.0; +FILE *timing_log = NULL; + +void rofi_timings_init ( void ) +{ + timing_log = fopen ( "rofi-timing.log", "w" ); + if ( timing_log != NULL ) { + global_timer = g_timer_new (); + double now = g_timer_elapsed ( global_timer, NULL ); + fprintf ( timing_log, "%4.6f (%2.6f): Started\n", now, 0.0 ); + } +} + +void rofi_timings_tick ( char const *str, int line, char const *msg ) +{ + double now = g_timer_elapsed ( global_timer, NULL ); + + fprintf ( timing_log, "%4.6f (%2.6f): %s:%-3d %s\n", now, now - global_timer_last, str, line, msg ); + global_timer_last = now; +} + +void rofi_timings_quit ( void ) +{ + if ( timing_log ) { + double now = g_timer_elapsed ( global_timer, NULL ); + fprintf ( timing_log, "%4.6f (%2.6f): Stopped\n", now, 0.0 ); + g_timer_destroy ( global_timer ); + fclose ( timing_log ); + timing_log = NULL; + } +} + +#endif