diff options
author | Wiwit Rifa'i <wiwitrifai@google.com> | 2023-03-06 07:40:41 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-03-06 07:40:41 +0000 |
commit | 0584de6c22e58abd9420105609ae103710a84a5b (patch) | |
tree | 067d416fa3984468c8d9d4bba1c94dc35430dbc2 /hwc3/impl/HalImpl.cpp | |
parent | 896de26fb1747138175169af681d92d93783113a (diff) | |
parent | 1baa6346adfe4d8ede6f2ad6cc8687058bfeab70 (diff) |
Merge changes from topic "hwc-rri-callback-impl" into udc-dev
* changes:
hwc3: add debug to trigger refresh rate indicator update
hwc3: add support for refresh rate indicator callback
Diffstat (limited to 'hwc3/impl/HalImpl.cpp')
-rw-r--r-- | hwc3/impl/HalImpl.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/hwc3/impl/HalImpl.cpp b/hwc3/impl/HalImpl.cpp index fb41a77..e48d390 100644 --- a/hwc3/impl/HalImpl.cpp +++ b/hwc3/impl/HalImpl.cpp @@ -99,6 +99,20 @@ void seamlessPossible(hwc2_callback_data_t callbackData, hwc2_display_t hwcDispl hal->getEventCallback()->onSeamlessPossible(display); } +void refreshRateChangedDebug(hwc2_callback_data_t callbackData, hwc2_display_t hwcDisplay, + hwc2_vsync_period_t hwcVsyncPeriodNanos) { + auto hal = static_cast<HalImpl*>(callbackData); + int64_t display; + int32_t vsyncPeriodNanos; + + h2a::translate(hwcDisplay, display); + h2a::translate(hwcVsyncPeriodNanos, vsyncPeriodNanos); + hal->getEventCallback()->onRefreshRateChangedDebug(RefreshRateChangedDebugData{ + .display = display, + .vsyncPeriodNanos = vsyncPeriodNanos, + }); +} + } // nampesapce hook HalImpl::HalImpl(std::unique_ptr<ExynosDevice> device) : mDevice(std::move(device)) { @@ -130,6 +144,7 @@ void HalImpl::initCaps() { } mCaps.insert(Capability::BOOT_DISPLAY_CONFIG); + mCaps.insert(Capability::REFRESH_RATE_CHANGED_CALLBACK_DEBUG); } int32_t HalImpl::getHalDisplay(int64_t display, ExynosDisplay*& halDisplay) { @@ -193,6 +208,9 @@ void HalImpl::registerEventCallback(EventCallback* callback) { // register HWC3 Callback mDevice->registerHwc3Callback(IComposerCallback::TRANSACTION_onVsyncIdle, this, reinterpret_cast<hwc2_function_pointer_t>(hook::vsyncIdle)); + mDevice->registerHwc3Callback(IComposerCallback::TRANSACTION_onRefreshRateChangedDebug, this, + reinterpret_cast<hwc2_function_pointer_t>( + hook::refreshRateChangedDebug)); } void HalImpl::unregisterEventCallback() { @@ -204,6 +222,8 @@ void HalImpl::unregisterEventCallback() { // unregister HWC3 Callback mDevice->registerHwc3Callback(IComposerCallback::TRANSACTION_onVsyncIdle, this, nullptr); + mDevice->registerHwc3Callback(IComposerCallback::TRANSACTION_onRefreshRateChangedDebug, this, + nullptr); mEventCallback = nullptr; } @@ -1064,10 +1084,11 @@ int32_t HalImpl::getDisplayMultiThreadedPresentSupport(const int64_t& display, b return halDisplay->getDisplayMultiThreadedPresentSupport(outSupport); } -int32_t HalImpl::setRefreshRateChangedCallbackDebugEnabled(int64_t /* display*/, - bool /* enabled */) { - // TODO(b/267825022) Add implementation for the HAL - return EX_UNSUPPORTED_OPERATION; +int32_t HalImpl::setRefreshRateChangedCallbackDebugEnabled(int64_t display, bool enabled) { + ExynosDisplay* halDisplay; + RET_IF_ERR(getHalDisplay(display, halDisplay)); + + return halDisplay->setRefreshRateChangedCallbackDebugEnabled(enabled); } } // namespace aidl::android::hardware::graphics::composer3::impl |