split HWComposer out of DisplayHardware

we will only ever have a single instance of HWComposer, so
it's now an attribute of SurfaceFlinger, instead of being part
of DisplayHardware.

DisplayHardware now just represents a "display" (it should be renamed).

Change-Id: Iec191e57686868e1df6daa8b880a286c9fefde56
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 3ecaa7f..6418122 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -41,11 +41,15 @@
 #include <gui/ISurfaceComposer.h>
 #include <gui/ISurfaceComposerClient.h>
 
+#include <hardware/hwcomposer_defs.h>
+
 #include <private/gui/LayerState.h>
 
 #include "Barrier.h"
 #include "MessageQueue.h"
 
+#include "DisplayHardware/HWComposer.h"
+
 namespace android {
 
 // ---------------------------------------------------------------------------
@@ -81,7 +85,8 @@
 class SurfaceFlinger : public BinderService<SurfaceFlinger>,
                        public BnSurfaceComposer,
                        private IBinder::DeathRecipient,
-                       private Thread
+                       private Thread,
+                       private HWComposer::EventHandler
 {
 public:
     static char const* getServiceName() {
@@ -90,6 +95,10 @@
 
     SurfaceFlinger();
 
+    enum {
+        EVENT_VSYNC = HWC_EVENT_VSYNC
+    };
+
     // post an asynchronous message to the main thread
     status_t postMessageAsync(const sp<MessageBase>& msg, nsecs_t reltime = 0,
         uint32_t flags = 0);
@@ -114,14 +123,19 @@
         return getDisplayHardware(0);
     }
 
+    // utility function to delete a texture on the main thread
+    void deleteTextureAsync(GLuint texture);
+
+
+    // enable/disable h/w composer event
+    // TODO: this should be made accessible only to EventThread
+    void eventControl(int event, int enabled);
+
     // called on the main thread by MessageQueue when an internal message
     // is received
     // TODO: this should be made accessible only to MessageQueue
     void onMessageReceived(int32_t what);
 
-    // utility function to delete a texture on the main thread
-    void deleteTextureAsync(GLuint texture);
-
 private:
     friend class Client;
     friend class DisplayEventConnection;
@@ -194,6 +208,11 @@
     virtual void onFirstRef();
 
     /* ------------------------------------------------------------------------
+     * HWComposer::EventHandler interface
+     */
+    virtual void onVSyncReceived(int dpy, nsecs_t timestamp);
+
+    /* ------------------------------------------------------------------------
      * Message handling
      */
     void waitForEvent();
@@ -308,6 +327,12 @@
     }
 
     /* ------------------------------------------------------------------------
+     * H/W composer
+     */
+
+    HWComposer& getHwComposer() const { return *mHwc; }
+
+        /* ------------------------------------------------------------------------
      * Compositing
      */
     void invalidateHwcGeometry();
@@ -359,6 +384,7 @@
     // constant members (no synchronization needed for access)
     sp<IMemoryHeap> mServerHeap;
     surface_flinger_cblk_t* mServerCblk;
+    HWComposer* mHwc;
     GLuint mWormholeTexName;
     GLuint mProtectedTexName;
     nsecs_t mBootTime;