SF: Cleanup layer construction
Introduce a LayerCreationArg parameter object, and modify all layer
types to use it rather than having the same set of four arguments.
Along the way simplify all constructors by moving to C++11 style default
values defined in the header, and ensure the destructor is defined in
the implementation file (as a default for most layer types, as only
BufferLayer needs a non-default destructor).
Using a uniform parameter object reduces the amount of work needed to
maintain the upcoming factory interface.
Test: Works on marlin.
Test: atest libsurfaceflinger_unittest
Change-Id: Ic09291fd3213ff980bfc600166bf798ba09daa32
diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h
index ac3aad1..b662b96 100644
--- a/services/surfaceflinger/BufferStateLayer.h
+++ b/services/surfaceflinger/BufferStateLayer.h
@@ -29,8 +29,8 @@
class BufferStateLayer : public BufferLayer {
public:
- BufferStateLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name,
- uint32_t w, uint32_t h, uint32_t flags);
+ explicit BufferStateLayer(const LayerCreationArgs&);
+ ~BufferStateLayer() override;
// -----------------------------------------------------------------------
// Interface implementation for Layer
@@ -125,13 +125,15 @@
private:
void onFirstRef() override;
+ static const std::array<float, 16> IDENTITY_MATRIX;
+
std::unique_ptr<renderengine::Image> mTextureImage;
- std::array<float, 16> mTransformMatrix;
+ std::array<float, 16> mTransformMatrix{IDENTITY_MATRIX};
- std::atomic<bool> mSidebandStreamChanged;
+ std::atomic<bool> mSidebandStreamChanged{false};
- uint32_t mFrameNumber;
+ uint32_t mFrameNumber{0};
// TODO(marissaw): support sticky transform for LEGACY camera mode
};