hwc2: Allow commit to go through if flush_ flag is set

Allow commit to go through if flush_ flag is set even if
display is not validated

Change-Id: Ic87f87342a72de541fe79ba514915dd5e6e13c86
CRs-Fixed: 2218342
This commit is contained in:
Baldev Sahu
2018-04-04 11:39:20 +05:30
committed by Gerrit - the friendly Code Review server
parent 99455b1939
commit 9ded89a4f9

View File

@@ -1250,6 +1250,10 @@ HWC2::Error HWCDisplay::GetHdrCapabilities(uint32_t *out_num_types, int32_t *out
HWC2::Error HWCDisplay::CommitLayerStack(void) { HWC2::Error HWCDisplay::CommitLayerStack(void) {
if (flush_) {
return HWC2::Error::None;
}
if (skip_validate_ && !CanSkipValidate()) { if (skip_validate_ && !CanSkipValidate()) {
validated_ = false; validated_ = false;
} }
@@ -1265,37 +1269,36 @@ HWC2::Error HWCDisplay::CommitLayerStack(void) {
DumpInputBuffers(); DumpInputBuffers();
if (!flush_) { DisplayError error = kErrorUndefined;
DisplayError error = kErrorUndefined; int status = 0;
int status = 0; if (tone_mapper_) {
if (tone_mapper_) { if (layer_stack_.flags.hdr_present) {
if (layer_stack_.flags.hdr_present) { status = tone_mapper_->HandleToneMap(&layer_stack_);
status = tone_mapper_->HandleToneMap(&layer_stack_); if (status != 0) {
if (status != 0) { DLOGE("Error handling HDR in ToneMapper");
DLOGE("Error handling HDR in ToneMapper");
}
} else {
tone_mapper_->Terminate();
} }
}
error = display_intf_->Commit(&layer_stack_);
if (error == kErrorNone) {
// A commit is successfully submitted, start flushing on failure now onwards.
flush_on_error_ = true;
} else { } else {
if (error == kErrorShutDown) { tone_mapper_->Terminate();
shutdown_pending_ = true; }
return HWC2::Error::Unsupported; }
} else if (error == kErrorNotValidated) {
validated_ = false; error = display_intf_->Commit(&layer_stack_);
return HWC2::Error::NotValidated;
} else if (error != kErrorPermission) { if (error == kErrorNone) {
DLOGE("Commit failed. Error = %d", error); // A commit is successfully submitted, start flushing on failure now onwards.
// To prevent surfaceflinger infinite wait, flush the previous frame during Commit() flush_on_error_ = true;
// so that previous buffer and fences are released, and override the error. } else {
flush_ = true; if (error == kErrorShutDown) {
} shutdown_pending_ = true;
return HWC2::Error::Unsupported;
} else if (error == kErrorNotValidated) {
validated_ = false;
return HWC2::Error::NotValidated;
} else if (error != kErrorPermission) {
DLOGE("Commit failed. Error = %d", error);
// To prevent surfaceflinger infinite wait, flush the previous frame during Commit()
// so that previous buffer and fences are released, and override the error.
flush_ = true;
} }
} }