Merge "Estimate render times for file list rows"

This commit is contained in:
Wyatt Allen
2018-05-16 18:06:58 +00:00
committed by Gerrit Code Review
3 changed files with 38 additions and 0 deletions

View File

@@ -283,6 +283,7 @@ limitations under the License.
as="file"
initial-count="[[fileListIncrement]]"
target-framerate="1">
[[_reportRenderedRow(index)]]
<div class="stickyArea">
<div class$="file-row row [[_computePathClass(file.__path, _expandedFilePaths.*)]]"
data-path$="[[file.__path]]" tabindex="-1">

View File

@@ -26,6 +26,8 @@
const SIZE_BAR_GAP_WIDTH = 1;
const SIZE_BAR_MIN_WIDTH = 1.5;
const RENDER_TIME = 'FileListRenderTime';
const FileStatus = {
A: 'Added',
C: 'Copied',
@@ -797,6 +799,12 @@
_computeFilesShown(numFilesShown, files) {
const filesShown = files.base.slice(0, numFilesShown);
this.fire('files-shown-changed', {length: filesShown.length});
// Start the timer for the rendering work hwere because this is where the
// _shownFiles property is being set, and _shownFiles is used in the
// dom-repeat binding.
this.$.reporting.time(RENDER_TIME);
return filesShown;
},
@@ -1175,5 +1183,21 @@
_noDiffsExpanded() {
return this.filesExpanded === GrFileListConstants.FilesExpandedState.NONE;
},
/**
* Method to call via binding when each file list row is rendered. This
* allows approximate detection of when the dom-repeat has completed
* rendering.
* @param {number} index The index of the row being rendered.
* @return {string} an empty string.
*/
_reportRenderedRow(index) {
if (index === this._shownFiles.length - 1) {
this.async(() => {
this.$.reporting.timeEnd(RENDER_TIME);
}, 1);
}
return '';
},
});
})();

View File

@@ -127,6 +127,19 @@ limitations under the License.
assert.isTrue(controlRow.classList.contains('invisible'));
});
test('rendering each row calls the _reportRenderedRow method', () => {
const renderedStub = sandbox.stub(element, '_reportRenderedRow');
element._filesByPath = _.range(10)
.reduce((_filesByPath, i) => {
_filesByPath['/file' + i] = {lines_inserted: 9};
return _filesByPath;
}, {});
flushAsynchronousOperations();
assert.equal(
Polymer.dom(element.root).querySelectorAll('.file-row').length, 10);
assert.equal(renderedStub.callCount, 10);
});
test('calculate totals for patch number', () => {
element._filesByPath = {
'/COMMIT_MSG': {