Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Unified Diff: tracing/tracing/ui/analysis/memory_dump_heap_details_pane_test.html

Issue 2347813002: [tracing] Heap dump UI overhaul (Closed)
Patch Set: Improve focus retention and add tests Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tracing/tracing/ui/analysis/memory_dump_heap_details_pane_test.html
diff --git a/tracing/tracing/ui/analysis/memory_dump_heap_details_pane_test.html b/tracing/tracing/ui/analysis/memory_dump_heap_details_pane_test.html
index d378324babc1938e616be90a93de8fd975aac4b1..3fdd677213c76d0e87c74742e568268ed2c33480 100644
--- a/tracing/tracing/ui/analysis/memory_dump_heap_details_pane_test.html
+++ b/tracing/tracing/ui/analysis/memory_dump_heap_details_pane_test.html
@@ -7,7 +7,7 @@ found in the LICENSE file.
<link rel='import' href='/tracing/base/iteration_helpers.html'>
<link rel='import' href='/tracing/base/multi_dimensional_view.html'>
-<link rel="import" href="/tracing/base/unit.html">
+<link rel='import' href='/tracing/base/unit.html'>
<link rel='import' href='/tracing/core/test_utils.html'>
<link rel='import' href='/tracing/model/heap_dump.html'>
<link rel='import' href='/tracing/model/memory_dump_test_utils.html'>
@@ -26,10 +26,10 @@ tr.b.unittest.testSuite(function() {
var TOP_DOWN_HEAVY_VIEW = ViewType.TOP_DOWN_HEAVY_VIEW;
var BOTTOM_UP_HEAVY_VIEW = ViewType.BOTTOM_UP_HEAVY_VIEW;
var HeapDump = tr.model.HeapDump;
- var RowDimension = tr.ui.analysis.RowDimension;
- var ROOT = RowDimension.ROOT;
- var STACK_FRAME = RowDimension.STACK_FRAME;
- var OBJECT_TYPE = RowDimension.OBJECT_TYPE;
+ var HeapDetailsRowDimension = tr.ui.analysis.HeapDetailsRowDimension;
+ var ROOT = HeapDetailsRowDimension.ROOT;
+ var STACK_FRAME = HeapDetailsRowDimension.STACK_FRAME;
+ var OBJECT_TYPE = HeapDetailsRowDimension.OBJECT_TYPE;
var TitleColumn = tr.ui.analysis.TitleColumn;
var NumericMemoryColumn = tr.ui.analysis.NumericMemoryColumn;
var AggregationMode = tr.ui.analysis.MemoryColumn.AggregationMode;
@@ -185,14 +185,14 @@ tr.b.unittest.testSuite(function() {
displayExpectations.infoText);
assert.strictEqual(isElementDisplayed(viewEl.$.info_bar),
displayExpectations.infoBar);
- assert.strictEqual(isElementDisplayed(viewEl.$.table),
- displayExpectations.tableAndSelector);
+ assert.strictEqual(isElementDisplayed(viewEl.$.split_view),
+ displayExpectations.tableAndSplitView);
assert.strictEqual(isElementDisplayed(viewEl.$.view_mode_container),
- displayExpectations.tableAndSelector);
+ displayExpectations.tableAndSplitView);
}
var EXPECTED_COLUMNS_WITHOUT_COUNT = [
- { title: 'Stack frame', type: TitleColumn, noAggregation: true },
+ { title: 'Current path', type: TitleColumn, noAggregation: true },
{ title: 'Size', type: NumericMemoryColumn }
];
@@ -201,88 +201,87 @@ tr.b.unittest.testSuite(function() {
{ title: 'Average size per allocation', type: NumericMemoryColumn }
]);
- function checkRow(columns, row, expectedDimension, expectedTitle,
- expectedSizes, expectedCounts, expectedAverageSizes,
- expectedDefinedValues) {
- var formattedTitle = columns[0].formatTitle(row);
- switch (expectedDimension) {
- case ROOT:
- assert.equal(formattedTitle, expectedTitle);
- break;
+ var EXPECTED_CELLS = ['Size', 'Count', 'Average size per allocation'];
- case STACK_FRAME:
- case OBJECT_TYPE:
- assert.lengthOf(Polymer.dom(formattedTitle).childNodes, 2);
- assert.strictEqual(
- Polymer.dom(formattedTitle).childNodes[0].textContent,
- expectedDimension === STACK_FRAME ? '\u0192' : '\u24C9');
- assert.strictEqual(
- Polymer.dom(formattedTitle).childNodes[1].textContent,
- expectedTitle);
- break;
+ function checkNode(node, expectedNodeStructure, expectedParentNode) {
+ assert.strictEqual(node.title, expectedNodeStructure.title);
+ assert.strictEqual(node.dimension, expectedNodeStructure.dimension);
+ assert.strictEqual(node.parentNode, expectedParentNode);
- default:
- throw new Error('Invalid expected dimension: ' + expectedDimension);
- }
+ // Check that there AREN'T any cells that we are NOT expecting.
+ var cells = node.cells;
+ assert.includeMembers(EXPECTED_CELLS, Object.keys(cells));
- checkSizeNumericFields(row, columns[1], expectedSizes);
- if (expectedCounts !== undefined) {
- // Test sanity check.
- assert.lengthOf(expectedCounts, expectedSizes.length);
- assert.lengthOf(expectedAverageSizes, expectedSizes.length);
+ var sizeCell = cells['Size'];
+ var sizeFields = sizeCell ? sizeCell.fields : undefined;
+ checkSizeNumericFields(sizeFields, undefined, expectedNodeStructure.size);
- checkNumericFields(row, columns[2], expectedCounts,
- count_smallerIsBetter);
- checkSizeNumericFields(row, columns[3], expectedAverageSizes);
- } else {
- // Test sanity check.
- assert.lengthOf(columns, EXPECTED_COLUMNS_WITHOUT_COUNT.length);
- assert.isUndefined(expectedAverageSizes);
- }
+ var countCell = cells['Count'];
+ var countFields = countCell ? countCell.fields : undefined;
+ checkNumericFields(countFields, undefined, expectedNodeStructure.count,
+ count_smallerIsBetter);
- var actualDefinedValues = new Array(row.contexts.length);
- for (var i = 0; i < row.contexts.length; i++)
- actualDefinedValues[i] = row.contexts[i] !== undefined;
- assert.deepEqual(actualDefinedValues, expectedDefinedValues);
- }
+ var averageSizeCell = cells['Average size per allocation'];
+ var averageSizeFields = averageSizeCell ? averageSizeCell.fields :
+ undefined;
+ checkSizeNumericFields(averageSizeFields, undefined,
+ expectedNodeStructure.averageSize);
+
+ assert.strictEqual(node.childNodes.size, 2);
- function checkRows(columns, rows, expectedStructure) {
- if (expectedStructure === undefined) {
- assert.isUndefined(rows);
+ // If |expectedNodeStructure.children| is undefined, check that there are
+ // no child nodes.
+ if (!expectedNodeStructure.children) {
+ assert.lengthOf(node.childNodes.get(STACK_FRAME), 0);
+ assert.lengthOf(node.childNodes.get(OBJECT_TYPE), 0);
return;
}
- if (typeof expectedStructure === 'number') {
- assert.lengthOf(rows, expectedStructure);
+ // If |expectedNodeStructure.children| is just a number, check total number
+ // of child nodes.
+ if (typeof expectedNodeStructure.children === 'number') {
+ assert.strictEqual(expectedNodeStructure.children,
+ node.childNodes.get(STACK_FRAME).length +
+ node.childNodes.get(OBJECT_TYPE).length);
return;
}
- assert.lengthOf(rows, expectedStructure.length);
+ // Check child nodes wrt both dimensions.
+ checkNodes(node.childNodes.get(STACK_FRAME),
+ expectedNodeStructure.children.filter(c => c.dimension === STACK_FRAME),
+ node);
+ checkNodes(node.childNodes.get(OBJECT_TYPE),
+ expectedNodeStructure.children.filter(c => c.dimension === OBJECT_TYPE),
+ node);
+ }
+
+ function checkNodes(nodes, expectedStructure, expectedParentNode) {
+ assert.lengthOf(nodes, expectedStructure.length);
for (var i = 0; i < expectedStructure.length; i++) {
- var row = rows[i];
- var expectedRowStructure = expectedStructure[i];
- checkRow(columns, row, expectedRowStructure.dimension,
- expectedRowStructure.title, expectedRowStructure.size,
- expectedRowStructure.count, expectedRowStructure.averageSize,
- expectedRowStructure.defined);
- checkRows(columns, row.subRows, expectedRowStructure.children);
+ checkNode(nodes[i], expectedStructure[i], expectedParentNode);
}
}
- function checkTable(viewEl, expectedConfig, expectedStructure) {
+ function checkSplitView(viewEl, expectedConfig, expectedStructure) {
checkDisplayedElements(viewEl, {
infoText: false,
- tableAndSelector: true,
+ tableAndSplitView: true,
infoBar: !!expectedConfig.expectedInfoBarDisplayed
});
- var table = viewEl.$.table;
- var columns = table.tableColumns;
- var rows = table.tableRows;
+
+ // Both the split view and breakdown view should be displaying the same
+ // node.
+ var selectedNode = viewEl.$.path_view.selectedNode;
+ assert.strictEqual(viewEl.$.breakdown_view.displayedNode, selectedNode);
+ checkNodes([selectedNode], expectedStructure,
+ undefined /* expectedParentNode */);
+
+ // TODO: Add proper tests for tr-ui-a-memory-dump-heap-details-path-view
+ // and tr-ui-a-memory-dump-heap-details-breakdown-view.
var expectedColumns = expectedConfig.expectedCountColumns ?
EXPECTED_COLUMNS_WITH_COUNT : EXPECTED_COLUMNS_WITHOUT_COUNT;
- checkColumns(columns, expectedColumns,
+ checkColumns(viewEl.$.path_view.$.table.tableColumns, expectedColumns,
expectedConfig.expectedAggregationMode);
- checkRows(columns, rows, expectedStructure);
}
function changeView(viewEl, viewType) {
@@ -290,97 +289,6 @@ tr.b.unittest.testSuite(function() {
viewEl.rebuild();
}
- /**
- * Helper function for generating the expected structures of heap details
- * pane tables. Given a table, this function generates its structure.
- *
- * This avoids the need to write such structures manually, which is very
- * tedious. However, the correctness of the generated structures needs to be
- * verified by the developer! Maximum line length must also be enforced
- * manually.
- */
- function printTable(test, viewEl) {
- var generator = new tr.c.TestUtils.SourceGenerator();
-
- function formatRows(rows) {
- generator.formatMultiLineList(rows, function(row) {
- generator.push('{');
- generator.indentBlock(2, true /* break line */, function() {
- generator.push('dimension: ');
- for (var dimensionTitle in RowDimension) {
- if (row.dimension === RowDimension[dimensionTitle]) {
- generator.push(dimensionTitle);
- break;
- }
- }
- generator.push(',');
- generator.breakLine();
-
- generator.push('title: \'', row.title, '\',');
- generator.breakLine();
-
-
- var sizeFields = row.cells['Size'].fields;
- generator.push('size: ');
- generator.formatSingleLineList(sizeFields, function(field) {
- generator.push(
- field === undefined ? 'undefined' : String(field.value));
- });
- generator.push(',');
- generator.breakLine();
-
- if (row.cells['Count'] !== undefined) {
- var countFields = row.cells['Count'].fields;
- generator.push('count: ');
- generator.formatSingleLineList(countFields, function(field) {
- generator.push(
- field === undefined ? 'undefined' : String(field.value));
- });
- generator.push(',');
- generator.breakLine();
-
- generator.push('averageSize: ');
- generator.formatSingleLineList(row.cells['Average size'].fields,
- function(field, index) {
- if (field === undefined) {
- generator.push('undefined');
- } else if (field.value === 0) {
- generator.push('0');
- } else {
- generator.push(String(sizeFields[index].value) + ' / ' +
- String(countFields[index].value));
- }
- });
- generator.push(',');
- generator.breakLine();
- }
-
- generator.push('defined: ');
- generator.formatSingleLineList(sizeFields, function(field) {
- generator.push(String(field !== undefined));
- });
-
- if (row.subRows && row.subRows.length > 0) {
- generator.push(',');
- generator.breakLine();
- generator.push('children: ');
- formatRows(row.subRows);
- }
- });
- generator.breakLine();
- generator.push('}');
- });
- }
-
- generator.indentBlock(8, false /* don't break line */,
- formatRows.bind(null, viewEl.$.table.tableRows));
-
- tr.c.TestUtils.addSourceListing(test, generator.build());
-
- throw new Error('This error is thrown to prevent accidentally ' +
- 'checking in a test which calls this function.');
- }
-
test('instantiate_empty', function() {
tr.ui.analysis.createAndCheckEmptyPanes(this,
'tr-ui-a-memory-dump-heap-details-pane', 'heapDumps',
@@ -388,7 +296,7 @@ tr.b.unittest.testSuite(function() {
// Check that the info text is shown.
checkDisplayedElements(viewEl, {
infoText: true,
- tableAndSelector: false,
+ tableAndSplitView: false,
infoBar: false
});
});
@@ -405,7 +313,7 @@ tr.b.unittest.testSuite(function() {
this.addHTMLOutput(viewEl);
// Top-down tree view (default).
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ /* empty expectedConfig */ },
[
{
@@ -417,7 +325,7 @@ tr.b.unittest.testSuite(function() {
]);
changeView(viewEl, TOP_DOWN_HEAVY_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ expectedInfoBarDisplayed: true },
[
{
@@ -429,7 +337,7 @@ tr.b.unittest.testSuite(function() {
]);
changeView(viewEl, BOTTOM_UP_HEAVY_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ expectedInfoBarDisplayed: true },
[
{
@@ -453,7 +361,7 @@ tr.b.unittest.testSuite(function() {
this.addHTMLOutput(viewEl);
// Top-down tree view (default).
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ /* empty expectedConfig */ },
[
{
@@ -761,7 +669,7 @@ tr.b.unittest.testSuite(function() {
]);
changeView(viewEl, BOTTOM_UP_HEAVY_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ expectedInfoBarDisplayed: true },
[
{
@@ -1541,7 +1449,7 @@ tr.b.unittest.testSuite(function() {
]);
changeView(viewEl, TOP_DOWN_HEAVY_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ expectedInfoBarDisplayed: true }, [
{
dimension: ROOT,
@@ -2331,7 +2239,7 @@ tr.b.unittest.testSuite(function() {
this.addHTMLOutput(viewEl);
changeView(viewEl, TOP_DOWN_HEAVY_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{
expectedAggregationMode: AggregationMode.DIFF,
expectedInfoBarDisplayed: true,
@@ -3567,7 +3475,7 @@ tr.b.unittest.testSuite(function() {
]);
changeView(viewEl, TOP_DOWN_TREE_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{
expectedAggregationMode: AggregationMode.DIFF,
expectedCountColumns: true
@@ -4047,7 +3955,7 @@ tr.b.unittest.testSuite(function() {
this.addHTMLOutput(viewEl);
changeView(viewEl, TOP_DOWN_HEAVY_VIEW);
- checkTable(viewEl,
+ checkSplitView(viewEl,
{
expectedAggregationMode: AggregationMode.MAX,
expectedInfoBarDisplayed: true
@@ -4075,7 +3983,7 @@ tr.b.unittest.testSuite(function() {
this.addHTMLOutput(viewEl);
// Top-down tree view (default).
- checkTable(viewEl,
+ checkSplitView(viewEl,
{ expectedAggregationMode: AggregationMode.DIFF },
[
{

Powered by Google App Engine
This is Rietveld 408576698