From 319cd078608cd7964fbdcf7c7fb407de8050ce0d Mon Sep 17 00:00:00 2001 From: chaviw Date: Thu, 14 Feb 2019 11:00:23 -0800 Subject: Add synchronous transaction to wait for setInputWindow to complete (5/n) Added syncInputWindows method to JNI and SurfaceControl.Transaction This enables the caller to request SF to wait until input windows have been synced with InputDispatcher. Bug: 123041491 Test: builds, runs Change-Id: I2ddaa3f43eded2fb117cc2850ee7c8a20b2b63ec --- core/java/android/view/SurfaceControl.java | 12 ++++++++++++ core/jni/android_view_SurfaceControl.cpp | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 1212df0c397a..5227875f40ce 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -189,6 +189,7 @@ public final class SurfaceControl implements Parcelable { IBinder toToken); private static native boolean nativeGetProtectedContentSupport(); private static native void nativeSetMetadata(long transactionObj, int key, Parcel data); + private static native void nativeSyncInputWindows(long transactionObj); private final CloseGuard mCloseGuard = CloseGuard.get(); private String mName; @@ -2104,6 +2105,17 @@ public final class SurfaceControl implements Parcelable { return this; } + /** + * Waits until any changes to input windows have been sent from SurfaceFlinger to + * InputFlinger before returning. + * + * @hide + */ + public Transaction syncInputWindows() { + nativeSyncInputWindows(mNativeObject); + return this; + } + /** * Specify how the buffer assosciated with this Surface is mapped in to the * parent coordinate space. The source frame will be scaled to fit the destination diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 6b8d8b1bb91f..003ee37995af 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -406,6 +406,11 @@ static void nativeTransferTouchFocus(JNIEnv* env, jclass clazz, jlong transactio transaction->transferTouchFocus(fromToken, toToken); } +static void nativeSyncInputWindows(JNIEnv* env, jclass clazz, jlong transactionObj) { + auto transaction = reinterpret_cast(transactionObj); + transaction->syncInputWindows(); +} + static void nativeSetMetadata(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jint id, jobject parcelObj) { Parcel* parcel = parcelForJavaObject(env, parcelObj); @@ -1246,7 +1251,9 @@ static const JNINativeMethod sSurfaceControlMethods[] = { "(Landroid/os/IBinder;JJ)Landroid/hardware/display/DisplayedContentSample;", (void*)nativeGetDisplayedContentSample }, {"nativeSetGeometry", "(JJLandroid/graphics/Rect;Landroid/graphics/Rect;J)V", - (void*)nativeSetGeometry } + (void*)nativeSetGeometry }, + {"nativeSyncInputWindows", "(J)V", + (void*)nativeSyncInputWindows } }; int register_android_view_SurfaceControl(JNIEnv* env) -- cgit v1.2.3-59-g8ed1b