val is_enabled : bool
is_enabled
can be used to "guard" expensive computations done while recording a
metric. For example:
Probe.record len <some computation>
If <some computation> is just a variable reference it is free (when using
Core_profiler_disabled
). However, if it involves some actual work, it is better
to write:
if Profiler.is_enabled then Probe.record len <some computation>
When using online or offline profiling, the boolean is constant true
and with
disabled profiling, the boolean is false
.
val configure : ?don't_require_core_profiler_env:unit ‑> ?offline_profiler_data_file:string ‑> ?online_print_time_interval_secs:int ‑> ?online_print_by_default:bool ‑> unit ‑> unit
configure
lets one set various profiler parameters programmatically.
don't_require_core_profiler_env
: To protect against Core_profiler being
enabled in production, it will check the environment variable CORE_PROFILER
whenever you try to create the first Timer
or Probe
. Setting
don't_require_core_profiler_env
disables raising an exception if the
CORE_PROFILER
environment variable is not set.You need to call this before any Timer
or Probe
has been created. If you
set don't_require_core_profiler_env
after a Timer
or Probe
has been
created, then it will raise an exception if the value you are trying to set
disagrees with that which was read from the environment.
offline_profiler_data_file
: This specifies the name of the data file to use.
By default this is "profiler.dat".online_print_time_interval_secs
: This is the rate at which stats should be
printed by the online profiler. Stats may not be printed at this rate is one
does not call at
or safe_to_delay
periodically.online_print_by_default
: Setting this to false
disables printing stats
every time interval. One can print stats by explicitly calling dump_stats
.The environment variable CORE_PROFILER
can be used to configure the
app. Also see core_profiler_env_help_string
below.
val safe_to_delay : unit ‑> unit
There are several slow operations that may happen occasionally when calling
record
: allocation, Time_stamp_counter
calibration, etc. safe_to_delay
checks if they will be necessary soon, and does them in advance. If possible,
call this (fairly regularly) from a time-insensitive point in code (or at least,
outside any deltas / groups) to reduce the number of spurious jumps in time
deltas. If you know for certain that you will be using Core_profiler
, you also
probably want to call this at startup, to perform the first allocation.
val dump_stats : unit ‑> unit
In the online profiler, dump_stats
prints a table of stats -- this is the same
table that is printed periodically and this function gives the user the option to
disable the automatic printing and take control of the printing process.
In the offline profiler, dump_stats
writes out all the collected stats so
far. This normally happens at_exit
and this function lets the programmer dump
the stats earlier.