void OnDxgkrnlDmaPacketStop(TraceEvent obj) { Debug.Assert(obj.EventName == "DmaPacket/Stop"); Debug.Assert(obj.PayloadNames[0] == "hContext"); ulong hContext = (ulong)obj.PayloadValue(0); Debug.Assert(obj.PayloadNames[1] == "PacketType"); int packetType = (int)obj.PayloadValue(1); Debug.Assert(obj.PayloadNames[2] == "uliCompletionId"); long submissionId = (long)obj.PayloadValue(2); Debug.Assert(obj.PayloadNames[3] == "ulQueueSubmitSequence"); int queueSubmitSequence = (int)obj.PayloadValue(3); ContextInfo context = FindOrCreateContext(hContext); DmaPacket packet = null; if (!context.DmaLookup.ContainsKey(submissionId)) { // End packet for something we don't about, drop it return; } packet = context.DmaLookup[submissionId]; packet.End = obj.TimeStamp; }
void OnDxgkrnlDmaPacketStart(TraceEvent obj) { Debug.Assert(obj.EventName == "DmaPacket/Start" && obj.PayloadNames.Length == 7); Debug.Assert(obj.PayloadNames[0] == "hContext"); ulong hContext = (ulong)obj.PayloadValue(0); Debug.Assert(obj.PayloadNames[2] == "PacketType"); int packetType = (int)obj.PayloadValue(2); Debug.Assert(obj.PayloadNames[3] == "uliSubmissionId"); long submissionId = (long)obj.PayloadValue(3); Debug.Assert(obj.PayloadNames[4] == "ulQueueSubmitSequence"); int queueSubmitSequence = (int)obj.PayloadValue(4); ContextInfo context = FindOrCreateContext(hContext); DmaPacket packet = null; if (context.DmaLookup.ContainsKey(submissionId)) { packet = context.DmaLookup[submissionId]; } else { packet = new DmaPacket(); packet.SubmissionId = submissionId; packet.QueueSubmitSequence = queueSubmitSequence; packet.PacketType = packetType; context.DmaPackets.Add(packet); context.DmaLookup.Add(submissionId, packet); } packet.Start = obj.TimeStamp; }