public EventDebuggerTrace(IPanel panel, EventBase evt, long duration, IEventHandler mouseCapture) { eventBase = new EventDebuggerEventRecord(evt); focusedElement = panel?.focusController?.focusedElement; this.mouseCapture = mouseCapture; this.duration = duration; }
public EventLogLine(int lineNumber, string timestamp = "", string eventName = "", string target = "", EventDebuggerEventRecord eventBase = null) { this.lineNumber = lineNumber; this.timestamp = timestamp; this.eventName = eventName; this.target = target; this.eventBase = eventBase; }
void OnEventsLogSelectionChanged(object obj) { if (m_SelectedEvents == null) { m_SelectedEvents = new List <EventLogLine>(); } m_SelectedEvents.Clear(); var list = obj as List <object>; if (list != null) { foreach (EventLogLine listItem in list) { if (listItem != null) { m_SelectedEvents.Add(listItem); } } } EventDebuggerEventRecord eventBase = null; IEventHandler focused = null; IEventHandler capture = null; if (m_SelectedEvents.Any()) { var line = m_SelectedEvents[0]; var calls = m_Debugger.GetBeginEndProcessedEvents(panel); eventBase = line != null ? calls ? [line.lineNumber - 1].eventBase : null; focused = line != null ? calls ? [line.lineNumber - 1].focusedElement : null; capture = line != null ? calls ? [line.lineNumber - 1].mouseCapture : null; } UpdateSelectionCount(); UpdateReplaySelectedEventsButton(); if (m_SelectedEvents.Count == 1) { UpdateEventCallbacks(eventBase); UpdateEventPropagationPaths(eventBase); UpdateEventbaseInfo(eventBase, focused, capture); } else { ClearEventCallbacks(); ClearEventPropagationPaths(); ClearEventbaseInfo(); } DisplayHistogram(m_EventsHistogramScrollView); // Not working : DisplayTimeline(m_EventTimelineScrollView, m_SelectedVisualTree.panel); }
void UpdateEventPropagationPaths(EventDebuggerEventRecord eventBase) { ClearEventPropagationPaths(); if (eventBase == null) { return; } var propagationPaths = m_Debugger.GetPropagationPaths(panel, eventBase); if (propagationPaths == null) { return; } foreach (EventDebuggerPathTrace propagationPath in propagationPaths) { if (propagationPath?.paths == null) { continue; } m_EventPropagationPaths.text += "Trickle Down Path:\n"; var pathsTrickleDownPath = propagationPath.paths?.trickleDownPath; if (pathsTrickleDownPath != null && pathsTrickleDownPath.Any()) { foreach (var trickleDownPathElement in pathsTrickleDownPath) { var trickleDownPathName = trickleDownPathElement.name; if (string.IsNullOrEmpty(trickleDownPathName)) { trickleDownPathName = trickleDownPathElement.GetType().Name; } m_EventPropagationPaths.text += " " + trickleDownPathName + "\n"; } } else { m_EventPropagationPaths.text += " <empty>\n"; } m_EventPropagationPaths.text += "Target list:\n"; var targets = propagationPath.paths.targetElements; if (targets != null && targets.Any()) { foreach (var t in targets) { var targetName = t.name; if (string.IsNullOrEmpty(targetName)) { targetName = t.GetType().Name; } m_EventPropagationPaths.text += " " + targetName + "\n"; } } else { m_EventPropagationPaths.text += " <empty>\n"; } m_EventPropagationPaths.text += "Bubble Up Path:\n"; var pathsBubblePath = propagationPath.paths.bubbleUpPath; if (pathsBubblePath != null && pathsBubblePath.Any()) { foreach (var bubblePathElement in pathsBubblePath) { var bubblePathName = bubblePathElement.name; if (string.IsNullOrEmpty(bubblePathName)) { bubblePathName = bubblePathElement.GetType().Name; } m_EventPropagationPaths.text += " " + bubblePathName + "\n"; } } else { m_EventPropagationPaths.text += " <empty>\n"; } } }
void UpdateEventCallbacks(EventDebuggerEventRecord eventBase) { ClearEventCallbacks(); if (eventBase == null) { return; } var callbacks = m_Debugger.GetCalls(panel, eventBase); if (callbacks != null) { foreach (EventDebuggerCallTrace callback in callbacks) { VisualElement container = new VisualElement { name = "line-container" }; Label timeStamp = new Label { name = "timestamp" }; Label handler = new Label { name = "handler" }; Label phaseDurationContainer = new Label { name = "phaseDurationContainer" }; Label phase = new Label { name = "phase" }; Label duration = new Label { name = "duration" }; timeStamp.AddToClassList("log-line-item"); handler.AddToClassList("log-line-item"); phaseDurationContainer.AddToClassList("log-line-item"); timeStamp.text = "[" + eventBase.TimestampString() + "]"; handler.text = callback.callbackName; if (callback.immediatePropagationHasStopped) { handler.text += " Immediately Stopped Propagation"; } else if (callback.propagationHasStopped) { handler.text += " Stopped Propagation"; } if (callback.defaultHasBeenPrevented) { handler.text += " (Default Prevented)"; } phase.text = callback.eventBase.propagationPhase.ToString(); duration.text = "Duration: " + callback.duration / 1000f + "ms"; container.Add(timeStamp); container.Add(handler); phaseDurationContainer.Add(phase); phaseDurationContainer.Add(duration); container.Add(phaseDurationContainer); m_EventCallbacksScrollView.Add(container); var hash = callback.callbackHashCode; HighlightCodeline(hash); } } var defaultActions = m_Debugger.GetDefaultActions(panel, eventBase); if (defaultActions == null) { return; } foreach (EventDebuggerDefaultActionTrace defaultAction in defaultActions) { VisualElement container = new VisualElement { name = "line-container" }; Label timeStamp = new Label { name = "timestamp" }; Label handler = new Label { name = "handler" }; Label phaseDurationContainer = new Label { name = "phaseDurationContainer" }; Label phase = new Label { name = "phase" }; Label duration = new Label { name = "duration" }; timeStamp.AddToClassList("log-line-item"); handler.AddToClassList("log-line-item"); phaseDurationContainer.AddToClassList("log-line-item"); timeStamp.text = "[" + eventBase.TimestampString() + "]"; handler.text = defaultAction.targetName + "." + (defaultAction.phase == PropagationPhase.AtTarget ? "ExecuteDefaultActionAtTarget" : "ExecuteDefaultAction"); duration.text = "Duration: " + defaultAction.duration / 1000f + "ms"; container.Add(timeStamp); container.Add(handler); phaseDurationContainer.Add(phase); phaseDurationContainer.Add(duration); container.Add(phaseDurationContainer); m_EventCallbacksScrollView.Add(container); } }
void UpdateEventbaseInfo(EventDebuggerEventRecord eventBase, IEventHandler focused, IEventHandler capture) { ClearEventbaseInfo(); if (eventBase == null) { return; } m_EventbaseInfo.text += "Focused element: " + EventDebugger.GetObjectDisplayName(focused) + "\n"; m_EventbaseInfo.text += "Capture element: " + EventDebugger.GetObjectDisplayName(capture) + "\n"; if (eventBase.eventTypeId == MouseMoveEvent.TypeId() || eventBase.eventTypeId == MouseOverEvent.TypeId() || eventBase.eventTypeId == MouseOutEvent.TypeId() || eventBase.eventTypeId == MouseDownEvent.TypeId() || eventBase.eventTypeId == MouseUpEvent.TypeId() || eventBase.eventTypeId == MouseEnterEvent.TypeId() || eventBase.eventTypeId == MouseLeaveEvent.TypeId() || eventBase.eventTypeId == DragEnterEvent.TypeId() || eventBase.eventTypeId == DragLeaveEvent.TypeId() || eventBase.eventTypeId == DragUpdatedEvent.TypeId() || eventBase.eventTypeId == DragPerformEvent.TypeId() || eventBase.eventTypeId == DragExitedEvent.TypeId() || eventBase.eventTypeId == ContextClickEvent.TypeId() || eventBase.eventTypeId == PointerMoveEvent.TypeId() || eventBase.eventTypeId == PointerOverEvent.TypeId() || eventBase.eventTypeId == PointerOutEvent.TypeId() || eventBase.eventTypeId == PointerDownEvent.TypeId() || eventBase.eventTypeId == PointerUpEvent.TypeId() || eventBase.eventTypeId == PointerCancelEvent.TypeId() || eventBase.eventTypeId == PointerStationaryEvent.TypeId() || eventBase.eventTypeId == PointerEnterEvent.TypeId() || eventBase.eventTypeId == PointerLeaveEvent.TypeId()) { m_EventbaseInfo.text += "Mouse position: " + eventBase.mousePosition + "\n"; m_EventbaseInfo.text += "Modifiers: " + eventBase.modifiers + "\n"; } if (eventBase.eventTypeId == KeyDownEvent.TypeId() || eventBase.eventTypeId == KeyUpEvent.TypeId()) { m_EventbaseInfo.text += "Modifiers: " + eventBase.modifiers + "\n"; } if (eventBase.eventTypeId == MouseDownEvent.TypeId() || eventBase.eventTypeId == MouseUpEvent.TypeId() || eventBase.eventTypeId == PointerDownEvent.TypeId() || eventBase.eventTypeId == PointerUpEvent.TypeId() || eventBase.eventTypeId == DragUpdatedEvent.TypeId() || eventBase.eventTypeId == DragPerformEvent.TypeId() || eventBase.eventTypeId == DragExitedEvent.TypeId()) { m_EventbaseInfo.text += "Button: " + (eventBase.button == 0 ? "Left" : eventBase.button == 1 ? "Middle" : "Right") + "\n"; m_EventbaseInfo.text += "Click count: " + eventBase.clickCount + "\n"; } if (eventBase.eventTypeId == MouseMoveEvent.TypeId() || eventBase.eventTypeId == MouseOverEvent.TypeId() || eventBase.eventTypeId == MouseOutEvent.TypeId() || eventBase.eventTypeId == MouseDownEvent.TypeId() || eventBase.eventTypeId == MouseUpEvent.TypeId() || eventBase.eventTypeId == MouseEnterEvent.TypeId() || eventBase.eventTypeId == MouseLeaveEvent.TypeId() || eventBase.eventTypeId == DragEnterEvent.TypeId() || eventBase.eventTypeId == DragLeaveEvent.TypeId() || eventBase.eventTypeId == DragUpdatedEvent.TypeId() || eventBase.eventTypeId == DragPerformEvent.TypeId() || eventBase.eventTypeId == DragExitedEvent.TypeId() || eventBase.eventTypeId == ContextClickEvent.TypeId() || eventBase.eventTypeId == WheelEvent.TypeId() || eventBase.eventTypeId == PointerMoveEvent.TypeId() || eventBase.eventTypeId == PointerOverEvent.TypeId() || eventBase.eventTypeId == PointerOutEvent.TypeId() || eventBase.eventTypeId == PointerDownEvent.TypeId() || eventBase.eventTypeId == PointerUpEvent.TypeId() || eventBase.eventTypeId == PointerCancelEvent.TypeId() || eventBase.eventTypeId == PointerStationaryEvent.TypeId() || eventBase.eventTypeId == PointerEnterEvent.TypeId() || eventBase.eventTypeId == PointerLeaveEvent.TypeId()) { m_EventbaseInfo.text += "Pressed buttons: " + eventBase.pressedButtons + "\n"; } if (eventBase.eventTypeId == WheelEvent.TypeId()) { m_EventbaseInfo.text += "Mouse delta: " + eventBase.delta + "\n"; } if (eventBase.eventTypeId == KeyDownEvent.TypeId() || eventBase.eventTypeId == KeyUpEvent.TypeId()) { if (char.IsControl(eventBase.character)) { m_EventbaseInfo.text += "Character: \\" + (byte)(eventBase.character) + "\n"; } else { m_EventbaseInfo.text += "Character: " + eventBase.character + "\n"; } m_EventbaseInfo.text += "Key code: " + eventBase.keyCode + "\n"; } if (eventBase.eventTypeId == ValidateCommandEvent.TypeId() || eventBase.eventTypeId == ExecuteCommandEvent.TypeId()) { m_EventbaseInfo.text += "Command: " + eventBase.commandName + "\n"; } }