New test.
[mono.git] / mono / metadata / profiler.h
index 9f067dabe1e4d68c32ec8e8781e635290ac53bfd..79f5f6f01af2242deb48e553d2811cccf21d4916 100644 (file)
@@ -4,7 +4,9 @@
 #include <mono/metadata/object.h>
 #include <mono/metadata/appdomain.h>
 
-G_BEGIN_DECLS
+MONO_BEGIN_DECLS
+
+#define MONO_PROFILER_MAX_STAT_CALL_CHAIN_DEPTH 128
 
 typedef enum {
        MONO_PROFILE_NONE = 0,
@@ -25,7 +27,10 @@ typedef enum {
        MONO_PROFILE_INS_COVERAGE     = 1 << 14,
        MONO_PROFILE_STATISTICAL      = 1 << 15,
        MONO_PROFILE_METHOD_EVENTS    = 1 << 16,
-       MONO_PROFILE_MONITOR_EVENTS   = 1 << 17
+       MONO_PROFILE_MONITOR_EVENTS   = 1 << 17,
+       MONO_PROFILE_IOMAP_EVENTS     = 1 << 18, /* this should likely be removed, too */
+       MONO_PROFILE_GC_MOVES         = 1 << 19,
+       MONO_PROFILE_GC_ROOTS         = 1 << 20
 } MonoProfileFlags;
 
 typedef enum {
@@ -79,6 +84,11 @@ typedef enum {
        MONO_PROFILER_CALL_CHAIN_INVALID = 4
 } MonoProfilerCallChainStrategy;
 
+typedef enum {
+       MONO_PROFILER_GC_HANDLE_CREATED,
+       MONO_PROFILER_GC_HANDLE_DESTROYED
+} MonoProfileGCHandleEvent;
+
 /*
  * Functions that the runtime will call on the profiler.
  */
@@ -104,21 +114,25 @@ typedef void (*MonoProfileAssemblyResult) (MonoProfiler *prof, MonoAssembly *ass
 
 typedef void (*MonoProfileMethodInline)   (MonoProfiler *prof, MonoMethod   *parent, MonoMethod *child, int *ok);
 
-typedef void (*MonoProfileThreadFunc)     (MonoProfiler *prof, gsize tid);
+typedef void (*MonoProfileThreadFunc)     (MonoProfiler *prof, uintptr_t tid);
+typedef void (*MonoProfileThreadNameFunc) (MonoProfiler *prof, uintptr_t tid, const char *name);
 typedef void (*MonoProfileAllocFunc)      (MonoProfiler *prof, MonoObject *obj, MonoClass *klass);
-typedef void (*MonoProfileStatFunc)       (MonoProfiler *prof, guchar *ip, void *context);
-typedef void (*MonoProfileStatCallChainFunc) (MonoProfiler *prof, int call_chain_depth, guchar **ip, void *context);
+typedef void (*MonoProfileStatFunc)       (MonoProfiler *prof, mono_byte *ip, void *context);
+typedef void (*MonoProfileStatCallChainFunc) (MonoProfiler *prof, int call_chain_depth, mono_byte **ip, void *context);
 typedef void (*MonoProfileGCFunc)         (MonoProfiler *prof, MonoGCEvent event, int generation);
-typedef void (*MonoProfileGCResizeFunc)   (MonoProfiler *prof, gint64 new_size);
+typedef void (*MonoProfileGCMoveFunc)     (MonoProfiler *prof, void **objects, int num);
+typedef void (*MonoProfileGCResizeFunc)   (MonoProfiler *prof, int64_t new_size);
+typedef void (*MonoProfileGCHandleFunc)   (MonoProfiler *prof, int op, int type, uintptr_t handle, MonoObject *obj);
 
-typedef gboolean (*MonoProfileCoverageFilterFunc)   (MonoProfiler *prof, MonoMethod *method);
+typedef void (*MonoProfileIomapFunc) (MonoProfiler *prof, const char *report, const char *pathname, const char *new_pathname);
 
-typedef void (*MonoProfileCoverageFunc)   (MonoProfiler *prof, const MonoProfileCoverageEntry *entry);
+typedef mono_bool (*MonoProfileCoverageFilterFunc)   (MonoProfiler *prof, MonoMethod *method);
 
+typedef void (*MonoProfileCoverageFunc)   (MonoProfiler *prof, const MonoProfileCoverageEntry *entry);
 
-typedef void (*MonoProfilerCodeChunkNew) (MonoProfiler *prof, gpointer chunk, int size);
-typedef void (*MonoProfilerCodeChunkDestroy) (MonoProfiler *prof, gpointer chunk);
-typedef void (*MonoProfilerCodeBufferNew) (MonoProfiler *prof, gpointer buffer, int size, MonoProfilerCodeBufferType type, void *data);
+typedef void (*MonoProfilerCodeChunkNew) (MonoProfiler *prof, void* chunk, int size);
+typedef void (*MonoProfilerCodeChunkDestroy) (MonoProfiler *prof, void* chunk);
+typedef void (*MonoProfilerCodeBufferNew) (MonoProfiler *prof, void* buffer, int size, MonoProfilerCodeBufferType type, void *data);
 
 /*
  * Function the profiler may call.
@@ -140,8 +154,10 @@ void mono_profiler_install_class       (MonoProfileClassFunc start_load, MonoPro
 void mono_profiler_install_jit_compile (MonoProfileMethodFunc start, MonoProfileMethodResult end);
 void mono_profiler_install_jit_end (MonoProfileJitResult end);
 void mono_profiler_install_method_free (MonoProfileMethodFunc callback);
+void mono_profiler_install_method_invoke (MonoProfileMethodFunc start, MonoProfileMethodFunc end);
 void mono_profiler_install_enter_leave (MonoProfileMethodFunc enter, MonoProfileMethodFunc fleave);
 void mono_profiler_install_thread      (MonoProfileThreadFunc start, MonoProfileThreadFunc end);
+void mono_profiler_install_thread_name (MonoProfileThreadNameFunc thread_name_cb);
 void mono_profiler_install_transition  (MonoProfileMethodResult callback);
 void mono_profiler_install_allocation  (MonoProfileAllocFunc callback);
 void mono_profiler_install_monitor     (MonoProfileMonitorFunc callback);
@@ -151,15 +167,19 @@ void mono_profiler_install_exception   (MonoProfileExceptionFunc throw_callback,
 void mono_profiler_install_coverage_filter (MonoProfileCoverageFilterFunc callback);
 void mono_profiler_coverage_get  (MonoProfiler *prof, MonoMethod *method, MonoProfileCoverageFunc func);
 void mono_profiler_install_gc    (MonoProfileGCFunc callback, MonoProfileGCResizeFunc heap_resize_callback);
+void mono_profiler_install_gc_moves    (MonoProfileGCMoveFunc callback);
+void mono_profiler_install_gc_roots    (MonoProfileGCHandleFunc handle_callback);
 void mono_profiler_install_runtime_initialized (MonoProfileFunc runtime_initialized_callback);
 
 void mono_profiler_install_code_chunk_new (MonoProfilerCodeChunkNew callback);
 void mono_profiler_install_code_chunk_destroy (MonoProfilerCodeChunkDestroy callback);
 void mono_profiler_install_code_buffer_new (MonoProfilerCodeBufferNew callback);
 
+void mono_profiler_install_iomap (MonoProfileIomapFunc callback);
+
 void mono_profiler_load             (const char *desc);
 
-G_END_DECLS
+MONO_END_DECLS
 
 #endif /* __MONO_PROFILER_H__ */