summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-build-prod@system.gserviceaccount.com>2021-12-30 08:03:35 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-12-30 08:03:35 +0000
commited5b07e36d47248b8cf140547b16a8ad1282b7f7 (patch)
tree945fe7c8c857a41c76f3eed1d7cb171220ee99ee
parent9e828ba7315f35cb4b85e1635cebbf851260ad78 (diff)
parentbcd4721fe7dc63a8b8d3087c6a3d2323fcfe86cd (diff)
Merge "sf: Query smomo handle using composer extension." into s-keystone-qcom-dev
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp87
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h29
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;