| Index: tracing/tracing/ui/analysis/memory_dump_sub_view_util.html
|
| diff --git a/tracing/tracing/ui/analysis/memory_dump_sub_view_util.html b/tracing/tracing/ui/analysis/memory_dump_sub_view_util.html
|
| index 18ec7ea2bc5f823f7453bef10f404967021a3f7a..1a95c3d47145853289d47d1b60ae7ec49bf8829c 100644
|
| --- a/tracing/tracing/ui/analysis/memory_dump_sub_view_util.html
|
| +++ b/tracing/tracing/ui/analysis/memory_dump_sub_view_util.html
|
| @@ -64,8 +64,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var formattedTitle = this.formatTitle(row);
|
|
|
| var contexts = row.contexts;
|
| - if (contexts === undefined || contexts.length === 0)
|
| + if (contexts === undefined || contexts.length === 0) {
|
| return formattedTitle;
|
| + }
|
|
|
| // Determine if the row was provided in the first and last row and how
|
| // many times it changed between being provided and not provided.
|
| @@ -73,8 +74,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var lastContext = contexts[contexts.length - 1];
|
| var changeDefinedContextCount = 0;
|
| for (var i = 1; i < contexts.length; i++) {
|
| - if ((contexts[i] === undefined) !== (contexts[i - 1] === undefined))
|
| + if ((contexts[i] === undefined) !== (contexts[i - 1] === undefined)) {
|
| changeDefinedContextCount++;
|
| + }
|
| }
|
|
|
| // Determine the color and prefix of the title.
|
| @@ -94,8 +96,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| color = 'purple';
|
| }
|
|
|
| - if (color === undefined && prefix === undefined)
|
| + if (color === undefined && prefix === undefined) {
|
| return formattedTitle;
|
| + }
|
|
|
| var titleEl = document.createElement('span');
|
| if (prefix !== undefined) {
|
| @@ -106,8 +109,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| Polymer.dom(titleEl).appendChild(
|
| tr.ui.b.asHTMLOrTextNode(NO_BREAK_SPACE));
|
| }
|
| - if (color !== undefined)
|
| + if (color !== undefined) {
|
| titleEl.style.color = color;
|
| + }
|
| Polymer.dom(titleEl).appendChild(
|
| tr.ui.b.asHTMLOrTextNode(formattedTitle));
|
| return titleEl;
|
| @@ -210,8 +214,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var cellNames = new Set();
|
| function gatherCellNames(rows) {
|
| rows.forEach(function(row) {
|
| - if (row === undefined)
|
| - return;
|
| + if (row === undefined) return;
|
| var fieldCells = row[config.cellKey];
|
| if (fieldCells !== undefined) {
|
| for (var [fieldName, fieldCell] of Object.entries(fieldCells)) {
|
| @@ -222,8 +225,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| }
|
| }
|
| var subRows = row.subRows;
|
| - if (subRows !== undefined)
|
| + if (subRows !== undefined) {
|
| gatherCellNames(subRows);
|
| + }
|
| });
|
| }
|
| gatherCellNames(rows);
|
| @@ -245,8 +249,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
|
|
| positions.sort(function(a, b) {
|
| // Sort columns with the same importance alphabetically.
|
| - if (a.importance === b.importance)
|
| + if (a.importance === b.importance) {
|
| return COLLATOR.compare(a.column.name, b.column.name);
|
| + }
|
|
|
| // Sort columns in descending order of importance.
|
| return b.importance - a.importance;
|
| @@ -265,20 +270,19 @@ tr.exportTo('tr.ui.analysis', function() {
|
| MemoryColumn.findMatchingRule = function(name, rules) {
|
| for (var i = 0; i < rules.length; i++) {
|
| var rule = rules[i];
|
| - if (MemoryColumn.nameMatchesCondition(name, rule.condition))
|
| + if (MemoryColumn.nameMatchesCondition(name, rule.condition)) {
|
| return rule;
|
| + }
|
| }
|
| return undefined;
|
| };
|
|
|
| MemoryColumn.nameMatchesCondition = function(name, condition) {
|
| // Rules without conditions match all columns.
|
| - if (condition === undefined)
|
| - return true;
|
| + if (condition === undefined) return true;
|
|
|
| // String conditions must match the column name exactly.
|
| - if (typeof(condition) === 'string')
|
| - return name === condition;
|
| + if (typeof(condition) === 'string') return name === condition;
|
|
|
| // If the condition is not a string, assume it is a RegExp.
|
| return condition.test(name);
|
| @@ -301,8 +305,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var cell = row;
|
| var cellPath = this.cellPath;
|
| for (var i = 0; i < cellPath.length; i++) {
|
| - if (cell === undefined)
|
| - return undefined;
|
| + if (cell === undefined) return undefined;
|
| cell = cell[cellPath[i]];
|
| }
|
| return cell;
|
| @@ -314,8 +317,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
|
|
| fields: function(row) {
|
| var cell = this.cell(row);
|
| - if (cell === undefined)
|
| - return undefined;
|
| + if (cell === undefined) return undefined;
|
| return cell.fields;
|
| },
|
|
|
| @@ -325,8 +327,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| */
|
| value: function(row) {
|
| var fields = this.fields(row);
|
| - if (this.hasAllRelevantFieldsUndefined(fields))
|
| - return '';
|
| + if (this.hasAllRelevantFieldsUndefined(fields)) return '';
|
|
|
| // Determine the color and infos of the resulting element.
|
| var contexts = row.contexts;
|
| @@ -339,8 +340,10 @@ tr.exportTo('tr.ui.analysis', function() {
|
|
|
| // If no color is specified and there are no infos, there is no need to
|
| // wrap the value in a span element.#
|
| - if ((color === undefined || formattedFields === '') && infos.length === 0)
|
| + if ((color === undefined || formattedFields === '') &&
|
| + infos.length === 0) {
|
| return formattedFields;
|
| + }
|
|
|
| var fieldEl = document.createElement('span');
|
| fieldEl.style.display = 'flex';
|
| @@ -356,15 +359,17 @@ tr.exportTo('tr.ui.analysis', function() {
|
| infoEl.style.cursor = 'help';
|
| infoEl.style.fontWeight = 'bold';
|
| Polymer.dom(infoEl).textContent = info.icon;
|
| - if (info.color !== undefined)
|
| + if (info.color !== undefined) {
|
| infoEl.style.color = info.color;
|
| + }
|
| infoEl.title = info.message;
|
| Polymer.dom(fieldEl).appendChild(infoEl);
|
| }, this);
|
|
|
| // Set the color of the element.
|
| - if (color !== undefined)
|
| + if (color !== undefined) {
|
| fieldEl.style.color = color;
|
| + }
|
|
|
| return fieldEl;
|
| },
|
| @@ -374,8 +379,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| * aggregation mode (e.g. first and last field for diff mode) are undefined.
|
| */
|
| hasAllRelevantFieldsUndefined: function(fields) {
|
| - if (fields === undefined)
|
| - return true;
|
| + if (fields === undefined) return true;
|
|
|
| switch (this.aggregationMode) {
|
| case MemoryColumn.AggregationMode.DIFF:
|
| @@ -404,8 +408,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| * the current aggregation mode is guaranteed to be defined.
|
| */
|
| formatFields: function(fields) {
|
| - if (fields.length === 1)
|
| + if (fields.length === 1) {
|
| return this.formatSingleField(fields[0]);
|
| + }
|
| return this.formatMultipleFields(fields);
|
| },
|
|
|
| @@ -459,18 +464,16 @@ tr.exportTo('tr.ui.analysis', function() {
|
|
|
| // Sanity check.
|
| if (fieldsA !== undefined && fieldsB !== undefined &&
|
| - fieldsA.length !== fieldsB.length)
|
| + fieldsA.length !== fieldsB.length) {
|
| throw new Error('Different number of fields');
|
| + }
|
|
|
| // Handle empty fields.
|
| var undefinedA = this.hasAllRelevantFieldsUndefined(fieldsA);
|
| var undefinedB = this.hasAllRelevantFieldsUndefined(fieldsB);
|
| - if (undefinedA && undefinedB)
|
| - return 0;
|
| - if (undefinedA)
|
| - return -1;
|
| - if (undefinedB)
|
| - return 1;
|
| + if (undefinedA && undefinedB) return 0;
|
| + if (undefinedA) return -1;
|
| + if (undefinedB) return 1;
|
|
|
| return this.compareFields(fieldsA, fieldsB);
|
| },
|
| @@ -481,8 +484,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| * the two lists.
|
| */
|
| compareFields: function(fieldsA, fieldsB) {
|
| - if (fieldsA.length === 1)
|
| + if (fieldsA.length === 1) {
|
| return this.compareSingleFields(fieldsA[0], fieldsB[0]);
|
| + }
|
| return this.compareMultipleFields(fieldsA, fieldsB);
|
| },
|
|
|
| @@ -531,8 +535,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
|
|
| getMaxField: function(fields) {
|
| return fields.reduce(function(accumulator, field) {
|
| - if (field === undefined)
|
| + if (field === undefined) {
|
| return accumulator;
|
| + }
|
| if (accumulator === undefined ||
|
| this.compareSingleFields(field, accumulator) > 0) {
|
| return field;
|
| @@ -546,19 +551,20 @@ tr.exportTo('tr.ui.analysis', function() {
|
| },
|
|
|
| getImportance: function(importanceRules) {
|
| - if (importanceRules.length === 0)
|
| - return 0;
|
| + if (importanceRules.length === 0) return 0;
|
|
|
| // Find the first matching rule.
|
| var matchingRule =
|
| MemoryColumn.findMatchingRule(this.name, importanceRules);
|
| - if (matchingRule !== undefined)
|
| + if (matchingRule !== undefined) {
|
| return matchingRule.importance;
|
| + }
|
|
|
| // No matching rule. Return lower importance than all rules.
|
| var minImportance = importanceRules[0].importance;
|
| - for (var i = 1; i < importanceRules.length; i++)
|
| + for (var i = 1; i < importanceRules.length; i++) {
|
| minImportance = Math.min(minImportance, importanceRules[i].importance);
|
| + }
|
| return minImportance - 1;
|
| }
|
| };
|
| @@ -615,39 +621,42 @@ tr.exportTo('tr.ui.analysis', function() {
|
| lastStringB) {
|
| // If one of the strings was added (and the other one wasn't), mark the
|
| // corresponding diff as greater.
|
| - if (firstStringA === undefined && firstStringB !== undefined)
|
| + if (firstStringA === undefined && firstStringB !== undefined) {
|
| return 1;
|
| - if (firstStringA !== undefined && firstStringB === undefined)
|
| + }
|
| + if (firstStringA !== undefined && firstStringB === undefined) {
|
| return -1;
|
| + }
|
|
|
| // If both strings were added, compare the last values (greater last
|
| // value implies greater diff).
|
| - if (firstStringA === undefined && firstStringB === undefined)
|
| + if (firstStringA === undefined && firstStringB === undefined) {
|
| return this.compareSingleFields(lastStringA, lastStringB);
|
| + }
|
|
|
| // If one of the strings was removed (and the other one wasn't), mark the
|
| // corresponding diff as lower.
|
| - if (lastStringA === undefined && lastStringB !== undefined)
|
| + if (lastStringA === undefined && lastStringB !== undefined) {
|
| return -1;
|
| - if (lastStringA !== undefined && lastStringB === undefined)
|
| + }
|
| + if (lastStringA !== undefined && lastStringB === undefined) {
|
| return 1;
|
| + }
|
|
|
| // If both strings were removed, compare the first values (greater first
|
| // value implies smaller (!) diff).
|
| - if (lastStringA === undefined && lastStringB === undefined)
|
| + if (lastStringA === undefined && lastStringB === undefined) {
|
| return this.compareSingleFields(firstStringB, firstStringA);
|
| + }
|
|
|
| var areStringsAEqual = firstStringA === lastStringA;
|
| var areStringsBEqual = firstStringB === lastStringB;
|
|
|
| // Consider diffs of strings that did not change to be smaller than diffs
|
| // of strings that did change.
|
| - if (areStringsAEqual && areStringsBEqual)
|
| - return 0;
|
| - if (areStringsAEqual)
|
| - return -1;
|
| - if (areStringsBEqual)
|
| - return 1;
|
| + if (areStringsAEqual && areStringsBEqual) return 0;
|
| + if (areStringsAEqual) return -1;
|
| + if (areStringsBEqual) return 1;
|
|
|
| // Both strings changed. We are unable to determine the ordering of the
|
| // diffs.
|
| @@ -680,26 +689,27 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var hasDefinedSubRowNumeric = false;
|
| var timestampCount = undefined;
|
| subRowCells.forEach(function(subRowCell) {
|
| - if (subRowCell === undefined)
|
| - return;
|
| + if (subRowCell === undefined) return;
|
|
|
| var subRowNumerics = subRowCell.fields;
|
| - if (subRowNumerics === undefined)
|
| - return;
|
| + if (subRowNumerics === undefined) return;
|
|
|
| - if (timestampCount === undefined)
|
| + if (timestampCount === undefined) {
|
| timestampCount = subRowNumerics.length;
|
| - else if (timestampCount !== subRowNumerics.length)
|
| + } else if (timestampCount !== subRowNumerics.length) {
|
| throw new Error('Sub-rows have different numbers of timestamps');
|
| + }
|
|
|
| - if (hasDefinedSubRowNumeric)
|
| + if (hasDefinedSubRowNumeric) {
|
| return; // Avoid unnecessary traversals of the numerics.
|
| + }
|
| hasDefinedSubRowNumeric = subRowNumerics.some(function(numeric) {
|
| return numeric !== undefined;
|
| });
|
| });
|
| - if (!hasDefinedSubRowNumeric)
|
| + if (!hasDefinedSubRowNumeric) {
|
| return; // No numeric to aggregate.
|
| + }
|
|
|
| // Get or create the row cell.
|
| var cellPath = this.cellPath;
|
| @@ -708,10 +718,11 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var nextStepName = cellPath[i];
|
| var nextStep = rowCell[nextStepName];
|
| if (nextStep === undefined) {
|
| - if (i < cellPath.length - 1)
|
| + if (i < cellPath.length - 1) {
|
| nextStep = {};
|
| - else
|
| + } else {
|
| nextStep = new MemoryCell(undefined);
|
| + }
|
| rowCell[nextStepName] = nextStep;
|
| }
|
| rowCell = nextStep;
|
| @@ -724,12 +735,12 @@ tr.exportTo('tr.ui.analysis', function() {
|
| }
|
|
|
| for (var i = 0; i < timestampCount; i++) {
|
| - if (rowCell.fields[i] !== undefined)
|
| - continue;
|
| + if (rowCell.fields[i] !== undefined) continue;
|
| rowCell.fields[i] = tr.model.MemoryAllocatorDump.aggregateNumerics(
|
| subRowCells.map(function(subRowCell) {
|
| - if (subRowCell === undefined || subRowCell.fields === undefined)
|
| + if (subRowCell === undefined || subRowCell.fields === undefined) {
|
| return undefined;
|
| + }
|
| return subRowCell.fields[i];
|
| }));
|
| }
|
| @@ -784,8 +795,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| }
|
|
|
| MemoryCell.extractFields = function(cell) {
|
| - if (cell === undefined)
|
| - return undefined;
|
| + if (cell === undefined) return undefined;
|
| return cell.fields;
|
| };
|
|
|
| @@ -801,8 +811,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var nextLevelRowCount = 0;
|
| currentLevelRows.forEach(function(currentLevelRow) {
|
| var subRows = currentLevelRow.subRows;
|
| - if (subRows === undefined || subRows.length === 0)
|
| - return;
|
| + if (subRows === undefined || subRows.length === 0) return;
|
| nextLevelRowCount += subRows.length;
|
| });
|
|
|
| @@ -818,8 +827,7 @@ tr.exportTo('tr.ui.analysis', function() {
|
| var nextLevelRowIndex = 0;
|
| currentLevelRows.forEach(function(currentLevelRow) {
|
| var subRows = currentLevelRow.subRows;
|
| - if (subRows === undefined || subRows.length === 0)
|
| - return;
|
| + if (subRows === undefined || subRows.length === 0) return;
|
| table.setExpandedForTableRow(currentLevelRow, true);
|
| subRows.forEach(function(subRow) {
|
| nextLevelRows[nextLevelRowIndex++] = subRow;
|
| @@ -834,21 +842,20 @@ tr.exportTo('tr.ui.analysis', function() {
|
|
|
| function aggregateTableRowCellsRecursively(row, columns, opt_predicate) {
|
| var subRows = row.subRows;
|
| - if (subRows === undefined || subRows.length === 0)
|
| - return;
|
| + if (subRows === undefined || subRows.length === 0) return;
|
|
|
| subRows.forEach(function(subRow) {
|
| aggregateTableRowCellsRecursively(subRow, columns, opt_predicate);
|
| });
|
|
|
| - if (opt_predicate === undefined || opt_predicate(row.contexts))
|
| + if (opt_predicate === undefined || opt_predicate(row.contexts)) {
|
| aggregateTableRowCells(row, subRows, columns);
|
| + }
|
| }
|
|
|
| function aggregateTableRowCells(row, subRows, columns) {
|
| columns.forEach(function(column) {
|
| - if (!(column instanceof MemoryColumn))
|
| - return;
|
| + if (!(column instanceof MemoryColumn)) return;
|
| column.aggregateCells(row, subRows);
|
| });
|
| }
|
| @@ -880,8 +887,9 @@ tr.exportTo('tr.ui.analysis', function() {
|
| __proto__: NumericMemoryColumn.prototype,
|
|
|
| getFormattingContext: function(unit) {
|
| - if (unit.baseUnit === tr.b.Unit.byName.sizeInBytes)
|
| + if (unit.baseUnit === tr.b.Unit.byName.sizeInBytes) {
|
| return { unitPrefix: tr.b.UnitPrefixScale.BINARY.KIBI };
|
| + }
|
| return undefined;
|
| }
|
| };
|
|
|