/* Copyright (C) 2005-2019 Shugo Maeda and Charlie Savage Please see the LICENSE file for copyright and distribution information */ #ifndef __rp_measurementMENT_H__ #define __rp_measurementMENT_H__ #include "ruby_prof.h" extern VALUE mMeasure; typedef double (*get_measurement)(rb_trace_arg_t* trace_arg); typedef enum { MEASURE_WALL_TIME, MEASURE_PROCESS_TIME, MEASURE_ALLOCATIONS, MEASURE_MEMORY } prof_measure_mode_t; typedef struct prof_measurer_t { get_measurement measure; prof_measure_mode_t mode; double multiplier; bool track_allocations; } prof_measurer_t; /* Callers and callee information for a method. */ typedef struct prof_measurement_t { double total_time; double self_time; double wait_time; int called; VALUE object; } prof_measurement_t; prof_measurer_t* prof_get_measurer(prof_measure_mode_t measure, bool track_allocations); double prof_measure(prof_measurer_t* measurer, rb_trace_arg_t* trace_arg); prof_measurement_t* prof_measurement_create(void); void prof_measurement_free(prof_measurement_t* measurement); VALUE prof_measurement_wrap(prof_measurement_t* measurement); prof_measurement_t* prof_get_measurement(VALUE self); void prof_measurement_mark(void* data); void rp_init_measure(void); #endif //__rp_measurementMENT_H__