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;