diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 87 |
1 files changed, 31 insertions, 56 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; } |