Add metrics for closeable reference leaks
Summary: Add a metric for the raw number of leaked closeable references. Reviewed By: priteshrnandgaonkar Differential Revision: D15603348 fbshipit-source-id: 03379e180b5822620e8e8347bef354edb3527d19
This commit is contained in:
committed by
Facebook Github Bot
parent
62c112c713
commit
6e0121686c
@@ -38,6 +38,7 @@ type PersistedState = {
|
||||
images: ImagesList,
|
||||
events: Array<ImageEventWithId>,
|
||||
imagesMap: ImagesMap,
|
||||
closeableReferenceLeaks: Array<AndroidCloseableReferenceLeakEvent>,
|
||||
};
|
||||
|
||||
type PluginState = {
|
||||
@@ -78,6 +79,7 @@ export default class extends FlipperPlugin<PluginState, *, PersistedState> {
|
||||
events: [],
|
||||
imagesMap: {},
|
||||
surfaceList: new Set(),
|
||||
closeableReferenceLeaks: [],
|
||||
};
|
||||
|
||||
static exportPersistedState = (
|
||||
@@ -98,10 +100,10 @@ export default class extends FlipperPlugin<PluginState, *, PersistedState> {
|
||||
}
|
||||
const {levels, events, imageDataList} = data;
|
||||
let pluginData: PersistedState = {
|
||||
...FlipperPlugin.defaultPersistedState,
|
||||
images: [...levels.levels],
|
||||
surfaceList: new Set(),
|
||||
events: [],
|
||||
imagesMap: {},
|
||||
closeableReferenceLeaks:
|
||||
(persistedState && persistedState.closeableReferenceLeaks) || [],
|
||||
};
|
||||
|
||||
events.forEach((event: ImageEventWithId, index) => {
|
||||
@@ -133,11 +135,29 @@ export default class extends FlipperPlugin<PluginState, *, PersistedState> {
|
||||
});
|
||||
};
|
||||
|
||||
static persistedStateReducer = (
|
||||
persistedState: PersistedState,
|
||||
method: string,
|
||||
data: Object,
|
||||
): PersistedState => {
|
||||
if (method == 'closeable_reference_leak_event') {
|
||||
const event: AndroidCloseableReferenceLeakEvent = data;
|
||||
return {
|
||||
...persistedState,
|
||||
closeableReferenceLeaks: persistedState.closeableReferenceLeaks.concat(
|
||||
event,
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
return persistedState;
|
||||
};
|
||||
|
||||
static metricsReducer = (
|
||||
persistedState: PersistedState,
|
||||
): Promise<MetricType> => {
|
||||
const {events, imagesMap} = persistedState;
|
||||
let wastedBytes = events.reduce((acc, event) => {
|
||||
const {events, imagesMap, closeableReferenceLeaks} = persistedState;
|
||||
let wastedBytes = (events || []).reduce((acc, event) => {
|
||||
const {viewport, imageIds} = event;
|
||||
if (!viewport) {
|
||||
return acc;
|
||||
@@ -159,7 +179,10 @@ export default class extends FlipperPlugin<PluginState, *, PersistedState> {
|
||||
}, acc)
|
||||
);
|
||||
}, 0);
|
||||
return Promise.resolve({WASTED_BYTES: wastedBytes});
|
||||
return Promise.resolve({
|
||||
WASTED_BYTES: wastedBytes,
|
||||
CLOSEABLE_REFERENCE_LEAKS: (closeableReferenceLeaks || []).length,
|
||||
});
|
||||
};
|
||||
|
||||
state: PluginState;
|
||||
@@ -235,13 +258,6 @@ export default class extends FlipperPlugin<PluginState, *, PersistedState> {
|
||||
this.setState({isDebugOverlayEnabled: event.enabled});
|
||||
},
|
||||
);
|
||||
this.client.subscribe(
|
||||
'closeable_reference_leak_event',
|
||||
(event: AndroidCloseableReferenceLeakEvent) => {
|
||||
// TODO(T45065440): Temporary log, to be turned into counter.
|
||||
console.warn('CloseableReference leak detected:', event);
|
||||
},
|
||||
);
|
||||
this.imagePool = new ImagePool(this.getImage, (images: ImagesMap) =>
|
||||
this.props.setPersistedState({imagesMap: images}),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user