apply empty transaction in startActivitySync
Force SurfaceFlinger to update synchronously by applying an empty transaction. Without this, SurfaceFlinger will only update after the next vsync, which may only happen after the instrumentation already starts. Since InputFlinger will only have the proper InputWindowInfo after SurfaceFlinger updates, waiting for the vsync caused some instruemntation tests to be flaky. Bug: 138263890 Test: atest android.view.cts.HoverTest Change-Id: I5457ab67ac574530dc1aa84549ca11e7e3f0d714
This commit is contained in:
@@ -50,6 +50,7 @@ import android.view.InputDevice;
|
||||
import android.view.KeyCharacterMap;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManagerGlobal;
|
||||
@@ -528,6 +529,12 @@ public class Instrumentation {
|
||||
} while (mWaitingActivities.contains(aw));
|
||||
|
||||
waitForEnterAnimationComplete(aw.activity);
|
||||
|
||||
// Apply an empty transaction to ensure SF has a chance to update before
|
||||
// the Activity is ready (b/138263890).
|
||||
try (SurfaceControl.Transaction t = new SurfaceControl.Transaction()) {
|
||||
t.apply(true);
|
||||
}
|
||||
return aw.activity;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user