Merge "Force pending transactions to flush before screenshot." into nyc-dev am: 39e8022a75
am: 1d4f1cda2d
* commit '1d4f1cda2de08887ce7036fa8a6f76d5ff0b378f':
Force pending transactions to flush before screenshot.
Change-Id: I618c4c794e0c26ead6995a8aa1ff3d0d42cc45a0
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user