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
        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 #3
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);
        }