sdm: Move display state and input validation in appropriate place
1. Perform display specific settings only if the display state and
input parameters are valid.
2. Set and reset pending_commit on prepare and commit respectively.
Change-Id: I1f2093f6a24e7ee115dd01da6796f78af618bc02
CRs-Fixed: 1005180
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 361ded8..0f39cb0 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -180,27 +180,26 @@
DisplayError DisplayBase::Prepare(LayerStack *layer_stack) {
SCOPE_LOCK(locker_);
+
+ if (!active_) {
+ return kErrorPermission;
+ }
+
+ if (!layer_stack) {
+ return kErrorParameters;
+ }
+
return PrepareLocked(layer_stack);
}
DisplayError DisplayBase::PrepareLocked(LayerStack *layer_stack) {
DisplayError error = kErrorNone;
- if (!layer_stack) {
- return kErrorParameters;
- }
-
- pending_commit_ = false;
-
error = ValidateGPUTarget(layer_stack);
if (error != kErrorNone) {
return error;
}
- if (!active_) {
- return kErrorPermission;
- }
-
if (color_mgr_ && color_mgr_->NeedsPartialUpdateDisable()) {
DisablePartialUpdateOneFrameLocked();
}
@@ -254,13 +253,14 @@
}
DisplayError DisplayBase::Commit(LayerStack *layer_stack) {
- DisplayError error = kErrorNone;
+ SCOPE_LOCK(locker_);
if (!layer_stack) {
return kErrorParameters;
}
if (!active_) {
+ pending_commit_ = false;
return kErrorPermission;
}
@@ -271,6 +271,12 @@
pending_commit_ = false;
+ return CommitLocked(layer_stack);
+}
+
+DisplayError DisplayBase::CommitLocked(LayerStack *layer_stack) {
+ DisplayError error = kErrorNone;
+
// Layer stack attributes has changed, need to Reconfigure, currently in use for Hybrid Comp
if (layer_stack->flags.attributes_changed) {
error = comp_manager_->ReConfigure(display_comp_ctx_, &hw_layers_);
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
index d771342..c761d00 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -55,7 +55,7 @@
virtual DisplayError Init();
virtual DisplayError Deinit();
DisplayError Prepare(LayerStack *layer_stack) final;
- virtual DisplayError Commit(LayerStack *layer_stack);
+ DisplayError Commit(LayerStack *layer_stack) final;
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
@@ -88,6 +88,7 @@
protected:
virtual DisplayError PrepareLocked(LayerStack *layer_stack);
+ virtual DisplayError CommitLocked(LayerStack *layer_stack);
virtual DisplayError SetActiveConfigLocked(uint32_t index);
virtual DisplayError SetActiveConfigLocked(DisplayConfigVariableInfo *variable_info) {
return kErrorNotSupported;
diff --git a/sdm/libs/core/display_hdmi.cpp b/sdm/libs/core/display_hdmi.cpp
index 9a7f46a..c932975 100644
--- a/sdm/libs/core/display_hdmi.cpp
+++ b/sdm/libs/core/display_hdmi.cpp
@@ -112,11 +112,6 @@
return DisplayBase::PrepareLocked(layer_stack);
}
-DisplayError DisplayHDMI::Commit(LayerStack *layer_stack) {
- SCOPE_LOCK(locker_);
- return DisplayBase::Commit(layer_stack);
-}
-
DisplayError DisplayHDMI::Flush() {
SCOPE_LOCK(locker_);
return DisplayBase::Flush();
diff --git a/sdm/libs/core/display_hdmi.h b/sdm/libs/core/display_hdmi.h
index ad96394..543f81c 100644
--- a/sdm/libs/core/display_hdmi.h
+++ b/sdm/libs/core/display_hdmi.h
@@ -42,7 +42,6 @@
RotatorInterface *rotator_intf);
virtual DisplayError Init();
virtual DisplayError Deinit();
- virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index dc87d5c..30922f6 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -86,9 +86,9 @@
return error;
}
-DisplayError DisplayPrimary::Commit(LayerStack *layer_stack) {
- SCOPE_LOCK(locker_);
+DisplayError DisplayPrimary::CommitLocked(LayerStack *layer_stack) {
DisplayError error = kErrorNone;
+
HWPanelInfo panel_info;
HWDisplayAttributes display_attributes;
uint32_t active_index = 0;
@@ -100,7 +100,7 @@
bool set_idle_timeout = comp_manager_->CanSetIdleTimeout(display_comp_ctx_);
- error = DisplayBase::Commit(layer_stack);
+ error = DisplayBase::CommitLocked(layer_stack);
if (error != kErrorNone) {
return error;
}
diff --git a/sdm/libs/core/display_primary.h b/sdm/libs/core/display_primary.h
index 09de09a..a699923 100644
--- a/sdm/libs/core/display_primary.h
+++ b/sdm/libs/core/display_primary.h
@@ -41,7 +41,6 @@
RotatorInterface *rotator_intf);
virtual DisplayError Init();
virtual DisplayError Deinit();
- virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
@@ -70,6 +69,7 @@
virtual void CECMessage(char *message) { }
private:
+ virtual DisplayError CommitLocked(LayerStack *layer_stack);
virtual DisplayError ControlPartialUpdateLocked(bool enable, uint32_t *pending);
virtual DisplayError DisablePartialUpdateOneFrameLocked();
diff --git a/sdm/libs/core/display_virtual.cpp b/sdm/libs/core/display_virtual.cpp
index 2d7cd7b..5bd40f7 100644
--- a/sdm/libs/core/display_virtual.cpp
+++ b/sdm/libs/core/display_virtual.cpp
@@ -69,11 +69,6 @@
return error;
}
-DisplayError DisplayVirtual::Commit(LayerStack *layer_stack) {
- SCOPE_LOCK(locker_);
- return DisplayBase::Commit(layer_stack);
-}
-
DisplayError DisplayVirtual::Flush() {
SCOPE_LOCK(locker_);
return DisplayBase::Flush();
diff --git a/sdm/libs/core/display_virtual.h b/sdm/libs/core/display_virtual.h
index 4e26632..e1af95e 100644
--- a/sdm/libs/core/display_virtual.h
+++ b/sdm/libs/core/display_virtual.h
@@ -40,7 +40,6 @@
RotatorInterface *rotator_intf);
virtual DisplayError Init();
virtual DisplayError Deinit();
- virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);