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 <matvii.zorin@globallogic.com>
diff --git a/DrmHwcTwo.cpp b/DrmHwcTwo.cpp
index 7f5d639..0647cf1 100644
--- a/DrmHwcTwo.cpp
+++ b/DrmHwcTwo.cpp
@@ -865,19 +865,6 @@
return HWC2::Error::None;
}
-uint32_t DrmHwcTwo::HwcDisplay::CalcPixOps(
- std::map<uint32_t, DrmHwcTwo::HwcLayer *> &z_map, size_t first_z,
- size_t size) {
- uint32_t pixops = 0;
- for (std::pair<const uint32_t, DrmHwcTwo::HwcLayer *> &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<uint32_t, DrmHwcTwo::HwcLayer *> &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 @@
hwc2_function_pointer_t func);
HWC2::Error CreateComposition(bool test);
bool HardwareSupportsLayerType(HWC2::Composition comp_type);
- uint32_t CalcPixOps(std::map<uint32_t, DrmHwcTwo::HwcLayer *> &z_map,
- size_t first_z, size_t size);
void MarkValidated(std::map<uint32_t, DrmHwcTwo::HwcLayer *> &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 @@
for (std::pair<const uint32_t, DrmHwcTwo::HwcLayer *> &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 @@
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 @@
display->resource_manager()->ForcedScalingWithGpu());
}
+uint32_t Backend::CalcPixOps(const std::vector<DrmHwcTwo::HwcLayer *> &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 @@
const std::map<uint32_t, DrmHwcTwo::HwcLayer *> &z_map);
virtual bool IsClientLayer(DrmHwcTwo::HwcDisplay *display,
DrmHwcTwo::HwcLayer *layer);
+
+ protected:
+ uint32_t CalcPixOps(const std::map<uint32_t, DrmHwcTwo::HwcLayer *> &z_map,
+ size_t first_z, size_t size);
};
} // namespace android