drm_hwcomposer: Move trivial frontend functions out of HwcDisplay class
Another step towards full frontend/backend split.
Change-Id: I854da4344bc9973cc5f076230c2baee0c46f2276
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
diff --git a/hwc2_device/HwcDisplay.cpp b/hwc2_device/HwcDisplay.cpp
index 1a833cd..c94f875 100644
--- a/hwc2_device/HwcDisplay.cpp
+++ b/hwc2_device/HwcDisplay.cpp
@@ -501,12 +501,6 @@
return SetActiveConfig(configs_.preferred_config_id);
}
-HWC2::Error HwcDisplay::AcceptDisplayChanges() {
- for (std::pair<const hwc2_layer_t, HwcLayer> &l : layers_)
- l.second.AcceptTypeChange();
- return HWC2::Error::None;
-}
-
HWC2::Error HwcDisplay::CreateLayer(hwc2_layer_t *layer) {
layers_.emplace(static_cast<hwc2_layer_t>(layer_idx_), HwcLayer(this));
*layer = static_cast<hwc2_layer_t>(layer_idx_);
@@ -556,29 +550,6 @@
return HWC2::Error::None;
}
-HWC2::Error HwcDisplay::GetClientTargetSupport(uint32_t width, uint32_t height,
- int32_t /*format*/,
- int32_t dataspace) {
- if (IsInHeadlessMode()) {
- return HWC2::Error::None;
- }
-
- auto min = pipeline_->device->GetMinResolution();
- auto max = pipeline_->device->GetMaxResolution();
-
- if (width < min.first || height < min.second)
- return HWC2::Error::Unsupported;
-
- if (width > max.first || height > max.second)
- return HWC2::Error::Unsupported;
-
- if (dataspace != HAL_DATASPACE_UNKNOWN)
- return HWC2::Error::Unsupported;
-
- // TODO(nobody): Validate format can be handled by either GL or planes
- return HWC2::Error::None;
-}
-
HWC2::Error HwcDisplay::GetColorModes(uint32_t *num_modes, int32_t *modes) {
if (IsInHeadlessMode()) {
*num_modes = 1;
@@ -699,26 +670,11 @@
return HWC2::Error::None;
}
-HWC2::Error HwcDisplay::GetDisplayRequests(int32_t * /*display_requests*/,
- uint32_t *num_elements,
- hwc2_layer_t * /*layers*/,
- int32_t * /*layer_requests*/) {
- // TODO(nobody): I think virtual display should request
- // HWC2_DISPLAY_REQUEST_WRITE_CLIENT_TARGET_TO_OUTPUT here
- *num_elements = 0;
- return HWC2::Error::None;
-}
-
HWC2::Error HwcDisplay::GetDisplayType(int32_t *type) {
*type = static_cast<int32_t>(type_);
return HWC2::Error::None;
}
-HWC2::Error HwcDisplay::GetDozeSupport(int32_t *support) {
- *support = 0;
- return HWC2::Error::None;
-}
-
HWC2::Error HwcDisplay::GetHdrCapabilities(uint32_t *num_types, int32_t *types,
float *max_luminance,
float *max_average_luminance,
@@ -1333,19 +1289,6 @@
return HWC2::Error::None;
}
-HWC2::Error HwcDisplay::SetAutoLowLatencyMode(bool /*on*/) {
- return HWC2::Error::Unsupported;
-}
-
-HWC2::Error HwcDisplay::GetSupportedContentTypes(
- uint32_t *outNumSupportedContentTypes,
- const uint32_t *outSupportedContentTypes) {
- if (outSupportedContentTypes == nullptr)
- *outNumSupportedContentTypes = 0;
-
- return HWC2::Error::None;
-}
-
HWC2::Error HwcDisplay::SetContentType(int32_t contentType) {
/* Maps exactly to the content_type DRM connector property:
* https://elixir.bootlin.com/linux/v6.11/source/include/uapi/drm/drm_mode.h#L107
@@ -1414,15 +1357,6 @@
return HWC2::Error::None;
}
-HWC2::Error HwcDisplay::GetDisplayBrightnessSupport(bool *supported) {
- *supported = false;
- return HWC2::Error::None;
-}
-
-HWC2::Error HwcDisplay::SetDisplayBrightness(float /* brightness */) {
- return HWC2::Error::Unsupported;
-}
-
#endif /* __ANDROID_API__ > 28 */
#if __ANDROID_API__ > 27
diff --git a/hwc2_device/HwcDisplay.h b/hwc2_device/HwcDisplay.h
index 73a579b..a1c78c3 100644
--- a/hwc2_device/HwcDisplay.h
+++ b/hwc2_device/HwcDisplay.h
@@ -122,23 +122,17 @@
}
// HWC2 Hooks - these should not be used outside of the hwc2 device.
- HWC2::Error AcceptDisplayChanges();
HWC2::Error CreateLayer(hwc2_layer_t *layer);
HWC2::Error DestroyLayer(hwc2_layer_t layer);
HWC2::Error GetActiveConfig(hwc2_config_t *config) const;
HWC2::Error GetChangedCompositionTypes(uint32_t *num_elements,
hwc2_layer_t *layers, int32_t *types);
- HWC2::Error GetClientTargetSupport(uint32_t width, uint32_t height,
- int32_t format, int32_t dataspace);
HWC2::Error GetColorModes(uint32_t *num_modes, int32_t *modes);
HWC2::Error GetDisplayAttribute(hwc2_config_t config, int32_t attribute,
int32_t *value);
HWC2::Error LegacyGetDisplayConfigs(uint32_t *num_configs,
hwc2_config_t *configs);
HWC2::Error GetDisplayName(uint32_t *size, char *name);
- HWC2::Error GetDisplayRequests(int32_t *display_requests,
- uint32_t *num_elements, hwc2_layer_t *layers,
- int32_t *layer_requests);
HWC2::Error GetDisplayType(int32_t *type);
#if __ANDROID_API__ > 27
HWC2::Error GetRenderIntents(int32_t mode, uint32_t *outNumIntents,
@@ -151,8 +145,6 @@
uint8_t *outData);
HWC2::Error GetDisplayCapabilities(uint32_t *outNumCapabilities,
uint32_t *outCapabilities);
- HWC2::Error GetDisplayBrightnessSupport(bool *supported);
- HWC2::Error SetDisplayBrightness(float);
#endif
#if __ANDROID_API__ > 29
HWC2::Error GetDisplayConnectionType(uint32_t *outType);
@@ -161,16 +153,11 @@
hwc2_config_t config,
hwc_vsync_period_change_constraints_t *vsyncPeriodChangeConstraints,
hwc_vsync_period_change_timeline_t *outTimeline);
- HWC2::Error SetAutoLowLatencyMode(bool on);
- HWC2::Error GetSupportedContentTypes(
- uint32_t *outNumSupportedContentTypes,
- const uint32_t *outSupportedContentTypes);
HWC2::Error SetContentType(int32_t contentType);
#endif
HWC2::Error GetDisplayVsyncPeriod(uint32_t *outVsyncPeriod);
- HWC2::Error GetDozeSupport(int32_t *support);
HWC2::Error GetHdrCapabilities(uint32_t *num_types, int32_t *types,
float *max_luminance,
float *max_average_luminance,
diff --git a/hwc2_device/hwc2_device.cpp b/hwc2_device/hwc2_device.cpp
index 10e1608..29831ff 100644
--- a/hwc2_device/hwc2_device.cpp
+++ b/hwc2_device/hwc2_device.cpp
@@ -251,6 +251,37 @@
}
/* Display functions */
+static int32_t GetDisplayRequests(hwc2_device_t * /*device*/,
+ hwc2_display_t /*display*/,
+ int32_t * /* out_display_requests */,
+ uint32_t *out_num_elements,
+ hwc2_layer_t * /*out_layers*/,
+ int32_t * /*out_layer_requests*/) {
+ ALOGV("GetDisplayRequests");
+
+ *out_num_elements = 0;
+ return 0;
+}
+
+static int32_t GetDozeSupport(hwc2_device_t * /*device*/,
+ hwc2_display_t /*display*/,
+ int32_t *out_support) {
+ ALOGV("GetDozeSupport");
+ *out_support = 0; // Doze support is not available
+ return 0;
+}
+
+static int32_t GetClientTargetSupport(hwc2_device_t * /*device*/,
+ hwc2_display_t /*display*/,
+ uint32_t /*width*/, uint32_t /*height*/,
+ int32_t /*format*/, int32_t dataspace) {
+ ALOGV("GetClientTargetSupport");
+
+ if (dataspace != HAL_DATASPACE_UNKNOWN)
+ return static_cast<int32_t>(HWC2::Error::Unsupported);
+
+ return 0;
+}
static int32_t SetClientTarget(hwc2_device_t *device, hwc2_display_t display,
buffer_handle_t target, int32_t acquire_fence,
@@ -323,6 +354,53 @@
return 0;
}
+static int32_t AcceptDisplayChanges(hwc2_device_t *device,
+ hwc2_display_t display) {
+ ALOGV("AcceptDisplayChanges");
+ LOCK_COMPOSER(device);
+ GET_DISPLAY(display);
+
+ idisplay->AcceptValidatedComposition();
+
+ return 0;
+}
+
+#if __ANDROID_API__ >= 28
+
+static int32_t GetDisplayBrightnessSupport(hwc2_device_t * /*device*/,
+ hwc2_display_t /*display*/,
+ bool *out_support) {
+ ALOGV("GetDisplayBrightnessSupport");
+ *out_support = false; // Brightness support is not available
+ return static_cast<int32_t>(HWC2::Error::None);
+}
+
+static int32_t SetDisplayBrightness(hwc2_device_t * /*device*/,
+ hwc2_display_t /*display*/,
+ float /*brightness*/) {
+ ALOGV("SetDisplayBrightness");
+ return static_cast<int32_t>(HWC2::Error::Unsupported);
+}
+
+#endif
+
+#if __ANDROID_API__ >= 29
+static int32_t SetAutoLowLatencyMode(hwc2_device_t * /*device*/,
+ hwc2_display_t /*display*/, bool /*on*/) {
+ ALOGV("SetAutoLowLatencyMode");
+ return static_cast<int32_t>(HWC2::Error::Unsupported);
+}
+
+static int32_t GetSupportedContentTypes(
+ hwc2_device_t * /*device*/, hwc2_display_t /*display*/,
+ uint32_t *out_num_supported_content_types,
+ uint32_t * /*out_supported_content_types*/) {
+ ALOGV("GetSupportedContentTypes");
+ *out_num_supported_content_types = 0;
+ return static_cast<int32_t>(HWC2::Error::None);
+}
+#endif
+
/* Layer functions */
static int32_t SetLayerBlendMode(hwc2_device_t *device, hwc2_display_t display,
@@ -569,9 +647,7 @@
// Display functions
case HWC2::FunctionDescriptor::AcceptDisplayChanges:
- return ToHook<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>(
- DisplayHook<decltype(&HwcDisplay::AcceptDisplayChanges),
- &HwcDisplay::AcceptDisplayChanges>);
+ return (hwc2_function_pointer_t)AcceptDisplayChanges;
case HWC2::FunctionDescriptor::CreateLayer:
return ToHook<HWC2_PFN_CREATE_LAYER>(
DisplayHook<decltype(&HwcDisplay::CreateLayer),
@@ -590,10 +666,7 @@
&HwcDisplay::GetChangedCompositionTypes, uint32_t *,
hwc2_layer_t *, int32_t *>);
case HWC2::FunctionDescriptor::GetClientTargetSupport:
- return ToHook<HWC2_PFN_GET_CLIENT_TARGET_SUPPORT>(
- DisplayHook<decltype(&HwcDisplay::GetClientTargetSupport),
- &HwcDisplay::GetClientTargetSupport, uint32_t, uint32_t,
- int32_t, int32_t>);
+ return (hwc2_function_pointer_t)GetClientTargetSupport;
case HWC2::FunctionDescriptor::GetColorModes:
return ToHook<HWC2_PFN_GET_COLOR_MODES>(
DisplayHook<decltype(&HwcDisplay::GetColorModes),
@@ -613,18 +686,13 @@
DisplayHook<decltype(&HwcDisplay::GetDisplayName),
&HwcDisplay::GetDisplayName, uint32_t *, char *>);
case HWC2::FunctionDescriptor::GetDisplayRequests:
- return ToHook<HWC2_PFN_GET_DISPLAY_REQUESTS>(
- DisplayHook<decltype(&HwcDisplay::GetDisplayRequests),
- &HwcDisplay::GetDisplayRequests, int32_t *, uint32_t *,
- hwc2_layer_t *, int32_t *>);
+ return (hwc2_function_pointer_t)GetDisplayRequests;
case HWC2::FunctionDescriptor::GetDisplayType:
return ToHook<HWC2_PFN_GET_DISPLAY_TYPE>(
DisplayHook<decltype(&HwcDisplay::GetDisplayType),
&HwcDisplay::GetDisplayType, int32_t *>);
case HWC2::FunctionDescriptor::GetDozeSupport:
- return ToHook<HWC2_PFN_GET_DOZE_SUPPORT>(
- DisplayHook<decltype(&HwcDisplay::GetDozeSupport),
- &HwcDisplay::GetDozeSupport, int32_t *>);
+ return (hwc2_function_pointer_t)GetDozeSupport;
case HWC2::FunctionDescriptor::GetHdrCapabilities:
return ToHook<HWC2_PFN_GET_HDR_CAPABILITIES>(
DisplayHook<decltype(&HwcDisplay::GetHdrCapabilities),
@@ -690,13 +758,9 @@
&HwcDisplay::GetDisplayCapabilities, uint32_t *,
uint32_t *>);
case HWC2::FunctionDescriptor::GetDisplayBrightnessSupport:
- return ToHook<HWC2_PFN_GET_DISPLAY_BRIGHTNESS_SUPPORT>(
- DisplayHook<decltype(&HwcDisplay::GetDisplayBrightnessSupport),
- &HwcDisplay::GetDisplayBrightnessSupport, bool *>);
+ return (hwc2_function_pointer_t)GetDisplayBrightnessSupport;
case HWC2::FunctionDescriptor::SetDisplayBrightness:
- return ToHook<HWC2_PFN_SET_DISPLAY_BRIGHTNESS>(
- DisplayHook<decltype(&HwcDisplay::SetDisplayBrightness),
- &HwcDisplay::SetDisplayBrightness, float>);
+ return (hwc2_function_pointer_t)SetDisplayBrightness;
#endif /* __ANDROID_API__ > 28 */
#if __ANDROID_API__ > 29
case HWC2::FunctionDescriptor::GetDisplayConnectionType:
@@ -715,14 +779,9 @@
hwc2_config_t, hwc_vsync_period_change_constraints_t *,
hwc_vsync_period_change_timeline_t *>);
case HWC2::FunctionDescriptor::SetAutoLowLatencyMode:
- return ToHook<HWC2_PFN_SET_AUTO_LOW_LATENCY_MODE>(
- DisplayHook<decltype(&HwcDisplay::SetAutoLowLatencyMode),
- &HwcDisplay::SetAutoLowLatencyMode, bool>);
+ return (hwc2_function_pointer_t)SetAutoLowLatencyMode;
case HWC2::FunctionDescriptor::GetSupportedContentTypes:
- return ToHook<HWC2_PFN_GET_SUPPORTED_CONTENT_TYPES>(
- DisplayHook<decltype(&HwcDisplay::GetSupportedContentTypes),
- &HwcDisplay::GetSupportedContentTypes, uint32_t *,
- uint32_t *>);
+ return (hwc2_function_pointer_t)GetSupportedContentTypes;
case HWC2::FunctionDescriptor::SetContentType:
return ToHook<HWC2_PFN_SET_CONTENT_TYPE>(
DisplayHook<decltype(&HwcDisplay::SetContentType),
diff --git a/hwc3/ComposerClient.cpp b/hwc3/ComposerClient.cpp
index dbcf575..ca89706 100644
--- a/hwc3/ComposerClient.cpp
+++ b/hwc3/ComposerClient.cpp
@@ -715,7 +715,7 @@
}
if (command.acceptDisplayChanges) {
- display->AcceptDisplayChanges();
+ display->AcceptValidatedComposition();
}
if (command.presentDisplay) {
@@ -1283,17 +1283,10 @@
return ToBinderStatus(hwc3::Error::kUnsupported);
}
-ndk::ScopedAStatus ComposerClient::setAutoLowLatencyMode(int64_t display_id,
- bool on) {
+ndk::ScopedAStatus ComposerClient::setAutoLowLatencyMode(int64_t /*display_id*/,
+ bool /*on*/) {
DEBUG_FUNC();
- const std::unique_lock lock(hwc_->GetResMan().GetMainLock());
- HwcDisplay* display = GetDisplay(display_id);
- if (display == nullptr) {
- return ToBinderStatus(hwc3::Error::kBadDisplay);
- }
-
- auto error = Hwc2toHwc3Error(display->SetAutoLowLatencyMode(on));
- return ToBinderStatus(error);
+ return ToBinderStatus(hwc3::Error::kUnsupported);
}
ndk::ScopedAStatus ComposerClient::setClientTargetSlotCount(