diff --git a/Android.bp b/Android.bp index b9682d8..e26b68b 100644 --- a/Android.bp +++ b/Android.bp @@ -92,8 +92,8 @@ filegroup { "drm/UEventListener.cpp", "drm/VSyncWorker.cpp", - "backend/Backend.cpp", - "backend/BackendClient.cpp", + "backend/CompositionPlanner.cpp", + "backend/ClientCompositionPlanner.cpp", "backend/BackendManager.cpp", "hwc/HwcDisplay.cpp", diff --git a/backend/BackendManager.h b/backend/BackendManager.h index bcef828..63d4250 100644 --- a/backend/BackendManager.h +++ b/backend/BackendManager.h @@ -21,7 +21,7 @@ #include #include -#include "Backend.h" +#include "CompositionPlanner.h" namespace android::drm_hwcomposer { diff --git a/backend/BackendClient.cpp b/backend/ClientCompositionPlanner.cpp similarity index 86% rename from backend/BackendClient.cpp rename to backend/ClientCompositionPlanner.cpp index 497ca65..65c3b6f 100644 --- a/backend/BackendClient.cpp +++ b/backend/ClientCompositionPlanner.cpp @@ -14,14 +14,14 @@ * limitations under the License. */ -#include "BackendClient.h" +#include "ClientCompositionPlanner.h" #include "BackendManager.h" #include "hwc/HwcDisplay.h" namespace android::drm_hwcomposer { -auto BackendClient::ValidateDisplay(const HwcDisplay* display) const +auto ClientCompositionPlanner::ValidateDisplay(const HwcDisplay* display) const -> ValidatedComposition { return GetFlattenedComposition(display->GetOrderLayersByZPos(), FlattenReason::kNone); @@ -35,13 +35,14 @@ class ClientBackendPipelineCreator : public BackendManager::PipelineCreator { DrmConnector& connector) override { auto pipeline = DrmDisplayPipeline::CreatePipeline(connector); if (pipeline) { - pipeline->backend = std::make_unique(); + pipeline->backend = std::make_unique(); } return pipeline; } }; -// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, cert-err58-cpp) +// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, +// cert-err58-cpp) static ClientBackendPipelineCreator client_backend; } // namespace android::drm_hwcomposer diff --git a/backend/BackendClient.h b/backend/ClientCompositionPlanner.h similarity index 89% rename from backend/BackendClient.h rename to backend/ClientCompositionPlanner.h index 6884408..097d492 100644 --- a/backend/BackendClient.h +++ b/backend/ClientCompositionPlanner.h @@ -16,11 +16,11 @@ #pragma once -#include "Backend.h" +#include "CompositionPlanner.h" namespace android::drm_hwcomposer { -class BackendClient : public Backend { +class ClientCompositionPlanner : public CompositionPlanner { public: auto ValidateDisplay(const HwcDisplay* display) const -> ValidatedComposition override; diff --git a/backend/Backend.cpp b/backend/CompositionPlanner.cpp similarity index 89% rename from backend/Backend.cpp rename to backend/CompositionPlanner.cpp index e078aef..5248725 100644 --- a/backend/Backend.cpp +++ b/backend/CompositionPlanner.cpp @@ -15,7 +15,7 @@ */ #define LOG_TAG "drmhwc" -#include "Backend.h" +#include "CompositionPlanner.h" #include #include @@ -43,7 +43,7 @@ const HwcLayer* GetCursorLayer(const std::vector& layers) { } // namespace -auto Backend::ValidateDisplay(const HwcDisplay* display) const +auto CompositionPlanner::ValidateDisplay(const HwcDisplay* display) const -> ValidatedComposition { const auto layers = display->GetOrderLayersByZPos(); @@ -125,7 +125,8 @@ auto Backend::ValidateDisplay(const HwcDisplay* display) const return validated_composition; } -Backend::ValidatedComposition Backend::GetFlattenedComposition( +CompositionPlanner::ValidatedComposition +CompositionPlanner::GetFlattenedComposition( const std::vector& layers, FlattenReason flatten_reason) { return ValidatedComposition{ .composition_types = GetCompositionTypes(layers, 0, layers.size(), false), @@ -133,7 +134,7 @@ Backend::ValidatedComposition Backend::GetFlattenedComposition( .flatten_reason = flatten_reason}; } -std::tuple Backend::GetClientLayers( +std::tuple CompositionPlanner::GetClientLayers( const HwcDisplay* display, const std::vector& layers, bool use_cursor_plane) const { size_t client_start = 0; @@ -152,21 +153,21 @@ std::tuple Backend::GetClientLayers( use_cursor_plane); } -bool Backend::IsClientLayer(const HwcDisplay* display, - const HwcLayer* layer) const { +bool CompositionPlanner::IsClientLayer(const HwcDisplay* display, + const HwcLayer* layer) const { return !HardwareSupportsLayerType(layer->GetSfType()) || !layer->IsLayerUsableAsDevice() || display->CtmByGpu() || (layer->GetLayerData().pi.RequireScalingOrPhasing() && display->ForcedScalingWithGpu()); } -bool Backend::HardwareSupportsLayerType(CompositionType comp_type) { +bool CompositionPlanner::HardwareSupportsLayerType(CompositionType comp_type) { return comp_type == CompositionType::kDevice || comp_type == CompositionType::kCursor; } -uint32_t Backend::CalcPixOps(const std::vector& layers, - size_t first_z, size_t size) { +uint32_t CompositionPlanner::CalcPixOps( + const std::vector& layers, size_t first_z, size_t size) { uint32_t pixops = 0; ALOGE_IF(first_z + size > layers.size(), "CalcPixOps provided range outside of layers"); @@ -177,9 +178,9 @@ uint32_t Backend::CalcPixOps(const std::vector& layers, return pixops; } -auto Backend::GetCompositionTypes(const std::vector& layers, - size_t client_first_z, size_t client_size, - bool use_cursor_plane) -> CompositionTypeMap { +auto CompositionPlanner::GetCompositionTypes( + const std::vector& layers, size_t client_first_z, + size_t client_size, bool use_cursor_plane) -> CompositionTypeMap { CompositionTypeMap composition_types; for (size_t z_order = 0; z_order < layers.size(); ++z_order) { if (z_order >= client_first_z && z_order < client_first_z + client_size) { @@ -194,7 +195,7 @@ auto Backend::GetCompositionTypes(const std::vector& layers, return composition_types; } -std::tuple Backend::GetExtraClientRange( +std::tuple CompositionPlanner::GetExtraClientRange( const HwcDisplay* display, const std::vector& layers, size_t client_start, size_t client_size, bool use_cursor_plane) { size_t avail_planes = display->GetPipe().GetUsablePlanes().first.size(); @@ -236,10 +237,12 @@ std::tuple Backend::GetExtraClientRange( // There are already client layers present, so the window needs to // encompass them. Determine the maximum offsets of the ensuing search. const size_t prepend = std::min(client_start, extra_client); - const size_t append = std::min(layers_size - (client_start + client_size), extra_client); + const size_t append = std::min(layers_size - (client_start + client_size), + extra_client); start = client_start - prepend; client_size += extra_client; - steps = 1 + std::min(std::min(append, prepend), layers_size - (start + client_size)); + steps = 1 + std::min(std::min(append, prepend), + layers_size - (start + client_size)); } else { // There are no other client layers present, so the window may search the // entire range. @@ -270,13 +273,14 @@ class GenericBackendPipelineCreator : public BackendManager::PipelineCreator { DrmConnector& connector) override { auto pipeline = DrmDisplayPipeline::CreatePipeline(connector); if (pipeline) { - pipeline->backend = std::make_unique(); + pipeline->backend = std::make_unique(); } return pipeline; } }; -// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, cert-err58-cpp) +// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, +// cert-err58-cpp) static GenericBackendPipelineCreator generic_backend; } // namespace android::drm_hwcomposer diff --git a/backend/Backend.h b/backend/CompositionPlanner.h similarity index 97% rename from backend/Backend.h rename to backend/CompositionPlanner.h index 3439117..e96ef58 100644 --- a/backend/Backend.h +++ b/backend/CompositionPlanner.h @@ -30,7 +30,7 @@ struct DrmKmsPlan; class HwcDisplay; class HwcLayer; -class Backend { +class CompositionPlanner { public: // Mapping of the CompositionType that the Backend assigned to each // HwcLayer. @@ -59,7 +59,7 @@ class Backend { std::optional cursor_plane_validated = std::nullopt; }; - virtual ~Backend() = default; + virtual ~CompositionPlanner() = default; virtual ValidatedComposition ValidateDisplay(const HwcDisplay* display) const; protected: diff --git a/drm/DrmDisplayPipeline.cpp b/drm/DrmDisplayPipeline.cpp index dd40f13..aca4892 100644 --- a/drm/DrmDisplayPipeline.cpp +++ b/drm/DrmDisplayPipeline.cpp @@ -24,7 +24,7 @@ #include "DrmDevice.h" #include "DrmEncoder.h" #include "DrmPlane.h" -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" #include "utils/log.h" #include "utils/properties.h" diff --git a/drm/DrmDisplayPipeline.h b/drm/DrmDisplayPipeline.h index 346906f..6cbacc0 100644 --- a/drm/DrmDisplayPipeline.h +++ b/drm/DrmDisplayPipeline.h @@ -21,7 +21,7 @@ namespace android::drm_hwcomposer { -class Backend; +class CompositionPlanner; class DrmConnector; class DrmDevice; class DrmPlane; @@ -106,7 +106,7 @@ struct DrmDisplayPipeline { std::shared_ptr> primary_plane; std::shared_ptr atomic_state_manager; - std::unique_ptr backend; + std::unique_ptr backend; }; } // namespace android::drm_hwcomposer diff --git a/hwc/HwcDisplay.cpp b/hwc/HwcDisplay.cpp index 29bc94b..13df9d3 100644 --- a/hwc/HwcDisplay.cpp +++ b/hwc/HwcDisplay.cpp @@ -26,7 +26,7 @@ #include #include -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" #include "compositor/DisplayInfo.h" #include "drm/DrmConnector.h" #include "drm/DrmDisplayPipeline.h" @@ -38,7 +38,7 @@ using ColorGamut = ::android::ColorSpace; namespace android::drm_hwcomposer { -using FlattenReason = Backend::FlattenReason; +using FlattenReason = CompositionPlanner::FlattenReason; namespace { @@ -444,7 +444,7 @@ auto HwcDisplay::PresentStagedComposition( } } else { attributes.validation_result = ValidationResult::kSkip; - validated_composition_ = Backend::ValidatedComposition{}; + validated_composition_ = CompositionPlanner::ValidatedComposition{}; for (const auto &[id, layer] : layers_) { validated_composition_->composition_types .emplace(&layer, layer.GetValidatedType()); @@ -910,7 +910,7 @@ uint32_t HwcDisplay::GetCurrentVsyncPeriodNs() const { } bool HwcDisplay::TestComposition( - Backend::ValidatedComposition &composition) const { + CompositionPlanner::ValidatedComposition &composition) const { ATRACE_CALL(); if (IsInHeadlessMode()) { @@ -932,7 +932,7 @@ bool HwcDisplay::TestComposition( // NOLINTNEXTLINE(readability-function-cognitive-complexity) std::optional HwcDisplay::CreateFrameUpdateCommit( - const Backend::ValidatedComposition &composition) const { + const CompositionPlanner::ValidatedComposition &composition) const { if (IsInHeadlessMode()) { ALOGE("%s: Display is in headless mode, should never reach here", __func__); return AtomicCommitArgs{}; diff --git a/hwc/HwcDisplay.h b/hwc/HwcDisplay.h index e0c8e37..8bb8f72 100644 --- a/hwc/HwcDisplay.h +++ b/hwc/HwcDisplay.h @@ -22,7 +22,7 @@ #include "HwcDisplayConfigs.h" #include "HwcLayer.h" -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" #include "compositor/DisplayInfo.h" #include "compositor/FlatteningController.h" #include "compositor/LayerData.h" @@ -36,7 +36,7 @@ namespace android::drm_hwcomposer { using DisplayHandle = int64_t; using EdidWrapperUnique = std::unique_ptr; -class Backend; +class CompositionPlanner; class DrmHwc; class FrontendDisplayBase { @@ -77,7 +77,8 @@ class HwcDisplay { /* SetPipeline should be carefully used only by DrmHwcTwo hotplug handlers */ void SetPipeline(std::shared_ptr pipeline); - bool TestComposition(Backend::ValidatedComposition &composition) const; + bool TestComposition( + CompositionPlanner::ValidatedComposition &composition) const; std::vector GetOrderLayersByZPos() const; @@ -251,7 +252,7 @@ class HwcDisplay { // The caller must do a test commit on the returned args to ensure that the // hardware can perform the commit. std::optional CreateFrameUpdateCommit( - const Backend::ValidatedComposition &composition) const; + const CompositionPlanner::ValidatedComposition &composition) const; bool CommitStagedComposition(SharedFd &out_present_fence); @@ -300,7 +301,7 @@ class HwcDisplay { std::shared_ptr pipeline_; - std::unique_ptr backend_; + std::unique_ptr backend_; std::unique_ptr flatcon_; std::unique_ptr vsync_worker_; @@ -324,7 +325,7 @@ class HwcDisplay { std::shared_ptr hdr_metadata_; // Most recent result of ValidateStagedComposition. Must be kept alive until // the composition is committed. - std::optional + std::optional validated_composition_ = std::nullopt; SharedFd writeback_complete_fence_; diff --git a/hwc2_device/DrmHwcTwo.cpp b/hwc2_device/DrmHwcTwo.cpp index 95ef75c..6e8d085 100644 --- a/hwc2_device/DrmHwcTwo.cpp +++ b/hwc2_device/DrmHwcTwo.cpp @@ -20,7 +20,7 @@ #include -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" #include "utils/log.h" namespace android::drm_hwcomposer { diff --git a/hwc2_device/hwc2_device.cpp b/hwc2_device/hwc2_device.cpp index e82a96c..f9d7c8f 100644 --- a/hwc2_device/hwc2_device.cpp +++ b/hwc2_device/hwc2_device.cpp @@ -29,7 +29,7 @@ #include #include "DrmHwcTwo.h" -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" #include "compositor/DisplayInfo.h" #include "hwc/HwcLayer.h" #include "utils/log.h" diff --git a/meson.build b/meson.build index 423fed2..bb5bafe 100644 --- a/meson.build +++ b/meson.build @@ -13,8 +13,8 @@ src_common = files( 'compositor/DrmKmsPlan.cpp', 'compositor/FlatteningController.cpp', 'backend/BackendManager.cpp', - 'backend/Backend.cpp', - 'backend/BackendClient.cpp', + 'backend/CompositionPlanner.cpp', + 'backend/ClientCompositionPlanner.cpp', 'hwc/HwcDisplayConfigs.cpp', 'hwc/HwcDisplay.cpp', 'hwc/HwcLayer.cpp', diff --git a/stats/CompositionStats.h b/stats/CompositionStats.h index 17c451b..9b52c57 100644 --- a/stats/CompositionStats.h +++ b/stats/CompositionStats.h @@ -20,7 +20,7 @@ #include #include -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" namespace android::drm_hwcomposer { @@ -35,7 +35,8 @@ struct CompositionAttributes { int64_t display_handle = 0; bool present_failed = false; ValidationResult validation_result = ValidationResult::kSkip; - Backend::FlattenReason flatten_reason = Backend::FlattenReason::kNone; + CompositionPlanner::FlattenReason + flatten_reason = CompositionPlanner::FlattenReason::kNone; // When adding new attributes, update the operator< below as well as // operator== which is implemented in the unit test file. diff --git a/stats/CompositionStatsAtomReporter.h b/stats/CompositionStatsAtomReporter.h index dc8e846..14911a2 100644 --- a/stats/CompositionStatsAtomReporter.h +++ b/stats/CompositionStatsAtomReporter.h @@ -19,7 +19,7 @@ #include #include "CompositionStats.h" -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" namespace android::drm_hwcomposer { @@ -34,7 +34,7 @@ class CompositionStatsAtomReporter { // Pushes a Vendor Atom to IStats::reportVendorAtom. virtual void PushAtom(int64_t display_handle, bool present_failed, ValidationResult validation_result, - Backend::FlattenReason flatten_reason, + CompositionPlanner::FlattenReason flatten_reason, int64_t frame_count, int64_t layer_count, int64_t used_plane_count, uint64_t total_pixops, uint64_t gpu_pixops) = 0; diff --git a/stats/CompositionStatsAtomReporterDesktop.cpp b/stats/CompositionStatsAtomReporterDesktop.cpp index 5303098..54b3b57 100644 --- a/stats/CompositionStatsAtomReporterDesktop.cpp +++ b/stats/CompositionStatsAtomReporterDesktop.cpp @@ -26,7 +26,7 @@ #include #include "CompositionStats.h" -#include "backend/Backend.h" +#include "backend/CompositionPlanner.h" #include "desktopatoms.h" #include "utils/log.h" @@ -37,7 +37,7 @@ namespace DesktopAtoms = android::vendor::google::desktop::stats::DesktopAtoms; namespace android::drm_hwcomposer { namespace { -using FlattenReason = Backend::FlattenReason; +using FlattenReason = CompositionPlanner::FlattenReason; const std::string kStatsServiceName = std::string(IStats::descriptor) .append("/default");