diff options
author | Pullakavi Srinivas <quic_spullaka@quicinc.com> | 2021-10-01 18:49:27 +0530 |
---|---|---|
committer | Rajat Yadav <quic_rajayada@quicinc.com> | 2021-12-29 14:13:53 +0000 |
commit | bcd4721fe7dc63a8b8d3087c6a3d2323fcfe86cd (patch) | |
tree | 7f5f03a68cad79a311dc428fdefdacc49d9ef21d | |
parent | d375d0f2f3b25abe5d1e6a0978f51fe1f0038e92 (diff) |
sf: Query smomo handle using composer extension.
CRs-Fixed: 3101477
Change-Id: Ide927ac89aebda0fcbf017cfd58dafbce0554dba
-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 9e441f7555..78707b87bf 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) { @@ -8155,9 +8132,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 6ad3142d8b..73bdd89c1a 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() {} @@ -923,6 +898,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(); @@ -1691,12 +1667,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; |