Merge "Use a SC wrapper when running on background thread" into sc-v2-dev
This commit is contained in:
@@ -72,6 +72,8 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
private boolean mWindowVisible;
|
private boolean mWindowVisible;
|
||||||
private boolean mWindowHasBlurs;
|
private boolean mWindowHasBlurs;
|
||||||
private SurfaceControl mRegisteredStopLayer = null;
|
private SurfaceControl mRegisteredStopLayer = null;
|
||||||
|
// A copy of mRegisteredStopLayer where we own the life cycle and can access from a bg thread.
|
||||||
|
private SurfaceControl mWrappedStopLayer = null;
|
||||||
private ViewTreeObserver.OnDrawListener mUpdateOnDraw = new ViewTreeObserver.OnDrawListener() {
|
private ViewTreeObserver.OnDrawListener mUpdateOnDraw = new ViewTreeObserver.OnDrawListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onDraw() {
|
public void onDraw() {
|
||||||
@@ -184,16 +186,21 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
}
|
}
|
||||||
if (!mSamplingRequestBounds.equals(mRegisteredSamplingBounds)
|
if (!mSamplingRequestBounds.equals(mRegisteredSamplingBounds)
|
||||||
|| mRegisteredStopLayer != stopLayerControl) {
|
|| mRegisteredStopLayer != stopLayerControl) {
|
||||||
// We only want to reregister if something actually changed
|
// We only want to re-register if something actually changed
|
||||||
unregisterSamplingListener();
|
unregisterSamplingListener();
|
||||||
mSamplingListenerRegistered = true;
|
mSamplingListenerRegistered = true;
|
||||||
SurfaceControl registeredStopLayer = stopLayerControl;
|
SurfaceControl wrappedStopLayer = stopLayerControl == null
|
||||||
|
? null : new SurfaceControl(stopLayerControl, "regionSampling");
|
||||||
mBackgroundExecutor.execute(() -> {
|
mBackgroundExecutor.execute(() -> {
|
||||||
|
if (wrappedStopLayer != null && !wrappedStopLayer.isValid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
|
CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
|
||||||
registeredStopLayer, mSamplingRequestBounds);
|
wrappedStopLayer, mSamplingRequestBounds);
|
||||||
});
|
});
|
||||||
mRegisteredSamplingBounds.set(mSamplingRequestBounds);
|
mRegisteredSamplingBounds.set(mSamplingRequestBounds);
|
||||||
mRegisteredStopLayer = registeredStopLayer;
|
mRegisteredStopLayer = stopLayerControl;
|
||||||
|
mWrappedStopLayer = wrappedStopLayer;
|
||||||
}
|
}
|
||||||
mFirstSamplingAfterStart = false;
|
mFirstSamplingAfterStart = false;
|
||||||
} else {
|
} else {
|
||||||
@@ -204,10 +211,14 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
private void unregisterSamplingListener() {
|
private void unregisterSamplingListener() {
|
||||||
if (mSamplingListenerRegistered) {
|
if (mSamplingListenerRegistered) {
|
||||||
mSamplingListenerRegistered = false;
|
mSamplingListenerRegistered = false;
|
||||||
|
SurfaceControl wrappedStopLayer = mWrappedStopLayer;
|
||||||
mRegisteredStopLayer = null;
|
mRegisteredStopLayer = null;
|
||||||
mRegisteredSamplingBounds.setEmpty();
|
mRegisteredSamplingBounds.setEmpty();
|
||||||
mBackgroundExecutor.execute(() -> {
|
mBackgroundExecutor.execute(() -> {
|
||||||
CompositionSamplingListener.unregister(mSamplingListener);
|
CompositionSamplingListener.unregister(mSamplingListener);
|
||||||
|
if (wrappedStopLayer != null && wrappedStopLayer.isValid()) {
|
||||||
|
wrappedStopLayer.release();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -262,6 +273,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
pw.println(" mWindowHasBlurs: " + mWindowHasBlurs);
|
pw.println(" mWindowHasBlurs: " + mWindowHasBlurs);
|
||||||
pw.println(" mWaitingOnDraw: " + mWaitingOnDraw);
|
pw.println(" mWaitingOnDraw: " + mWaitingOnDraw);
|
||||||
pw.println(" mRegisteredStopLayer: " + mRegisteredStopLayer);
|
pw.println(" mRegisteredStopLayer: " + mRegisteredStopLayer);
|
||||||
|
pw.println(" mWrappedStopLayer: " + mWrappedStopLayer);
|
||||||
pw.println(" mIsDestroyed: " + mIsDestroyed);
|
pw.println(" mIsDestroyed: " + mIsDestroyed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user