hwc/fb/overlay: wait for fbpost and pan display
Draw sequence in hwc_set --eglSwapBuffers --wait for fb_post. Its ok to draw to External only at this point. --draw to external | Parallel with PAN --commit to external | Parallel with PAN --wait for pan (happening in fb_post) to finish. Call MSMFB_OVERLAY_SET ioctl only when params change. These thing together ensure a correct sequence and should fix tearing and stuttering, the latter assuming there are no other display pipeline delays. Acked-by: Arun Kumar K.R <akumarkr@codeaurora.org> Change-Id: Ibb0ad8485fa6b30dc6ac07ae8b25a760941c08ce
This commit is contained in:
committed by
Iliyan Malchev
parent
94822ee87c
commit
fc2acbe754
@@ -136,6 +136,13 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
|
||||
genlock_unlock_buffer(hnd);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
//Signals the composition thread to unblock and loop over if necessary
|
||||
pthread_mutex_lock(&m->fbPanLock);
|
||||
m->fbPanDone = true;
|
||||
pthread_cond_signal(&m->fbPanCond);
|
||||
pthread_mutex_unlock(&m->fbPanLock);
|
||||
|
||||
CALC_FPS();
|
||||
m->currentBuffer = hnd;
|
||||
}
|
||||
@@ -365,6 +372,9 @@ int mapFrameBufferLocked(struct private_module_t* module)
|
||||
module->fbPostDone = false;
|
||||
pthread_mutex_init(&(module->fbPostLock), NULL);
|
||||
pthread_cond_init(&(module->fbPostCond), NULL);
|
||||
module->fbPanDone = false;
|
||||
pthread_mutex_init(&(module->fbPanLock), NULL);
|
||||
pthread_cond_init(&(module->fbPanCond), NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user