Snap for 12765415 from 77015e0b92fe35f3fd1660a58031a138745f4c49 to 25Q1-release

Change-Id: Icb33e62b592e0bf0370010d7b086f8e906996cde
diff --git a/Makefile b/Makefile
index fc12423..aa8062b 100644
--- a/Makefile
+++ b/Makefile
@@ -59,7 +59,7 @@
 	@echo "\n\e[32m --- SUCCESS ---\n"
 
 ci_cleanup: ## Cleanup after 'make ci'
-	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "make -f .ci/Makefile clean	"
+	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "make -f .ci/Makefile clean"
 	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "rm -rf ~/aospless/build"
 	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "rm -rf ~/aospless/install"
 	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "rm -rf ~/aospless/out_src"
@@ -69,14 +69,11 @@
 	$(if $(filter $(shell adb shell getprop ro.bionic.arch),arm64),,$(error arm64 only is supported at the moment))
 	adb root && adb remount vendor
 	mkdir -p .out/arm64
-	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "make -C ~/aospless all"
+	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "make -C ~/aospless install"
 	$(DOCKER_BIN) exec -it $(IMAGE_NAME) bash -c "cp -r ~/aospless/install/* ~/drm_hwcomposer/.out/arm64"
-	adb push .out/arm64/vendor/lib64/hw/hwcomposer.drm.so /vendor/lib64/hw/hwcomposer.drm.so
+	adb push .out/arm64/vendor/bin/hw/android.hardware.composer.hwc3-service.drm /vendor/bin/hw/android.hardware.composer.hwc3-service.drm
 	adb shell stop
-	adb shell stop vendor.hwcomposer-2-1 && adb shell start vendor.hwcomposer-2-1 || true
-	adb shell stop vendor.hwcomposer-2-2 && adb shell start vendor.hwcomposer-2-2 || true
-	adb shell stop vendor.hwcomposer-2-3 && adb shell start vendor.hwcomposer-2-3 || true
-	adb shell stop vendor.hwcomposer-2-4 && adb shell start vendor.hwcomposer-2-4 || true
+	adb shell stop vendor.hwcomposer-3 && adb shell start vendor.hwcomposer-3 || true
 	bash -c '[[ "$$HWCLOG" -eq "1" ]] && adb logcat -c || true'
 	adb shell start
 	bash -c '[[ "$$HWCLOG" -eq "1" ]] && adb logcat | grep -i hwc || true'
diff --git a/hwc2_device/HwcDisplay.cpp b/hwc2_device/HwcDisplay.cpp
index 43564d4..0503f39 100644
--- a/hwc2_device/HwcDisplay.cpp
+++ b/hwc2_device/HwcDisplay.cpp
@@ -193,7 +193,7 @@
   const HwcDisplayConfig *current_config = GetCurrentConfig();
 
   const uint32_t width = new_config->mode.GetRawMode().hdisplay;
-  const uint32_t height = new_config->mode.GetRawMode().hdisplay;
+  const uint32_t height = new_config->mode.GetRawMode().vdisplay;
 
   std::optional<LayerData> modeset_layer_data;
   // If a client layer has already been provided, and its size matches the
@@ -231,6 +231,7 @@
 
   ALOGV("Blocking config succeeded.");
   configs_.active_config_id = config;
+  staged_mode_config_id_.reset();
   return ConfigError::kNone;
 }
 
diff --git a/hwc2_device/HwcDisplayConfigs.cpp b/hwc2_device/HwcDisplayConfigs.cpp
index 3645356..fa1d2a9 100644
--- a/hwc2_device/HwcDisplayConfigs.cpp
+++ b/hwc2_device/HwcDisplayConfigs.cpp
@@ -23,6 +23,7 @@
 
 #include "drm/DrmConnector.h"
 #include "utils/log.h"
+#include "utils/properties.h"
 
 constexpr uint32_t kHeadlessModeDisplayWidthMm = 163;
 constexpr uint32_t kHeadlessModeDisplayHeightMm = 122;
@@ -113,17 +114,20 @@
 
   auto first_config_id = last_config_id;
   uint32_t last_group_id = 1;
