sdm: Disable dynamic destination scalar for multi-display

Disable dynamic destination scalar when more than one display is
active. Dynamic destination scalar introduce the demand for
scaling, and since built-in displays do not have dedicate VIG
pipes, lead to composition strategies exhausted.

Change-Id: Id79851fe964d5eea8b8dad32149f29a4db2842cc
diff --git a/sdm/libs/core/comp_manager.cpp b/sdm/libs/core/comp_manager.cpp
old mode 100644
new mode 100755
index e9152eb..3038c81
--- a/sdm/libs/core/comp_manager.cpp
+++ b/sdm/libs/core/comp_manager.cpp
@@ -688,6 +688,10 @@
   return kErrorNone;
 }
 
+uint32_t CompManager::GetActiveDisplayCount() {
+  return powered_on_displays_.size();
+}
+
 bool CompManager::SetDisplayState(Handle display_ctx, DisplayState state,
                                   const SyncPoints &sync_points) {
   std::lock_guard<std::recursive_mutex> obj(comp_mgr_mutex_);
diff --git a/sdm/libs/core/comp_manager.h b/sdm/libs/core/comp_manager.h
old mode 100644
new mode 100755
index bcc14aa..107921b
--- a/sdm/libs/core/comp_manager.h
+++ b/sdm/libs/core/comp_manager.h
@@ -162,6 +162,7 @@
   virtual void TriggerRefresh(int32_t display_id);
   std::string Dump();
   uint32_t GetMixerCount();
+  uint32_t GetActiveDisplayCount();
 
  private:
   static const int kMaxThermalLevel = 3;
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 2161fed..0d182fe 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -2948,9 +2948,14 @@
   }
   DLOGV_IF(kTagDisplay, "Max area layer at index : %d", max_area_layer_index);
 
+  uint32_t num_active_displays = comp_manager_->GetActiveDisplayCount();
+
   // TODO(user): Mark layer which needs downscaling on GPU fallback as priority layer and use MDP
   // for composition to avoid quality mismatch between GPU and MDP switch(idle timeout usecase).
-  if (max_layer_area >= fb_area) {
+  if ((max_layer_area > fb_area && (num_active_displays == 1)) || max_layer_area == fb_area) {
+    // Disable dynamic destination scalar when more than one display is active
+    // Dynamic destination scalar introduce the demand for scaling, and since built-in displays
+    // do not have dedicate VIG pipes, lead to composition strategies exhausted.
     Layer *layer = layers.at(max_area_layer_index);
     bool needs_rotation = (layer->transform.rotation == 90.0f);