From 1cf39a4e686668f35aec3f336615c422e3cc9fec Mon Sep 17 00:00:00 2001 From: Brian Robbins Date: Mon, 15 May 2017 08:15:51 -0700 Subject: Allow coniguration of sampling rate. (#11595) --- src/vm/eventpipe.cpp | 2 ++ src/vm/eventpipe.h | 1 + src/vm/sampleprofiler.cpp | 16 ++++++---------- src/vm/sampleprofiler.h | 5 +++-- 4 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/vm') diff --git a/src/vm/eventpipe.cpp b/src/vm/eventpipe.cpp index 6f6108d262..5805641bc5 100644 --- a/src/vm/eventpipe.cpp +++ b/src/vm/eventpipe.cpp @@ -446,12 +446,14 @@ CrstStatic* EventPipe::GetLock() void QCALLTYPE EventPipeInternal::Enable( __in_z LPCWSTR outputFile, unsigned int circularBufferSizeInMB, + long profilerSamplingRateInNanoseconds, EventPipeProviderConfiguration *pProviders, int numProviders) { QCALL_CONTRACT; BEGIN_QCALL; + SampleProfiler::SetSamplingRate(profilerSamplingRateInNanoseconds); EventPipe::Enable(outputFile, circularBufferSizeInMB, pProviders, numProviders); END_QCALL; } diff --git a/src/vm/eventpipe.h b/src/vm/eventpipe.h index 97d873e5af..180a7686cd 100644 --- a/src/vm/eventpipe.h +++ b/src/vm/eventpipe.h @@ -272,6 +272,7 @@ public: static void QCALLTYPE Enable( __in_z LPCWSTR outputFile, unsigned int circularBufferSizeInMB, + long profilerSamplingRateInNanoseconds, EventPipeProviderConfiguration *pProviders, int numProviders); diff --git a/src/vm/sampleprofiler.cpp b/src/vm/sampleprofiler.cpp index 7c6429a211..3ed1a5b7fd 100644 --- a/src/vm/sampleprofiler.cpp +++ b/src/vm/sampleprofiler.cpp @@ -17,9 +17,7 @@ const GUID SampleProfiler::s_providerID = {0x3c530d44,0x97ae,0x513a,{0x1e,0x6d,0 EventPipeProvider* SampleProfiler::s_pEventPipeProvider = NULL; EventPipeEvent* SampleProfiler::s_pThreadTimeEvent = NULL; CLREventStatic SampleProfiler::s_threadShutdownEvent; -#ifdef FEATURE_PAL long SampleProfiler::s_samplingRateInNs = 1000000; // 1ms -#endif void SampleProfiler::Enable() { @@ -88,6 +86,12 @@ void SampleProfiler::Disable() s_threadShutdownEvent.Wait(0, FALSE /* bAlertable */); } +void SampleProfiler::SetSamplingRate(long nanoseconds) +{ + LIMITED_METHOD_CONTRACT; + s_samplingRateInNs = nanoseconds; +} + DWORD WINAPI SampleProfiler::ThreadProc(void *args) { CONTRACTL @@ -111,11 +115,7 @@ DWORD WINAPI SampleProfiler::ThreadProc(void *args) if(ThreadSuspend::SysIsSuspendInProgress() || (ThreadSuspend::GetSuspensionThread() != 0)) { // Skip the current sample. -#ifdef FEATURE_PAL PAL_nanosleep(s_samplingRateInNs); -#else - ClrSleepEx(1, FALSE); -#endif continue; } @@ -129,11 +129,7 @@ DWORD WINAPI SampleProfiler::ThreadProc(void *args) ThreadSuspend::RestartEE(FALSE /* bFinishedGC */, TRUE /* SuspendSucceeded */); // Wait until it's time to sample again. -#ifdef FEATURE_PAL PAL_nanosleep(s_samplingRateInNs); -#else - ClrSleepEx(1, FALSE); -#endif } } diff --git a/src/vm/sampleprofiler.h b/src/vm/sampleprofiler.h index 19deb08e9d..1992e1cd9b 100644 --- a/src/vm/sampleprofiler.h +++ b/src/vm/sampleprofiler.h @@ -25,6 +25,9 @@ class SampleProfiler // Disable profiling. static void Disable(); + // Set the sampling rate. + static void SetSamplingRate(long nanoseconds); + private: // Iterate through all managed threads and walk all stacks. @@ -47,10 +50,8 @@ class SampleProfiler // Thread shutdown event for synchronization between Disable() and the sampling thread. static CLREventStatic s_threadShutdownEvent; -#ifdef FEATURE_PAL // The sampling rate. static long s_samplingRateInNs; -#endif }; #endif // FEATURE_PERFTRACING -- cgit v1.2.3