diff options
author | Andrew Au <andrewau@microsoft.com> | 2019-06-11 13:51:09 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-11 13:51:09 -0700 |
commit | 938383a60ffbb716e01dbbf941a239d4bfa7aaf6 (patch) | |
tree | a7cc870aef571985f75f95746b0cc8d4304e6826 /src/vm | |
parent | beeae6da7c1f35fa335868521e1de21a2403eff4 (diff) | |
download | coreclr-938383a60ffbb716e01dbbf941a239d4bfa7aaf6.tar.gz coreclr-938383a60ffbb716e01dbbf941a239d4bfa7aaf6.tar.bz2 coreclr-938383a60ffbb716e01dbbf941a239d4bfa7aaf6.zip |
Use the per session configuration to invoke the EventPipeProvider callbacks (#25088)
* Use the per session configuration to invoke the EventPipeProvider callbacks
* Avoid making the callback if the session does not have the provider
Diffstat (limited to 'src/vm')
-rw-r--r-- | src/vm/eventpipeconfiguration.cpp | 13 | ||||
-rw-r--r-- | src/vm/eventpipeprovider.cpp | 19 | ||||
-rw-r--r-- | src/vm/eventpipeprovider.h | 11 |
3 files changed, 32 insertions, 11 deletions
diff --git a/src/vm/eventpipeconfiguration.cpp b/src/vm/eventpipeconfiguration.cpp index 0236a10e83..09df26db6d 100644 --- a/src/vm/eventpipeconfiguration.cpp +++ b/src/vm/eventpipeconfiguration.cpp @@ -394,9 +394,16 @@ void EventPipeConfiguration::Disable(const EventPipeSession &session, EventPipeP if (pProvider->IsEnabled(session.GetId())) { - EventPipeProviderCallbackData eventPipeProviderCallbackData = pProvider->UnsetConfiguration( - session.GetId()); - pEventPipeProviderCallbackDataQueue->Enqueue(&eventPipeProviderCallbackData); + EventPipeSessionProvider *pSessionProvider = GetSessionProvider(session, pProvider); + if (pSessionProvider != nullptr) + { + EventPipeProviderCallbackData eventPipeProviderCallbackData = pProvider->UnsetConfiguration( + session.GetId(), + pSessionProvider->GetKeywords(), + pSessionProvider->GetLevel(), + pSessionProvider->GetFilterData()); + pEventPipeProviderCallbackDataQueue->Enqueue(&eventPipeProviderCallbackData); + } } pElem = m_pProviderList->GetNext(pElem); diff --git a/src/vm/eventpipeprovider.cpp b/src/vm/eventpipeprovider.cpp index 1da5a1a1ee..525571bc09 100644 --- a/src/vm/eventpipeprovider.cpp +++ b/src/vm/eventpipeprovider.cpp @@ -131,10 +131,14 @@ EventPipeProviderCallbackData EventPipeProvider::SetConfiguration( m_providerLevel = (providerLevel < m_providerLevel) ? m_providerLevel : providerLevel; RefreshAllEvents(sessionId, keywords, providerLevel); - return PrepareCallbackData(pFilterData); + return PrepareCallbackData(keywords, providerLevel, pFilterData); } -EventPipeProviderCallbackData EventPipeProvider::UnsetConfiguration(uint64_t sessionId) +EventPipeProviderCallbackData EventPipeProvider::UnsetConfiguration( + uint64_t sessionId, + INT64 keywords, + EventPipeEventLevel providerLevel, + LPCWSTR pFilterData) { CONTRACTL { @@ -148,7 +152,7 @@ EventPipeProviderCallbackData EventPipeProvider::UnsetConfiguration(uint64_t ses if (m_sessions & sessionId) m_sessions &= ~sessionId; - return PrepareCallbackData(nullptr); + return PrepareCallbackData(keywords, providerLevel, pFilterData); } EventPipeEvent *EventPipeProvider::AddEvent(unsigned int eventID, INT64 keywords, unsigned int eventVersion, EventPipeEventLevel level, bool needStack, BYTE *pMetadata, unsigned int metadataLength) @@ -253,7 +257,10 @@ void EventPipeProvider::AddEvent(EventPipeEvent &event) buffer.Destroy(); } -EventPipeProviderCallbackData EventPipeProvider::PrepareCallbackData(LPCWSTR pFilterData) +EventPipeProviderCallbackData EventPipeProvider::PrepareCallbackData( + INT64 keywords, + EventPipeEventLevel providerLevel, + LPCWSTR pFilterData) { CONTRACTL { @@ -268,8 +275,8 @@ EventPipeProviderCallbackData EventPipeProvider::PrepareCallbackData(LPCWSTR pFi result.pFilterData = pFilterData; result.pCallbackFunction = m_pCallbackFunction; result.enabled = (m_sessions != 0); - result.providerLevel = m_providerLevel; - result.keywords = m_keywords; + result.providerLevel = providerLevel; + result.keywords = keywords; result.pCallbackData = m_pCallbackData; return result; } diff --git a/src/vm/eventpipeprovider.h b/src/vm/eventpipeprovider.h index dfd8ace877..4bfe1ce8b0 100644 --- a/src/vm/eventpipeprovider.h +++ b/src/vm/eventpipeprovider.h @@ -96,7 +96,11 @@ private: // Unset the provider configuration for the specified session (disable sets of events). // This is called by EventPipeConfiguration. - EventPipeProviderCallbackData UnsetConfiguration(uint64_t sessionId); + EventPipeProviderCallbackData UnsetConfiguration( + uint64_t sessionId, + INT64 keywords, + EventPipeEventLevel providerLevel, + LPCWSTR pFilterData); // Refresh the runtime state of all events. void RefreshAllEvents( @@ -105,7 +109,10 @@ private: EventPipeEventLevel providerLevel); // Prepare the data required for invoking callback - EventPipeProviderCallbackData PrepareCallbackData(LPCWSTR pFilterData); + EventPipeProviderCallbackData PrepareCallbackData( + INT64 keywords, + EventPipeEventLevel providerLevel, + LPCWSTR pFilterData); // Invoke the provider callback. static void InvokeCallback(EventPipeProviderCallbackData eventPipeProviderCallbackData); |