mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Clean up View Recycling
Summary: Followups to View Recycling diffs to improve things / clean up things a bit. This also fixes memory warnings which were not hooked up before. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D36707792 fbshipit-source-id: 410e70bf0eeec5569566138af547e1601394d0e6
This commit is contained in:
1 parent
bffad4351c
commit
a68dca3c46
9 files changed
+101
-107
No files matched your search
@@ -41,15 +41,23 @@ public abstract class ViewManager<T extends View, C extends ReactShadowNode>
|
||||
* null signals that View Recycling is disabled. `enableViewRecycling` must be explicitly called
|
||||
* in a concrete constructor to enable View Recycling per ViewManager.
|
||||
*/
|
||||
private HashMap<Integer, Stack<T>> mRecyclableViews = null;
|
||||
@Nullable private HashMap<Integer, Stack<T>> mRecyclableViews = null;
|
||||
|
||||
private int mRecyclableViewsBufferSize = 1024;
|
||||
|
||||
/** Call in constructor of concrete ViewManager class to enable. */
|
||||
protected void enableViewRecycling() {
|
||||
protected void setupViewRecycling() {
|
||||
if (ReactFeatureFlags.enableViewRecycling) {
|
||||
mRecyclableViews = new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
/** Call in constructor of concrete ViewManager class to enable. */
|
||||
protected void setupViewRecycling(int bufferSize) {
|
||||
mRecyclableViewsBufferSize = bufferSize;
|
||||
setupViewRecycling();
|
||||
}
|
||||
|
||||
private @Nullable Stack<T> getRecyclableViewStack(int surfaceId) {
|
||||
if (mRecyclableViews == null) {
|
||||
return null;
|
||||
@@ -191,12 +199,16 @@ public abstract class ViewManager<T extends View, C extends ReactShadowNode>
|
||||
* {@link ViewManager} subclass.
|
||||
*/
|
||||
public void onDropViewInstance(@NonNull T view) {
|
||||
@Nullable
|
||||
Stack<T> recyclableViews =
|
||||
getRecyclableViewStack(((ThemedReactContext) view.getContext()).getSurfaceId());
|
||||
// By default we treat views as recyclable
|
||||
if (recyclableViews != null) {
|
||||
recyclableViews.push(prepareToRecycleView((ThemedReactContext) view.getContext(), view));
|
||||
// View recycling
|
||||
ThemedReactContext themedReactContext = (ThemedReactContext) view.getContext();
|
||||
int surfaceId = themedReactContext.getSurfaceId();
|
||||
@Nullable Stack<T> recyclableViews = getRecyclableViewStack(surfaceId);
|
||||
|
||||
// Any max buffer size <0 results in an infinite buffer size
|
||||
if (recyclableViews != null
|
||||
&& (mRecyclableViewsBufferSize < 0
|
||||
|| recyclableViews.size() < mRecyclableViewsBufferSize)) {
|
||||
recyclableViews.push(prepareToRecycleView(themedReactContext, view));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user