From 6555bd3a1f6e6de0604e3065b4040c3a6ac1e44e Mon Sep 17 00:00:00 2001 From: Brian Robbins Date: Mon, 29 Jan 2018 18:49:51 -0800 Subject: Add ActivityId Support to EventPipe (#16055) --- src/vm/eventpipe.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'src/vm/eventpipe.cpp') 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, -- cgit v1.2.3