Exemple #1
0
    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;
      }
    }
Exemple #2
0
        private ContextMenuStrip GetRightClickMenu(MemTreeNode node)
        {
            if (node == null || node.Icon != "symbol")
            {
                return(null);
            }

            return(m_SymbolContextMenu);
        }
Exemple #3
0
 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;
 }
Exemple #4
0
 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;
 }
Exemple #5
0
    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;
    }
Exemple #6
0
        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);
        }
Exemple #7
0
 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);
     }
   }
 }
Exemple #8
0
 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);
         }
     }
 }
Exemple #9
0
        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();
        }
Exemple #10
0
        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;
            }
        }
Exemple #11
0
 public MemTreeNode(MemTreeNode parent, string key)
 {
   Parent = parent;
   Key = key;
 }
Exemple #12
0
 public void SetRoot(MemTreeNode root)
 {
   m_TreeList.Roots = new object[] { root };
   m_TreeList.RebuildAll(true);
   m_TreeList.Expand(root);
 }
Exemple #13
0
 public MemTreeNode(MemTreeNode parent, string key)
 {
     Parent = parent;
     Key    = key;
 }
Exemple #14
0
    private ContextMenuStrip GetRightClickMenu(MemTreeNode node)
    {
      if (node == null || node.Icon != "symbol")
        return null;

      return m_SymbolContextMenu;
    }
Exemple #15
0
    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();
    }
Exemple #16
0
        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);
        }