Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelineEventOverview.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineEventOverview.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineEventOverview.js |
| index 45b6cab911621837f78a7b118348fa15ef44fbe2..71c8a933e07ce608d3807f08a9bc5d9895b6ef11 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineEventOverview.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineEventOverview.js |
| @@ -364,7 +364,7 @@ Timeline.TimelineFilmStripOverview = class extends Timeline.TimelineEventOvervie |
| this._imageByFrame(frames[0]).then(image => { |
| if (this._drawGeneration !== drawGeneration) |
| return; |
| - if (!image.naturalWidth || !image.naturalHeight) |
| + if (!image || !image.naturalWidth || !image.naturalHeight) |
| return; |
| var imageHeight = this.height() - 2 * Timeline.TimelineFilmStripOverview.Padding; |
| var imageWidth = Math.ceil(imageHeight * image.naturalWidth / image.naturalHeight); |
| @@ -376,34 +376,15 @@ Timeline.TimelineFilmStripOverview = class extends Timeline.TimelineEventOvervie |
| /** |
| * @param {!SDK.FilmStripModel.Frame} frame |
| - * @return {!Promise<!HTMLImageElement>} |
| + * @return {!Promise<?HTMLImageElement>} |
| */ |
| _imageByFrame(frame) { |
| var imagePromise = this._frameToImagePromise.get(frame); |
| if (!imagePromise) { |
| - imagePromise = frame.imageDataPromise().then(createImage); |
| + imagePromise = frame.imageDataPromise().then(data => UI.loadImage(data ? 'data:image/jpg;base64,' + data : '')); |
|
caseq
2017/05/01 22:13:35
Are we sure UI.loadImage() will handle '' well?
alph
2017/05/02 18:31:13
Done.
|
| this._frameToImagePromise.set(frame, imagePromise); |
| } |
| return imagePromise; |
| - |
| - /** |
| - * @param {?string} data |
| - * @return {!Promise<!HTMLImageElement>} |
| - */ |
| - function createImage(data) { |
| - var fulfill; |
| - var promise = new Promise(f => fulfill = f); |
| - |
| - var image = /** @type {!HTMLImageElement} */ (createElement('img')); |
| - if (data) { |
| - image.src = 'data:image/jpg;base64,' + data; |
| - image.addEventListener('load', () => fulfill(image)); |
| - image.addEventListener('error', () => fulfill(image)); |
| - } else { |
| - fulfill(image); |
| - } |
| - return promise; |
| - } |
| } |
| /** |
| @@ -438,12 +419,12 @@ Timeline.TimelineFilmStripOverview = class extends Timeline.TimelineEventOvervie |
| /** |
| * @param {number} x |
| - * @param {!HTMLImageElement} image |
| + * @param {?HTMLImageElement} image |
| * @this {Timeline.TimelineFilmStripOverview} |
| */ |
| function drawFrameImage(x, image) { |
| // Ignore draws deferred from a previous update call. |
| - if (this._drawGeneration !== drawGeneration) |
| + if (this._drawGeneration !== drawGeneration || !image) |
| return; |
| context.drawImage(image, x, 1, imageWidth, imageHeight); |
| } |
| @@ -467,12 +448,13 @@ Timeline.TimelineFilmStripOverview = class extends Timeline.TimelineEventOvervie |
| /** |
| * @this {Timeline.TimelineFilmStripOverview} |
| - * @param {!HTMLImageElement} image |
| + * @param {?HTMLImageElement} image |
| * @return {?Element} |
| */ |
| function createFrameElement(image) { |
| var element = createElementWithClass('div', 'frame'); |
| - element.createChild('div', 'thumbnail').appendChild(image); |
| + if (image) |
| + element.createChild('div', 'thumbnail').appendChild(image); |
| this._lastFrame = frame; |
| this._lastElement = element; |
| return element; |