From: Matvii Zorin Date: Fri, 29 Jan 2021 13:39:55 +0000 (+0200) Subject: drm_hwcomposer: Move CalcPixOps into Backend X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2c91df5620a14f7074724e32d856389d486fe847;p=android-x86%2Fexternal-drm_hwcomposer.git drm_hwcomposer: Move CalcPixOps into Backend The CalcPixOps is used only for display validation which is implemented in the generic backend. Signed-off-by: Matvii Zorin --- diff --git a/DrmHwcTwo.cpp b/DrmHwcTwo.cpp index 7f5d639..0647cf1 100644 --- a/DrmHwcTwo.cpp +++ b/DrmHwcTwo.cpp @@ -865,19 +865,6 @@ HWC2::Error DrmHwcTwo::HwcDisplay::SetVsyncEnabled(int32_t enabled) { return HWC2::Error::None; } -uint32_t DrmHwcTwo::HwcDisplay::CalcPixOps( - std::map &z_map, size_t first_z, - size_t size) { - uint32_t pixops = 0; - for (std::pair &l : z_map) { - if (l.first >= first_z && l.first < first_z + size) { - hwc_rect_t df = l.second->display_frame(); - pixops += (df.right - df.left) * (df.bottom - df.top); - } - } - return pixops; -} - void DrmHwcTwo::HwcDisplay::MarkValidated( std::map &z_map, size_t client_first_z, size_t client_size) { diff --git a/DrmHwcTwo.h b/DrmHwcTwo.h index 6c5431e..1a16dce 100644 --- a/DrmHwcTwo.h +++ b/DrmHwcTwo.h @@ -175,8 +175,6 @@ class DrmHwcTwo : public hwc2_device_t { hwc2_function_pointer_t func); HWC2::Error CreateComposition(bool test); bool HardwareSupportsLayerType(HWC2::Composition comp_type); - uint32_t CalcPixOps(std::map &z_map, - size_t first_z, size_t size); void MarkValidated(std::map &z_map, size_t client_first_z, size_t client_size); diff --git a/backend/Backend.cpp b/backend/Backend.cpp index 9e9e2b9..80b22d4 100644 --- a/backend/Backend.cpp +++ b/backend/Backend.cpp @@ -49,7 +49,7 @@ HWC2::Error Backend::ValidateDisplay(DrmHwcTwo::HwcDisplay *display, for (std::pair &l : z_map_tmp) z_map.emplace(std::make_pair(z_index++, l.second)); - uint32_t total_pixops = display->CalcPixOps(z_map, 0, z_map.size()); + uint32_t total_pixops = CalcPixOps(z_map, 0, z_map.size()); uint32_t gpu_pixops = 0; int client_start = -1; @@ -82,7 +82,7 @@ HWC2::Error Backend::ValidateDisplay(DrmHwcTwo::HwcDisplay *display, gpu_pixops = INT_MAX; for (int i = 0; i < steps; i++) { - uint32_t po = display->CalcPixOps(z_map, start + i, client_size); + uint32_t po = CalcPixOps(z_map, start + i, client_size); if (po < gpu_pixops) { gpu_pixops = po; client_start = start + i; @@ -139,6 +139,18 @@ bool Backend::IsClientLayer(DrmHwcTwo::HwcDisplay *display, display->resource_manager()->ForcedScalingWithGpu()); } +uint32_t Backend::CalcPixOps(const std::vector &layers, + size_t first_z, size_t size) { + uint32_t pixops = 0; + for (auto & [ z_order, layer ] : z_map) { + if (z_order >= first_z && z_order < first_z + size) { + hwc_rect_t df = layer->display_frame(); + pixops += (df.right - df.left) * (df.bottom - df.top); + } + } + return pixops; +} + // clang-format off // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables, cert-err58-cpp) REGISTER_BACKEND("generic", Backend); diff --git a/backend/Backend.h b/backend/Backend.h index 2725809..8658efa 100644 --- a/backend/Backend.h +++ b/backend/Backend.h @@ -32,6 +32,10 @@ class Backend { const std::map &z_map); virtual bool IsClientLayer(DrmHwcTwo::HwcDisplay *display, DrmHwcTwo::HwcLayer *layer); + + protected: + uint32_t CalcPixOps(const std::map &z_map, + size_t first_z, size_t size); }; } // namespace android