Merge "Offload Luma Sampling IPC to background thread" into sc-v2-dev
This commit is contained in:
@@ -98,6 +98,7 @@ import java.io.PrintWriter;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class NavigationBarView extends FrameLayout implements
|
public class NavigationBarView extends FrameLayout implements
|
||||||
@@ -354,6 +355,7 @@ public class NavigationBarView extends FrameLayout implements
|
|||||||
mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.Factory.class)
|
mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.Factory.class)
|
||||||
.create(mContext);
|
.create(mContext);
|
||||||
mEdgeBackGestureHandler.setStateChangeCallback(this::updateStates);
|
mEdgeBackGestureHandler.setStateChangeCallback(this::updateStates);
|
||||||
|
Executor backgroundExecutor = Dependency.get(Dependency.BACKGROUND_EXECUTOR);
|
||||||
mRegionSamplingHelper = new RegionSamplingHelper(this,
|
mRegionSamplingHelper = new RegionSamplingHelper(this,
|
||||||
new RegionSamplingHelper.SamplingCallback() {
|
new RegionSamplingHelper.SamplingCallback() {
|
||||||
@Override
|
@Override
|
||||||
@@ -376,7 +378,7 @@ public class NavigationBarView extends FrameLayout implements
|
|||||||
public boolean isSamplingEnabled() {
|
public boolean isSamplingEnabled() {
|
||||||
return isGesturalModeOnDefaultDisplay(getContext(), mNavBarMode);
|
return isGesturalModeOnDefaultDisplay(getContext(), mNavBarMode);
|
||||||
}
|
}
|
||||||
});
|
}, backgroundExecutor);
|
||||||
|
|
||||||
mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class);
|
mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class);
|
||||||
if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
|
if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ import com.android.systemui.plugins.NavigationEdgeBackPlugin;
|
|||||||
import com.android.systemui.statusbar.VibratorHelper;
|
import com.android.systemui.statusbar.VibratorHelper;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPlugin {
|
public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPlugin {
|
||||||
|
|
||||||
@@ -349,6 +350,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
|
|||||||
.getDimension(R.dimen.navigation_edge_action_drag_threshold);
|
.getDimension(R.dimen.navigation_edge_action_drag_threshold);
|
||||||
setVisibility(GONE);
|
setVisibility(GONE);
|
||||||
|
|
||||||
|
Executor backgroundExecutor = Dependency.get(Dependency.BACKGROUND_EXECUTOR);
|
||||||
boolean isPrimaryDisplay = mContext.getDisplayId() == DEFAULT_DISPLAY;
|
boolean isPrimaryDisplay = mContext.getDisplayId() == DEFAULT_DISPLAY;
|
||||||
mRegionSamplingHelper = new RegionSamplingHelper(this,
|
mRegionSamplingHelper = new RegionSamplingHelper(this,
|
||||||
new RegionSamplingHelper.SamplingCallback() {
|
new RegionSamplingHelper.SamplingCallback() {
|
||||||
@@ -366,7 +368,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
|
|||||||
public boolean isSamplingEnabled() {
|
public boolean isSamplingEnabled() {
|
||||||
return isPrimaryDisplay;
|
return isPrimaryDisplay;
|
||||||
}
|
}
|
||||||
});
|
}, backgroundExecutor);
|
||||||
mRegionSamplingHelper.setWindowVisible(true);
|
mRegionSamplingHelper.setWindowVisible(true);
|
||||||
mShowProtection = !isPrimaryDisplay;
|
mShowProtection = !isPrimaryDisplay;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.view.ViewTreeObserver;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper class to sample regions on the screen and inspect its luminosity.
|
* A helper class to sample regions on the screen and inspect its luminosity.
|
||||||
@@ -52,6 +53,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
*/
|
*/
|
||||||
private final Rect mRegisteredSamplingBounds = new Rect();
|
private final Rect mRegisteredSamplingBounds = new Rect();
|
||||||
private final SamplingCallback mCallback;
|
private final SamplingCallback mCallback;
|
||||||
|
private final Executor mBackgroundExecutor;
|
||||||
private boolean mSamplingEnabled = false;
|
private boolean mSamplingEnabled = false;
|
||||||
private boolean mSamplingListenerRegistered = false;
|
private boolean mSamplingListenerRegistered = false;
|
||||||
|
|
||||||
@@ -82,7 +84,9 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public RegionSamplingHelper(View sampledView, SamplingCallback samplingCallback) {
|
public RegionSamplingHelper(View sampledView, SamplingCallback samplingCallback,
|
||||||
|
Executor backgroundExecutor) {
|
||||||
|
mBackgroundExecutor = backgroundExecutor;
|
||||||
mSamplingListener = new CompositionSamplingListener(
|
mSamplingListener = new CompositionSamplingListener(
|
||||||
sampledView.getContext().getMainExecutor()) {
|
sampledView.getContext().getMainExecutor()) {
|
||||||
@Override
|
@Override
|
||||||
@@ -183,10 +187,13 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
// We only want to reregister if something actually changed
|
// We only want to reregister if something actually changed
|
||||||
unregisterSamplingListener();
|
unregisterSamplingListener();
|
||||||
mSamplingListenerRegistered = true;
|
mSamplingListenerRegistered = true;
|
||||||
|
SurfaceControl registeredStopLayer = stopLayerControl;
|
||||||
|
mBackgroundExecutor.execute(() -> {
|
||||||
CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
|
CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
|
||||||
stopLayerControl, mSamplingRequestBounds);
|
registeredStopLayer, mSamplingRequestBounds);
|
||||||
|
});
|
||||||
mRegisteredSamplingBounds.set(mSamplingRequestBounds);
|
mRegisteredSamplingBounds.set(mSamplingRequestBounds);
|
||||||
mRegisteredStopLayer = stopLayerControl;
|
mRegisteredStopLayer = registeredStopLayer;
|
||||||
}
|
}
|
||||||
mFirstSamplingAfterStart = false;
|
mFirstSamplingAfterStart = false;
|
||||||
} else {
|
} else {
|
||||||
@@ -199,7 +206,9 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
|
|||||||
mSamplingListenerRegistered = false;
|
mSamplingListenerRegistered = false;
|
||||||
mRegisteredStopLayer = null;
|
mRegisteredStopLayer = null;
|
||||||
mRegisteredSamplingBounds.setEmpty();
|
mRegisteredSamplingBounds.setEmpty();
|
||||||
|
mBackgroundExecutor.execute(() -> {
|
||||||
CompositionSamplingListener.unregister(mSamplingListener);
|
CompositionSamplingListener.unregister(mSamplingListener);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user