protected void BuildBackTraceNodes(StackBackTrace backtrace, ref MemTreeNode leaf, bool reverse) { var frames = backtrace.Frames; int start, end, dir; if (reverse) { start = 0; end = frames.Count - 1; dir = 1; } else { start = frames.Count - 1; end = 0; dir = -1; } for (int i = start; i != end; i += dir) { var frame = frames[i]; var name = frame.Symbol; var filename = frame.FileName; var lineno = frame.LineNumber; if (SuppressedSymbols.Contains(name)) continue; leaf = leaf.GetChild(name); leaf.Icon = "symbol"; leaf.FileName = filename; leaf.LineNumber = lineno; } }
private ContextMenuStrip GetRightClickMenu(MemTreeNode node) { if (node == null || node.Icon != "symbol") { return(null); } return(m_SymbolContextMenu); }
private void OnTreeUpdated(MemTreeNode root) { m_HeapTree.SetRoot(root); m_StripStatus.Text = "Ready"; m_ReplayProgress.Value = 0; m_RefreshButton.Enabled = true; m_StartTimeControl.Enabled = true; m_EndTimeControl.Enabled = true; }
public MemTreeNode GetChild(string key) { MemTreeNode child; if (m_Children.TryGetValue(key, out child)) return child; child = new MemTreeNode(this, key); m_Children.Add(key, child); return child; }
public MemTreeNode GetChild(string key) { MemTreeNode child; if (m_Children.TryGetValue(key, out child)) { return(child); } child = new MemTreeNode(this, key); m_Children.Add(key, child); return(child); }
protected TreeBuilderBase(TraceReplayStateful replay, TraceReplayStateful.StatusDelegate status_delegate, TreePerspective perspective, Options options) { Replay = replay; StatusCallback = status_delegate; Perspective = perspective; Root = new MemTreeNode(null, "Everything"); SuppressedSymbols = new HashSet<string>(); if (options.EnableSuppression) { foreach (var sym in options.SuppressedSymbols) { SuppressedSymbols.Add(sym); } } }
protected TreeBuilderBase(TraceReplayStateful replay, TraceReplayStateful.StatusDelegate status_delegate, TreePerspective perspective, Options options) { Replay = replay; StatusCallback = status_delegate; Perspective = perspective; Root = new MemTreeNode(null, "Everything"); SuppressedSymbols = new HashSet <string>(); if (options.EnableSuppression) { foreach (var sym in options.SuppressedSymbols) { SuppressedSymbols.Add(sym); } } }
private void OnTreeUpdated(MemTreeNode root) { m_HeapTree.SetRoot(root); m_StripStatus.Text = "Ready"; m_ReplayProgress.Value = 0; m_RefreshButton.Enabled = true; m_TimeControl.Enabled = true; string selected_name = null; if (m_HeapCombo.SelectedItem != null) { selected_name = ((HeapComboItem)m_HeapCombo.SelectedItem).Name; } // Update heap combo box. m_HeapCombo.Items.Clear(); object new_sel_item = null; foreach (var heap in m_Trace.Heaps.Values) { int r = 1; foreach (var range in heap.CoreRanges) { var item = new HeapComboItem { Name = String.Format("{0} (R:{1})", heap.Name, r++), StartAddress = range.BaseAddress, EndAddress = range.BaseAddress + range.SizeBytes, }; m_HeapCombo.Items.Add(item); if (null != selected_name && item.Name == selected_name) { new_sel_item = item; } } } if (new_sel_item != null) { m_HeapCombo.SelectedItem = new_sel_item; } m_FragWidget.OnRangeUpdated(); }
protected void BuildBackTraceNodes(StackBackTrace backtrace, ref MemTreeNode leaf, bool reverse) { var frames = backtrace.Frames; int start, end, dir; if (reverse) { start = 0; end = frames.Count - 1; dir = 1; } else { start = frames.Count - 1; end = 0; dir = -1; } for (int i = start; i != end; i += dir) { var frame = frames[i]; var name = frame.Symbol; var filename = frame.FileName; var lineno = frame.LineNumber; if (SuppressedSymbols.Contains(name)) { continue; } leaf = leaf.GetChild(name); leaf.Icon = "symbol"; leaf.FileName = filename; leaf.LineNumber = lineno; } }
public MemTreeNode(MemTreeNode parent, string key) { Parent = parent; Key = key; }
public void SetRoot(MemTreeNode root) { m_TreeList.Roots = new object[] { root }; m_TreeList.RebuildAll(true); m_TreeList.Expand(root); }
private ContextMenuStrip GetRightClickMenu(MemTreeNode node) { if (node == null || node.Icon != "symbol") return null; return m_SymbolContextMenu; }
protected void UpdateTree(HeapAllocationInfo info) { MemTreeNode leaf = Root; var heap = info.Heap; var stack = info.BackTrace; var scope = (EventScope)info.ScopeType; var scope_data = info.ScopeData; foreach (var axis in Perspective.Axes) { switch (axis) { case TreeAxis.Heap: leaf = leaf.GetChild(heap != null ? heap.Name : "(unknown heap)"); leaf.Icon = "heap"; break; case TreeAxis.CallStackReverse: BuildBackTraceNodes(stack, ref leaf, true); break; case TreeAxis.CallStack: BuildBackTraceNodes(stack, ref leaf, false); break; case TreeAxis.FileName: for (int i = stack.Frames.Count - 1; i >= 0; --i) { var frame = stack.Frames[i]; if (SuppressedSymbols.Contains(frame.Symbol)) { continue; } leaf = leaf.GetChild(Path.GetFileName(frame.FileName)); leaf.Icon = "file"; leaf.FileName = frame.FileName; leaf.LineNumber = frame.LineNumber; } break; case TreeAxis.AssetPath: if (scope == EventScope.Asset) { string[] elems = scope_data.Split('\\', '/'); for (int i = 0; i < elems.Length - 1; ++i) { leaf = leaf.GetChild(elems[i]); leaf.Icon = "folder"; } leaf = leaf.GetChild(elems[elems.Length - 1]); leaf.Icon = "asset"; } else { leaf = leaf.GetChild("(no asset)"); } break; case TreeAxis.AssetType: if (scope == EventScope.Asset) { leaf = leaf.GetChild(Path.GetExtension(scope_data)); leaf.Icon = "asset"; } else { leaf = leaf.GetChild("(no asset)"); } break; case TreeAxis.ComponentType: if (scope == EventScope.Component) { leaf = leaf.GetChild(scope_data); leaf.Icon = "component"; } else { leaf = leaf.GetChild("(no component)"); } break; } } do { leaf.SizeBytes += (long)info.SizeBytes; leaf.Count += 1; leaf = leaf.Parent; } while (leaf != null); }