diff --git a/src/plugins/fresco/index.js b/src/plugins/fresco/index.js index a55bfd68b..c26500e59 100644 --- a/src/plugins/fresco/index.js +++ b/src/plugins/fresco/index.js @@ -15,7 +15,7 @@ import type { CacheInfo, } from './api.js'; import type {ImagesMap} from './ImagePool.js'; - +import type {MetricType} from 'flipper'; import React from 'react'; import ImagesCacheOverview from './ImagesCacheOverview.js'; import { @@ -73,6 +73,33 @@ export default class extends FlipperPlugin { surfaceList: new Set(), }; + static metricsReducer = ( + persistedState: PersistedState, + ): Promise => { + const {events, imagesMap} = persistedState; + let wastedBytes = 0; + events.forEach(event => { + const {viewport, imageIds} = event; + if (!viewport) { + return; + } + 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 Promise.resolve({WASTED_BYTES: wastedBytes}); + }; + state: PluginState; imagePool: ImagePool; nextEventId: number = 1;