Loading native/android/libandroid.map.txt +1 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,7 @@ LIBANDROID { ASurfaceTransaction_setHdrMetadata_cta861_3; # introduced=29 ASurfaceTransaction_setHdrMetadata_smpte2086; # introduced=29 ASurfaceTransaction_setOnComplete; # introduced=29 ASurfaceTransaction_setOnCommit; # introduced=31 ASurfaceTransaction_setPosition; # introduced=31 ASurfaceTransaction_setCrop; # introduced=31 ASurfaceTransaction_setBufferTransform; # introduced=31 Loading native/android/surface_control.cpp +37 −1 Original line number Diff line number Diff line Loading @@ -260,6 +260,7 @@ struct ASurfaceTransactionStats { std::unordered_map<ASurfaceControl*, ASurfaceControlStats> aSurfaceControlStats; int64_t latchTime; sp<Fence> presentFence; bool transactionCompleted; }; int64_t ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats* aSurfaceTransactionStats) { Loading @@ -269,6 +270,9 @@ int64_t ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats* aSurface int ASurfaceTransactionStats_getPresentFenceFd(ASurfaceTransactionStats* aSurfaceTransactionStats) { CHECK_NOT_NULL(aSurfaceTransactionStats); LOG_ALWAYS_FATAL_IF(!aSurfaceTransactionStats->transactionCompleted, "ASurfaceTransactionStats queried from an incomplete transaction callback"); auto& presentFence = aSurfaceTransactionStats->presentFence; return (presentFence) ? presentFence->dup() : -1; } Loading Loading @@ -313,6 +317,8 @@ int ASurfaceTransactionStats_getPreviousReleaseFenceFd( ASurfaceTransactionStats* aSurfaceTransactionStats, ASurfaceControl* aSurfaceControl) { CHECK_NOT_NULL(aSurfaceTransactionStats); CHECK_NOT_NULL(aSurfaceControl); LOG_ALWAYS_FATAL_IF(!aSurfaceTransactionStats->transactionCompleted, "ASurfaceTransactionStats queried from an incomplete transaction callback"); const auto& aSurfaceControlStats = aSurfaceTransactionStats->aSurfaceControlStats.find(aSurfaceControl); Loading @@ -334,7 +340,6 @@ void ASurfaceTransactionStats_releaseASurfaceControls(ASurfaceControl** aSurface void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* aSurfaceTransaction, void* context, ASurfaceTransaction_OnComplete func) { CHECK_NOT_NULL(aSurfaceTransaction); CHECK_NOT_NULL(context); CHECK_NOT_NULL(func); TransactionCompletedCallbackTakesContext callback = [func](void* callback_context, Loading @@ -345,6 +350,7 @@ void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* aSurfaceTransaction, aSurfaceTransactionStats.latchTime = latchTime; aSurfaceTransactionStats.presentFence = presentFence; aSurfaceTransactionStats.transactionCompleted = true; auto& aSurfaceControlStats = aSurfaceTransactionStats.aSurfaceControlStats; Loading Loading @@ -695,3 +701,33 @@ void ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction* aSurfaceTran layer_state_t::eEnableBackpressure : 0; transaction->setFlags(surfaceControl, flags, layer_state_t::eEnableBackpressure); } void ASurfaceTransaction_setOnCommit(ASurfaceTransaction* aSurfaceTransaction, void* context, ASurfaceTransaction_OnCommit func) { CHECK_NOT_NULL(aSurfaceTransaction); CHECK_NOT_NULL(func); TransactionCompletedCallbackTakesContext callback = [func](void* callback_context, nsecs_t latchTime, const sp<Fence>& /* presentFence */, const std::vector<SurfaceControlStats>& surfaceControlStats) { ASurfaceTransactionStats aSurfaceTransactionStats; aSurfaceTransactionStats.latchTime = latchTime; aSurfaceTransactionStats.transactionCompleted = false; auto& aSurfaceControlStats = aSurfaceTransactionStats.aSurfaceControlStats; for (const auto& [surfaceControl, latchTime, acquireTime, presentFence, previousReleaseFence, transformHint, frameEvents] : surfaceControlStats) { ASurfaceControl* aSurfaceControl = reinterpret_cast<ASurfaceControl*>(surfaceControl.get()); aSurfaceControlStats[aSurfaceControl].acquireTime = acquireTime; } (*func)(callback_context, &aSurfaceTransactionStats); }; Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction); transaction->addTransactionCommittedCallback(callback, context); } No newline at end of file Loading
native/android/libandroid.map.txt +1 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,7 @@ LIBANDROID { ASurfaceTransaction_setHdrMetadata_cta861_3; # introduced=29 ASurfaceTransaction_setHdrMetadata_smpte2086; # introduced=29 ASurfaceTransaction_setOnComplete; # introduced=29 ASurfaceTransaction_setOnCommit; # introduced=31 ASurfaceTransaction_setPosition; # introduced=31 ASurfaceTransaction_setCrop; # introduced=31 ASurfaceTransaction_setBufferTransform; # introduced=31 Loading
native/android/surface_control.cpp +37 −1 Original line number Diff line number Diff line Loading @@ -260,6 +260,7 @@ struct ASurfaceTransactionStats { std::unordered_map<ASurfaceControl*, ASurfaceControlStats> aSurfaceControlStats; int64_t latchTime; sp<Fence> presentFence; bool transactionCompleted; }; int64_t ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats* aSurfaceTransactionStats) { Loading @@ -269,6 +270,9 @@ int64_t ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats* aSurface int ASurfaceTransactionStats_getPresentFenceFd(ASurfaceTransactionStats* aSurfaceTransactionStats) { CHECK_NOT_NULL(aSurfaceTransactionStats); LOG_ALWAYS_FATAL_IF(!aSurfaceTransactionStats->transactionCompleted, "ASurfaceTransactionStats queried from an incomplete transaction callback"); auto& presentFence = aSurfaceTransactionStats->presentFence; return (presentFence) ? presentFence->dup() : -1; } Loading Loading @@ -313,6 +317,8 @@ int ASurfaceTransactionStats_getPreviousReleaseFenceFd( ASurfaceTransactionStats* aSurfaceTransactionStats, ASurfaceControl* aSurfaceControl) { CHECK_NOT_NULL(aSurfaceTransactionStats); CHECK_NOT_NULL(aSurfaceControl); LOG_ALWAYS_FATAL_IF(!aSurfaceTransactionStats->transactionCompleted, "ASurfaceTransactionStats queried from an incomplete transaction callback"); const auto& aSurfaceControlStats = aSurfaceTransactionStats->aSurfaceControlStats.find(aSurfaceControl); Loading @@ -334,7 +340,6 @@ void ASurfaceTransactionStats_releaseASurfaceControls(ASurfaceControl** aSurface void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* aSurfaceTransaction, void* context, ASurfaceTransaction_OnComplete func) { CHECK_NOT_NULL(aSurfaceTransaction); CHECK_NOT_NULL(context); CHECK_NOT_NULL(func); TransactionCompletedCallbackTakesContext callback = [func](void* callback_context, Loading @@ -345,6 +350,7 @@ void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* aSurfaceTransaction, aSurfaceTransactionStats.latchTime = latchTime; aSurfaceTransactionStats.presentFence = presentFence; aSurfaceTransactionStats.transactionCompleted = true; auto& aSurfaceControlStats = aSurfaceTransactionStats.aSurfaceControlStats; Loading Loading @@ -695,3 +701,33 @@ void ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction* aSurfaceTran layer_state_t::eEnableBackpressure : 0; transaction->setFlags(surfaceControl, flags, layer_state_t::eEnableBackpressure); } void ASurfaceTransaction_setOnCommit(ASurfaceTransaction* aSurfaceTransaction, void* context, ASurfaceTransaction_OnCommit func) { CHECK_NOT_NULL(aSurfaceTransaction); CHECK_NOT_NULL(func); TransactionCompletedCallbackTakesContext callback = [func](void* callback_context, nsecs_t latchTime, const sp<Fence>& /* presentFence */, const std::vector<SurfaceControlStats>& surfaceControlStats) { ASurfaceTransactionStats aSurfaceTransactionStats; aSurfaceTransactionStats.latchTime = latchTime; aSurfaceTransactionStats.transactionCompleted = false; auto& aSurfaceControlStats = aSurfaceTransactionStats.aSurfaceControlStats; for (const auto& [surfaceControl, latchTime, acquireTime, presentFence, previousReleaseFence, transformHint, frameEvents] : surfaceControlStats) { ASurfaceControl* aSurfaceControl = reinterpret_cast<ASurfaceControl*>(surfaceControl.get()); aSurfaceControlStats[aSurfaceControl].acquireTime = acquireTime; } (*func)(callback_context, &aSurfaceTransactionStats); }; Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction); transaction->addTransactionCommittedCallback(callback, context); } No newline at end of file