Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41b98d41 authored by Chia-I Wu's avatar Chia-I Wu
Browse files

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
parent f02c8b41
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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);
+4 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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_);
+2 −2
Original line number Diff line number Diff line
@@ -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;