SF: Use compositionInfo after HWC changedTypes
Bug: 112259502
Test: cts -m CtsViewTestCases
SurfaceFlinger_test
vrflinger_test
Change-Id: I908f439eedfab9ee8241f8ac594465527f93408a
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 630cc0b..873de25 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -417,7 +417,8 @@
return NO_ERROR;
}
-status_t HWComposer::prepare(DisplayDevice& display) {
+status_t HWComposer::prepare(DisplayDevice& display,
+ std::vector<CompositionInfo>& compositionData) {
ATRACE_CALL();
Mutex::Autolock _l(mDisplayLock);
@@ -488,18 +489,19 @@
displayData.hasClientComposition = false;
displayData.hasDeviceComposition = false;
- for (auto& layer : display.getVisibleLayersSortedByZ()) {
- auto hwcLayer = layer->getHwcLayer(displayId);
+ for (auto& compositionInfo : compositionData) {
+ auto hwcLayer = compositionInfo.hwc.hwcLayer;
- if (changedTypes.count(hwcLayer) != 0) {
+ if (changedTypes.count(&*hwcLayer) != 0) {
// We pass false so we only update our state and don't call back
// into the HWC device
- validateChange(layer->getCompositionType(displayId),
- changedTypes[hwcLayer]);
- layer->setCompositionType(displayId, changedTypes[hwcLayer], false);
+ validateChange(compositionInfo.compositionType,
+ changedTypes[&*hwcLayer]);
+ compositionInfo.compositionType = changedTypes[&*hwcLayer];
+ compositionInfo.layer->mLayer->setCompositionType(displayId, compositionInfo.compositionType, false);
}
- switch (layer->getCompositionType(displayId)) {
+ switch (compositionInfo.compositionType) {
case HWC2::Composition::Client:
displayData.hasClientComposition = true;
break;
@@ -513,17 +515,17 @@
break;
}
- if (layerRequests.count(hwcLayer) != 0 &&
- layerRequests[hwcLayer] ==
+ if (layerRequests.count(&*hwcLayer) != 0 &&
+ layerRequests[&*hwcLayer] ==
HWC2::LayerRequest::ClearClientTarget) {
- layer->setClearClientTarget(displayId, true);
+ compositionInfo.hwc.clearClientTarget = true;
} else {
- if (layerRequests.count(hwcLayer) != 0) {
+ if (layerRequests.count(&*hwcLayer) != 0) {
LOG_DISPLAY_ERROR(displayId,
- ("Unknown layer request " + to_string(layerRequests[hwcLayer]))
+ ("Unknown layer request " + to_string(layerRequests[&*hwcLayer]))
.c_str());
}
- layer->setClearClientTarget(displayId, false);
+ compositionInfo.hwc.clearClientTarget = false;
}
}