summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Hillenbrand <codeworkx@cyanogenmod.org>2012-12-11 04:57:03 -0800
committerGerrit Code Review <gerrit@review.cyanogenmod.com>2012-12-11 04:57:03 -0800
commitd052b701d224b3b6cbd0a2e4a3a7a17d98c2fd06 (patch)
tree533913e530a10d7f2c6578a44cf9720251c7622c
parent04470b7fa8fa658417a7b40f904a978c59dc84f1 (diff)
parente6a23d7713f657f9aadf8339fd37f8e1c20e45b4 (diff)
downloadhardware_samsung-d052b701d224b3b6cbd0a2e4a3a7a17d98c2fd06.zip
hardware_samsung-d052b701d224b3b6cbd0a2e4a3a7a17d98c2fd06.tar.gz
hardware_samsung-d052b701d224b3b6cbd0a2e4a3a7a17d98c2fd06.tar.bz2
Merge "hwc: Pull in updates from exynos3 hwc" into mr1-staging
-rw-r--r--exynos4/hal/libhwcomposer/SecHWC.cpp82
1 files changed, 49 insertions, 33 deletions
diff --git a/exynos4/hal/libhwcomposer/SecHWC.cpp b/exynos4/hal/libhwcomposer/SecHWC.cpp
index d439216..1831125 100644
--- a/exynos4/hal/libhwcomposer/SecHWC.cpp
+++ b/exynos4/hal/libhwcomposer/SecHWC.cpp
@@ -527,40 +527,45 @@ static void get_hwc_ui_lay_skipdraw_decision(struct hwc_context_t* ctx,
static int hwc_prepare(hwc_composer_device_1_t *dev, size_t numDisplays, hwc_display_contents_1_t** displays)
{
- for (uint32_t i = 0; i < numDisplays; i++) {
- hwc_display_contents_1_t *list = displays[i];
- struct hwc_context_t* ctx = (struct hwc_context_t*)dev;
- int overlay_win_cnt = 0;
- int compositionType = 0;
- int ret;
+ struct hwc_context_t* ctx = (struct hwc_context_t*)dev;
+ int overlay_win_cnt = 0;
+ int compositionType = 0;
+ int ret;
+
+ // Compat
+ hwc_display_contents_1_t* list = NULL;
+ if (numDisplays > 0) {
+ list = displays[0];
+ }
+
#if defined(BOARD_USES_HDMI)
- android::SecHdmiClient *mHdmiClient = android::SecHdmiClient::getInstance();
- int hdmi_cable_status = (int)mHdmiClient->getHdmiCableStatus();
-
- ctx->hdmi_cable_status = hdmi_cable_status;
+ android::SecHdmiClient *mHdmiClient = android::SecHdmiClient::getInstance();
+ int hdmi_cable_status = (int)mHdmiClient->getHdmiCableStatus();
+
+ ctx->hdmi_cable_status = hdmi_cable_status;
#endif
#ifdef SKIP_DUMMY_UI_LAY_DRAWING
- if ((list && (!(list->flags & HWC_GEOMETRY_CHANGED))) &&
- (ctx->num_of_hwc_layer > 0)) {
- get_hwc_ui_lay_skipdraw_decision(ctx, list);
- return 0;
- }
- ctx->fb_lay_skip_initialized = 0;
- ctx->num_of_fb_lay_skip = 0;
+ if ((list && (!(list->flags & HWC_GEOMETRY_CHANGED))) &&
+ (ctx->num_of_hwc_layer > 0)) {
+ get_hwc_ui_lay_skipdraw_decision(ctx, list);
+ return 0;
+ }
+ ctx->fb_lay_skip_initialized = 0;
+ ctx->num_of_fb_lay_skip = 0;
#ifdef GL_WA_OVLY_ALL
- ctx->ui_skip_frame_cnt = 0;
+ ctx->ui_skip_frame_cnt = 0;
#endif
- for (int i = 0; i < NUM_OF_DUMMY_WIN; i++) {
- ctx->win_virt[i].layer_prev_buf = 0;
- ctx->win_virt[i].layer_index = -1;
- ctx->win_virt[i].status = HWC_WIN_FREE;
- }
+ for (int i = 0; i < NUM_OF_DUMMY_WIN; i++) {
+ ctx->win_virt[i].layer_prev_buf = 0;
+ ctx->win_virt[i].layer_index = -1;
+ ctx->win_virt[i].status = HWC_WIN_FREE;
+ }
#endif
- //if geometry is not changed, there is no need to do any work here
- if (!list || (!(list->flags & HWC_GEOMETRY_CHANGED)))
+ //if geometry is not changed, there is no need to do any work here
+ if (!list || (!(list->flags & HWC_GEOMETRY_CHANGED)))
return 0;
//all the windows are free here....
@@ -656,7 +661,7 @@ static int hwc_prepare(hwc_composer_device_1_t *dev, size_t numDisplays, hwc_dis
reset_win_rect_info(&ctx->win[i]);
}
}
- }
+
return 0;
}
@@ -675,8 +680,6 @@ static int hwc_set(hwc_composer_device_1_t *dev,
struct sec_rect src_work_rect;
struct sec_rect dst_work_rect;
bool need_swap_buffers = ctx->num_of_fb_layer > 0;
- for (uint32_t i = 0; i < numDisplays; i++) {
- hwc_display_contents_1_t* list = displays[i];
memset(&src_img, 0, sizeof(src_img));
memset(&dst_img, 0, sizeof(dst_img));
@@ -688,6 +691,9 @@ static int hwc_set(hwc_composer_device_1_t *dev,
int rotVal = 0;
#endif
+ // Only support one display
+ hwc_display_contents_1_t* list = displays[0];
+
if (!list) {
//turn off the all windows
for (int i = 0; i < NUM_OF_WIN; i++) {
@@ -887,7 +893,7 @@ static int hwc_set(hwc_composer_device_1_t *dev,
}
}
#endif
- }
+
return 0;
}
@@ -1036,12 +1042,22 @@ static int hwc_device_close(struct hw_device_t *dev)
}
return ret;
}
+
static int hwc_blank(struct hwc_composer_device_1 *dev, int dpy, int blank)
{
- // We're using an older method of screen blanking based on
- // early_suspend in the kernel. No need to do anything here.
- return 0;
-}
+ struct hwc_context_t* ctx = (struct hwc_context_t*)dev;
+ if (blank) {
+ // release our resources, the screen is turning off
+ // in our case, there is nothing to do.
+ ctx->num_of_fb_layer_prev = 0;
+ return 0;
+ }
+ else {
+ // No need to unblank, will unblank on set()
+ return 0;
+ }
+}
+
static int hwc_device_open(const struct hw_module_t* module, const char* name,
struct hw_device_t** device)
{