diff options
author | Treehugger Robot <android-build-prod@system.gserviceaccount.com> | 2022-04-04 13:36:52 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-04-04 13:36:52 +0000 |
commit | 8ea248679a4e280d95049b2ccb3b40cdd981bc45 (patch) | |
tree | a5f94094e9f2a7c33eaffe10f3f02e2334f7432f | |
parent | bd044647ca0ff6bb257e9eebf0fafba3abed6c81 (diff) | |
parent | 69572dbbc843996eab598ee3603a30aae84e69b7 (diff) |
Merge changes I2b778cc0,Id751d5ab into s-keystone-qcom-dev
* changes:
sf: Avoid present hidl call when DP is disconnected.
sf: check layer stack id only for multi display smomo.
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 11 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 15 |
2 files changed, 21 insertions, 5 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 07de93f49b..f0405fb232 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -559,6 +559,13 @@ status_t HWComposer::getDeviceCompositionChanges( sp<Fence> HWComposer::getPresentFence(HalDisplayId displayId) const { RETURN_IF_INVALID_DISPLAY(displayId, Fence::NO_FENCE); + + auto& hwcDisplay = mDisplayData.at(displayId).hwcDisplay; + + if (!hwcDisplay->isConnected()) { + return Fence::NO_FENCE; + } + return mDisplayData.at(displayId).lastPresentFence; } @@ -583,6 +590,10 @@ status_t HWComposer::presentAndGetReleaseFences( auto& displayData = mDisplayData[displayId]; auto& hwcDisplay = displayData.hwcDisplay; + if (!hwcDisplay->isConnected()) { + return NO_ERROR; + } + if (displayData.validateWasSkipped) { displayData.validateWasSkipped = false; // explicitly flush all pending commands diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 223e71dba5..7b42e5c946 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4901,14 +4901,19 @@ status_t SurfaceFlinger::setTransactionState( state.traverseStatesWithBuffers([&](const layer_state_t& state) { sp<Layer> layer = fromHandle(state.surface).promote(); if (layer != nullptr) { - const uint32_t layerStackId = layer->getLayerStack(); SmomoIntf *smoMo = nullptr; - for (auto &instance: mSmomoInstances) { - if (instance.layerStackId == layerStackId) { - smoMo = instance.smoMo; - break; + if (mSmomoInstances.size() > 1) { + const uint32_t layerStackId = layer->getLayerStack(); + for (auto &instance: mSmomoInstances) { + if (instance.layerStackId == layerStackId) { + smoMo = instance.smoMo; + break; + } } } + else if (mSmomoInstances.size() == 1) { + smoMo = mSmomoInstances[0].smoMo; + } if (smoMo) { smomo::SmomoBufferStats bufferStats; |