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
diff --git a/libgralloc/framebuffer.cpp b/libgralloc/framebuffer.cpp
index 4f84011..dd630d5 100644
--- a/libgralloc/framebuffer.cpp
+++ b/libgralloc/framebuffer.cpp
@@ -136,6 +136,13 @@
             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 @@
     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;
 }