Loading core/java/android/view/LayoutInflater.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -640,6 +640,10 @@ public abstract class LayoutInflater { mConstructorArgs[0] = inflaterContext; mConstructorArgs[0] = inflaterContext; View result = root; View result = root; if (root != null && root.getViewRootImpl() != null) { root.getViewRootImpl().notifyRendererOfExpensiveFrame(); } try { try { advanceToRootNode(parser); advanceToRootNode(parser); final String name = parser.getName(); final String name = parser.getName(); Loading @@ -662,6 +666,10 @@ public abstract class LayoutInflater { // Temp is the root view that was found in the xml // Temp is the root view that was found in the xml final View temp = createViewFromTag(root, name, inflaterContext, attrs); final View temp = createViewFromTag(root, name, inflaterContext, attrs); if (root == null && temp != null && temp.getViewRootImpl() != null) { temp.getViewRootImpl().notifyRendererOfExpensiveFrame(); } ViewGroup.LayoutParams params = null; ViewGroup.LayoutParams params = null; if (root != null) { if (root != null) { Loading core/java/android/view/ThreadedRenderer.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -594,6 +594,13 @@ public final class ThreadedRenderer extends HardwareRenderer { } } } } @Override public void notifyExpensiveFrame() { if (isEnabled()) { super.notifyExpensiveFrame(); } } /** /** * Updates the light position based on the position of the window. * Updates the light position based on the position of the window. * * Loading core/java/android/view/ViewRootImpl.java +12 −0 Original line number Original line Diff line number Diff line Loading @@ -2334,6 +2334,18 @@ public final class ViewRootImpl implements ViewParent, } } } } /** * Notifies the HardwareRenderer of an expensive upcoming frame, to * allow better handling of power and scheduling requirements. * * @hide */ void notifyRendererOfExpensiveFrame() { if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mThreadedRenderer.notifyExpensiveFrame(); } } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) void scheduleTraversals() { void scheduleTraversals() { if (!mTraversalScheduled) { if (!mTraversalScheduled) { Loading graphics/java/android/graphics/HardwareRenderer.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -991,6 +991,15 @@ public class HardwareRenderer { nNotifyCallbackPending(mNativeProxy); nNotifyCallbackPending(mNativeProxy); } } /** * Notifies the hardware renderer about upcoming expensive frames. * * @hide */ public void notifyExpensiveFrame() { nNotifyExpensiveFrame(mNativeProxy); } /** /** * b/68769804, b/66945974: For low FPS experiments. * b/68769804, b/66945974: For low FPS experiments. * * Loading Loading @@ -1553,4 +1562,6 @@ public class HardwareRenderer { private static native void nSetRtAnimationsEnabled(boolean rtAnimationsEnabled); private static native void nSetRtAnimationsEnabled(boolean rtAnimationsEnabled); private static native void nNotifyCallbackPending(long nativeProxy); private static native void nNotifyCallbackPending(long nativeProxy); private static native void nNotifyExpensiveFrame(long nativeProxy); } } libs/hwui/jni/android_graphics_HardwareRenderer.cpp +7 −0 Original line number Original line Diff line number Diff line Loading @@ -822,6 +822,11 @@ static void android_view_ThreadedRenderer_notifyCallbackPending(JNIEnv*, jclass, proxy->notifyCallbackPending(); proxy->notifyCallbackPending(); } } static void android_view_ThreadedRenderer_notifyExpensiveFrame(JNIEnv*, jclass, jlong proxyPtr) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); proxy->notifyExpensiveFrame(); } // Plumbs the display density down to DeviceInfo. // Plumbs the display density down to DeviceInfo. static void android_view_ThreadedRenderer_setDisplayDensityDpi(JNIEnv*, jclass, jint densityDpi) { static void android_view_ThreadedRenderer_setDisplayDensityDpi(JNIEnv*, jclass, jint densityDpi) { // Convert from dpi to density-independent pixels. // Convert from dpi to density-independent pixels. Loading Loading @@ -1000,6 +1005,8 @@ static const JNINativeMethod gMethods[] = { (void*)android_view_ThreadedRenderer_setRtAnimationsEnabled}, (void*)android_view_ThreadedRenderer_setRtAnimationsEnabled}, {"nNotifyCallbackPending", "(J)V", {"nNotifyCallbackPending", "(J)V", (void*)android_view_ThreadedRenderer_notifyCallbackPending}, (void*)android_view_ThreadedRenderer_notifyCallbackPending}, {"nNotifyExpensiveFrame", "(J)V", (void*)android_view_ThreadedRenderer_notifyExpensiveFrame}, }; }; static JavaVM* mJvm = nullptr; static JavaVM* mJvm = nullptr; Loading Loading
core/java/android/view/LayoutInflater.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -640,6 +640,10 @@ public abstract class LayoutInflater { mConstructorArgs[0] = inflaterContext; mConstructorArgs[0] = inflaterContext; View result = root; View result = root; if (root != null && root.getViewRootImpl() != null) { root.getViewRootImpl().notifyRendererOfExpensiveFrame(); } try { try { advanceToRootNode(parser); advanceToRootNode(parser); final String name = parser.getName(); final String name = parser.getName(); Loading @@ -662,6 +666,10 @@ public abstract class LayoutInflater { // Temp is the root view that was found in the xml // Temp is the root view that was found in the xml final View temp = createViewFromTag(root, name, inflaterContext, attrs); final View temp = createViewFromTag(root, name, inflaterContext, attrs); if (root == null && temp != null && temp.getViewRootImpl() != null) { temp.getViewRootImpl().notifyRendererOfExpensiveFrame(); } ViewGroup.LayoutParams params = null; ViewGroup.LayoutParams params = null; if (root != null) { if (root != null) { Loading
core/java/android/view/ThreadedRenderer.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -594,6 +594,13 @@ public final class ThreadedRenderer extends HardwareRenderer { } } } } @Override public void notifyExpensiveFrame() { if (isEnabled()) { super.notifyExpensiveFrame(); } } /** /** * Updates the light position based on the position of the window. * Updates the light position based on the position of the window. * * Loading
core/java/android/view/ViewRootImpl.java +12 −0 Original line number Original line Diff line number Diff line Loading @@ -2334,6 +2334,18 @@ public final class ViewRootImpl implements ViewParent, } } } } /** * Notifies the HardwareRenderer of an expensive upcoming frame, to * allow better handling of power and scheduling requirements. * * @hide */ void notifyRendererOfExpensiveFrame() { if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mThreadedRenderer.notifyExpensiveFrame(); } } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) void scheduleTraversals() { void scheduleTraversals() { if (!mTraversalScheduled) { if (!mTraversalScheduled) { Loading
graphics/java/android/graphics/HardwareRenderer.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -991,6 +991,15 @@ public class HardwareRenderer { nNotifyCallbackPending(mNativeProxy); nNotifyCallbackPending(mNativeProxy); } } /** * Notifies the hardware renderer about upcoming expensive frames. * * @hide */ public void notifyExpensiveFrame() { nNotifyExpensiveFrame(mNativeProxy); } /** /** * b/68769804, b/66945974: For low FPS experiments. * b/68769804, b/66945974: For low FPS experiments. * * Loading Loading @@ -1553,4 +1562,6 @@ public class HardwareRenderer { private static native void nSetRtAnimationsEnabled(boolean rtAnimationsEnabled); private static native void nSetRtAnimationsEnabled(boolean rtAnimationsEnabled); private static native void nNotifyCallbackPending(long nativeProxy); private static native void nNotifyCallbackPending(long nativeProxy); private static native void nNotifyExpensiveFrame(long nativeProxy); } }
libs/hwui/jni/android_graphics_HardwareRenderer.cpp +7 −0 Original line number Original line Diff line number Diff line Loading @@ -822,6 +822,11 @@ static void android_view_ThreadedRenderer_notifyCallbackPending(JNIEnv*, jclass, proxy->notifyCallbackPending(); proxy->notifyCallbackPending(); } } static void android_view_ThreadedRenderer_notifyExpensiveFrame(JNIEnv*, jclass, jlong proxyPtr) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); proxy->notifyExpensiveFrame(); } // Plumbs the display density down to DeviceInfo. // Plumbs the display density down to DeviceInfo. static void android_view_ThreadedRenderer_setDisplayDensityDpi(JNIEnv*, jclass, jint densityDpi) { static void android_view_ThreadedRenderer_setDisplayDensityDpi(JNIEnv*, jclass, jint densityDpi) { // Convert from dpi to density-independent pixels. // Convert from dpi to density-independent pixels. Loading Loading @@ -1000,6 +1005,8 @@ static const JNINativeMethod gMethods[] = { (void*)android_view_ThreadedRenderer_setRtAnimationsEnabled}, (void*)android_view_ThreadedRenderer_setRtAnimationsEnabled}, {"nNotifyCallbackPending", "(J)V", {"nNotifyCallbackPending", "(J)V", (void*)android_view_ThreadedRenderer_notifyCallbackPending}, (void*)android_view_ThreadedRenderer_notifyCallbackPending}, {"nNotifyExpensiveFrame", "(J)V", (void*)android_view_ThreadedRenderer_notifyExpensiveFrame}, }; }; static JavaVM* mJvm = nullptr; static JavaVM* mJvm = nullptr; Loading