/* External entry points */
c_to_factor_func_type c_to_factor_func;
- /* Is call counting enabled? */
+ /* Is profiling enabled? */
bool counting_profiler_p;
- /* Is sampling profiler enabled? */
bool sampling_profiler_p;
/* Global variables used to pass fault handler state from signal handler
cell signal_number;
cell signal_fault_addr;
unsigned int signal_fpu_status;
- bool safepoint_fep;
- cell safepoint_sample_count;
+ volatile bool safepoint_fep;
+
+ /* State kept by the sampling profiler */
+ std::vector<profiling_sample> samples;
+ volatile cell safepoint_sample_count;
+ volatile cell safepoint_gc_sample_count;
/* GC is off during heap walking */
bool gc_off;
void set_counting_profiler(bool counting_profiler);
void primitive_counting_profiler();
+ /* Sampling profiler */
+ void record_sample();
+ void start_sampling_profiler();
+ void end_sampling_profiler();
+ void set_sampling_profiler(bool sampling);
+ void primitive_sampling_profiler();
+
// errors
void general_error(vm_error_type error, cell arg1, cell arg2);
void type_error(cell type, cell tagged);
void find_data_references_step(cell *scan);
void find_data_references(cell look_for_);
void dump_code_heap();
- void factorbug_usage();
+ void factorbug_usage(bool advanced_p);
void factorbug();
void primitive_die();
void ffi_dlclose(dll *dll);
void c_to_factor_toplevel(cell quot);
void init_signals();
+ void start_sampling_profiler_timer();
+ void end_sampling_profiler_timer();
// os-windows
#if defined(WINDOWS)