private unsafe void DispatchEventsToEventListeners() { // Struct to fill with the call to GetNextEvent. EventPipeEventInstanceData instanceData; while (!m_stopDispatchTask) { // Get the next event. while (!m_stopDispatchTask && EventPipeInternal.GetNextEvent(&instanceData)) { // Filter based on provider. if (instanceData.ProviderID == m_RuntimeProviderID) { // Dispatch the event. ReadOnlySpan <Byte> payload = new ReadOnlySpan <byte>((void *)instanceData.Payload, (int)instanceData.PayloadLength); DateTime dateTimeStamp = TimeStampToDateTime(instanceData.TimeStamp); RuntimeEventSource.Log.ProcessEvent(instanceData.EventID, instanceData.ThreadID, dateTimeStamp, instanceData.ActivityId, instanceData.ChildActivityId, payload); } } // Wait for more events. if (!m_stopDispatchTask) { Thread.Sleep(10); } } }
private unsafe void DispatchEventsToEventListeners() { // Struct to fill with the call to GetNextEvent. EventPipeEventInstanceData instanceData; while (!m_stopDispatchTask) { bool eventsReceived = false; // Get the next event. while (!m_stopDispatchTask && EventPipeInternal.GetNextEvent(m_sessionID, &instanceData)) { eventsReceived = true; // Filter based on provider. if (instanceData.ProviderID == m_RuntimeProviderID) { // Dispatch the event. ReadOnlySpan <byte> payload = new ReadOnlySpan <byte>((void *)instanceData.Payload, (int)instanceData.PayloadLength); DateTime dateTimeStamp = TimeStampToDateTime(instanceData.TimeStamp); NativeRuntimeEventSource.Log.ProcessEvent(instanceData.EventID, instanceData.ThreadID, dateTimeStamp, instanceData.ActivityId, instanceData.ChildActivityId, payload); } } // Wait for more events. if (!m_stopDispatchTask) { if (!eventsReceived) { EventPipeInternal.WaitForSessionSignal(m_sessionID, Timeout.Infinite); } Thread.Sleep(10); } } }
private unsafe void DispatchEventsToEventListeners() { // Struct to fill with the call to GetNextEvent. EventPipeEventInstanceData instanceData; while (!m_stopDispatchTask) { bool eventsReceived = false; // Get the next event. while (!m_stopDispatchTask && EventPipeInternal.GetNextEvent(m_sessionID, &instanceData)) { eventsReceived = true; // Filter based on provider. if (instanceData.ProviderID == m_RuntimeProviderID) { // Dispatch the event. ReadOnlySpan <Byte> payload = new ReadOnlySpan <byte>((void *)instanceData.Payload, (int)instanceData.PayloadLength); DateTime dateTimeStamp = TimeStampToDateTime(instanceData.TimeStamp); NativeRuntimeEventSource.Log.ProcessEvent(instanceData.EventID, instanceData.ThreadID, dateTimeStamp, instanceData.ActivityId, instanceData.ChildActivityId, payload); } } // Wait for more events. if (!m_stopDispatchTask) { if (!eventsReceived) { // Future TODO: this would make more sense to handle in EventPipeSession/EventPipe native code. Debug.Assert(!m_dispatchTaskWaitHandle.SafeWaitHandle.IsInvalid); m_dispatchTaskWaitHandle.WaitOne(); } Thread.Sleep(10); } } }