summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Sodman <dsodman@google.com> 2018-01-07 10:23:24 -0800
committer David Sodman <dsodman@google.com> 2018-08-22 13:43:14 -0700
commit15fb96e63f2de336bb01e0824cc85141e5edfdea (patch)
tree2dc11d32d6ae0a7dff9e85c1301f226915e8b6ba
parent8ed0c6f0ed9e9aa583ba077062fc119a3d386b1e (diff)
SF: Track compositionType across displayId's
Make sure that compositionType tracks displayId's Bug: 112259502 Test: cts -m CtsViewTestCases SurfaceFlinger_test vrflinger_test Change-Id: I748ef1a6da8257e780daf89af06d76f29d19ad6f
-rw-r--r--services/surfaceflinger/Layer.cpp8
-rw-r--r--services/surfaceflinger/LayerBE.h1
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp13
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h2
4 files changed, 13 insertions, 11 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 8e6cf99279..1bb72326d9 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -772,16 +772,12 @@ void Layer::setCompositionType(int32_t displayId, HWC2::Composition type, bool c
}
HWC2::Composition Layer::getCompositionType(int32_t displayId) const {
- if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
+ if (getBE().mHwcLayers.count(displayId) == 0) {
// If we're querying the composition type for a display that does not
// have a HWC counterpart, then it will always be Client
return HWC2::Composition::Client;
}
- if (getBE().mHwcLayers.count(displayId) == 0) {
- ALOGE("getCompositionType called with an invalid HWC layer");
- return HWC2::Composition::Invalid;
- }
- return getBE().mHwcLayers.at(displayId).compositionType;
+ return getBE().mHwcLayers[displayId].compositionType;
}
void Layer::setClearClientTarget(int32_t displayId, bool clear) {
diff --git a/services/surfaceflinger/LayerBE.h b/services/surfaceflinger/LayerBE.h
index 0413a459df..dacdc06e19 100644
--- a/services/surfaceflinger/LayerBE.h
+++ b/services/surfaceflinger/LayerBE.h
@@ -40,6 +40,7 @@ struct CompositionInfo {
std::shared_ptr<LayerBE> layer;
struct {
std::shared_ptr<HWC2::Layer> hwcLayer;
+ int32_t displayId = -1;
sp<Fence> fence;
HWC2::BlendMode blendMode = HWC2::BlendMode::Invalid;
Rect displayFrame;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index c0c684a502..8cee8d7801 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1464,8 +1464,11 @@ void SurfaceFlinger::handleMessageRefresh() {
mVsyncModulator.onRefreshed(mHadClientComposition);
mLayersWithQueuedFrames.clear();
- for (auto& compositionInfo : getBE().mCompositionInfo) {
- compositionInfo.hwc.hwcLayer = nullptr;
+ for (const auto& [token, display] : mDisplays) {
+ const auto displayId = display->getId();
+ for (auto& compositionInfo : getBE().mCompositionInfo[displayId]) {
+ compositionInfo.hwc.hwcLayer = nullptr;
+ }
}
}
@@ -1551,16 +1554,18 @@ void SurfaceFlinger::calculateWorkingSet() {
}
mDrawingState.colorMatrixChanged = false;
- getBE().mCompositionInfo.clear();
for (const auto& [token, display] : mDisplays) {
+ const auto displayId = display->getId();
+ getBE().mCompositionInfo[displayId].clear();
for (auto& layer : display->getVisibleLayersSortedByZ()) {
auto displayId = display->getId();
layer->getBE().compositionInfo.compositionType = layer->getCompositionType(displayId);
if (!layer->setHwcLayer(displayId)) {
ALOGV("Need to create HWCLayer for %s", layer->getName().string());
}
- getBE().mCompositionInfo.push_back(layer->getBE().compositionInfo);
+ layer->getBE().compositionInfo.hwc.displayId = displayId;
+ getBE().mCompositionInfo[displayId].push_back(layer->getBE().compositionInfo);
layer->getBE().compositionInfo.hwc.hwcLayer = nullptr;
}
}
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index c06c74fad2..bdbd6ab750 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -226,7 +226,7 @@ public:
// instances. Each hardware composer instance gets a different sequence id.
int32_t mComposerSequenceId;
- std::vector<CompositionInfo> mCompositionInfo;
+ std::unordered_map<int32_t, std::vector<CompositionInfo>> mCompositionInfo;
};