private synchronized void release() { if (released) { return; } if (layoutState != null) { layoutState.releaseRef(); layoutState = null; } released = true; }
private void releaseLastMountedLayoutState() { if (mLastMountedLayoutState != null) { mLastMountedLayoutState.releaseRef(); mLastMountedLayoutState = null; } } }
@Override public @Nullable LayoutState call() { synchronized (LayoutStateFuture.this) { if (released) { return null; } } final LayoutState result = calculateLayoutStateInternal( context, root, widthSpec, heightSpec, diffingEnabled, previousLayoutState, treeProps, source, extraAttribution); synchronized (LayoutStateFuture.this) { if (released) { result.releaseRef(); return null; } else { layoutState = result; return result; } } } });
mainThreadLayoutState.releaseRef(); mainThreadLayoutState = null; backgroundLayoutState.releaseRef(); backgroundLayoutState = null;
toRelease.releaseRef(); toRelease = null;
/** * Pre-allocate the mount content of all MountSpec in this tree. Must be called after layout is * created. */ @ThreadSafe(enableChecks = false) private void preAllocateMountContent(boolean shouldPreallocatePerMountSpec) { final LayoutState toPrePopulate; synchronized (this) { if (mMainThreadLayoutState != null) { toPrePopulate = mMainThreadLayoutState.acquireRef(); } else if (mBackgroundLayoutState != null) { toPrePopulate = mBackgroundLayoutState.acquireRef(); } else { return; } } final ComponentsLogger logger = mContext.getLogger(); final PerfEvent event = logger != null ? LogTreePopulator.populatePerfEventFromLogger( mContext, logger, logger.newPerformanceEvent(EVENT_PRE_ALLOCATE_MOUNT_CONTENT)) : null; toPrePopulate.preAllocateMountContent(shouldPreallocatePerMountSpec); if (logger != null) { logger.logPerfEvent(event); } toPrePopulate.releaseRef(); }
mUnspecifiedSizeSpec, LayoutState.CalculateLayoutSource.TEST); layoutState.releaseRef();
toRelease.releaseRef(); toRelease = null;
toRelease.releaseRef(); toRelease = null; mMainThreadLayoutState = null; localLayoutState.releaseRef();
previousLayoutState.releaseRef(); previousLayoutState = null; localLayoutState.releaseRef(); localLayoutState = null;