sdm: add support for POMS in and out of doze mode transitions
Change-Id: I24c518df4ed38c246c938dea3f064a851c665483
diff --git a/composer/hwc_display_builtin.cpp b/composer/hwc_display_builtin.cpp
index 45d9db8..7440946 100644
--- a/composer/hwc_display_builtin.cpp
+++ b/composer/hwc_display_builtin.cpp
@@ -390,12 +390,30 @@
}
}
+void HWCDisplayBuiltIn::SetPartialUpdate(DisplayConfigFixedInfo fixed_info) {
+ partial_update_enabled_ = fixed_info.partial_update || (!fixed_info.is_cmdmode);
+ for (auto hwc_layer : layer_set_) {
+ hwc_layer->SetPartialUpdate(partial_update_enabled_);
+ }
+ client_target_->SetPartialUpdate(partial_update_enabled_);
+}
+
HWC2::Error HWCDisplayBuiltIn::SetPowerMode(HWC2::PowerMode mode, bool teardown) {
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+ bool command_mode = fixed_info.is_cmdmode;
+
auto status = HWCDisplay::SetPowerMode(mode, teardown);
if (status != HWC2::Error::None) {
return status;
}
+ display_intf_->GetConfig(&fixed_info);
+ is_cmd_mode_ = fixed_info.is_cmdmode;
+ if (is_cmd_mode_ != command_mode) {
+ SetPartialUpdate(fixed_info);
+ }
+
if (mode == HWC2::PowerMode::Off) {
SetBwLimitHint(false);
}
@@ -418,6 +436,9 @@
}
} else {
CacheAvrStatus();
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+ bool command_mode = fixed_info.is_cmdmode;
status = CommitStitchLayers();
if (status != HWC2::Error::None) {
@@ -431,6 +452,11 @@
PostCommitStitchLayers();
status = HWCDisplay::PostCommitLayerStack(out_retire_fence);
SetBwLimitHint(true);
+ display_intf_->GetConfig(&fixed_info);
+ is_cmd_mode_ = fixed_info.is_cmdmode;
+ if (is_cmd_mode_ != command_mode) {
+ SetPartialUpdate(fixed_info);
+ }
}
}