From e1e77cca8a44e85c5cf0ab1b3038a510c40a19c0 Mon Sep 17 00:00:00 2001 From: Rachel Lee Date: Tue, 19 Oct 2021 16:40:41 -0700 Subject: [PATCH 1/2] Implement timeline in libandroid ASurfaceControl. As part of choreographer project. Bug: 198192003 Test: atest ASurfaceControlTest Change-Id: I36fdeae1d2bc07fdbd487fc0a40324fe48baca09 --- native/android/libandroid.map.txt | 1 + native/android/surface_control.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt index f00eef2f1b001..3c1aa4409254b 100644 --- a/native/android/libandroid.map.txt +++ b/native/android/libandroid.map.txt @@ -263,6 +263,7 @@ LIBANDROID { ASurfaceTransaction_setEnableBackPressure; # introduced=31 ASurfaceTransaction_setFrameRate; # introduced=30 ASurfaceTransaction_setFrameRateWithChangeStrategy; # introduced=31 + ASurfaceTransaction_setFrameTimeline; # introduced=Tiramisu ASurfaceTransaction_setGeometry; # introduced=29 ASurfaceTransaction_setHdrMetadata_cta861_3; # introduced=29 ASurfaceTransaction_setHdrMetadata_smpte2086; # introduced=29 diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp index ceba4d60bed0e..d3b7744453262 100644 --- a/native/android/surface_control.cpp +++ b/native/android/surface_control.cpp @@ -659,3 +659,11 @@ void ASurfaceTransaction_setOnCommit(ASurfaceTransaction* aSurfaceTransaction, v transaction->addTransactionCommittedCallback(callback, context); } + +void ASurfaceTransaction_setFrameTimeline(ASurfaceTransaction* aSurfaceTransaction, + int64_t vsyncId) { + CHECK_NOT_NULL(aSurfaceTransaction); + // TODO(b/210043506): Get start time from platform. + ASurfaceTransaction_to_Transaction(aSurfaceTransaction) + ->setFrameTimelineInfo({.vsyncId = vsyncId, .startTimeNanos = 0}); +} From 4fa7484510833ca11c79059ec8994417315a7d49 Mon Sep 17 00:00:00 2001 From: Rachel Lee Date: Tue, 16 Nov 2021 13:30:11 -0800 Subject: [PATCH 2/2] Pass start time from HWUI canvas context. Bug: 198192003 Test: atest CanvasContextTests Change-Id: If1dc10c001e9a8c493f491abfe5022889ae5544b --- libs/hwui/renderthread/CanvasContext.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 38b57153b74a6..bdad7727071fc 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -526,8 +526,9 @@ nsecs_t CanvasContext::draw() { if (vsyncId != UiFrameInfoBuilder::INVALID_VSYNC_ID) { const auto inputEventId = static_cast(mCurrentFrameInfo->get(FrameInfoIndex::InputEventId)); - native_window_set_frame_timeline_info(mNativeSurface->getNativeWindow(), vsyncId, - inputEventId); + native_window_set_frame_timeline_info( + mNativeSurface->getNativeWindow(), vsyncId, inputEventId, + mCurrentFrameInfo->get(FrameInfoIndex::FrameStartTime)); } }