+  const bool use_config_groups = Properties::UseConfigGroups();
 
   /* Group modes */
   for (const auto &mode : connector.GetModes()) {
     /* Find group for the new mode or create new group */
     uint32_t group_found = 0;
-    for (auto &hwc_config : hwc_configs) {
-      if (mode.GetRawMode().hdisplay ==
-              hwc_config.second.mode.GetRawMode().hdisplay &&
-          mode.GetRawMode().vdisplay ==
-              hwc_config.second.mode.GetRawMode().vdisplay) {
-        group_found = hwc_config.second.group_id;
+    if (use_config_groups) {
+      for (auto &hwc_config : hwc_configs) {
+        if (mode.GetRawMode().hdisplay ==
+                hwc_config.second.mode.GetRawMode().hdisplay &&
+            mode.GetRawMode().vdisplay ==
+                hwc_config.second.mode.GetRawMode().vdisplay) {
+          group_found = hwc_config.second.group_id;
+        }
       }
     }
     if (group_found == 0) {
diff --git a/hwc3/ComposerClient.cpp b/hwc3/ComposerClient.cpp
index b33537b..b8128f0 100644
--- a/hwc3/ComposerClient.cpp
+++ b/hwc3/ComposerClient.cpp
@@ -155,7 +155,9 @@
     // DisplayCommand and return.
     case Composition::DISPLAY_DECORATION:
     case Composition::SIDEBAND:
+#if __ANDROID_API__ >= 34
     case Composition::REFRESH_RATE_INDICATOR:
+#endif
       return false;
   }
 }
@@ -189,7 +191,9 @@
     // Unsupported composition types.
     case Composition::DISPLAY_DECORATION:
     case Composition::SIDEBAND:
+#if __ANDROID_API__ >= 34
     case Composition::REFRESH_RATE_INDICATOR:
+#endif
       ALOGE("Unsupported composition type: %s",
             toString(composition->composition).c_str());
       return std::nullopt;
@@ -1246,6 +1250,8 @@
   return ToBinderStatus(hwc3::Error::kUnsupported);
 }
 
+#if __ANDROID_API__ >= 34
+
 ndk::ScopedAStatus ComposerClient::getOverlaySupport(
     OverlayProperties* /*out_overlay_properties*/) {
   return ToBinderStatus(hwc3::Error::kUnsupported);
@@ -1267,6 +1273,8 @@
   return ToBinderStatus(hwc3::Error::kUnsupported);
 }
 
+#endif
+
 #if __ANDROID_API__ >= 35
 
 ndk::ScopedAStatus ComposerClient::getDisplayConfigurations(
diff --git a/hwc3/ComposerClient.h b/hwc3/ComposerClient.h
index 3d7c09c..2595203 100644
--- a/hwc3/ComposerClient.h
+++ b/hwc3/ComposerClient.h
@@ -132,6 +132,9 @@
   ndk::ScopedAStatus setVsyncEnabled(int64_t display, bool enabled) override;
   ndk::ScopedAStatus setIdleTimerEnabled(int64_t display,
                                          int32_t timeout) override;
+
+#if __ANDROID_API__ >= 34
+
   ndk::ScopedAStatus getOverlaySupport(
       OverlayProperties* out_overlay_properties) override;
   ndk::ScopedAStatus getHdrConversionCapabilities(
@@ -142,6 +145,8 @@
   ndk::ScopedAStatus setRefreshRateChangedCallbackDebugEnabled(
       int64_t display, bool enabled) override;
 
+#endif
+
 #if __ANDROID_API__ >= 35
 
   ndk::ScopedAStatus getDisplayConfigurations(
diff --git a/hwc3/service.cpp b/hwc3/service.cpp
index d91ce9e..b545a67 100644
--- a/hwc3/service.cpp
+++ b/hwc3/service.cpp
@@ -46,9 +46,14 @@
   const std::string instance = std::string() + Composer::descriptor +
                                "/default";
   ALOGI("HWC3 service name %s", instance.c_str());
+#if __ANDROID_API__ >= 34
   auto status = AServiceManager_addServiceWithFlags(
       composer->asBinder().get(), instance.c_str(),
       AServiceManager_AddServiceFlag::ADD_SERVICE_ALLOW_ISOLATED);
+#else
+  auto status = AServiceManager_addService(composer->asBinder().get(),
+                                           instance.c_str());
+#endif
   if (status != STATUS_OK) {
     ALOGE("Failed to register service. Error %d", (int)status);
     return -EINVAL;
diff --git a/utils/properties.cpp b/utils/properties.cpp
index 4547e74..a855c94 100644
--- a/utils/properties.cpp
+++ b/utils/properties.cpp
@@ -25,3 +25,7 @@
   return (property_get_bool("ro.vendor.hwc.drm.present_fence_not_reliable",
                             0) != 0);
 }
+
+auto Properties::UseConfigGroups() -> bool {
+  return (property_get_bool("ro.vendor.hwc.drm.use_config_groups", 1) != 0);
+}
diff --git a/utils/properties.h b/utils/properties.h
index f5816cb..15c2fb2 100644
--- a/utils/properties.h
+++ b/utils/properties.h
@@ -77,4 +77,5 @@
 class Properties {
  public:
   static auto IsPresentFenceNotReliable() -> bool;
+  static auto UseConfigGroups() -> bool;
 };