summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-build-prod@system.gserviceaccount.com>2022-04-04 13:36:52 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-04-04 13:36:52 +0000
commit8ea248679a4e280d95049b2ccb3b40cdd981bc45 (patch)
treea5f94094e9f2a7c33eaffe10f3f02e2334f7432f
parentbd044647ca0ff6bb257e9eebf0fafba3abed6c81 (diff)
parent69572dbbc843996eab598ee3603a30aae84e69b7 (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.cpp11
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp15
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;