Merge "Force pending transactions to flush before screenshot." into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
39e8022a75
@@ -46,7 +46,7 @@ public class SurfaceControl {
|
|||||||
boolean allLayers, boolean useIdentityTransform);
|
boolean allLayers, boolean useIdentityTransform);
|
||||||
|
|
||||||
private static native void nativeOpenTransaction();
|
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 nativeSetAnimationTransaction();
|
||||||
|
|
||||||
private static native void nativeSetLayer(long nativeObject, int zorder);
|
private static native void nativeSetLayer(long nativeObject, int zorder);
|
||||||
@@ -372,7 +372,11 @@ public class SurfaceControl {
|
|||||||
|
|
||||||
/** end a transaction */
|
/** end a transaction */
|
||||||
public static void closeTransaction() {
|
public static void closeTransaction() {
|
||||||
nativeCloseTransaction();
|
nativeCloseTransaction(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeTransactionSync() {
|
||||||
|
nativeCloseTransaction(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deferTransactionUntil(IBinder handle, long frame) {
|
public void deferTransactionUntil(IBinder handle, long frame) {
|
||||||
|
|||||||
@@ -223,8 +223,9 @@ static void nativeOpenTransaction(JNIEnv* env, jclass clazz) {
|
|||||||
SurfaceComposerClient::openGlobalTransaction();
|
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) {
|
static void nativeSetAnimationTransaction(JNIEnv* env, jclass clazz) {
|
||||||
@@ -649,7 +650,7 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
|
|||||||
(void*)nativeScreenshot },
|
(void*)nativeScreenshot },
|
||||||
{"nativeOpenTransaction", "()V",
|
{"nativeOpenTransaction", "()V",
|
||||||
(void*)nativeOpenTransaction },
|
(void*)nativeOpenTransaction },
|
||||||
{"nativeCloseTransaction", "()V",
|
{"nativeCloseTransaction", "(Z)V",
|
||||||
(void*)nativeCloseTransaction },
|
(void*)nativeCloseTransaction },
|
||||||
{"nativeSetAnimationTransaction", "()V",
|
{"nativeSetAnimationTransaction", "()V",
|
||||||
(void*)nativeSetAnimationTransaction },
|
(void*)nativeSetAnimationTransaction },
|
||||||
|
|||||||
@@ -6386,6 +6386,11 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
if (DEBUG_SCREENSHOT && inRotation) Slog.v(TAG_WM,
|
if (DEBUG_SCREENSHOT && inRotation) Slog.v(TAG_WM,
|
||||||
"Taking screenshot while rotating");
|
"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,
|
bm = SurfaceControl.screenshot(crop, width, height, minLayer, maxLayer,
|
||||||
inRotation, rot);
|
inRotation, rot);
|
||||||
if (bm == null) {
|
if (bm == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user