Reshuffle FramebufferSurface
FramebufferSurface no longer speaks directly to the FB HAL. Now
everything goes through HWComposer (which may or may not be
connected to a hardware composer).
Added display index arg to some query methods.
Change-Id: Id3e157d2d4e3555d33afbb703e518b6e92e2d6d5
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index a49a023..4c520b1 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -64,8 +64,7 @@
HWComposer(
const sp<SurfaceFlinger>& flinger,
- EventHandler& handler,
- framebuffer_device_t const* fbDev);
+ EventHandler& handler);
~HWComposer();
@@ -107,6 +106,11 @@
// needed forward declarations
class LayerListIterator;
+ // Forwarding to FB HAL for pre-HWC-1.1 code (see FramebufferSurface).
+ int fbPost(buffer_handle_t buffer);
+ int fbCompositionComplete();
+ void fbDump(String8& result);
+
/*
* Interface to hardware composer's layers functionality.
* This abstracts the HAL interface to layers which can evolve in
@@ -208,10 +212,15 @@
void eventControl(int event, int enabled);
- nsecs_t getRefreshPeriod() const;
- nsecs_t getRefreshTimestamp() const;
- float getDpiX() const;
- float getDpiY() const;
+ // Query display parameters. Pass in a display index (e.g.
+ // HWC_DISPLAY_PRIMARY).
+ nsecs_t getRefreshPeriod(int disp) const;
+ nsecs_t getRefreshTimestamp(int disp) const;
+ uint32_t getResolutionX(int disp) const;
+ uint32_t getResolutionY(int disp) const;
+ uint32_t getFormat(int disp) const;
+ float getDpiX(int disp) const;
+ float getDpiY(int disp) const;
// this class is only used to fake the VSync event on systems that don't
// have it.
@@ -236,6 +245,8 @@
const Vector< sp<LayerBase> >& visibleLayersSortedByZ) const;
private:
+ void loadHwcModule();
+ void loadFbHalModule();
LayerListIterator getLayerIterator(int32_t id, size_t index);
size_t getNumLayers(int32_t id) const;
@@ -261,6 +272,9 @@
~DisplayData() {
free(list);
}
+ uint32_t xres;
+ uint32_t yres;
+ uint32_t format; // pixel format from FB hal, for pre-hwc-1.1
float xdpi;
float ydpi;
nsecs_t refresh;
@@ -271,7 +285,7 @@
};
sp<SurfaceFlinger> mFlinger;
- hw_module_t const* mModule;
+ framebuffer_device_t* mFbDev;
struct hwc_composer_device_1* mHwc;
// invariant: mLists[0] != NULL iff mHwc != NULL
// mLists[i>0] can be NULL. that display is to be ignored