diff options
author | Brian Robbins <brianrob@microsoft.com> | 2018-01-29 18:49:51 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-29 18:49:51 -0800 |
commit | 6555bd3a1f6e6de0604e3065b4040c3a6ac1e44e (patch) | |
tree | ceea55c993c6103e0305b8dfbd503093e527323d /src/vm/eventpipe.cpp | |
parent | ad7c1e85fa95a92d5cc58b93b6ca9e2b77ec86b6 (diff) | |
download | coreclr-6555bd3a1f6e6de0604e3065b4040c3a6ac1e44e.tar.gz coreclr-6555bd3a1f6e6de0604e3065b4040c3a6ac1e44e.tar.bz2 coreclr-6555bd3a1f6e6de0604e3065b4040c3a6ac1e44e.zip |
Add ActivityId Support to EventPipe (#16055)
Diffstat (limited to 'src/vm/eventpipe.cpp')
-rw-r--r-- | src/vm/eventpipe.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/vm/eventpipe.cpp b/src/vm/eventpipe.cpp index 41af3efa03..2d7e3027bf 100644 --- a/src/vm/eventpipe.cpp +++ b/src/vm/eventpipe.cpp @@ -545,6 +545,12 @@ void EventPipe::WriteEventInternal(EventPipeEvent &event, EventPipeEventPayload return; } + // If the activity id isn't specified, pull it from the current thread. + if(pActivityId == NULL) + { + pActivityId = pThread->GetActivityId(); + } + if(!s_pConfig->RundownEnabled() && s_pBufferManager != NULL) { if(!s_pBufferManager->WriteEvent(pThread, *s_pSession, event, payload, pActivityId, pRelatedActivityId)) @@ -964,6 +970,67 @@ void QCALLTYPE EventPipeInternal::DeleteProvider( END_QCALL; } +int QCALLTYPE EventPipeInternal::EventActivityIdControl( + uint controlCode, + GUID *pActivityId) +{ + + QCALL_CONTRACT; + + int retVal = 0; + + BEGIN_QCALL; + + Thread *pThread = GetThread(); + if(pThread == NULL || pActivityId == NULL) + { + retVal = 1; + } + else + { + ActivityControlCode activityControlCode = (ActivityControlCode)controlCode; + GUID currentActivityId; + switch(activityControlCode) + { + case ActivityControlCode::EVENT_ACTIVITY_CONTROL_GET_ID: + + *pActivityId = *pThread->GetActivityId(); + break; + + case ActivityControlCode::EVENT_ACTIVITY_CONTROL_SET_ID: + + pThread->SetActivityId(pActivityId); + break; + + case ActivityControlCode::EVENT_ACTIVITY_CONTROL_CREATE_ID: + + CoCreateGuid(pActivityId); + break; + + case ActivityControlCode::EVENT_ACTIVITY_CONTROL_GET_SET_ID: + + currentActivityId = *pThread->GetActivityId(); + pThread->SetActivityId(pActivityId); + *pActivityId = currentActivityId; + + break; + + case ActivityControlCode::EVENT_ACTIVITY_CONTROL_CREATE_SET_ID: + + *pActivityId = *pThread->GetActivityId(); + CoCreateGuid(¤tActivityId); + pThread->SetActivityId(¤tActivityId); + break; + + default: + retVal = 1; + }; + } + + END_QCALL; + return retVal; +} + void QCALLTYPE EventPipeInternal::WriteEvent( INT_PTR eventHandle, UINT32 eventID, |