Chromium Code Reviews| Index: runtime/observatory/lib/src/elements/cpu_profile.dart |
| diff --git a/runtime/observatory/lib/src/elements/cpu_profile.dart b/runtime/observatory/lib/src/elements/cpu_profile.dart |
| index ed7651b980dafb4b11bd673adf9ba9aea289e66b..7652a4b1de31272bb8c20cc98d943fd1e76f80ea 100644 |
| --- a/runtime/observatory/lib/src/elements/cpu_profile.dart |
| +++ b/runtime/observatory/lib/src/elements/cpu_profile.dart |
| @@ -521,14 +521,6 @@ class CpuProfileElement extends ObservatoryElement { |
| Future _getCpuProfile() async { |
| profile.clear(); |
| - if (functionTree != null) { |
| - functionTree.clear(); |
| - functionTree = null; |
| - } |
| - if (codeTree != null) { |
| - codeTree.clear(); |
| - codeTree = null; |
| - } |
| if (isolate == null) { |
| return new Future.value(null); |
| } |
| @@ -565,52 +557,20 @@ class CpuProfileElement extends ObservatoryElement { |
| stackDepth = profile.stackDepth.toString(); |
| sampleRate = profile.sampleRate.toStringAsFixed(0); |
| timeSpan = formatTime(profile.timeSpan); |
| - bool exclusive = directionSelector == 'Up'; |
| - if (functionTree != null) { |
| - functionTree.clear(); |
| - functionTree = null; |
| - } |
| - if (codeTree != null) { |
| - codeTree.clear(); |
| - codeTree = null; |
| + CpuProfileTreeElement cpuProfileTreeElement = |
| + shadowRoot.querySelector('#cpuProfileTree'); |
| + ProfileTreeDirection direction = ProfileTreeDirection.Exclusive; |
| + if (directionSelector != 'Up') { |
| + direction = ProfileTreeDirection.Inclusive; |
| } |
|
rmacnak
2015/07/14 17:20:29
else {
direction = ProfileTreeDirection.Exclusiv
Cutch
2015/07/14 20:02:57
Acknowledged.
|
| + ProfileTreeMode mode = ProfileTreeMode.Function; |
| if (modeSelector == 'Code') { |
| - _buildCodeTree(exclusive); |
| - } else { |
| - _buildFunctionTree(exclusive); |
| - } |
| - } |
| - |
| - TableTree codeTree; |
| - TableTree functionTree; |
| - |
| - void _buildFunctionTree(bool exclusive) { |
| - if (functionTree == null) { |
| - var tableBody = shadowRoot.querySelector('#treeBody'); |
| - assert(tableBody != null); |
| - functionTree = new TableTree(tableBody, 2); |
| - } |
| - var tree = profile.loadFunctionTree(exclusive ? 'exclusive' : 'inclusive'); |
| - if (tree == null) { |
| - return; |
| - } |
| - var rootRow = |
| - new FunctionProfileTreeRow(functionTree, null, profile, tree.root); |
| - functionTree.initialize(rootRow); |
| - } |
| - |
| - void _buildCodeTree(bool exclusive) { |
| - if (codeTree == null) { |
| - var tableBody = shadowRoot.querySelector('#treeBody'); |
| - assert(tableBody != null); |
| - codeTree = new TableTree(tableBody, 2); |
| - } |
| - var tree = profile.loadCodeTree(exclusive ? 'exclusive' : 'inclusive'); |
| - if (tree == null) { |
| - return; |
| + mode = ProfileTreeMode.Code; |
| } |
|
rmacnak
2015/07/14 17:20:29
ditto
Cutch
2015/07/14 20:02:57
Acknowledged.
|
| - var rootRow = new CodeProfileTreeRow(codeTree, null, profile, tree.root); |
| - codeTree.initialize(rootRow); |
| + cpuProfileTreeElement.profile = profile; |
| + cpuProfileTreeElement.direction = direction; |
| + cpuProfileTreeElement.mode = mode; |
| + cpuProfileTreeElement.render(); |
| } |
| } |
| @@ -1100,33 +1060,101 @@ class CpuProfileTableElement extends ObservatoryElement { |
| /// |
| TableTree functionTree; |
| _updateFunctionTreeView() { |
| + CpuProfileTreeElement cpuProfileTreeElement = |
| + shadowRoot.querySelector('#cpuProfileTree'); |
| + ProfileTreeDirection direction = ProfileTreeDirection.Exclusive; |
| + if (directionSelector != 'Up') { |
| + direction = ProfileTreeDirection.Inclusive; |
| + } |
| + ProfileTreeMode mode = ProfileTreeMode.Function; |
| + cpuProfileTreeElement.profile = profile; |
| + cpuProfileTreeElement.direction = direction; |
| + cpuProfileTreeElement.mode = mode; |
| + cpuProfileTreeElement.functionFilter = (FunctionCallTreeNode node) { |
| + return node.profileFunction.function == focusedFunction; |
| + }; |
| + cpuProfileTreeElement.render(); |
| + } |
| +} |
| + |
| +enum ProfileTreeDirection { |
| + Exclusive, |
| + Inclusive |
| +} |
| + |
| +enum ProfileTreeMode { |
| + Code, |
| + Function, |
| +} |
| + |
| +@CustomTag('cpu-profile-tree') |
| +class CpuProfileTreeElement extends ObservatoryElement { |
| + ProfileTreeDirection direction = ProfileTreeDirection.Exclusive; |
| + ProfileTreeMode mode = ProfileTreeMode.Function; |
| + CpuProfile profile; |
| + TableTree codeTree; |
| + TableTree functionTree; |
| + FunctionCallTreeNodeFilter functionFilter; |
| + |
| + CpuProfileTreeElement.created() : super.created(); |
| + |
| + void render() { |
| + _updateView(); |
| + } |
| + |
| + void _updateView() { |
| if (functionTree != null) { |
| functionTree.clear(); |
| functionTree = null; |
| } |
| - _buildFunctionTree(); |
| + if (codeTree != null) { |
| + codeTree.clear(); |
| + codeTree = null; |
| + } |
| + bool exclusive = direction == ProfileTreeDirection.Exclusive; |
| + if (mode == ProfileTreeMode.Code) { |
| + _buildCodeTree(exclusive); |
| + } else { |
| + assert(mode == ProfileTreeMode.Function); |
| + _buildFunctionTree(exclusive); |
| + } |
| } |
| - void _buildFunctionTree() { |
| + void _buildFunctionTree(bool exclusive) { |
| if (functionTree == null) { |
| var tableBody = shadowRoot.querySelector('#treeBody'); |
| assert(tableBody != null); |
| functionTree = new TableTree(tableBody, 2); |
| } |
| - if (focusedFunction == null) { |
| + if (profile == null) { |
| return; |
| } |
| - bool exclusive = directionSelector == 'Up'; |
| var tree = profile.loadFunctionTree(exclusive ? 'exclusive' : 'inclusive'); |
| if (tree == null) { |
| return; |
| } |
| - var filter = (FunctionCallTreeNode node) { |
| - return node.profileFunction.function == focusedFunction; |
| - }; |
| - tree = tree.filtered(filter); |
| + if (functionFilter != null) { |
| + tree = tree.filtered(functionFilter); |
| + } |
| var rootRow = |
| new FunctionProfileTreeRow(functionTree, null, profile, tree.root); |
| functionTree.initialize(rootRow); |
| } |
| + |
| + void _buildCodeTree(bool exclusive) { |
| + if (codeTree == null) { |
| + var tableBody = shadowRoot.querySelector('#treeBody'); |
| + assert(tableBody != null); |
| + codeTree = new TableTree(tableBody, 2); |
| + } |
| + if (profile == null) { |
| + return; |
| + } |
| + var tree = profile.loadCodeTree(exclusive ? 'exclusive' : 'inclusive'); |
| + if (tree == null) { |
| + return; |
| + } |
| + var rootRow = new CodeProfileTreeRow(codeTree, null, profile, tree.root); |
| + codeTree.initialize(rootRow); |
| + } |
| } |