private bool FindEventNode(ref TreelistView.Node found, TreelistView.NodeCollection nodes, UInt32 eventID) { foreach (var n in nodes) { DeferredEvent ndef = n.Tag is DeferredEvent ? n.Tag as DeferredEvent : null; DeferredEvent fdef = found != null && found.Tag is DeferredEvent ? found.Tag as DeferredEvent : null; if (ndef != null) { if (ndef.eventID >= eventID && (found == null || ndef.eventID <= fdef.eventID)) { found = n; } if (ndef.eventID == eventID && n.Nodes.Count == 0) { return(true); } } if (n.Nodes.Count > 0) { bool exact = FindEventNode(ref found, n.Nodes, eventID); if (exact) { return(true); } } } return(false); }
public bool BroadcastEvent(Type t, GameEvent e) { Listener[] listeners = FindListenerByType(t).ToArray(); if (listeners.Length > 0) { foreach (Listener l in listeners) { //print("BROADCASTING TO LISTENER" + l.ObjectId.ToString()); l.Callback(e); } return(true); } else { if (e.EventDeferralDelay > 0 && !DeferredEvents.Exists(d => d.Type == t)) { //print("Deferring an event of type: " + t.ToString() + " - " + e.ToString()); DeferredEvent dE = new DeferredEvent(); dE.Event = e; dE.Type = t; dE.Delay = 0; DeferredEvents.Add(dE); } } return(false); //print("Broadcasting event " + t.ToString() + " to " + listeners.Length + " listeners."); }
private void toggleBookmark_Click(object sender, EventArgs e) { DeferredEvent def = eventView.SelectedNode.Tag as DeferredEvent; if (def != null) { ToggleBookmark(def.eventID); } }
private void eventView_AfterSelect(object sender, TreeViewEventArgs e) { if (eventView.SelectedNode.Tag != null) { DeferredEvent def = eventView.SelectedNode.Tag as DeferredEvent; m_Core.SetEventID(this, def.eventID); } HighlightBookmarks(); }
private void ToggleBookmark(UInt32 EID) { int index = m_Bookmark.IndexOf(EID); TreelistView.Node found = null; FindEventNode(ref found, eventView.Nodes[0].Nodes, m_Core.CurFrame, EID); while (found.NextSibling != null && found.NextSibling.Tag is DeferredEvent) { DeferredEvent def = found.NextSibling.Tag as DeferredEvent; if (def.eventID == EID) { found = found.NextSibling; } else { break; } } if (index >= 0) { bookmarkStrip.Items.Remove(m_BookmarkButtons[index]); m_Bookmark.RemoveAt(index); m_BookmarkButtons.RemoveAt(index); found.Image = null; } else { ToolStripButton but = new ToolStripButton(); but.DisplayStyle = ToolStripItemDisplayStyle.Text; but.Name = "bookmarkButton" + EID.ToString(); but.Text = EID.ToString(); but.Tag = EID; but.Size = new Size(23, 22); but.Click += new EventHandler(this.bookmarkButton_Click); but.Checked = true; bookmarkStrip.Items.Add(but); found.Image = global::renderdocui.Properties.Resources.asterisk_orange; m_Bookmark.Add(EID); m_BookmarkButtons.Add(but); } bookmarkStrip.Visible = m_BookmarkButtons.Count > 0; eventView.Invalidate(); }
private uint GetNodeEventID(TreelistView.Node n) { DeferredEvent def = n.Tag as DeferredEvent; if (def != null) { return(def.eventID); } return(0); }
public void WhenBeginAndEndDeferredEventsDontMatchUp_HandleDeferredEventsStream_ThrowsException() { BuildLog log = new BuildLog(); DeferredEvent startEvent = new DeferredEvent() { Type = DeferredEventType.Begin }; List <DeferredEvent> events = new List <DeferredEvent>() { startEvent }; Assert.Throws <Exception>(() => log.HandleDeferredEventStreamInternal(events)); }
private void SetDrawcallTimes(TreelistView.Node n, Dictionary <uint, List <CounterResult> > times) { if (n == null || times == null) { return; } // parent nodes take the value of the sum of their children double duration = 0.0; // look up leaf nodes in the dictionary if (n.Nodes.IsEmpty()) { uint eid = GetNodeEventID(n); DeferredEvent def = n.Tag as DeferredEvent; if (def != null && def.marker) { duration = -1.0; } else if (times.ContainsKey(eid)) { duration = times[eid][0].value.d; } else { duration = -1.0; } n["Duration"] = duration; return; } for (int i = 0; i < n.Nodes.Count; i++) { SetDrawcallTimes(n.Nodes[i], times); double nd = (double)n.Nodes[i]["Duration"]; if (nd > 0.0) { duration += nd; } } n["Duration"] = duration; }
public void WhenDeferredEventsAreOnlyInfoTypes_HandleDeferredEventsStream_CreatesLogEntry() { BuildLog log = new BuildLog(); DeferredEvent infoEvent = new DeferredEvent() { Name = "Info", Type = DeferredEventType.Info }; List <DeferredEvent> events = new List <DeferredEvent>() { infoEvent }; log.HandleDeferredEventStreamInternal(events); Assert.AreEqual(infoEvent.Name, log.Root.Entries[0].Message); }
private void eventView_AfterSelect(object sender, TreeViewEventArgs e) { if (eventView.SelectedNode.Tag != null) { DeferredEvent def = eventView.SelectedNode.Tag as DeferredEvent; if (def.defCtx != ResourceId.Null) { m_Core.SetContextFilter(this, 0, def.eventID, def.defCtx, def.firstDefEv, def.lastDefEv); } else { m_Core.SetEventID(this, 0, def.eventID); } } }
public void OnLogfileLoaded() { FetchFrameInfo[] frameList = m_Core.FrameInfo; findEventButton.Enabled = true; jumpEventButton.Enabled = true; timeDraws.Enabled = true; toggleBookmark.Enabled = true; ClearBookmarks(); eventView.BeginUpdate(); eventView.Nodes.Clear(); m_FrameNodes.Clear(); for (int curFrame = 0; curFrame < frameList.Length; curFrame++) { TreelistView.Node frame = eventView.Nodes.Add(MakeMarker("Frame #" + frameList[curFrame].frameNumber.ToString())); m_FrameNodes.Add(frame); } eventView.EndUpdate(); for (int curFrame = 0; curFrame < frameList.Length; curFrame++) { AddFrameDrawcalls(m_FrameNodes[curFrame], m_Core.GetDrawcalls((UInt32)curFrame)); } if (frameList.Length > 0) { // frame 1 -> event 1 TreelistView.Node node = eventView.Nodes[0].Nodes[0]; ExpandNode(node); DeferredEvent evt = eventView.Nodes[0].Nodes.LastNode.Tag as DeferredEvent; m_Core.SetEventID(null, evt.frameID, evt.eventID + 1); eventView.NodesSelection.Clear(); eventView.NodesSelection.Add(eventView.Nodes[0]); eventView.FocusedNode = eventView.Nodes[0]; } }
public void WhenBeginAndEndDeferredEventsMatchUp_HandleDeferredEventsStream_CreatesLogEvents() { BuildLog log = new BuildLog(); DeferredEvent startEvent = new DeferredEvent() { Name = "Start", Type = DeferredEventType.Begin }; DeferredEvent endEvent = new DeferredEvent() { Name = "End", Type = DeferredEventType.End }; List <DeferredEvent> events = new List <DeferredEvent>() { startEvent, endEvent }; log.HandleDeferredEventStreamInternal(events); Assert.AreEqual(startEvent.Name, log.Root.Children[0].Name); }
public void OnLogfileLoaded() { findEventButton.Enabled = true; jumpEventButton.Enabled = true; timeDraws.Enabled = true; toggleBookmark.Enabled = true; export.Enabled = true; prevDraw.Enabled = false; nextDraw.Enabled = false; ClearBookmarks(); eventView.BeginUpdate(); eventView.Nodes.Clear(); { m_FrameNode = eventView.Nodes.Add(MakeMarker("Frame #" + m_Core.FrameInfo.frameNumber.ToString())); AddFrameDrawcalls(m_FrameNode, m_Core.GetDrawcalls()); } eventView.EndUpdate(); { // frame 1 -> event 1 TreelistView.Node node = eventView.Nodes[0].Nodes[0]; ExpandNode(node); DeferredEvent evt = eventView.Nodes[0].Nodes.LastNode.Tag as DeferredEvent; m_Core.SetEventID(null, evt.eventID + 1); m_FrameNode.Tag = evt; eventView.NodesSelection.Clear(); eventView.NodesSelection.Add(eventView.Nodes[0]); eventView.FocusedNode = eventView.Nodes[0]; } }
private bool FindEventNode(ref TreelistView.Node found, UInt32 eventID) { bool ret = FindEventNode(ref found, eventView.Nodes[0].Nodes, eventID); while (found != null && found.NextSibling != null && found.NextSibling.Tag is DeferredEvent) { DeferredEvent def = found.NextSibling.Tag as DeferredEvent; if (def.eventID == eventID) { found = found.NextSibling; } else { break; } } return(ret); }
private void AddFrameDrawcalls(TreelistView.Node frame, FetchDrawcall[] drawcalls) { eventView.BeginUpdate(); frame["Duration"] = -1.0; DeferredEvent startEv = new DeferredEvent(); startEv.eventID = 0; frame.Nodes.Clear(); frame.Nodes.Add(MakeNode(0, 0, "Frame Start", -1.0)).Tag = startEv; for (int i = 0; i < drawcalls.Length; i++) { AddDrawcall(drawcalls[i], frame); } frame.Tag = frame.Nodes.LastNode.Tag; eventView.EndUpdate(); }
void FixedUpdate() { //print("Deferred Events: " + DeferredEvents.Count); for (int i = 0; i < DeferredEvents.Count; i++) { DeferredEvent dE = DeferredEvents[i]; if (BroadcastEvent(dE.Type, dE.Event)) { DeferredEvents.Remove(dE); } else if (dE.Delay < dE.Event.EventDeferralDelay) { dE.Delay += Time.fixedDeltaTime; if (dE.Delay >= dE.Event.EventDeferralDelay) { //print("Discarding a deferred event for passing limit: " + dE.Type.ToString()); DeferredEvents.Remove(dE); } } } }
private int FindEvent(TreelistView.NodeCollection nodes, string filter, UInt32 after, bool forward) { if (nodes == null) { return(-1); } for (int i = forward ? 0 : nodes.Count - 1; i >= 0 && i < nodes.Count; i += forward ? 1 : -1) { var n = nodes[i]; if (n.Tag is DeferredEvent) { DeferredEvent def = n.Tag as DeferredEvent; bool matchesAfter = (forward && def.eventID > after) || (!forward && def.eventID < after); if (matchesAfter && n["Name"].ToString().ToUpperInvariant().Contains(filter)) { return((int)def.eventID); } } if (n.Nodes.Count > 0) { int found = FindEvent(n.Nodes, filter, after, forward); if (found > 0) { return(found); } } } return(-1); }
private void AddFrameDrawcalls(TreelistView.Node frame, FetchDrawcall[] drawcalls) { eventView.BeginUpdate(); frame["Duration"] = -1.0; DeferredEvent startEv = new DeferredEvent(); startEv.frameID = m_Core.CurFrame; startEv.eventID = 0; if (frame.Nodes.Count == 0) { frame.Nodes.Add(MakeNode(0, 0, "Frame Start", -1.0)).Tag = startEv; } for (int i = 0; i < drawcalls.Length; i++) { TreelistView.Node d = frame.Nodes.Count > (i + 1) ? frame.Nodes[i + 1] : null; TreelistView.Node newD = AddDrawcall(d, drawcalls[i], frame); if (newD != null) { d = newD; if ((double)d["Duration"] > 0.0) { frame["Duration"] = Math.Max(0.0, (double)frame["Duration"]) + (double)d["Duration"]; } } } frame.Tag = frame.Nodes.LastNode.Tag; eventView.EndUpdate(); }
private void eventView_AfterSelect(object sender, TreeViewEventArgs e) { prevDraw.Enabled = false; nextDraw.Enabled = false; if (eventView.SelectedNode.Tag != null) { DeferredEvent def = eventView.SelectedNode.Tag as DeferredEvent; m_Core.SetEventID(this, def.eventID); FetchDrawcall draw = m_Core.CurDrawcall; if (draw != null && draw.previous != null) { prevDraw.Enabled = true; } if (draw != null && draw.next != null) { nextDraw.Enabled = true; } } HighlightBookmarks(); }
private TreelistView.Node AddDrawcall(FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) { return(null); } } UInt32 eventNum = drawcall.eventID; TreelistView.Node drawNode = null; if (drawcall.children.Length > 0) { drawNode = MakeNode(eventNum, GetEndEventID(drawcall), drawcall.drawcallID, GetEndDrawID(drawcall), drawcall.name, 0.0); } else { drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, 0.0); } if (m_Core.Config.EventBrowser_ApplyColours) { // if alpha isn't 0, assume the colour is valid if ((drawcall.flags & (DrawcallFlags.PushMarker | DrawcallFlags.SetMarker)) > 0 && drawcall.markerColour[3] > 0.0f) { float red = drawcall.markerColour[0]; float green = drawcall.markerColour[1]; float blue = drawcall.markerColour[2]; float alpha = drawcall.markerColour[3]; drawNode.TreeLineColor = drawcall.GetColor(); drawNode.TreeLineWidth = 3.0f; if (m_Core.Config.EventBrowser_ColourEventRow) { drawNode.BackColor = drawcall.GetColor(); drawNode.ForeColor = drawcall.GetTextColor(eventView.ForeColor); } } } DeferredEvent def = new DeferredEvent(); def.eventID = eventNum; def.marker = (drawcall.flags & DrawcallFlags.SetMarker) != 0; drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { AddDrawcall(drawcall.children[i], drawNode); if (i > 0 && drawNode.Nodes.Count >= 2 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } } bool found = false; for (int i = drawNode.Nodes.Count - 1; i >= 0; i--) { DeferredEvent t = drawNode.Nodes[i].Tag as DeferredEvent; if (t != null && !t.marker) { drawNode.Tag = drawNode.Nodes[i].Tag; found = true; break; } } if (!found && !drawNode.Nodes.IsEmpty()) { drawNode.Tag = drawNode.Nodes.LastNode.Tag; } } if (drawNode.Nodes.IsEmpty() && (drawcall.flags & DrawcallFlags.PushMarker) != 0 && m_Core.Config.EventBrowser_HideEmpty) { return(null); } root.Nodes.Add(drawNode); return(drawNode); }
private TreelistView.Node AddDrawcall(TreelistView.Node existing, FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) { return(null); } } UInt32 eventNum = drawcall.eventID; double duration = drawcall.duration; TreelistView.Node drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, duration); if (existing != null) { existing.SetData(drawNode.GetData()); drawNode = existing; } else { root.Nodes.Add(drawNode); } DeferredEvent def = new DeferredEvent(); def.frameID = m_Core.CurFrame; def.eventID = eventNum; if (drawcall.context != m_Core.FrameInfo[m_Core.CurFrame].immContextId) { def.defCtx = drawcall.context; def.lastDefEv = drawcall.eventID; FetchDrawcall parent = drawcall.parent; while (!parent.name.Contains("ExecuteCommand")) { parent = parent.parent; } def.eventID = parent.eventID - 1; def.firstDefEv = parent.children[0].eventID; if (parent.children[0].events.Length > 0) { def.firstDefEv = parent.children[0].events[0].eventID; } } drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { TreelistView.Node d = drawNode.Nodes.Count > i ? drawNode.Nodes[i] : null; AddDrawcall(d, drawcall.children[i], drawNode); if (i > 0 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } if ((double)drawNode.Nodes[i]["Duration"] > 0.0) { drawNode["Duration"] = Math.Max(0.0, (double)drawNode["Duration"]) + (double)drawNode.Nodes[i]["Duration"]; } } drawNode.Tag = drawNode.Nodes.LastNode.Tag; } return(drawNode); }
private TreelistView.Node AddDrawcall(FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) { return(null); } } UInt32 eventNum = drawcall.eventID; TreelistView.Node drawNode = null; if (drawcall.children.Length > 0) { drawNode = MakeNode(eventNum, GetEndEventID(drawcall), drawcall.drawcallID, drawcall.name, 0.0); } else { drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, 0.0); } DeferredEvent def = new DeferredEvent(); def.eventID = eventNum; def.marker = (drawcall.flags & DrawcallFlags.SetMarker) != 0; if (drawcall.context != m_Core.FrameInfo.immContextId) { def.defCtx = drawcall.context; def.lastDefEv = drawcall.eventID; FetchDrawcall parent = drawcall.parent; while (!parent.name.Contains("ExecuteCommand")) { parent = parent.parent; } def.eventID = parent.eventID - 1; def.firstDefEv = parent.children[0].eventID; if (parent.children[0].events.Length > 0) { def.firstDefEv = parent.children[0].events[0].eventID; } } drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { AddDrawcall(drawcall.children[i], drawNode); if (i > 0 && drawNode.Nodes.Count >= 2 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } } bool found = false; for (int i = drawNode.Nodes.Count - 1; i >= 0; i--) { DeferredEvent t = drawNode.Nodes[i].Tag as DeferredEvent; if (t != null && !t.marker) { drawNode.Tag = drawNode.Nodes[i].Tag; found = true; break; } } if (!found && !drawNode.Nodes.IsEmpty()) { drawNode.Tag = drawNode.Nodes.LastNode.Tag; } } if (drawNode.Nodes.IsEmpty() && (drawcall.flags & DrawcallFlags.PushMarker) != 0 && m_Core.Config.EventBrowser_HideEmpty) { return(null); } root.Nodes.Add(drawNode); return(drawNode); }
private TreelistView.Node AddDrawcall(FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) return null; } UInt32 eventNum = drawcall.eventID; TreelistView.Node drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, 0.0); DeferredEvent def = new DeferredEvent(); def.frameID = m_Core.CurFrame; def.eventID = eventNum; def.marker = (drawcall.flags & DrawcallFlags.SetMarker) != 0; if (drawcall.context != m_Core.FrameInfo[m_Core.CurFrame].immContextId) { def.defCtx = drawcall.context; def.lastDefEv = drawcall.eventID; FetchDrawcall parent = drawcall.parent; while(!parent.name.Contains("ExecuteCommand")) parent = parent.parent; def.eventID = parent.eventID-1; def.firstDefEv = parent.children[0].eventID; if(parent.children[0].events.Length > 0) def.firstDefEv = parent.children[0].events[0].eventID; } drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { AddDrawcall(drawcall.children[i], drawNode); if (i > 0 && drawNode.Nodes.Count >= 2 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } } bool found = false; for (int i = drawNode.Nodes.Count - 1; i >= 0; i--) { DeferredEvent t = drawNode.Nodes[i].Tag as DeferredEvent; if (t != null && !t.marker) { drawNode.Tag = drawNode.Nodes[i].Tag; found = true; break; } } if (!found && !drawNode.Nodes.IsEmpty()) drawNode.Tag = drawNode.Nodes.LastNode.Tag; } if (drawNode.Nodes.IsEmpty() && (drawcall.flags & DrawcallFlags.PushMarker) != 0 && m_Core.Config.EventBrowser_HideEmpty) return null; root.Nodes.Add(drawNode); return drawNode; }
private TreelistView.Node AddDrawcall(FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) return null; } UInt32 eventNum = drawcall.eventID; TreelistView.Node drawNode = null; if(drawcall.children.Length > 0) drawNode = MakeNode(eventNum, GetEndEventID(drawcall), drawcall.drawcallID, drawcall.name, 0.0); else drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, 0.0); if (m_Core.Config.EventBrowser_ApplyColours) { // if alpha isn't 0, assume the colour is valid if ((drawcall.flags & (DrawcallFlags.PushMarker | DrawcallFlags.SetMarker)) > 0 && drawcall.markerColour[3] > 0.0f) { float red = drawcall.markerColour[0]; float green = drawcall.markerColour[1]; float blue = drawcall.markerColour[2]; float alpha = drawcall.markerColour[3]; drawNode.TreeLineColor = drawcall.GetColor(); drawNode.TreeLineWidth = 3.0f; if (m_Core.Config.EventBrowser_ColourEventRow) { drawNode.BackColor = drawcall.GetColor(); if (drawcall.ShouldUseWhiteText()) drawNode.ForeColor = Color.White; } } } DeferredEvent def = new DeferredEvent(); def.eventID = eventNum; def.marker = (drawcall.flags & DrawcallFlags.SetMarker) != 0; if (drawcall.context != m_Core.FrameInfo.immContextId) { def.defCtx = drawcall.context; def.lastDefEv = drawcall.eventID; FetchDrawcall parent = drawcall.parent; while(!parent.name.Contains("ExecuteCommand")) parent = parent.parent; def.eventID = parent.eventID-1; def.firstDefEv = parent.children[0].eventID; if(parent.children[0].events.Length > 0) def.firstDefEv = parent.children[0].events[0].eventID; } drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { AddDrawcall(drawcall.children[i], drawNode); if (i > 0 && drawNode.Nodes.Count >= 2 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } } bool found = false; for (int i = drawNode.Nodes.Count - 1; i >= 0; i--) { DeferredEvent t = drawNode.Nodes[i].Tag as DeferredEvent; if (t != null && !t.marker) { drawNode.Tag = drawNode.Nodes[i].Tag; found = true; break; } } if (!found && !drawNode.Nodes.IsEmpty()) drawNode.Tag = drawNode.Nodes.LastNode.Tag; } if (drawNode.Nodes.IsEmpty() && (drawcall.flags & DrawcallFlags.PushMarker) != 0 && m_Core.Config.EventBrowser_HideEmpty) return null; root.Nodes.Add(drawNode); return drawNode; }
private TreelistView.Node AddDrawcall(TreelistView.Node existing, FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) return null; } UInt32 eventNum = drawcall.eventID; double duration = drawcall.duration; TreelistView.Node drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, duration); if (existing != null) { existing.SetData(drawNode.GetData()); drawNode = existing; } else { root.Nodes.Add(drawNode); } DeferredEvent def = new DeferredEvent(); def.frameID = m_Core.CurFrame; def.eventID = eventNum; if (drawcall.context != m_Core.FrameInfo[m_Core.CurFrame].immContextId) { def.defCtx = drawcall.context; def.lastDefEv = drawcall.eventID; FetchDrawcall parent = drawcall.parent; while(!parent.name.Contains("ExecuteCommand")) parent = parent.parent; def.eventID = parent.eventID-1; def.firstDefEv = parent.children[0].eventID; if(parent.children[0].events.Length > 0) def.firstDefEv = parent.children[0].events[0].eventID; } drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { TreelistView.Node d = drawNode.Nodes.Count > i ? drawNode.Nodes[i] : null; AddDrawcall(d, drawcall.children[i], drawNode); if (i > 0 && (drawcall.children[i-1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } if ((double)drawNode.Nodes[i]["Duration"] > 0.0) drawNode["Duration"] = Math.Max(0.0, (double)drawNode["Duration"]) + (double)drawNode.Nodes[i]["Duration"]; } drawNode.Tag = drawNode.Nodes.LastNode.Tag; } return drawNode; }
private TreelistView.Node AddDrawcall(FetchDrawcall drawcall, TreelistView.Node root) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) return null; } UInt32 eventNum = drawcall.eventID; TreelistView.Node drawNode = null; if(drawcall.children.Length > 0) drawNode = MakeNode(eventNum, GetEndEventID(drawcall), drawcall.drawcallID, GetEndDrawID(drawcall), drawcall.name, 0.0); else drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, 0.0); if (m_Core.Config.EventBrowser_ApplyColours) { // if alpha isn't 0, assume the colour is valid if ((drawcall.flags & (DrawcallFlags.PushMarker | DrawcallFlags.SetMarker)) > 0 && drawcall.markerColour[3] > 0.0f) { float red = drawcall.markerColour[0]; float green = drawcall.markerColour[1]; float blue = drawcall.markerColour[2]; float alpha = drawcall.markerColour[3]; drawNode.TreeLineColor = drawcall.GetColor(); drawNode.TreeLineWidth = 3.0f; if (m_Core.Config.EventBrowser_ColourEventRow) { drawNode.BackColor = drawcall.GetColor(); drawNode.ForeColor = drawcall.GetTextColor(eventView.ForeColor); } } } DeferredEvent def = new DeferredEvent(); def.eventID = eventNum; def.marker = (drawcall.flags & DrawcallFlags.SetMarker) != 0; drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { AddDrawcall(drawcall.children[i], drawNode); if (i > 0 && drawNode.Nodes.Count >= 2 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { DeferredEvent markerTag = drawNode.Nodes[drawNode.Nodes.Count - 2].Tag as DeferredEvent; DeferredEvent drawTag = drawNode.Nodes.LastNode.Tag as DeferredEvent; markerTag.eventID = drawTag.eventID; } } bool found = false; for (int i = drawNode.Nodes.Count - 1; i >= 0; i--) { DeferredEvent t = drawNode.Nodes[i].Tag as DeferredEvent; if (t != null && !t.marker) { drawNode.Tag = drawNode.Nodes[i].Tag; found = true; break; } } if (!found && !drawNode.Nodes.IsEmpty()) drawNode.Tag = drawNode.Nodes.LastNode.Tag; } if (drawNode.Nodes.IsEmpty() && (drawcall.flags & DrawcallFlags.PushMarker) != 0 && m_Core.Config.EventBrowser_HideEmpty) return null; root.Nodes.Add(drawNode); return drawNode; }
private void AddFrameDrawcalls(TreelistView.Node frame, FetchDrawcall[] drawcalls) { eventView.BeginUpdate(); frame["Duration"] = -1.0; DeferredEvent startEv = new DeferredEvent(); startEv.frameID = m_Core.CurFrame; startEv.eventID = 0; if(frame.Nodes.Count == 0) frame.Nodes.Add(MakeNode(0, 0, "Frame Start", -1.0)).Tag = startEv; for (int i = 0; i < drawcalls.Length; i++) { TreelistView.Node d = frame.Nodes.Count > (i + 1) ? frame.Nodes[i + 1] : null; TreelistView.Node newD = AddDrawcall(d, drawcalls[i], frame); if (newD != null) { d = newD; if ((double)d["Duration"] > 0.0) frame["Duration"] = Math.Max(0.0, (double)frame["Duration"]) + (double)d["Duration"]; } } frame.Tag = frame.Nodes.LastNode.Tag; eventView.EndUpdate(); }
private void AddFrameDrawcalls(TreelistView.Node frame, FetchDrawcall[] drawcalls) { eventView.BeginUpdate(); frame["Duration"] = -1.0; DeferredEvent startEv = new DeferredEvent(); startEv.frameID = m_Core.CurFrame; startEv.eventID = 0; frame.Nodes.Clear(); frame.Nodes.Add(MakeNode(0, 0, "Frame Start", -1.0)).Tag = startEv; for (int i = 0; i < drawcalls.Length; i++) AddDrawcall(drawcalls[i], frame); frame.Tag = frame.Nodes.LastNode.Tag; eventView.EndUpdate(); }
private TreelistView.Node AddDrawcall(TreelistView.Node existing, FetchDrawcall drawcall, TreelistView.Node root, Dictionary <uint, List <CounterResult> > times) { if (m_Core.Config.EventBrowser_HideEmpty) { if ((drawcall.children == null || drawcall.children.Length == 0) && (drawcall.flags & DrawcallFlags.PushMarker) != 0) { return(null); } } UInt32 eventNum = drawcall.eventID; double duration = 0.0; if (times != null && times.ContainsKey(eventNum)) { duration = times[eventNum][0].value.d; } TreelistView.Node drawNode = MakeNode(eventNum, drawcall.drawcallID, drawcall.name, duration); if (existing != null) { existing.SetData(drawNode.GetData()); drawNode = existing; } else { root.Nodes.Add(drawNode); } DeferredEvent def = new DeferredEvent(); def.frameID = m_Core.CurFrame; def.eventID = eventNum; def.marker = (drawcall.flags & DrawcallFlags.SetMarker) != 0; if (drawcall.context != m_Core.FrameInfo[m_Core.CurFrame].immContextId) { def.defCtx = drawcall.context; def.lastDefEv = drawcall.eventID; FetchDrawcall parent = drawcall.parent; while (!parent.name.Contains("ExecuteCommand")) { parent = parent.parent; } def.eventID = parent.eventID - 1; def.firstDefEv = parent.children[0].eventID; if (parent.children[0].events.Length > 0) { def.firstDefEv = parent.children[0].events[0].eventID; } } drawNode.Tag = def; if (drawcall.children != null && drawcall.children.Length > 0) { for (int i = 0; i < drawcall.children.Length; i++) { TreelistView.Node d = drawNode.Nodes.Count > i ? drawNode.Nodes[i] : null; AddDrawcall(d, drawcall.children[i], drawNode, times); if (i > 0 && (drawcall.children[i - 1].flags & DrawcallFlags.SetMarker) > 0) { drawNode.Nodes[drawNode.Nodes.Count - 2].Tag = drawNode.Nodes.LastNode.Tag; } if (i < drawNode.Nodes.Count && (double)drawNode.Nodes[i]["Duration"] > 0.0) { drawNode["Duration"] = Math.Max(0.0, (double)drawNode["Duration"]) + (double)drawNode.Nodes[i]["Duration"]; } } bool found = false; for (int i = drawNode.Nodes.Count - 1; i >= 0; i--) { DeferredEvent t = drawNode.Nodes[i].Tag as DeferredEvent; if (t != null && !t.marker) { drawNode.Tag = drawNode.Nodes[i].Tag; found = true; break; } } if (!found) { drawNode.Tag = drawNode.Nodes.LastNode.Tag; } } return(drawNode); }