LCOV - code coverage report
Current view: top level - src - timing.c (source / functions) Hit Total Coverage
Test: [build process] commit ef510b1f346f4c9f9d86eaceace5ca54961a1dbc Lines: 2 2 100.0 %
Date: 2022-07-17 01:01:28 Functions: 2 2 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : // This file is a part of Julia. License is MIT: https://julialang.org/license
       2                 :            : 
       3                 :            : #include <inttypes.h>
       4                 :            : #include "julia.h"
       5                 :            : #include "julia_internal.h"
       6                 :            : #include "options.h"
       7                 :            : #include "stdio.h"
       8                 :            : 
       9                 :            : #ifdef __cplusplus
      10                 :            : extern "C" {
      11                 :            : #endif
      12                 :            : 
      13                 :            : #ifdef ENABLE_TIMINGS
      14                 :            : #include "timing.h"
      15                 :            : 
      16                 :            : #ifndef HAVE_TIMING_SUPPORT
      17                 :            : #error Timings are not supported on your compiler
      18                 :            : #endif
      19                 :            : 
      20                 :            : static uint64_t t0;
      21                 :            : JL_DLLEXPORT uint64_t jl_timing_data[(int)JL_TIMING_LAST] = {0};
      22                 :            : const char *jl_timing_names[(int)JL_TIMING_LAST] =
      23                 :            :     {
      24                 :            : #define X(name) #name
      25                 :            :         JL_TIMING_OWNERS
      26                 :            : #undef X
      27                 :            :     };
      28                 :            : 
      29                 :            : void jl_print_timings(void)
      30                 :            : {
      31                 :            :     uint64_t total_time = cycleclock() - t0;
      32                 :            :     uint64_t root_time = total_time;
      33                 :            :     for (int i = 0; i < JL_TIMING_LAST; i++) {
      34                 :            :         root_time -= jl_timing_data[i];
      35                 :            :     }
      36                 :            :     jl_timing_data[0] = root_time;
      37                 :            :     for (int i = 0; i < JL_TIMING_LAST; i++) {
      38                 :            :         if (jl_timing_data[i] != 0)
      39                 :            :             fprintf(stderr, "%-25s : %5.2f %%   %" PRIu64 "\n", jl_timing_names[i],
      40                 :            :                     100 * (((double)jl_timing_data[i]) / total_time), jl_timing_data[i]);
      41                 :            :     }
      42                 :            : }
      43                 :            : 
      44                 :            : void jl_init_timing(void)
      45                 :            : {
      46                 :            :     t0 = cycleclock();
      47                 :            : }
      48                 :            : 
      49                 :            : void jl_destroy_timing(void)
      50                 :            : {
      51                 :            :     jl_ptls_t ptls = jl_current_task->ptls;
      52                 :            :     jl_timing_block_t *stack = ptls->timing_stack;
      53                 :            :     while (stack) {
      54                 :            :         _jl_timing_block_destroy(stack);
      55                 :            :         stack = stack->prev;
      56                 :            :     }
      57                 :            : }
      58                 :            : 
      59                 :            : jl_timing_block_t *jl_pop_timing_block(jl_timing_block_t *cur_block)
      60                 :            : {
      61                 :            :     _jl_timing_block_destroy(cur_block);
      62                 :            :     return cur_block->prev;
      63                 :            : }
      64                 :            : 
      65                 :            : void jl_timing_block_start(jl_timing_block_t *cur_block)
      66                 :            : {
      67                 :            :     _jl_timing_block_start(cur_block, cycleclock());
      68                 :            : }
      69                 :            : 
      70                 :            : void jl_timing_block_stop(jl_timing_block_t *cur_block)
      71                 :            : {
      72                 :            :     _jl_timing_block_stop(cur_block, cycleclock());
      73                 :            : }
      74                 :            : 
      75                 :            : #else
      76                 :            : 
      77                 :         15 : void jl_init_timing(void) { }
      78                 :         15 : void jl_destroy_timing(void) { }
      79                 :            : 
      80                 :            : #endif
      81                 :            : 
      82                 :            : #ifdef __cplusplus
      83                 :            : }
      84                 :            : #endif

Generated by: LCOV version 1.14