drm_hwcomposer: Add property for config groups
Android framework will change between configs in the same config group
dynamically, to support the Multiple refresh rate [1] feature. If the
display driver does not support changing modes seamlessly, there will be
visible artifacts (blank screen) when changing refresh rates.
Add a property to disable config grouping on devices that do not support
seamless mode changes. Set the default value to enable config grouping.
[1] https://source.android.com/docs/core/graphics/multiple-refresh-rate
Change-Id: Iec5927ea3af063669f6f7b7aa430e541c1c35428
Signed-off-by: Drew Davenport <ddavenport@google.com>
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) {