2c051c3d51
Former-commit-id: 4f1f69b42e04def9a697c2550b23b9cae645ef29
268 lines
8.0 KiB
HTML
268 lines
8.0 KiB
HTML
<?xml version="1.0" encoding="us-ascii"?><span>
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<title>mono-api-profiler.html</title>
|
|
<style type="text/css">
|
|
|
|
|
|
h3 {
|
|
font-size: 18px;
|
|
padding-bottom: 4pt;
|
|
border-bottom: 2px solid #dddddd;
|
|
}
|
|
|
|
.api {
|
|
border: 1px solid;
|
|
padding: 10pt;
|
|
margin: 10pt;
|
|
}
|
|
|
|
.api-entry {
|
|
border-bottom: none;
|
|
font-size: 18px;
|
|
}
|
|
|
|
.prototype {
|
|
border: 1px solid;
|
|
background-color: #f2f2f2;
|
|
padding: 5pt;
|
|
margin-top: 5pt;
|
|
margin-bottom: 5pt;
|
|
}
|
|
|
|
.header {
|
|
border: 1px solid;
|
|
padding: 0 0 5pt 5pt;
|
|
margin: 10pt;
|
|
white-space: pre;
|
|
font-family: monospace;
|
|
}
|
|
|
|
.code {
|
|
border: 1px solid;
|
|
padding: 0 0 5pt 5pt;
|
|
margin: 10pt;
|
|
white-space: pre;
|
|
font-family: monospace;
|
|
}
|
|
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Profiling Interface</h1>
|
|
|
|
<h3>Profiler Operation</h3>
|
|
|
|
<p />The following methods can be used by dynamic profiler
|
|
methods to monitor different aspects of the program.
|
|
|
|
<p />A custom profiler will have one public method defined in
|
|
the shared library which is the entry point that Mono calls at
|
|
startup, it has the following signature:
|
|
|
|
<pre>
|
|
void mono_profiler_startup (const char *desc)
|
|
</pre>
|
|
|
|
<p />Where "desc" is the set of arguments that were passed from
|
|
the command line. This routine will call
|
|
<tt>mono_profiler_install</tt> to activate the profiler and
|
|
will install one or more filters (one of the various
|
|
<tt>mono_profiler_install_</tt> functions).
|
|
|
|
<p />In addition, a profiler developer will typically call
|
|
<tt>mono_profiler_set_events</tt> to register which kinds of
|
|
traces should be enabled, these can be an OR-ed combination of
|
|
the following:
|
|
|
|
<pre>
|
|
MONO_PROFILE_NONE
|
|
MONO_PROFILE_APPDOMAIN_EVENTS
|
|
MONO_PROFILE_ASSEMBLY_EVENTS
|
|
MONO_PROFILE_MODULE_EVENTS
|
|
MONO_PROFILE_CLASS_EVENTS
|
|
MONO_PROFILE_JIT_COMPILATION
|
|
MONO_PROFILE_INLINING
|
|
MONO_PROFILE_EXCEPTIONS
|
|
MONO_PROFILE_ALLOCATIONS
|
|
MONO_PROFILE_GC
|
|
MONO_PROFILE_THREADS
|
|
MONO_PROFILE_REMOTING
|
|
MONO_PROFILE_TRANSITIONS
|
|
MONO_PROFILE_ENTER_LEAVE
|
|
MONO_PROFILE_COVERAGE
|
|
MONO_PROFILE_INS_COVERAGE
|
|
MONO_PROFILE_STATISTICAL
|
|
</pre>
|
|
|
|
<p />Developers can change the set of monitored events at
|
|
runtime by calling <tt>mono_profiler_set_events</tt>.
|
|
|
|
<a name="api:mono_profiler_install"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install</div>
|
|
|
|
<div class="prototype">void
|
|
mono_profiler_install (MonoProfiler *prof, MonoProfileFunc callback)
|
|
|
|
</div>
|
|
<p />
|
|
<b>Parameters</b>
|
|
<blockquote><dt><i>prof:</i></dt><dd> a MonoProfiler structure pointer, or a pointer to a derived structure.</dd><dt><i>callback:</i></dt><dd> the function to invoke at shutdown</dd></blockquote>
|
|
<b>Remarks</b>
|
|
<p />
|
|
Use mono_profiler_install to activate profiling in the Mono runtime.
|
|
Typically developers of new profilers will create a new structure whose
|
|
first field is a MonoProfiler and put any extra information that they need
|
|
to access from the various profiling callbacks there.
|
|
|
|
|
|
</div> <a name="api:mono_profiler_install_allocation"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_allocation</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_allocation</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_appdomain"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_appdomain</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_appdomain</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_assembly"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_assembly</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_assembly</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_class"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_class</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_class</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_coverage_filter"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_coverage_filter</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_coverage_filter</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_enter_leave"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_enter_leave</div>
|
|
|
|
<div class="prototype">void
|
|
mono_profiler_install_enter_leave (MonoProfileMethodFunc enter, MonoProfileMethodFunc fleave)
|
|
|
|
</div>
|
|
<p />
|
|
<b>Parameters</b>
|
|
<blockquote><dt><i>enter:</i></dt><dd> the routine to be called on each method entry</dd><dt><i>fleave:</i></dt><dd> the routine to be called each time a method returns</dd></blockquote>
|
|
<b>Remarks</b>
|
|
<p />
|
|
Use this routine to install routines that will be called everytime
|
|
a method enters and leaves. The routines will receive as an argument
|
|
the MonoMethod representing the method that is entering or leaving.
|
|
|
|
</div> <a name="api:mono_profiler_install_jit_compile"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_jit_compile</div>
|
|
|
|
<div class="prototype">void
|
|
mono_profiler_install_jit_compile (MonoProfileMethodFunc start, MonoProfileMethodResult end)
|
|
|
|
</div>
|
|
<p />
|
|
<b>Parameters</b>
|
|
<blockquote><dt><i>start:</i></dt><dd> the routine to be called when the JIT process starts.</dd><dt><i>end:</i></dt><dd> the routine to be called when the JIT process ends.</dd></blockquote>
|
|
<b>Remarks</b>
|
|
<p />
|
|
Use this routine to install routines that will be called when JIT
|
|
compilation of a method starts and completes.
|
|
|
|
</div> <a name="api:mono_profiler_install_module"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_module</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_module</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_thread"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_thread</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_thread</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_transition"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_transition</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_transition</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_gc"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_gc</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_gc</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_install_statistical"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_install_statistical</div>
|
|
|
|
<div class="prototype">Prototype: mono_profiler_install_statistical</div>
|
|
<p />
|
|
|
|
</div> <a name="api:mono_profiler_set_events"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_set_events</div>
|
|
|
|
<div class="prototype">void
|
|
mono_profiler_set_events (MonoProfileFlags events)
|
|
|
|
</div>
|
|
<p />
|
|
<b>Parameters</b>
|
|
<blockquote><dt><i>events:</i></dt><dd> an ORed set of values made up of MONO_PROFILER_ flags</dd></blockquote>
|
|
<b>Remarks</b>
|
|
<p />
|
|
The events descriped in the <i>events</i> argument is a set of flags
|
|
that represent which profiling events must be triggered. For
|
|
example if you have registered a set of methods for tracking
|
|
JIT compilation start and end with mono_profiler_install_jit_compile,
|
|
you will want to pass the MONO_PROFILE_JIT_COMPILATION flag to
|
|
this routine.
|
|
|
|
You can call mono_profile_set_events more than once and you can
|
|
do this at runtime to modify which methods are invoked.
|
|
|
|
</div> <a name="api:mono_profiler_get_events"></a>
|
|
<div class="api">
|
|
<div class="api-entry">mono_profiler_get_events</div>
|
|
|
|
<div class="prototype">MonoProfileFlags
|
|
mono_profiler_get_events (void)
|
|
|
|
</div>
|
|
<p />
|
|
<b>Remarks</b>
|
|
<p />
|
|
Returns a list of active events that will be intercepted.
|
|
|
|
|
|
</div><h3>Coverage</h3>
|
|
|
|
<p />To support profiling modules that need to do code coverage
|
|
analysis, the following routines is provided:
|
|
|
|
</body>
|
|
</html>
|
|
</span> |