Merge "sdm: Cache command mode status during initialization"
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 6bc5a51..dab2f30 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -434,6 +434,7 @@
 
   DisplayConfigFixedInfo fixed_info = {};
   display_intf_->GetConfig(&fixed_info);
+  is_cmd_mode_ = fixed_info.is_cmdmode;
   partial_update_enabled_ = fixed_info.partial_update;
   client_target_->SetPartialUpdate(partial_update_enabled_);
 
@@ -2126,9 +2127,7 @@
 }
 
 bool HWCDisplay::IsDisplayCommandMode() {
-  DisplayConfigFixedInfo display_config;
-  display_intf_->GetConfig(&display_config);
-  return display_config.is_cmdmode;
+  return is_cmd_mode_;
 }
 
 // Skip SDM prepare if all the layers in the current draw cycle are marked as Skip and
diff --git a/sdm/libs/hwc2/hwc_display.h b/sdm/libs/hwc2/hwc_display.h
index f14c79f..72ea0d7 100644
--- a/sdm/libs/hwc2/hwc_display.h
+++ b/sdm/libs/hwc2/hwc_display.h
@@ -368,6 +368,8 @@
   uint32_t display_config_ = 0;
   bool config_pending_ = false;
   bool pending_commit_ = false;
+  bool is_cmd_mode_ = false;
+  bool partial_update_enabled_ = false;
 
  private:
   void DumpInputBuffers(void);
@@ -380,7 +382,6 @@
   int null_display_mode_ = 0;
   bool has_client_composition_ = false;
   DisplayValidateState validate_state_ = kNormalValidate;
-  bool partial_update_enabled_ = false;
 };
 
 inline int HWCDisplay::Perform(uint32_t operation, ...) {
diff --git a/sdm/libs/hwc2/hwc_display_builtin.cpp b/sdm/libs/hwc2/hwc_display_builtin.cpp
index 106b147..88f6cda 100644
--- a/sdm/libs/hwc2/hwc_display_builtin.cpp
+++ b/sdm/libs/hwc2/hwc_display_builtin.cpp
@@ -476,6 +476,16 @@
 
   if (display_intf_) {
     error = display_intf_->SetDisplayMode(mode);
+    if (error == kErrorNone) {
+      DisplayConfigFixedInfo fixed_info = {};
+      display_intf_->GetConfig(&fixed_info);
+      is_cmd_mode_ = fixed_info.is_cmdmode;
+      partial_update_enabled_ = fixed_info.partial_update;
+      for (auto hwc_layer : layer_set_) {
+        hwc_layer->SetPartialUpdate(partial_update_enabled_);
+      }
+      client_target_->SetPartialUpdate(partial_update_enabled_);
+    }
   }
 
   return error;