Loading core/java/android/view/Choreographer.java +2 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.view; import static android.view.DisplayEventReceiver.CONFIG_CHANGED_EVENT_SUPPRESS; import static android.view.DisplayEventReceiver.VSYNC_SOURCE_APP; import static android.view.DisplayEventReceiver.VSYNC_SOURCE_SURFACE_FLINGER; Loading Loading @@ -910,7 +911,7 @@ public final class Choreographer { private int mFrame; public FrameDisplayEventReceiver(Looper looper, int vsyncSource) { super(looper, vsyncSource); super(looper, vsyncSource, CONFIG_CHANGED_EVENT_SUPPRESS); } // TODO(b/116025192): physicalDisplayId is ignored because SF only emits VSYNC events for Loading core/java/android/view/DisplayEventReceiver.java +20 −4 Original line number Diff line number Diff line Loading @@ -53,6 +53,20 @@ public abstract class DisplayEventReceiver { */ public static final int VSYNC_SOURCE_SURFACE_FLINGER = 1; /** * Specifies to suppress config changed events from being generated from Surface Flinger. * <p> * Needs to be kept in sync with frameworks/native/include/gui/ISurfaceComposer.h */ public static final int CONFIG_CHANGED_EVENT_SUPPRESS = 0; /** * Specifies to generate config changed events from Surface Flinger. * <p> * Needs to be kept in sync with frameworks/native/include/gui/ISurfaceComposer.h */ public static final int CONFIG_CHANGED_EVENT_DISPATCH = 1; private static final String TAG = "DisplayEventReceiver"; private final CloseGuard mCloseGuard = CloseGuard.get(); Loading @@ -65,7 +79,7 @@ public abstract class DisplayEventReceiver { private MessageQueue mMessageQueue; private static native long nativeInit(WeakReference<DisplayEventReceiver> receiver, MessageQueue messageQueue, int vsyncSource); MessageQueue messageQueue, int vsyncSource, int configChanged); private static native void nativeDispose(long receiverPtr); @FastNative private static native void nativeScheduleVsync(long receiverPtr); Loading @@ -77,7 +91,7 @@ public abstract class DisplayEventReceiver { */ @UnsupportedAppUsage public DisplayEventReceiver(Looper looper) { this(looper, VSYNC_SOURCE_APP); this(looper, VSYNC_SOURCE_APP, CONFIG_CHANGED_EVENT_SUPPRESS); } /** Loading @@ -85,15 +99,17 @@ public abstract class DisplayEventReceiver { * * @param looper The looper to use when invoking callbacks. * @param vsyncSource The source of the vsync tick. Must be on of the VSYNC_SOURCE_* values. * @param configChanged Whether to dispatch config changed events. Must be one of the * CONFIG_CHANGED_EVENT_* values. */ public DisplayEventReceiver(Looper looper, int vsyncSource) { public DisplayEventReceiver(Looper looper, int vsyncSource, int configChanged) { if (looper == null) { throw new IllegalArgumentException("looper must not be null"); } mMessageQueue = looper.getQueue(); mReceiverPtr = nativeInit(new WeakReference<DisplayEventReceiver>(this), mMessageQueue, vsyncSource); vsyncSource, configChanged); mCloseGuard.open("dispose"); } Loading core/jni/android_view_DisplayEventReceiver.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -48,7 +48,8 @@ static struct { class NativeDisplayEventReceiver : public DisplayEventDispatcher { public: NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource); jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource, jint configChanged); void dispose(); Loading @@ -68,9 +69,11 @@ private: NativeDisplayEventReceiver::NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource) : jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource, jint configChanged) : DisplayEventDispatcher(messageQueue->getLooper(), static_cast<ISurfaceComposer::VsyncSource>(vsyncSource)), static_cast<ISurfaceComposer::VsyncSource>(vsyncSource), static_cast<ISurfaceComposer::ConfigChanged>(configChanged)), mReceiverWeakGlobal(env->NewGlobalRef(receiverWeak)), mMessageQueue(messageQueue) { ALOGV("receiver %p ~ Initializing display event receiver.", this); Loading Loading @@ -136,7 +139,7 @@ void NativeDisplayEventReceiver::dispatchConfigChanged(nsecs_t timestamp, static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, jobject messageQueueObj, jint vsyncSource) { jobject messageQueueObj, jint vsyncSource, jint configChanged) { sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj); if (messageQueue == NULL) { jniThrowRuntimeException(env, "MessageQueue is not initialized."); Loading @@ -144,7 +147,7 @@ static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, } sp<NativeDisplayEventReceiver> receiver = new NativeDisplayEventReceiver(env, receiverWeak, messageQueue, vsyncSource); receiverWeak, messageQueue, vsyncSource, configChanged); status_t status = receiver->initialize(); if (status) { String8 message; Loading Loading @@ -179,7 +182,7 @@ static void nativeScheduleVsync(JNIEnv* env, jclass clazz, jlong receiverPtr) { static const JNINativeMethod gMethods[] = { /* name, signature, funcPtr */ { "nativeInit", "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;I)J", "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;II)J", (void*)nativeInit }, { "nativeDispose", "(J)V", Loading libs/androidfw/DisplayEventDispatcher.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -34,8 +34,9 @@ namespace android { static const size_t EVENT_BUFFER_SIZE = 100; DisplayEventDispatcher::DisplayEventDispatcher(const sp<Looper>& looper, ISurfaceComposer::VsyncSource vsyncSource) : mLooper(looper), mReceiver(vsyncSource), mWaitingForVsync(false) { ISurfaceComposer::VsyncSource vsyncSource, ISurfaceComposer::ConfigChanged configChanged) : mLooper(looper), mReceiver(vsyncSource, configChanged), mWaitingForVsync(false) { ALOGV("dispatcher %p ~ Initializing display event dispatcher.", this); } Loading libs/androidfw/include/androidfw/DisplayEventDispatcher.h +2 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,8 @@ namespace android { class DisplayEventDispatcher : public LooperCallback { public: explicit DisplayEventDispatcher(const sp<Looper>& looper, ISurfaceComposer::VsyncSource vsyncSource = ISurfaceComposer::eVsyncSourceApp); ISurfaceComposer::VsyncSource vsyncSource = ISurfaceComposer::eVsyncSourceApp, ISurfaceComposer::ConfigChanged configChanged = ISurfaceComposer::eConfigChangedSuppress); status_t initialize(); void dispose(); Loading Loading
core/java/android/view/Choreographer.java +2 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.view; import static android.view.DisplayEventReceiver.CONFIG_CHANGED_EVENT_SUPPRESS; import static android.view.DisplayEventReceiver.VSYNC_SOURCE_APP; import static android.view.DisplayEventReceiver.VSYNC_SOURCE_SURFACE_FLINGER; Loading Loading @@ -910,7 +911,7 @@ public final class Choreographer { private int mFrame; public FrameDisplayEventReceiver(Looper looper, int vsyncSource) { super(looper, vsyncSource); super(looper, vsyncSource, CONFIG_CHANGED_EVENT_SUPPRESS); } // TODO(b/116025192): physicalDisplayId is ignored because SF only emits VSYNC events for Loading
core/java/android/view/DisplayEventReceiver.java +20 −4 Original line number Diff line number Diff line Loading @@ -53,6 +53,20 @@ public abstract class DisplayEventReceiver { */ public static final int VSYNC_SOURCE_SURFACE_FLINGER = 1; /** * Specifies to suppress config changed events from being generated from Surface Flinger. * <p> * Needs to be kept in sync with frameworks/native/include/gui/ISurfaceComposer.h */ public static final int CONFIG_CHANGED_EVENT_SUPPRESS = 0; /** * Specifies to generate config changed events from Surface Flinger. * <p> * Needs to be kept in sync with frameworks/native/include/gui/ISurfaceComposer.h */ public static final int CONFIG_CHANGED_EVENT_DISPATCH = 1; private static final String TAG = "DisplayEventReceiver"; private final CloseGuard mCloseGuard = CloseGuard.get(); Loading @@ -65,7 +79,7 @@ public abstract class DisplayEventReceiver { private MessageQueue mMessageQueue; private static native long nativeInit(WeakReference<DisplayEventReceiver> receiver, MessageQueue messageQueue, int vsyncSource); MessageQueue messageQueue, int vsyncSource, int configChanged); private static native void nativeDispose(long receiverPtr); @FastNative private static native void nativeScheduleVsync(long receiverPtr); Loading @@ -77,7 +91,7 @@ public abstract class DisplayEventReceiver { */ @UnsupportedAppUsage public DisplayEventReceiver(Looper looper) { this(looper, VSYNC_SOURCE_APP); this(looper, VSYNC_SOURCE_APP, CONFIG_CHANGED_EVENT_SUPPRESS); } /** Loading @@ -85,15 +99,17 @@ public abstract class DisplayEventReceiver { * * @param looper The looper to use when invoking callbacks. * @param vsyncSource The source of the vsync tick. Must be on of the VSYNC_SOURCE_* values. * @param configChanged Whether to dispatch config changed events. Must be one of the * CONFIG_CHANGED_EVENT_* values. */ public DisplayEventReceiver(Looper looper, int vsyncSource) { public DisplayEventReceiver(Looper looper, int vsyncSource, int configChanged) { if (looper == null) { throw new IllegalArgumentException("looper must not be null"); } mMessageQueue = looper.getQueue(); mReceiverPtr = nativeInit(new WeakReference<DisplayEventReceiver>(this), mMessageQueue, vsyncSource); vsyncSource, configChanged); mCloseGuard.open("dispose"); } Loading
core/jni/android_view_DisplayEventReceiver.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -48,7 +48,8 @@ static struct { class NativeDisplayEventReceiver : public DisplayEventDispatcher { public: NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource); jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource, jint configChanged); void dispose(); Loading @@ -68,9 +69,11 @@ private: NativeDisplayEventReceiver::NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource) : jobject receiverWeak, const sp<MessageQueue>& messageQueue, jint vsyncSource, jint configChanged) : DisplayEventDispatcher(messageQueue->getLooper(), static_cast<ISurfaceComposer::VsyncSource>(vsyncSource)), static_cast<ISurfaceComposer::VsyncSource>(vsyncSource), static_cast<ISurfaceComposer::ConfigChanged>(configChanged)), mReceiverWeakGlobal(env->NewGlobalRef(receiverWeak)), mMessageQueue(messageQueue) { ALOGV("receiver %p ~ Initializing display event receiver.", this); Loading Loading @@ -136,7 +139,7 @@ void NativeDisplayEventReceiver::dispatchConfigChanged(nsecs_t timestamp, static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, jobject messageQueueObj, jint vsyncSource) { jobject messageQueueObj, jint vsyncSource, jint configChanged) { sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj); if (messageQueue == NULL) { jniThrowRuntimeException(env, "MessageQueue is not initialized."); Loading @@ -144,7 +147,7 @@ static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, } sp<NativeDisplayEventReceiver> receiver = new NativeDisplayEventReceiver(env, receiverWeak, messageQueue, vsyncSource); receiverWeak, messageQueue, vsyncSource, configChanged); status_t status = receiver->initialize(); if (status) { String8 message; Loading Loading @@ -179,7 +182,7 @@ static void nativeScheduleVsync(JNIEnv* env, jclass clazz, jlong receiverPtr) { static const JNINativeMethod gMethods[] = { /* name, signature, funcPtr */ { "nativeInit", "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;I)J", "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;II)J", (void*)nativeInit }, { "nativeDispose", "(J)V", Loading
libs/androidfw/DisplayEventDispatcher.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -34,8 +34,9 @@ namespace android { static const size_t EVENT_BUFFER_SIZE = 100; DisplayEventDispatcher::DisplayEventDispatcher(const sp<Looper>& looper, ISurfaceComposer::VsyncSource vsyncSource) : mLooper(looper), mReceiver(vsyncSource), mWaitingForVsync(false) { ISurfaceComposer::VsyncSource vsyncSource, ISurfaceComposer::ConfigChanged configChanged) : mLooper(looper), mReceiver(vsyncSource, configChanged), mWaitingForVsync(false) { ALOGV("dispatcher %p ~ Initializing display event dispatcher.", this); } Loading
libs/androidfw/include/androidfw/DisplayEventDispatcher.h +2 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,8 @@ namespace android { class DisplayEventDispatcher : public LooperCallback { public: explicit DisplayEventDispatcher(const sp<Looper>& looper, ISurfaceComposer::VsyncSource vsyncSource = ISurfaceComposer::eVsyncSourceApp); ISurfaceComposer::VsyncSource vsyncSource = ISurfaceComposer::eVsyncSourceApp, ISurfaceComposer::ConfigChanged configChanged = ISurfaceComposer::eConfigChangedSuppress); status_t initialize(); void dispose(); Loading