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
This commit is contained in:
Pascal Hartig
2019-06-03 14:38:41 -07:00
committed by Facebook Github Bot
parent befaecbf7c
commit 023135ad74

View File

@@ -130,26 +130,28 @@ export default class extends FlipperPlugin<PluginState, *, PersistedState> {
persistedState: PersistedState,
): Promise<MetricType> => {
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});
};