| Index: tracing/tracing/ui/analysis/memory_dump_heap_details_path_view.html
|
| diff --git a/tracing/tracing/ui/analysis/memory_dump_heap_details_path_view.html b/tracing/tracing/ui/analysis/memory_dump_heap_details_path_view.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..17ff9be0b876528af1f1b854098089444ad9fc82
|
| --- /dev/null
|
| +++ b/tracing/tracing/ui/analysis/memory_dump_heap_details_path_view.html
|
| @@ -0,0 +1,144 @@
|
| +<!DOCTYPE html>
|
| +<!--
|
| +Copyright 2016 The Chromium Authors. All rights reserved.
|
| +Use of this source code is governed by a BSD-style license that can be
|
| +found in the LICENSE file.
|
| +-->
|
| +
|
| +<link rel="import" href="/tracing/base/color_scheme.html">
|
| +<link rel="import" href="/tracing/base/event.html">
|
| +<link rel="import" href="/tracing/ui/analysis/memory_dump_heap_details_util.html">
|
| +<link rel="import" href="/tracing/ui/analysis/memory_dump_sub_view_util.html">
|
| +<link rel="import" href="/tracing/ui/analysis/rebuildable_behavior.html">
|
| +<link rel="import" href="/tracing/ui/base/dom_helpers.html">
|
| +<link rel="import" href="/tracing/ui/base/table.html">
|
| +<link rel="import" href="/tracing/value/ui/scalar_context_controller.html">
|
| +
|
| +<dom-module id='tr-ui-a-memory-dump-heap-details-path-view'>
|
| + <template>
|
| + <style>
|
| + :host {
|
| + display: flex;
|
| + flex-direction: column;
|
| + }
|
| + </style>
|
| + <tr-v-ui-scalar-context-controller></tr-v-ui-scalar-context-controller>
|
| + <tr-ui-b-table id="table"></tr-ui-b-table>
|
| + </template>
|
| +</dom-module>
|
| +<script>
|
| +'use strict';
|
| +
|
| +tr.exportTo('tr.ui.analysis', function() {
|
| +
|
| + var DOWNWARDS_ARROW_WITH_TIP_RIGHTWARDS = String.fromCharCode(0x21B3);
|
| +
|
| + function HeapDetailsPathColumn(title) {
|
| + tr.ui.analysis.HeapDetailsTitleColumn.call(this, title);
|
| + }
|
| +
|
| + HeapDetailsPathColumn.prototype = {
|
| + __proto__: tr.ui.analysis.HeapDetailsTitleColumn.prototype,
|
| +
|
| + formatTitle: function(row) {
|
| + var title = tr.ui.analysis.HeapDetailsTitleColumn.prototype.
|
| + formatTitle.call(this, row);
|
| + if (row.dimension === tr.ui.analysis.HeapDetailsRowDimension.ROOT)
|
| + return title;
|
| +
|
| + var arrowEl = document.createElement('span');
|
| + Polymer.dom(arrowEl).textContent = DOWNWARDS_ARROW_WITH_TIP_RIGHTWARDS;
|
| + arrowEl.style.paddingRight = '2px';
|
| + arrowEl.style.fontWeight = 'bold';
|
| + arrowEl.style.color = tr.b.ColorScheme.getColorForReservedNameAsString(
|
| + 'heap_dump_child_node_arrow');
|
| +
|
| + var rowEl = document.createElement('span');
|
| + Polymer.dom(rowEl).appendChild(arrowEl);
|
| + Polymer.dom(rowEl).appendChild(tr.ui.b.asHTMLOrTextNode(title));
|
| + return rowEl;
|
| + }
|
| + }
|
| +
|
| + Polymer({
|
| + is: 'tr-ui-a-memory-dump-heap-details-path-view',
|
| + behaviors: [tr.ui.analysis.RebuildableBehavior],
|
| +
|
| + created: function() {
|
| + this.selectedNode_ = undefined;
|
| + this.aggregationMode_ = undefined;
|
| + },
|
| +
|
| + ready: function() {
|
| + this.$.table.addEventListener('selection-changed', function(event) {
|
| + this.selectedNode_ = this.$.table.selectedTableRow;
|
| + this.didSelectedNodeChange_();
|
| + }.bind(this));
|
| + },
|
| +
|
| + didSelectedNodeChange_: function() {
|
| + this.dispatchEvent(new tr.b.Event('selected-node-changed'));
|
| + },
|
| +
|
| + get selectedNode() {
|
| + return this.selectedNode_;
|
| + },
|
| +
|
| + set selectedNode(node) {
|
| + this.selectedNode_ = node;
|
| + this.didSelectedNodeChange_();
|
| + this.scheduleRebuild_();
|
| + },
|
| +
|
| + get aggregationMode() {
|
| + return this.aggregationMode_;
|
| + },
|
| +
|
| + set aggregationMode(aggregationMode) {
|
| + this.aggregationMode_ = aggregationMode;
|
| + this.scheduleRebuild_();
|
| + },
|
| +
|
| + onRebuild_: function() {
|
| + if (this.selectedNode_ === undefined) {
|
| + this.$.table.clear();
|
| + return;
|
| + }
|
| +
|
| + this.$.table.selectionMode = tr.ui.b.TableFormat.SelectionMode.ROW;
|
| + this.$.table.userCanModifySortOrder = false;
|
| + var rows = this.createRows_(this.selectedNode_);
|
| + this.$.table.tableRows = rows;
|
| + this.$.table.tableColumns = this.createColumns_(rows);
|
| + this.$.table.selectedTableRow = rows[rows.length - 1];
|
| + },
|
| +
|
| + createRows_: function(node) {
|
| + var rows = [];
|
| + while (node) {
|
| + rows.push(node);
|
| + node = node.parentNode;
|
| + }
|
| + rows.reverse();
|
| + return rows;
|
| + },
|
| +
|
| + createColumns_: function(rows) {
|
| + var titleColumn = new HeapDetailsPathColumn('Current path');
|
| + titleColumn.width = '200px';
|
| +
|
| + var numericColumns = tr.ui.analysis.MemoryColumn.fromRows(rows, {
|
| + cellKey: 'cells',
|
| + aggregationMode: this.aggregationMode_,
|
| + rules: tr.ui.analysis.HEAP_DETAILS_COLUMN_RULES,
|
| + shouldSetContextGroup: true
|
| + });
|
| + tr.ui.analysis.MemoryColumn.spaceEqually(numericColumns);
|
| +
|
| + return [titleColumn].concat(numericColumns);
|
| + }
|
| + });
|
| +
|
| + return {};
|
| +});
|
| +</script>
|
|
|