summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/IWindowManager.aidl2
-rw-r--r--core/java/android/view/SurfaceView.java13
-rw-r--r--core/java/android/view/ViewRootImpl.java11
-rw-r--r--core/java/android/view/WindowManagerGlobal.java20
4 files changed, 28 insertions, 18 deletions
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index f9a023fafc3c..17303478fa50 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -97,6 +97,8 @@ interface IWindowManager
IWindowSession openSession(in IWindowSessionCallback callback);
+ boolean useBLAST();
+
@UnsupportedAppUsage
void getInitialDisplaySize(int displayId, out Point size);
@UnsupportedAppUsage
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index b1c354f6f717..637a088e4c5d 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -22,7 +22,6 @@ import static android.view.WindowManagerPolicyConstants.APPLICATION_PANEL_SUBLAY
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.CompatibilityInfo.Translator;
@@ -43,8 +42,8 @@ import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceControl.Transaction;
-import android.view.accessibility.AccessibilityNodeInfo;
import android.view.SurfaceControlViewHost;
+import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.view.SurfaceCallbackHelper;
@@ -386,7 +385,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
* This gets called on a RenderThread worker thread, so members accessed here must
* be protected by a lock.
*/
- final boolean useBLAST = WindowManagerGlobal.USE_BLAST_ADAPTER;
+ final boolean useBLAST = WindowManagerGlobal.getInstance().useBLAST();
viewRoot.registerRtFrameCallback(frame -> {
try {
final SurfaceControl.Transaction t = useBLAST ?
@@ -1120,7 +1119,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
private void applySurfaceTransforms(SurfaceControl surface, SurfaceControl.Transaction t,
Rect position, long frameNumber) {
- if (frameNumber > 0 && !WindowManagerGlobal.USE_BLAST_ADAPTER) {
+ if (frameNumber > 0 && !WindowManagerGlobal.getInstance().useBLAST()) {
final ViewRootImpl viewRoot = getViewRootImpl();
t.deferTransactionUntil(surface, viewRoot.getRenderSurfaceControl(),
@@ -1138,7 +1137,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
}
private void setParentSpaceRectangle(Rect position, long frameNumber) {
- final boolean useBLAST = WindowManagerGlobal.USE_BLAST_ADAPTER;
+ final boolean useBLAST = WindowManagerGlobal.getInstance().useBLAST();
final ViewRootImpl viewRoot = getViewRootImpl();
final SurfaceControl.Transaction t = useBLAST ? viewRoot.getBLASTSyncTransaction() :
mRtTransaction;
@@ -1199,7 +1198,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
@Override
public void positionLost(long frameNumber) {
- boolean useBLAST = WindowManagerGlobal.USE_BLAST_ADAPTER;
+ boolean useBLAST = WindowManagerGlobal.getInstance().useBLAST();
if (DEBUG) {
Log.d(TAG, String.format("%d windowPositionLost, frameNr = %d",
System.identityHashCode(this), frameNumber));
@@ -1538,7 +1537,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
@Override
public void invalidate(boolean invalidateCache) {
super.invalidate(invalidateCache);
- if (!WindowManagerGlobal.USE_BLAST_ADAPTER) {
+ if (!WindowManagerGlobal.getInstance().useBLAST()) {
return;
}
final ViewRootImpl viewRoot = getViewRootImpl();
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 159b93eb12dd..ebfe66f7e7b7 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -315,6 +315,8 @@ public final class ViewRootImpl implements ViewParent,
*/
private boolean mForceNextConfigUpdate;
+ private final boolean mUseBLASTAdapter;
+
/**
* Signals that compatibility booleans have been initialized according to
* target SDK versions.
@@ -734,6 +736,7 @@ public final class ViewRootImpl implements ViewParent,
loadSystemProperties();
mImeFocusController = new ImeFocusController(this);
+ mUseBLASTAdapter = WindowManagerGlobal.getInstance().useBLAST();
}
public static void addFirstDrawHandler(Runnable callback) {
@@ -861,7 +864,7 @@ public final class ViewRootImpl implements ViewParent,
if (mWindowAttributes.packageName == null) {
mWindowAttributes.packageName = mBasePackageName;
}
- if (WindowManagerGlobal.USE_BLAST_ADAPTER) {
+ if (mUseBLASTAdapter) {
mWindowAttributes.privateFlags |=
WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST;
}
@@ -1341,7 +1344,7 @@ public final class ViewRootImpl implements ViewParent,
}
mWindowAttributes.privateFlags |= compatibleWindowFlag;
- if (WindowManagerGlobal.USE_BLAST_ADAPTER) {
+ if (mUseBLASTAdapter) {
mWindowAttributes.privateFlags |=
WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST;
}
@@ -7342,7 +7345,7 @@ public final class ViewRootImpl implements ViewParent,
mPendingMergedConfiguration, mSurfaceControl, mTempInsets, mSurfaceSize,
mBlastSurfaceControl);
if (mSurfaceControl.isValid()) {
- if (!WindowManagerGlobal.USE_BLAST_ADAPTER) {
+ if (!mUseBLASTAdapter) {
mSurface.copyFrom(mSurfaceControl);
} else {
mSurface.transferFrom(getOrCreateBLASTSurface(mSurfaceSize.x,
@@ -9537,7 +9540,7 @@ public final class ViewRootImpl implements ViewParent,
}
SurfaceControl getRenderSurfaceControl() {
- if (WindowManagerGlobal.USE_BLAST_ADAPTER) {
+ if (mUseBLASTAdapter) {
return mBlastSurfaceControl;
} else {
return mSurfaceControl;
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index f03c4e731283..c22b8921390c 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -56,13 +56,7 @@ import java.util.ArrayList;
public final class WindowManagerGlobal {
private static final String TAG = "WindowManager";
- private static final String WM_USE_BLAST_ADAPTER_FLAG = "wm_use_blast_adapter";
-
- /**
- * This flag controls whether ViewRootImpl will utilize the Blast Adapter
- * to send buffer updates to SurfaceFlinger
- */
- public static final boolean USE_BLAST_ADAPTER = false;
+ private final boolean mUseBLASTAdapter;
/**
* The user is navigating with keys (not the touch screen), so
@@ -165,6 +159,11 @@ public final class WindowManagerGlobal {
private Runnable mSystemPropertyUpdater;
private WindowManagerGlobal() {
+ try {
+ mUseBLASTAdapter = getWindowManagerService().useBLAST();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
@UnsupportedAppUsage
@@ -233,6 +232,13 @@ public final class WindowManagerGlobal {
}
}
+ /**
+ * Whether or not to use BLAST for ViewRootImpl
+ */
+ public boolean useBLAST() {
+ return mUseBLASTAdapter;
+ }
+
@UnsupportedAppUsage
public String[] getViewRootNames() {
synchronized (mLock) {