sde: Reduce level of indirections to access layer info.
1. Pull LayerArray information in LayerStack struct and
remove LayerArray.
2. Remove size_t usage in SDE.
Change-Id: If2d4be17e42c27a2ee451c103282bac35eea42dc
diff --git a/displayengine/include/core/layer_stack.h b/displayengine/include/core/layer_stack.h
index 20d6728..fddfa8e 100644
--- a/displayengine/include/core/layer_stack.h
+++ b/displayengine/include/core/layer_stack.h
@@ -131,7 +131,7 @@
*/
struct LayerRectArray {
LayerRect *rect; //!< Pointer to first element of array.
- size_t count; //!< Number of elements in the array.
+ uint32_t count; //!< Number of elements in the array.
LayerRectArray() : rect(NULL), count(0) { }
};
@@ -184,17 +184,6 @@
plane_alpha(0) { }
};
-/*! @brief This structure defines an array of display layers.
-
- @sa LayerStack
-*/
-struct LayerArray {
- Layer *layer; //!< Pointer to first element of array.
- size_t count; //!< Number of elements in the array.
-
- LayerArray() : layer(NULL), count(0) { }
-};
-
/*! @brief This structure defines a layer stack that contains layers which need to be composed and
rendered onto the target.
@@ -215,7 +204,8 @@
//!< NOTE: This field applies to a virtual display only.
};
- LayerArray layers; //!< Array of layers.
+ Layer *layers; //!< Array of layers.
+ uint32_t layer_count; //!< Total number of layers.
LayerStackFlags flags; //!< Flags associated with this layer set.
LayerStack() : output_buffer(NULL) { }
diff --git a/displayengine/libs/core/hw_framebuffer.cpp b/displayengine/libs/core/hw_framebuffer.cpp
index 2908d60..3d0078b 100644
--- a/displayengine/libs/core/hw_framebuffer.cpp
+++ b/displayengine/libs/core/hw_framebuffer.cpp
@@ -36,7 +36,6 @@
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <utils/constants.h>
-#include <utils/debug.h>
#include "hw_framebuffer.h"
@@ -242,7 +241,7 @@
uint32_t num_overlays = 0;
for (uint32_t i = 0; i < hw_layer_info.count; i++) {
uint32_t layer_index = hw_layer_info.index[i];
- Layer &layer = stack->layers.layer[layer_index];
+ Layer &layer = stack->layers[layer_index];
LayerBuffer *input_buffer = layer.input_buffer;
HWLayerConfig &config = hw_layers->config[i];
HWPipeInfo &left_pipe = config.left_pipe;
@@ -318,7 +317,7 @@
stack->retire_fence_fd = retire_fence;
for (uint32_t i = 0; i < hw_layer_info.count; i++) {
uint32_t layer_index = hw_layer_info.index[i];
- Layer &layer = stack->layers.layer[layer_index];
+ Layer &layer = stack->layers[layer_index];
LayerBuffer *input_buffer = layer.input_buffer;
input_buffer->release_fence_fd = dup(release_fence);
}
diff --git a/displayengine/libs/core/hw_framebuffer.h b/displayengine/libs/core/hw_framebuffer.h
index d0c43c7..ebd8ccb 100644
--- a/displayengine/libs/core/hw_framebuffer.h
+++ b/displayengine/libs/core/hw_framebuffer.h
@@ -30,11 +30,6 @@
namespace sde {
-struct HWContext {
- HWBlockType type;
- int device_fd;
-};
-
class HWFrameBuffer : public HWInterface {
public:
HWFrameBuffer();
@@ -54,6 +49,11 @@
virtual DisplayError Commit(Handle device, HWLayers *hw_layers);
private:
+ struct HWContext {
+ HWBlockType type;
+ int device_fd;
+ };
+
inline void SetFormat(uint32_t *target, const LayerBufferFormat &source);
inline void SetBlending(uint32_t *target, const LayerBlending &source);
inline void SetRect(mdp_rect *target, const LayerRect &source);
diff --git a/displayengine/libs/core/res_config.cpp b/displayengine/libs/core/res_config.cpp
index 7d16c00..0f71945 100644
--- a/displayengine/libs/core/res_config.cpp
+++ b/displayengine/libs/core/res_config.cpp
@@ -40,7 +40,7 @@
HWLayersInfo &layer_info = hw_layers->info;
for (uint32_t i = 0; i < layer_info.count; i++) {
- Layer& layer = layer_info.stack->layers.layer[layer_info.index[i]];
+ Layer& layer = layer_info.stack->layers[layer_info.index[i]];
float w_scale, h_scale;
if (!IsValidDimension(layer, &w_scale, &h_scale)) {
DLOGV("Invalid dimension");
diff --git a/displayengine/libs/core/res_manager.cpp b/displayengine/libs/core/res_manager.cpp
index cb44747..16060d8 100644
--- a/displayengine/libs/core/res_manager.cpp
+++ b/displayengine/libs/core/res_manager.cpp
@@ -214,7 +214,7 @@
}
for (uint32_t i = 0; i < layer_info.count; i++) {
- Layer &layer = layer_info.stack->layers.layer[layer_info.index[i]];
+ Layer &layer = layer_info.stack->layers[layer_info.index[i]];
bool use_non_dma_pipe = hw_layers->config[i].use_non_dma_pipe;
// Temp setting, this should be set by comp_manager
diff --git a/displayengine/libs/core/strategy_default.cpp b/displayengine/libs/core/strategy_default.cpp
index b8188aa..d05b9b8 100644
--- a/displayengine/libs/core/strategy_default.cpp
+++ b/displayengine/libs/core/strategy_default.cpp
@@ -37,12 +37,12 @@
HWLayersInfo *hw_layers_info) {
// Mark all layers for GPU composition. Find GPU target buffer and store its index for programming
// the hardware.
- LayerArray &layer_array = hw_layers_info->stack->layers;
+ LayerStack *layer_stack = hw_layers_info->stack;
uint32_t &hw_layer_count = hw_layers_info->count;
hw_layer_count = 0;
- for (uint32_t i = 0; i < layer_array.count; i++) {
- LayerComposition &composition = layer_array.layer[i].composition;
+ for (uint32_t i = 0; i < layer_stack->layer_count; i++) {
+ LayerComposition &composition = layer_stack->layers[i].composition;
if (composition != kCompositionGPUTarget) {
composition = kCompositionGPU;
} else {
diff --git a/displayengine/libs/hwc/hwc_sink.cpp b/displayengine/libs/hwc/hwc_sink.cpp
index 33ba62d..2041944 100644
--- a/displayengine/libs/hwc/hwc_sink.cpp
+++ b/displayengine/libs/hwc/hwc_sink.cpp
@@ -188,13 +188,13 @@
uint8_t *current_address = layer_stack_.raw;
// Layer array address
- layer_stack_.layers.layer = reinterpret_cast<Layer *>(current_address);
- layer_stack_.layers.count = num_hw_layers;
+ layer_stack_.layers = reinterpret_cast<Layer *>(current_address);
+ layer_stack_.layer_count = static_cast<uint32_t>(num_hw_layers);
current_address += num_hw_layers * sizeof(Layer);
for (size_t i = 0; i < num_hw_layers; i++) {
hwc_layer_1_t &hwc_layer = content_list->hwLayers[i];
- Layer &layer = layer_stack_.layers.layer[i];
+ Layer &layer = layer_stack_.layers[i];
// Layer buffer handle address
layer.input_buffer = reinterpret_cast<LayerBuffer *>(current_address);
@@ -202,7 +202,7 @@
// Visible rectangle address
layer.visible_regions.rect = reinterpret_cast<LayerRect *>(current_address);
- layer.visible_regions.count = hwc_layer.visibleRegionScreen.numRects;
+ layer.visible_regions.count = static_cast<uint32_t>(hwc_layer.visibleRegionScreen.numRects);
current_address += hwc_layer.visibleRegionScreen.numRects * sizeof(LayerRect);
// Dirty rectangle address
@@ -225,7 +225,7 @@
hwc_layer_1_t &hwc_layer = content_list->hwLayers[i];
const private_handle_t *pvt_handle = static_cast<const private_handle_t *>(hwc_layer.handle);
- Layer &layer = layer_stack_.layers.layer[i];
+ Layer &layer = layer_stack_.layers[i];
LayerBuffer *layer_buffer = layer.input_buffer;
if (pvt_handle) {
@@ -271,7 +271,7 @@
for (size_t i = 0; i < num_hw_layers; i++) {
hwc_layer_1_t &hwc_layer = content_list->hwLayers[i];
- Layer &layer = layer_stack_.layers.layer[i];
+ Layer &layer = layer_stack_.layers[i];
SetComposition(&hwc_layer.compositionType, layer.composition);
}
@@ -286,7 +286,7 @@
for (size_t i = 0; i < num_hw_layers; i++) {
hwc_layer_1_t &hwc_layer = content_list->hwLayers[i];
- LayerBuffer *layer_buffer = layer_stack_.layers.layer[i].input_buffer;
+ LayerBuffer *layer_buffer = layer_stack_.layers[i].input_buffer;
layer_buffer->acquire_fence_fd = hwc_layer.acquireFenceFd;
}
@@ -299,8 +299,8 @@
for (size_t i = 0; i < num_hw_layers; i++) {
hwc_layer_1_t &hwc_layer = content_list->hwLayers[i];
- Layer &layer = layer_stack_.layers.layer[i];
- LayerBuffer *layer_buffer = layer_stack_.layers.layer[i].input_buffer;
+ Layer &layer = layer_stack_.layers[i];
+ LayerBuffer *layer_buffer = layer_stack_.layers[i].input_buffer;
if (layer.composition == kCompositionSDE || layer.composition == kCompositionGPUTarget) {
hwc_layer.releaseFenceFd = layer_buffer->release_fence_fd;