Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=80672

--- shadow/80672        2007-01-30 11:40:54.000000000 -0500
+++ shadow/80672.tmp.13328      2007-01-30 11:40:54.000000000 -0500
@@ -0,0 +1,128 @@
+Bug#: 80672
+Product: Mono: Runtime
+Version: 1.2
+OS: 
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: misc
+AssignedTo: [EMAIL PROTECTED]                            
+ReportedBy: [EMAIL PROTECTED]               
+QAContact: [EMAIL PROTECTED]
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Implement statistical profiling on Win32
+
+A first try, seems to work on XP at least. Will not work on Win9x, but do
+we care?
+
+Index: mono/mini/mini.c
+===================================================================
+--- mono/mini/mini.c   (revision 71775)
++++ mono/mini/mini.c   (working copy)
+@@ -22,6 +22,10 @@
+ #include <pthread.h>
+ #endif
+ 
++#ifdef PLATFORM_WIN32
++#define _WIN32_WINNT 0x0500
++#endif
++
+ #ifdef HAVE_VALGRIND_MEMCHECK_H
+ #include <valgrind/memcheck.h>
+ #endif
+@@ -11111,6 +11115,8 @@
+       mono_arch_handle_exception (ctx, exc, FALSE);
+ }
+ 
++#ifndef PLATFORM_WIN32
++
+ static void
+ SIG_HANDLER_SIGNATURE (sigabrt_signal_handler)
+ {
+@@ -11181,6 +11187,16 @@
+ }
+ 
+ static void
++SIG_HANDLER_SIGNATURE (sigusr2_signal_handler)
++{
++      gboolean enabled = mono_trace_is_enabled ();
++
++      mono_trace_enable (!enabled);
++}
++
++#endif
++
++static void
+ SIG_HANDLER_SIGNATURE (sigint_signal_handler)
+ {
+       MonoException *exc;
+@@ -11191,14 +11207,6 @@
+       mono_arch_handle_exception (ctx, exc, FALSE);
+ }
+ 
+-static void
+-SIG_HANDLER_SIGNATURE (sigusr2_signal_handler)
+-{
+-      gboolean enabled = mono_trace_is_enabled ();
+-
+-      mono_trace_enable (!enabled);
+-}
+-
+ #ifdef PLATFORM_MACOSX
+ 
+ /*
+@@ -11452,6 +11460,21 @@
+ }
+ #endif
+ 
++#ifdef PLATFORM_WIN32
++static HANDLE win32_main_thread;
++static MMRESULT win32_timer;
++
++static void CALLBACK
++win32_time_proc (UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
++{
++      CONTEXT context;
++
++      context.ContextFlags = CONTEXT_CONTROL;
++      if (GetThreadContext (win32_main_thread, &context))
++              mono_profiler_stat_hit ((guchar *) context.Eip, &context);
++}
++#endif
++
+ static void
+ setup_stat_profiler (void)
+ {
+@@ -11504,6 +11527,27 @@
+               return;
+       inited = 1;
+       add_signal_handler (SIGPROF, sigprof_signal_handler);
++#elif defined (PLATFORM_WIN32)
++      static int inited = 0;
++      TIMECAPS timecaps;
++
++      if (inited)
++              return;
++
++      inited = 1;
++      if (timeGetDevCaps (&timecaps, sizeof (timecaps)) != TIMERR_NOERROR)
++              return;
++
++      if ((win32_main_thread = OpenThread (READ_CONTROL | THREAD_GET_CONTEXT,
+FALSE, GetCurrentThreadId ())) == NULL)
++              return;
++
++      if (timeBeginPeriod (1) != TIMERR_NOERROR)
++              return;
++
++      if ((win32_timer = timeSetEvent (1, 0, win32_time_proc, 0,
+TIME_PERIODIC)) == 0) {
++              timeEndPeriod (1);
++              return;
++      }
+ #endif
+ }
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to