Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afcc5e75 authored by Huihong Luo's avatar Huihong Luo Committed by Automerger Merge Worker
Browse files

Merge "Fix a crash caused by transaction" into sc-dev am: 7580a2dd

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15092219

Change-Id: I8d0431f5d0d94b706b98971c584d09f74233f5e4
parents 0c544025 7580a2dd
Loading
Loading
Loading
Loading
+0 −10
Original line number Original line Diff line number Diff line
@@ -2610,16 +2610,6 @@ public final class SurfaceControl implements Parcelable {
                = sRegistry.registerNativeAllocation(this, mNativeObject);
                = sRegistry.registerNativeAllocation(this, mNativeObject);
        }
        }


        /**
         * Create a transaction object that wraps a native peer.
         * @hide
         */
        Transaction(long nativeObject) {
            mNativeObject = nativeObject;
            mFreeNativeResources =
                sRegistry.registerNativeAllocation(this, mNativeObject);
        }

        private Transaction(Parcel in) {
        private Transaction(Parcel in) {
            readFromParcel(in);
            readFromParcel(in);
        }
        }
+6 −2
Original line number Original line Diff line number Diff line
@@ -1371,8 +1371,12 @@ public final class ViewRootImpl implements ViewParent,
        HardwareRenderer.ASurfaceTransactionCallback callback = (nativeTransactionObj,
        HardwareRenderer.ASurfaceTransactionCallback callback = (nativeTransactionObj,
                                                                 nativeSurfaceControlObj,
                                                                 nativeSurfaceControlObj,
                                                                 frameNr) -> {
                                                                 frameNr) -> {
            Transaction t = new Transaction(nativeTransactionObj);
            if (mBlastBufferQueue == null) {
            mergeWithNextTransaction(t, frameNr);
                return false;
            } else {
                mBlastBufferQueue.mergeWithNextTransaction(nativeTransactionObj, frameNr);
                return true;
            }
        };
        };
        mAttachInfo.mThreadedRenderer.setASurfaceTransactionCallback(callback);
        mAttachInfo.mThreadedRenderer.setASurfaceTransactionCallback(callback);
    }
    }
+8 −0
Original line number Original line Diff line number Diff line
@@ -131,4 +131,12 @@ public final class BLASTBufferQueue {
        nativeMergeWithNextTransaction(mNativeObject, t.mNativeObject, frameNumber);
        nativeMergeWithNextTransaction(mNativeObject, t.mNativeObject, frameNumber);
    }
    }


    /**
     * Merge the transaction passed in to the next transaction in BlastBufferQueue.
     * @param nativeTransaction native handle passed from native c/c++ code.
     */
    public void mergeWithNextTransaction(long nativeTransaction, long frameNumber) {
        nativeMergeWithNextTransaction(mNativeObject, nativeTransaction, frameNumber);
    }

}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -912,7 +912,7 @@ public class HardwareRenderer {
         * @param aSurfaceControlNativeObj ASurfaceControl native object handle
         * @param aSurfaceControlNativeObj ASurfaceControl native object handle
         * @param frame The id of the frame being drawn.
         * @param frame The id of the frame being drawn.
         */
         */
        void onMergeTransaction(long aSurfaceTranactionNativeObj,
        boolean onMergeTransaction(long aSurfaceTranactionNativeObj,
                                long aSurfaceControlNativeObj, long frame);
                                long aSurfaceControlNativeObj, long frame);
    }
    }


+8 −6
Original line number Original line Diff line number Diff line
@@ -662,16 +662,18 @@ static void android_view_ThreadedRenderer_setASurfaceTransactionCallback(
        auto globalCallbackRef =
        auto globalCallbackRef =
                std::make_shared<JWeakGlobalRefHolder>(vm, aSurfaceTransactionCallback);
                std::make_shared<JWeakGlobalRefHolder>(vm, aSurfaceTransactionCallback);
        proxy->setASurfaceTransactionCallback(
        proxy->setASurfaceTransactionCallback(
                [globalCallbackRef](int64_t transObj, int64_t scObj, int64_t frameNr) {
                [globalCallbackRef](int64_t transObj, int64_t scObj, int64_t frameNr) -> bool {
                    JNIEnv* env = getenv(globalCallbackRef->vm());
                    JNIEnv* env = getenv(globalCallbackRef->vm());
                    jobject localref = env->NewLocalRef(globalCallbackRef->ref());
                    jobject localref = env->NewLocalRef(globalCallbackRef->ref());
                    if (CC_UNLIKELY(!localref)) {
                    if (CC_UNLIKELY(!localref)) {
                        return;
                        return false;
                    }
                    }
                    env->CallVoidMethod(localref, gASurfaceTransactionCallback.onMergeTransaction,
                    jboolean ret = env->CallBooleanMethod(
                            localref, gASurfaceTransactionCallback.onMergeTransaction,
                            static_cast<jlong>(transObj), static_cast<jlong>(scObj),
                            static_cast<jlong>(transObj), static_cast<jlong>(scObj),
                            static_cast<jlong>(frameNr));
                            static_cast<jlong>(frameNr));
                    env->DeleteLocalRef(localref);
                    env->DeleteLocalRef(localref);
                    return ret;
                });
                });
    }
    }
}
}
@@ -1064,7 +1066,7 @@ int register_android_view_ThreadedRenderer(JNIEnv* env) {
    jclass aSurfaceTransactionCallbackClass =
    jclass aSurfaceTransactionCallbackClass =
            FindClassOrDie(env, "android/graphics/HardwareRenderer$ASurfaceTransactionCallback");
            FindClassOrDie(env, "android/graphics/HardwareRenderer$ASurfaceTransactionCallback");
    gASurfaceTransactionCallback.onMergeTransaction =
    gASurfaceTransactionCallback.onMergeTransaction =
            GetMethodIDOrDie(env, aSurfaceTransactionCallbackClass, "onMergeTransaction", "(JJJ)V");
            GetMethodIDOrDie(env, aSurfaceTransactionCallbackClass, "onMergeTransaction", "(JJJ)Z");


    jclass prepareSurfaceControlForWebviewCallbackClass = FindClassOrDie(
    jclass prepareSurfaceControlForWebviewCallbackClass = FindClassOrDie(
            env, "android/graphics/HardwareRenderer$PrepareSurfaceControlForWebviewCallback");
            env, "android/graphics/HardwareRenderer$PrepareSurfaceControlForWebviewCallback");
Loading