Merge "hwc: Pull in updates from exynos3 hwc" into mr1-staging

tirimbino
Daniel Hillenbrand 12 years ago committed by Gerrit Code Review
commit d052b701d2
  1. 82
      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)
{

Loading…
Cancel
Save