diff options
author | Treehugger Robot <android-build-prod@system.gserviceaccount.com> | 2021-12-30 08:03:35 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-12-30 08:03:35 +0000 |
commit | ed5b07e36d47248b8cf140547b16a8ad1282b7f7 (patch) | |
tree | 945fe7c8c857a41c76f3eed1d7cb171220ee99ee | |
parent | 9e828ba7315f35cb4b85e1635cebbf851260ad78 (diff) | |
parent | bcd4721fe7dc63a8b8d3087c6a3d2323fcfe86cd (diff) |
Merge "sf: Query smomo handle using composer extension." into s-keystone-qcom-dev
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 87 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 29 |
2 files changed, 34 insertions, 82 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 744b14dafe..086be820c5 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -431,48 +431,13 @@ bool callingThreadHasRotateSurfaceFlingerAccess() { PermissionCache::checkPermission(sRotateSurfaceFlinger, pid, uid); } -bool SmomoWrapper::init() { - mSmoMoLibHandle = dlopen(SMOMO_LIBRARY_NAME, RTLD_NOW); - if (!mSmoMoLibHandle) { - ALOGE("Unable to open SmoMo lib: %s", dlerror()); - return false; - } - - mSmoMoCreateFunc = - reinterpret_cast<CreateSmoMoFuncPtr>(dlsym(mSmoMoLibHandle, - CREATE_SMOMO_INTERFACE_NAME)); - mSmoMoDestroyFunc = - reinterpret_cast<DestroySmoMoFuncPtr>(dlsym(mSmoMoLibHandle, - DESTROY_SMOMO_INTERFACE_NAME)); - - if (!mSmoMoCreateFunc || !mSmoMoDestroyFunc) { - ALOGE("Can't load SmoMo symbols: %s", dlerror()); - dlclose(mSmoMoLibHandle); - return false; - } - - if (!mSmoMoCreateFunc(SMOMO_VERSION_TAG, &mInst)) { - ALOGE("Unable to create SmoMo interface"); - dlclose(mSmoMoLibHandle); - return false; - } - - return true; -} - -SmomoWrapper::~SmomoWrapper() { - if (mInst) { - mSmoMoDestroyFunc(mInst); - } +void SurfaceFlinger::setRefreshRates( + std::unique_ptr<scheduler::RefreshRateConfigs> &refreshRateConfigs) { + std::vector<float> refreshRates; - if (mSmoMoLibHandle) { - dlclose(mSmoMoLibHandle); + if (mSmoMo == nullptr) { + return; } -} - -void SmomoWrapper::setRefreshRates( - std::unique_ptr<scheduler::RefreshRateConfigs> &refreshRateConfigs) { - std::vector<float> refreshRates; auto iter = refreshRateConfigs->getAllRefreshRates().cbegin(); while (iter != refreshRateConfigs->getAllRefreshRates().cend()) { @@ -481,7 +446,7 @@ void SmomoWrapper::setRefreshRates( } ++iter; } - mInst->SetDisplayRefreshRates(refreshRates); + mSmoMo->SetDisplayRefreshRates(refreshRates); } bool LayerExtWrapper::init() { @@ -1178,18 +1143,8 @@ void SurfaceFlinger::init() { ALOGE("Run StartPropertySetThread failed!"); } - char smomoProp[PROPERTY_VALUE_MAX]; - property_get("vendor.display.use_smooth_motion", smomoProp, "0"); - if (atoi(smomoProp) && mSmoMo.init()) { - mSmoMo->SetChangeRefreshRateCallback( - [this](int32_t refreshRate) { - setRefreshRateTo(refreshRate); - }); - - mSmoMo.setRefreshRates(mRefreshRateConfigs); - - ALOGI("SmoMo is enabled"); - } + // Initialize Smomo. + InitSmomo(); char layerExtProp[PROPERTY_VALUE_MAX]; property_get("vendor.display.use_layer_ext", layerExtProp, "0"); @@ -1245,6 +1200,28 @@ void SurfaceFlinger::InitComposerExtn() { ALOGI("Init: mDisplayExtnIntf: %p", mDisplayExtnIntf); } +void SurfaceFlinger::InitSmomo() { + char smomoProp[PROPERTY_VALUE_MAX]; + property_get("vendor.display.use_smooth_motion", smomoProp, "0"); + if (!atoi(smomoProp)) { + return; + } + bool ret = mComposerExtnIntf->CreateSmomoExtn(&mSmoMo); + if (!ret) { + ALOGI("Unable to create smomo extension"); + } + if (mSmoMo != nullptr) { + mSmoMo->SetChangeRefreshRateCallback( + [this](int32_t refreshRate) { + setRefreshRateTo(refreshRate); + }); + + setRefreshRates(mRefreshRateConfigs); + + ALOGI("SmoMo is enabled"); + } +} + void SurfaceFlinger::startUnifiedDraw() { #ifdef QTI_UNIFIED_DRAW if (mDisplayExtnIntf) { @@ -8143,9 +8120,7 @@ status_t SurfaceFlinger::setDesiredDisplayModeSpecsInternal( preferredRefreshRate.getModeId().value()); } - if (mSmoMo) { - mSmoMo.setRefreshRates(mRefreshRateConfigs); - } + setRefreshRates(mRefreshRateConfigs); return NO_ERROR; } diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 104a01320d..8363ee5a62 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -209,31 +209,6 @@ private: void *mDolphinHandle = nullptr; }; -class SmomoWrapper { -public: - SmomoWrapper() {} - ~SmomoWrapper(); - - bool init(); - - SmomoIntf* operator->() const { return mInst; } - operator bool() const { return mInst != nullptr; } - - SmomoWrapper(const SmomoWrapper&) = delete; - SmomoWrapper& operator=(const SmomoWrapper&) = delete; - - void setRefreshRates(std::unique_ptr<scheduler::RefreshRateConfigs> &refreshRateConfigs); - -private: - SmomoIntf *mInst = nullptr; - void *mSmoMoLibHandle = nullptr; - - using CreateSmoMoFuncPtr = std::add_pointer<bool(uint16_t, SmomoIntf**)>::type; - using DestroySmoMoFuncPtr = std::add_pointer<void(SmomoIntf*)>::type; - CreateSmoMoFuncPtr mSmoMoCreateFunc; - DestroySmoMoFuncPtr mSmoMoDestroyFunc; -}; - class LayerExtWrapper { public: LayerExtWrapper() {} @@ -922,6 +897,7 @@ private: // Check if unified draw supported void startUnifiedDraw(); void InitComposerExtn(); + void InitSmomo(); // Returns whether a new buffer has been latched (see handlePageFlip()) bool handleMessageInvalidate(); @@ -1688,12 +1664,13 @@ private: void scheduleRegionSamplingThread(); void notifyRegionSamplingThread(); + void setRefreshRates(std::unique_ptr<scheduler::RefreshRateConfigs> &refreshRateConfigs); public: nsecs_t mVsyncPeriod = -1; DolphinWrapper mDolphinWrapper; - SmomoWrapper mSmoMo; LayerExtWrapper mLayerExt; + SmomoIntf *mSmoMo = nullptr; private: bool mEarlyWakeUpEnabled = false; |