Merge remote-tracking branch 'aosp/upstream-main' into uprev am: 3b2a47f6a5 Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/3392347 Change-Id: I0aeb1e1ae7e0387a65df3d7addef05fc5bad1f42 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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 47ffc7e..0d3f9c0 100644 --- a/hwc3/ComposerClient.cpp +++ b/hwc3/ComposerClient.cpp
@@ -154,7 +154,9 @@ // DisplayCommand and return. case Composition::DISPLAY_DECORATION: case Composition::SIDEBAND: +#if __ANDROID_API__ >= 34 case Composition::REFRESH_RATE_INDICATOR: +#endif return false; } } @@ -188,7 +190,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; @@ -1242,6 +1246,8 @@ return ToBinderStatus(hwc3::Error::kUnsupported); } +#if __ANDROID_API__ >= 34 + ndk::ScopedAStatus ComposerClient::getOverlaySupport( OverlayProperties* /*out_overlay_properties*/) { return ToBinderStatus(hwc3::Error::kUnsupported); @@ -1263,6 +1269,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 91a0be0..20d15b4 100644 --- a/hwc3/ComposerClient.h +++ b/hwc3/ComposerClient.h
@@ -131,6 +131,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( @@ -141,6 +144,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; };