Merge "sde: Add support for swapinterval 0"
diff --git a/displayengine/libs/hwc/hwc_display.cpp b/displayengine/libs/hwc/hwc_display.cpp
index 8a73d3c..724b720 100644
--- a/displayengine/libs/hwc/hwc_display.cpp
+++ b/displayengine/libs/hwc/hwc_display.cpp
@@ -33,6 +33,7 @@
#include <utils/constants.h>
#include <qdMetaData.h>
#include <sync/sync.h>
+#include <cutils/properties.h>
#include "hwc_display.h"
#include "hwc_debugger.h"
@@ -45,7 +46,7 @@
int id)
: core_intf_(core_intf), hwc_procs_(hwc_procs), type_(type), id_(id), display_intf_(NULL),
flush_(false), output_buffer_(NULL), dump_frame_count_(0), dump_frame_index_(0),
- dump_input_layers_(false) {
+ dump_input_layers_(false), swap_interval_zero_(false) {
}
int HWCDisplay::Init() {
@@ -56,6 +57,13 @@
return -EINVAL;
}
+ char property[PROPERTY_VALUE_MAX];
+ if (property_get("debug.egl.swapinterval", property, "1") > 0) {
+ if (atoi(property) == 0) {
+ swap_interval_zero_ = true;
+ }
+ }
+
return 0;
}
@@ -452,6 +460,11 @@
layer_buffer->planes[0].stride = pvt_handle->width;
}
+ // if swapinterval property is set to 0 then close and reset the acquireFd
+ if (swap_interval_zero_ && hwc_layer.acquireFenceFd >= 0) {
+ close(hwc_layer.acquireFenceFd);
+ hwc_layer.acquireFenceFd = -1;
+ }
layer_buffer->acquire_fence_fd = hwc_layer.acquireFenceFd;
}
@@ -485,6 +498,14 @@
LayerBuffer *layer_buffer = layer_stack_.layers[i].input_buffer;
if (!flush_) {
+ // if swapinterval property is set to 0 then do not update f/w release fences with driver
+ // values
+ if (swap_interval_zero_) {
+ hwc_layer.releaseFenceFd = -1;
+ close(layer_buffer->release_fence_fd);
+ layer_buffer->release_fence_fd = -1;
+ }
+
if (layer.composition != kCompositionGPU) {
hwc_layer.releaseFenceFd = layer_buffer->release_fence_fd;
}
@@ -509,6 +530,11 @@
if (!flush_) {
layer_stack_cache_.animating = layer_stack_.flags.animating;
+ // if swapinterval property is set to 0 then close and reset the list retire fence
+ if (swap_interval_zero_) {
+ close(layer_stack_.retire_fence_fd);
+ layer_stack_.retire_fence_fd = -1;
+ }
content_list->retireFenceFd = layer_stack_.retire_fence_fd;
if (dump_frame_count_) {
diff --git a/displayengine/libs/hwc/hwc_display.h b/displayengine/libs/hwc/hwc_display.h
index 7ef8187..d14699f 100644
--- a/displayengine/libs/hwc/hwc_display.h
+++ b/displayengine/libs/hwc/hwc_display.h
@@ -119,6 +119,7 @@
uint32_t dump_frame_index_;
bool dump_input_layers_;
uint32_t last_power_mode_;
+ bool swap_interval_zero_;
};
} // namespace sde