From 023135ad746783b35dba75d7a180514b8d381f34 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Mon, 3 Jun 2019 14:38:41 -0700 Subject: [PATCH] Reduce in metrics reducer Summary: Actually reduce in the reducer step instead of using mutable state. Reviewed By: jknoxville Differential Revision: D15603095 fbshipit-source-id: f603ca548bb760db5423a4c1871d94284ece9521 --- src/plugins/fresco/index.js | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/plugins/fresco/index.js b/src/plugins/fresco/index.js index 0971b7cb1..3865ccf25 100644 --- a/src/plugins/fresco/index.js +++ b/src/plugins/fresco/index.js @@ -130,26 +130,28 @@ export default class extends FlipperPlugin { persistedState: PersistedState, ): Promise => { const {events, imagesMap} = persistedState; - let wastedBytes = 0; - events.forEach(event => { + let wastedBytes = events.reduce((acc, event) => { const {viewport, imageIds} = event; if (!viewport) { - return; + return acc; } - imageIds.forEach(imageID => { - const imageData: ImageData = imagesMap[imageID]; - if (!imageData) { - return; - } - const imageWidth: number = imageData.width; - const imageHeight: number = imageData.height; - const viewPortWidth: number = viewport.width; - const viewPortHeight: number = viewport.height; - const viewPortArea = viewPortWidth * viewPortHeight; - const imageArea = imageWidth * imageHeight; - wastedBytes += Math.max(0, imageArea - viewPortArea); - }); - }); + return ( + acc + + imageIds.reduce((innerAcc, imageID) => { + const imageData: ImageData = imagesMap[imageID]; + if (!imageData) { + return innerAcc; + } + const imageWidth: number = imageData.width; + const imageHeight: number = imageData.height; + const viewPortWidth: number = viewport.width; + const viewPortHeight: number = viewport.height; + const viewPortArea = viewPortWidth * viewPortHeight; + const imageArea = imageWidth * imageHeight; + return innerAcc + Math.max(0, imageArea - viewPortArea); + }, acc) + ); + }, 0); return Promise.resolve({WASTED_BYTES: wastedBytes}); };