Add call to disable RT Animations

HWUI already supports disabling RT animations, but there was no correct
way to call it from the application. Adding a call to enable or disable
RT animations on the RenderThread so RT animations can be disabled
during a blast sync.

Test: Builds
Bug: 200284684
Change-Id: Ia1ae3498c38b84b4975f08d37bc764f0c690ed9f
This commit is contained in:
chaviw
2022-03-18 17:54:00 -05:00
parent b3c1d1984e
commit 01053d4350
4 changed files with 32 additions and 12 deletions

View File

@@ -976,12 +976,12 @@ public class HardwareRenderer {
}
/**
* b/68769804: For low FPS experiments.
* b/68769804, b/66945974: For low FPS experiments.
*
* @hide
*/
public static void setFPSDivisor(int divisor) {
nHackySetRTAnimationsEnabled(divisor <= 1);
nSetRtAnimationsEnabled(divisor <= 1);
}
/**
@@ -1145,6 +1145,16 @@ public class HardwareRenderer {
nSetDrawingEnabled(drawingEnabled);
}
/**
* Disable RenderThread animations that schedule draws directly from RenderThread. This is used
* when we don't want to de-schedule draw requests that come from the UI thread.
*
* @hide
*/
public static void setRtAnimationsEnabled(boolean enabled) {
nSetRtAnimationsEnabled(enabled);
}
private static final class DestroyContextRunnable implements Runnable {
private final long mNativeInstance;
@@ -1451,9 +1461,6 @@ public class HardwareRenderer {
private static native void nSetHighContrastText(boolean enabled);
// For temporary experimentation b/66945974
private static native void nHackySetRTAnimationsEnabled(boolean enabled);
private static native void nSetDebuggingEnabled(boolean enabled);
private static native void nSetIsolatedProcess(boolean enabled);
@@ -1472,4 +1479,6 @@ public class HardwareRenderer {
private static native void nSetDrawingEnabled(boolean drawingEnabled);
private static native boolean nIsDrawingEnabled();
private static native void nSetRtAnimationsEnabled(boolean rtAnimationsEnabled);
}

View File

@@ -770,11 +770,6 @@ static void android_view_ThreadedRenderer_setHighContrastText(JNIEnv*, jclass, j
Properties::enableHighContrastText = enable;
}
static void android_view_ThreadedRenderer_hackySetRTAnimationsEnabled(JNIEnv*, jclass,
jboolean enable) {
Properties::enableRTAnimations = enable;
}
static void android_view_ThreadedRenderer_setDebuggingEnabled(JNIEnv*, jclass, jboolean enable) {
Properties::debuggingEnabled = enable;
}
@@ -804,6 +799,11 @@ static void android_view_ThreadedRenderer_preload(JNIEnv*, jclass) {
RenderProxy::preload();
}
static void android_view_ThreadedRenderer_setRtAnimationsEnabled(JNIEnv* env, jobject clazz,
jboolean enabled) {
RenderProxy::setRtAnimationsEnabled(enabled);
}
// Plumbs the display density down to DeviceInfo.
static void android_view_ThreadedRenderer_setDisplayDensityDpi(JNIEnv*, jclass, jint densityDpi) {
// Convert from dpi to density-independent pixels.
@@ -959,8 +959,6 @@ static const JNINativeMethod gMethods[] = {
(void*)android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode},
{"disableVsync", "()V", (void*)android_view_ThreadedRenderer_disableVsync},
{"nSetHighContrastText", "(Z)V", (void*)android_view_ThreadedRenderer_setHighContrastText},
{"nHackySetRTAnimationsEnabled", "(Z)V",
(void*)android_view_ThreadedRenderer_hackySetRTAnimationsEnabled},
{"nSetDebuggingEnabled", "(Z)V", (void*)android_view_ThreadedRenderer_setDebuggingEnabled},
{"nSetIsolatedProcess", "(Z)V", (void*)android_view_ThreadedRenderer_setIsolatedProcess},
{"nSetContextPriority", "(I)V", (void*)android_view_ThreadedRenderer_setContextPriority},
@@ -974,6 +972,8 @@ static const JNINativeMethod gMethods[] = {
(void*)android_view_ThreadedRenderer_isWebViewOverlaysEnabled},
{"nSetDrawingEnabled", "(Z)V", (void*)android_view_ThreadedRenderer_setDrawingEnabled},
{"nIsDrawingEnabled", "()Z", (void*)android_view_ThreadedRenderer_isDrawingEnabled},
{"nSetRtAnimationsEnabled", "(Z)V",
(void*)android_view_ThreadedRenderer_setRtAnimationsEnabled},
};
static JavaVM* mJvm = nullptr;

View File

@@ -424,6 +424,15 @@ void RenderProxy::preload() {
thread.queue().post([&thread]() { thread.preload(); });
}
void RenderProxy::setRtAnimationsEnabled(bool enabled) {
if (RenderThread::hasInstance()) {
RenderThread::getInstance().queue().post(
[enabled]() { Properties::enableRTAnimations = enabled; });
} else {
Properties::enableRTAnimations = enabled;
}
}
} /* namespace renderthread */
} /* namespace uirenderer */
} /* namespace android */

View File

@@ -143,6 +143,8 @@ public:
static void preload();
static void setRtAnimationsEnabled(bool enabled);
private:
RenderThread& mRenderThread;
CanvasContext* mContext;