diff options
| author | 2017-12-11 11:04:36 -0800 | |
|---|---|---|
| committer | 2017-12-15 10:49:36 -0800 | |
| commit | 41b98d41f9f4e94a1a9a31960a317649cbec3b09 (patch) | |
| tree | ea9c224be1441de5ae057570754b880f71e8318b | |
| parent | f02c8b410ab8d83907cfa88a49085c8ac63f88a3 (diff) | |
surfaceflinger: do not check HWC2::Capability::SkipValidate
HWC2::Capability::SkipValidate is not defined in HIDL. We cannot
check against it.
Besides, presentOrValidate is equivalent to validate in HIDL when
the underlying hwcomposer2 implementation does not support the cap.
There is not need to check against it.
Bug: 70407085
Test: boots
Change-Id: Ib0c11e99ce3389ad555605de18e194d9b51b2bc0
5 files changed, 18 insertions, 6 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index b096a3ae57..a16c040bc2 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -444,10 +444,16 @@ status_t HWComposer::prepare(DisplayDevice& displayDevice) { HWC2::Error error = HWC2::Error::None; - // First try to skip validate altogether if the HWC supports it. + // First try to skip validate altogether when there is no client + // composition. When there is client composition, since we haven't + // rendered to the client target yet, we should not attempt to skip + // validate. + // + // displayData.hasClientComposition hasn't been updated for this frame. + // The check below is incorrect. We actually rely on HWC here to fall + // back to validate when there is any client layer. displayData.validateWasSkipped = false; - if (hasCapability(HWC2::Capability::SkipValidate) && - !displayData.hasClientComposition) { + if (!displayData.hasClientComposition) { sp<android::Fence> outPresentFence; uint32_t state = UINT32_MAX; error = hwcDisplay->presentOrValidate(&numTypes, &numRequests, &outPresentFence , &state); diff --git a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp index 561db8dd0d..07b8cc0b0d 100644 --- a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp +++ b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp @@ -157,6 +157,10 @@ FakeComposerClient::FakeComposerClient() FakeComposerClient::~FakeComposerClient() {} +bool FakeComposerClient::hasCapability(hwc2_capability_t /*capability*/) { + return false; +} + void FakeComposerClient::removeClient() { ALOGV("removeClient"); // TODO: Ahooga! Only thing current lifetime management choices in diff --git a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h index 294abb2c59..dd384c0829 100644 --- a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h +++ b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h @@ -45,6 +45,8 @@ public: FakeComposerClient(); virtual ~FakeComposerClient(); + bool hasCapability(hwc2_capability_t capability) override; + void removeClient() override; void enableCallback(bool enable) override; uint32_t getMaxVirtualDisplayCount() override; diff --git a/services/vr/hardware_composer/impl/vr_hwc.cpp b/services/vr/hardware_composer/impl/vr_hwc.cpp index fd271d0fe2..d5664d5751 100644 --- a/services/vr/hardware_composer/impl/vr_hwc.cpp +++ b/services/vr/hardware_composer/impl/vr_hwc.cpp @@ -232,7 +232,7 @@ VrHwc::VrHwc() {} VrHwc::~VrHwc() {} -bool VrHwc::hasCapability(Capability /* capability */) const { return false; } +bool VrHwc::hasCapability(hwc2_capability_t /* capability */) { return false; } void VrHwc::removeClient() { std::lock_guard<std::mutex> guard(mutex_); diff --git a/services/vr/hardware_composer/impl/vr_hwc.h b/services/vr/hardware_composer/impl/vr_hwc.h index fce9a063e0..eff721b501 100644 --- a/services/vr/hardware_composer/impl/vr_hwc.h +++ b/services/vr/hardware_composer/impl/vr_hwc.h @@ -196,8 +196,6 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView { VrHwc(); ~VrHwc() override; - bool hasCapability(Capability capability) const; - Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId); Error setClientTargetMetadata( @@ -207,6 +205,8 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView { const IVrComposerClient::BufferMetadata& metadata); // ComposerBase + bool hasCapability(hwc2_capability_t capability) override; + void removeClient() override; void enableCallback(bool enable) override; |