SurfaceFlinger and libgui: Support for child layers.
Add support for parenting Layers in a tree. Layers
follow scene-graph style rules, that is to say:
1. A child is cropped to the final bounds of the parent.
2. A child inherits the parent's transform (including position)
3. A child's Z ordering is relative to the parent and bounded between
the parents siblings.
4. A childs lifetime is bounded by it's parents lifetime.
Test: New tests in Transaction_test plus manual testing with later branches.
Change-Id: I96f8ad863665b9a70b6f845561344c297b7e6eff
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index d573f1a..4f3ee74 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -293,7 +293,8 @@
*/
status_t createLayer(const String8& name, const sp<Client>& client,
uint32_t w, uint32_t h, PixelFormat format, uint32_t flags,
- sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp);
+ sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp,
+ sp<Layer>* parent);
status_t createNormalLayer(const sp<Client>& client, const String8& name,
uint32_t w, uint32_t h, uint32_t flags, PixelFormat& format,
@@ -320,7 +321,8 @@
status_t addClientLayer(const sp<Client>& client,
const sp<IBinder>& handle,
const sp<IGraphicBufferProducer>& gbc,
- const sp<Layer>& lbc);
+ const sp<Layer>& lbc,
+ const sp<Layer>& parent);
/* ------------------------------------------------------------------------
* Boot animation, on/off animations and screen capture
@@ -423,6 +425,7 @@
void enableHardwareVsync();
void resyncToHardwareVsync(bool makeAvailable);
void disableHardwareVsync(bool makeUnavailable);
+
public:
void resyncWithRateLimit();
private:
@@ -464,11 +467,12 @@
Condition mTransactionCV;
bool mTransactionPending;
bool mAnimTransactionPending;
- Vector< sp<Layer> > mLayersPendingRemoval;
+ SortedVector< sp<Layer> > mLayersPendingRemoval;
SortedVector< wp<IBinder> > mGraphicBufferProducerList;
// protected by mStateLock (but we could use another lock)
bool mLayersRemoved;
+ bool mLayersAdded;
// access must be protected by mInvalidateLock
volatile int32_t mRepaintEverything;
@@ -565,6 +569,8 @@
nsecs_t mTotalTime;
std::atomic<nsecs_t> mLastSwapTime;
+ size_t mNumLayers;
+
// Double- vs. triple-buffering stats
struct BufferingStats {
BufferingStats()