diff --git a/src/plugins/fresco/ImagesCacheOverview.js b/src/plugins/fresco/ImagesCacheOverview.js index 1f9d352f5..6ffb30c3d 100644 --- a/src/plugins/fresco/ImagesCacheOverview.js +++ b/src/plugins/fresco/ImagesCacheOverview.js @@ -19,6 +19,7 @@ import { LoadingIndicator, styled, Select, + Checkbox, } from 'flipper'; import type {ImagesMap} from './ImagePool.js'; import {clipboard} from 'electron'; @@ -33,6 +34,8 @@ function formatKB(bytes: number) { } type ImagesCacheOverviewProps = { + onColdStartChange: (checked: boolean) => void, + coldStartFilter: boolean, surfaceOptions: {[key: string]: string}, selectedSurface: string, onChangeSurface: (key: string) => void, @@ -60,6 +63,12 @@ const StyledSelect = styled(Select)(props => ({ height: '100%', })); +const StyledCheckbox = styled(Checkbox)(props => ({ + marginLeft: 6, + marginRight: 6, + height: '100%', +})); + export default class ImagesCacheOverview extends PureComponent< ImagesCacheOverviewProps, ImagesCacheOverviewState, @@ -119,14 +128,6 @@ export default class ImagesCacheOverview extends PureComponent< (c, cacheInfo) => c + cacheInfo.imageIds.length, 0, ) > 0; - if (!hasImages) { - return ( - - - - ); - } - return ( + + Show ColdStart Images - - {this.props.images.map(data => { - const maxSize = data.maxSizeBytes; - const subtitle = maxSize - ? formatMB(data.sizeBytes) + ' / ' + formatMB(maxSize) - : formatMB(data.sizeBytes); - const onClear = data.clearKey - ? () => this.props.onClear(data.clearKey) - : null; - return ( - - ); - })} - + {!hasImages ? ( + + + + ) : ( + + {this.props.images.map(data => { + const maxSize = data.maxSizeBytes; + const subtitle = maxSize + ? formatMB(data.sizeBytes) + ' / ' + formatMB(maxSize) + : formatMB(data.sizeBytes); + const onClear = data.clearKey + ? () => this.props.onClear(data.clearKey) + : null; + return ( + + ); + })} + + )} ); } diff --git a/src/plugins/fresco/index.js b/src/plugins/fresco/index.js index c3734eba8..f41b25319 100644 --- a/src/plugins/fresco/index.js +++ b/src/plugins/fresco/index.js @@ -44,6 +44,7 @@ type PluginState = { isDebugOverlayEnabled: boolean, isAutoRefreshEnabled: boolean, images: ImagesList, + coldStartFilter: boolean, }; const EmptySidebar = styled(FlexRow)({ @@ -75,6 +76,7 @@ export default class extends FlipperPlugin { isDebugOverlayEnabled: false, isAutoRefreshEnabled: false, images: [], + coldStartFilter: false, }; init() { @@ -120,19 +122,27 @@ export default class extends FlipperPlugin { images: ImagesList, events: Array, surface: string, + coldStart: boolean, ): ImagesList => { - if (!surface || surface === surfaceDefaultText) { + if (!surface || (surface === surfaceDefaultText && !coldStart)) { return images; } const imageList = images.map((image: CacheInfo) => { const imageIdList = image.imageIds.filter(imageID => { const filteredEvents = events.filter((event: ImageEventWithId) => { - return ( + const output = event.attribution && event.attribution.length > 0 && - event.attribution[0] == surface && event.imageIds && - event.imageIds.includes(imageID) + event.imageIds.includes(imageID); + + if (surface === surfaceDefaultText) { + return output && coldStart && event.coldStart; + } + return ( + (!coldStart || (coldStart && event.coldStart)) && + output && + event.attribution[0] == surface ); }); return filteredEvents.length > 0; @@ -142,13 +152,22 @@ export default class extends FlipperPlugin { return imageList; }; - updateImagesOnUI = (images: ImagesList, surface: string) => { + updateImagesOnUI = ( + images: ImagesList, + surface: string, + coldStart: boolean, + ) => { const filteredImages = this.filterImages( images, this.props.persistedState.events, surface, + coldStart, ); - this.setState({selectedSurface: surface, images: filteredImages}); + this.setState({ + selectedSurface: surface, + images: filteredImages, + coldStartFilter: coldStart, + }); }; updateCaches = (reason: string) => { if (DEBUG) { @@ -163,6 +182,7 @@ export default class extends FlipperPlugin { this.updateImagesOnUI( this.props.persistedState.images, this.state.selectedSurface, + this.state.coldStartFilter, ); }); }; @@ -233,7 +253,19 @@ export default class extends FlipperPlugin { }; onSurfaceChange = (surface: string) => { - this.updateImagesOnUI(this.props.persistedState.images, surface); + this.updateImagesOnUI( + this.props.persistedState.images, + surface, + this.state.coldStartFilter, + ); + }; + + onColdStartChange = (checked: boolean) => { + this.updateImagesOnUI( + this.props.persistedState.images, + this.state.selectedSurface, + checked, + ); }; render() { @@ -249,6 +281,8 @@ export default class extends FlipperPlugin { surfaceOptions={options} selectedSurface={this.state.selectedSurface} onChangeSurface={this.onSurfaceChange} + coldStartFilter={this.state.coldStartFilter} + onColdStartChange={this.onColdStartChange} images={this.state.images} onClear={this.onClear} onTrimMemory={this.onTrimMemory}