void FMessageTracer::ProcessDispatchedMessage( IMessageContextRef Context, double TimeSeconds, FGuid RecipientId, bool Async ) { FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (!MessageInfo.IsValid()) { return; } FMessageTracerEndpointInfoPtr& EndpointInfo = RecipientsToEndpointInfos.FindOrAdd(RecipientId); if (!EndpointInfo.IsValid()) { return; } // update message information FMessageTracerDispatchStateRef DispatchState = MakeShareable(new FMessageTracerDispatchState()); DispatchState->DispatchLatency = TimeSeconds - MessageInfo->TimeSent; DispatchState->DispatchType = Async ? EMessageTracerDispatchTypes::TaskGraph : EMessageTracerDispatchTypes::Direct; DispatchState->EndpointInfo = EndpointInfo; DispatchState->TimeDispatched = TimeSeconds; DispatchState->TimeHandled = 0.0; MessageInfo->DispatchStates.Add(EndpointInfo, DispatchState); // update database EndpointInfo->ReceivedMessages.Add(MessageInfo); }
void FMessageTracer::TraceRoutedMessage( const IMessageContextRef& Context ) { if (!Running) { return; } double Timestamp = FPlatformTime::Seconds(); if (ShouldBreak(Context)) { Breaking = true; ContinueEvent->Wait(); } Traces.Enqueue([=]() { // update message information FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (MessageInfo.IsValid()) { MessageInfo->TimeRouted = Timestamp; } }); }
void FMessageTracer::TraceHandledMessage( const IMessageContextRef& Context, const IReceiveMessagesRef& Recipient ) { if (!Running) { return; } double Timestamp = FPlatformTime::Seconds(); Traces.Enqueue([=]() { // look up message & endpoint info FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (!MessageInfo.IsValid()) { return; } FMessageTracerEndpointInfoPtr EndpointInfo = RecipientsToEndpointInfos.FindRef(Recipient->GetRecipientId()); if (!EndpointInfo.IsValid()) { return; } // update message information FMessageTracerDispatchStatePtr DispatchState = MessageInfo->DispatchStates.FindRef(EndpointInfo); if (DispatchState.IsValid()) { DispatchState->TimeHandled = Timestamp; } }); }
void FMessageTracer::TraceInterceptedMessage(const IMessageContextRef& Context, const IMessageInterceptorRef& Interceptor) { if (!Running) { return; } double Timestamp = FPlatformTime::Seconds(); Traces.Enqueue([=]() { // look up message & interceptor info FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (!MessageInfo.IsValid()) { return; } MessageInfo->Intercepted = true; FMessageTracerInterceptorInfoPtr InterceptorInfo = Interceptors.FindRef(Interceptor->GetInterceptorId()); if (!InterceptorInfo.IsValid()) { return; } // update interceptor information InterceptorInfo->InterceptedMessages.Add(MessageInfo); }); }
void FMessageTracer::ProcessRoutedMessage( IMessageContextRef Context, double TimeSeconds ) { // update message information FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (MessageInfo.IsValid()) { MessageInfo->TimeRouted = TimeSeconds; } }
void SMessagingMessageData::HandleModelSelectedMessageChanged( ) { FMessageTracerMessageInfoPtr SelectedMessage = Model->GetSelectedMessage(); if (SelectedMessage.IsValid() && SelectedMessage->Context.IsValid()) { // @todo gmp: add support for displaying UScriptStructs in details view } else { DetailsView->SetObject(nullptr); } }
void FMessageTracer::TraceDispatchedMessage(const IMessageContextRef& Context, const IReceiveMessagesRef& Recipient, bool Async) { if (!Running) { return; } double Timestamp = FPlatformTime::Seconds(); Traces.Enqueue([=]() { // look up message & endpoint info FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (!MessageInfo.IsValid()) { return; } FMessageTracerEndpointInfoPtr& EndpointInfo = RecipientsToEndpointInfos.FindOrAdd(Recipient->GetRecipientId()); if (!EndpointInfo.IsValid()) { return; } // update message information FMessageTracerDispatchStateRef DispatchState = MakeShareable(new FMessageTracerDispatchState()); { DispatchState->DispatchLatency = Timestamp - MessageInfo->TimeSent; DispatchState->DispatchType = Async ? EMessageTracerDispatchTypes::TaskGraph : EMessageTracerDispatchTypes::Direct; DispatchState->EndpointInfo = EndpointInfo; DispatchState->RecipientThread = Recipient->GetRecipientThread(); DispatchState->TimeDispatched = Timestamp; DispatchState->TimeHandled = 0.0; } MessageInfo->DispatchStates.Add(EndpointInfo, DispatchState); // update database EndpointInfo->ReceivedMessages.Add(MessageInfo); }); }
void FMessageTracer::ProcessHandledMessage( IMessageContextRef Context, double TimeSeconds, FGuid RecipientId ) { FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context); if (!MessageInfo.IsValid()) { return; } FMessageTracerEndpointInfoPtr EndpointInfo = RecipientsToEndpointInfos.FindRef(RecipientId); if (!EndpointInfo.IsValid()) { return; } // update message information FMessageTracerDispatchStatePtr DispatchState = MessageInfo->DispatchStates.FindRef(EndpointInfo); if (DispatchState.IsValid()) { DispatchState->TimeHandled = TimeSeconds; } }