summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorAndrew Au <andrewau@microsoft.com>2019-06-11 13:51:09 -0700
committerGitHub <noreply@github.com>2019-06-11 13:51:09 -0700
commit938383a60ffbb716e01dbbf941a239d4bfa7aaf6 (patch)
treea7cc870aef571985f75f95746b0cc8d4304e6826 /src/vm
parentbeeae6da7c1f35fa335868521e1de21a2403eff4 (diff)
downloadcoreclr-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.cpp13
-rw-r--r--src/vm/eventpipeprovider.cpp19
-rw-r--r--src/vm/eventpipeprovider.h11
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);