Merge "SurfaceView: Synchronize destframe updates with SurfaceView size changes" into sc-dev

This commit is contained in:
Vishnu Nair
2021-08-02 23:35:38 +00:00
committed by Android (Google) Code Review
3 changed files with 14 additions and 6 deletions

View File

@@ -1242,7 +1242,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
mBlastSurfaceControl.setTransformHint(mTransformHint); mBlastSurfaceControl.setTransformHint(mTransformHint);
if (mBlastBufferQueue != null) { if (mBlastBufferQueue != null) {
mBlastBufferQueue.update(mBlastSurfaceControl, mSurfaceWidth, mSurfaceHeight, mBlastBufferQueue.update(mBlastSurfaceControl, mSurfaceWidth, mSurfaceHeight,
mFormat); mFormat, transaction);
} }
} else { } else {
transaction.setBufferSize(mSurfaceControl, mSurfaceWidth, mSurfaceHeight); transaction.setBufferSize(mSurfaceControl, mSurfaceWidth, mSurfaceHeight);

View File

@@ -105,9 +105,11 @@ static void nativeSetNextTransaction(JNIEnv* env, jclass clazz, jlong ptr, jlong
} }
static void nativeUpdate(JNIEnv* env, jclass clazz, jlong ptr, jlong surfaceControl, jlong width, static void nativeUpdate(JNIEnv* env, jclass clazz, jlong ptr, jlong surfaceControl, jlong width,
jlong height, jint format) { jlong height, jint format, jlong transactionPtr) {
sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr); sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr);
queue->update(reinterpret_cast<SurfaceControl*>(surfaceControl), width, height, format); auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionPtr);
queue->update(reinterpret_cast<SurfaceControl*>(surfaceControl), width, height, format,
transaction);
} }
static void nativeFlushShadowQueue(JNIEnv* env, jclass clazz, jlong ptr) { static void nativeFlushShadowQueue(JNIEnv* env, jclass clazz, jlong ptr) {
@@ -144,7 +146,7 @@ static const JNINativeMethod gMethods[] = {
{"nativeGetSurface", "(JZ)Landroid/view/Surface;", (void*)nativeGetSurface}, {"nativeGetSurface", "(JZ)Landroid/view/Surface;", (void*)nativeGetSurface},
{"nativeDestroy", "(J)V", (void*)nativeDestroy}, {"nativeDestroy", "(J)V", (void*)nativeDestroy},
{"nativeSetNextTransaction", "(JJ)V", (void*)nativeSetNextTransaction}, {"nativeSetNextTransaction", "(JJ)V", (void*)nativeSetNextTransaction},
{"nativeUpdate", "(JJJJI)V", (void*)nativeUpdate}, {"nativeUpdate", "(JJJJIJ)V", (void*)nativeUpdate},
{"nativeFlushShadowQueue", "(J)V", (void*)nativeFlushShadowQueue}, {"nativeFlushShadowQueue", "(J)V", (void*)nativeFlushShadowQueue},
{"nativeMergeWithNextTransaction", "(JJJ)V", (void*)nativeMergeWithNextTransaction}, {"nativeMergeWithNextTransaction", "(JJJ)V", (void*)nativeMergeWithNextTransaction},
{"nativeSetTransactionCompleteCallback", {"nativeSetTransactionCompleteCallback",

View File

@@ -33,7 +33,7 @@ public final class BLASTBufferQueue {
private static native Surface nativeGetSurface(long ptr, boolean includeSurfaceControlHandle); private static native Surface nativeGetSurface(long ptr, boolean includeSurfaceControlHandle);
private static native void nativeSetNextTransaction(long ptr, long transactionPtr); private static native void nativeSetNextTransaction(long ptr, long transactionPtr);
private static native void nativeUpdate(long ptr, long surfaceControl, long width, long height, private static native void nativeUpdate(long ptr, long surfaceControl, long width, long height,
int format); int format, long transactionPtr);
private static native void nativeFlushShadowQueue(long ptr); private static native void nativeFlushShadowQueue(long ptr);
private static native void nativeMergeWithNextTransaction(long ptr, long transactionPtr, private static native void nativeMergeWithNextTransaction(long ptr, long transactionPtr,
long frameNumber); long frameNumber);
@@ -92,9 +92,15 @@ public final class BLASTBufferQueue {
* @param width The new width for the buffer. * @param width The new width for the buffer.
* @param height The new height for the buffer. * @param height The new height for the buffer.
* @param format The new format for the buffer. * @param format The new format for the buffer.
* @param t Adds destination frame changes to the passed in transaction.
*/ */
public void update(SurfaceControl sc, int width, int height, @PixelFormat.Format int format,
SurfaceControl.Transaction t) {
nativeUpdate(mNativeObject, sc.mNativeObject, width, height, format, t.mNativeObject);
}
public void update(SurfaceControl sc, int width, int height, @PixelFormat.Format int format) { public void update(SurfaceControl sc, int width, int height, @PixelFormat.Format int format) {
nativeUpdate(mNativeObject, sc.mNativeObject, width, height, format); nativeUpdate(mNativeObject, sc.mNativeObject, width, height, format, 0);
} }
/** /**