summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorValerie Hau <vhau@google.com>2020-02-07 10:53:32 -0800
committerValerie Hau <vhau@google.com>2020-02-07 16:06:03 -0800
commit779af293d4bec0212bf27652fd0f10ec47e86f61 (patch)
treecf08a805d98cea3d28ba632502f464f7958b926f /core/java
parenta3ada3607bf6a07d8b96233b488e0e17198f8d1d (diff)
Move BLAST flag to WindowManagerService
Querying flag property in preloaded class static initialization removes it from preloading and increases boot time. Move query to WindowManagerService instead when constructed Bug: 148614188 Test: build, boot, adb shell device_config put window_manager_native_boot wm_use_blast_adapter true/false check that BLAST adapter is turned on/off as expected Change-Id: I02e2327b5c2cb11a231d02fc2c5c8c1ac200aaf0
Diffstat (limited to 'core/java')
-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) {