public TreeNode GetCalleeTreeNode(string name, string path = "")
        {
            lock (this.lockobj)
            {
                CallTreeNodeBase node = this.GetNode(name).BackingNode;
                TreeNode         calleeTreeNode;

                if (this.calleeTreeCache.ContainsKey(node))
                {
                    calleeTreeNode = this.calleeTreeCache[node];
                }
                else
                {
                    calleeTreeNode = new TreeNode(AggregateCallTreeNode.CalleeTree(node));
                    this.calleeTreeCache.Add(node, calleeTreeNode);
                }

                if (string.IsNullOrEmpty(path))
                {
                    return(calleeTreeNode);
                }

                var pathArr      = path.Split('/');
                var pathNodeRoot = calleeTreeNode.Children[int.Parse(pathArr[0])];

                for (int i = 1; i < pathArr.Length; ++i)
                {
                    pathNodeRoot = pathNodeRoot.Children[int.Parse(pathArr[i])];
                }

                return(pathNodeRoot);
            }
        }
Exemple #2
0
        public async ValueTask <TreeNode> GetCalleeTreeNode(string name, string path = "")
        {
            if (name == null)
            {
                ThrowHelper.ThrowArgumentNullException(nameof(name));
            }

            await this.EnsureInitialized();

            var t = this.tuple;

            var node = this.GetNodeInner(name, t);

            lock (this.lockObj)
            {
                CallTreeNodeBase backingNode = node.BackingNode;
                TreeNode         calleeTreeNode;

                var c = t.CalleeTreeCache;

                if (c.ContainsKey(backingNode))
                {
                    calleeTreeNode = c[backingNode];
                }
                else
                {
                    calleeTreeNode = new TreeNode(AggregateCallTreeNode.CalleeTree(backingNode));
                    c.Add(backingNode, calleeTreeNode);
                }

                if (string.IsNullOrEmpty(path))
                {
                    return(calleeTreeNode);
                }

                var pathArr      = path.Split('/');
                var pathNodeRoot = calleeTreeNode.Children[int.Parse(pathArr[0])];

                for (int i = 1; i < pathArr.Length; ++i)
                {
                    pathNodeRoot = pathNodeRoot.Children[int.Parse(pathArr[i])];
                }

                return(pathNodeRoot);
            }
        }
Exemple #3
0
        /// <summary>
        /// Get the set of callee nodes for a specified symbol.
        /// </summary>
        /// <param name="symbolName">The symbol.</param>
        public CallTreeNode GetCallees(string symbolName)
        {
            var focusNode = FindNodeByName(symbolName);

            return(AggregateCallTreeNode.CalleeTree(focusNode));
        }
Exemple #4
0
        public CallTreeNode GetCallers(string focusNodeName)
        {
            var focusNode = FindNodeByName(focusNodeName);

            return(AggregateCallTreeNode.CallerTree(focusNode));
        }