Merge "Force pending transactions to flush before screenshot." into nyc-dev

This commit is contained in:
TreeHugger Robot
2016-05-25 19:16:12 +00:00
committed by Android (Google) Code Review
3 changed files with 15 additions and 5 deletions

View File

@@ -46,7 +46,7 @@ public class SurfaceControl {
boolean allLayers, boolean useIdentityTransform);
private static native void nativeOpenTransaction();
private static native void nativeCloseTransaction();
private static native void nativeCloseTransaction(boolean sync);
private static native void nativeSetAnimationTransaction();
private static native void nativeSetLayer(long nativeObject, int zorder);
@@ -372,7 +372,11 @@ public class SurfaceControl {
/** end a transaction */
public static void closeTransaction() {
nativeCloseTransaction();
nativeCloseTransaction(false);
}
public static void closeTransactionSync() {
nativeCloseTransaction(true);
}
public void deferTransactionUntil(IBinder handle, long frame) {

View File

@@ -223,8 +223,9 @@ static void nativeOpenTransaction(JNIEnv* env, jclass clazz) {
SurfaceComposerClient::openGlobalTransaction();
}
static void nativeCloseTransaction(JNIEnv* env, jclass clazz) {
SurfaceComposerClient::closeGlobalTransaction();
static void nativeCloseTransaction(JNIEnv* env, jclass clazz, jboolean sync) {
SurfaceComposerClient::closeGlobalTransaction(sync);
}
static void nativeSetAnimationTransaction(JNIEnv* env, jclass clazz) {
@@ -649,7 +650,7 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
(void*)nativeScreenshot },
{"nativeOpenTransaction", "()V",
(void*)nativeOpenTransaction },
{"nativeCloseTransaction", "()V",
{"nativeCloseTransaction", "(Z)V",
(void*)nativeCloseTransaction },
{"nativeSetAnimationTransaction", "()V",
(void*)nativeSetAnimationTransaction },

View File

@@ -6386,6 +6386,11 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_SCREENSHOT && inRotation) Slog.v(TAG_WM,
"Taking screenshot while rotating");
// We force pending transactions to flush before taking
// the screenshot by pushing an empty synchronous transaction.
SurfaceControl.openTransaction();
SurfaceControl.closeTransactionSync();
bm = SurfaceControl.screenshot(crop, width, height, minLayer, maxLayer,
inRotation, rot);
if (bm == null) {