SurfaceFlinger: Allows Surfaces to outlive their parents.
Currently the only strong reference to a Layer is held by their parent or the containing layer stack. This has a few undesirable implications. Firstly, it means that we can not create a SurfaceControl with a null parent. For example, a media decoding library may wish to offer an unparented SurfaceControl representing the decoding Surface, and allow the consumer to parent it between various SurfaceControls as they wish. Secondly it requires lifetime coordination between various levels of the hierarchy, when adding a child you have to be careful to observe the lifetime of the parent because your BufferQueue may become suddenly abandoned at any point. In this change we switch to a reference counted model, such that the Layer remains valid as long as there is a handle to it. We also end the behavior of passing on BufferQueue abandon to children. Layers are only abandoned/disposed when an explicit call to remove is made, or the last reference is dropped. Bug: 62536731 Bug: 111373437 Bug: 111297488 Test: Transaction_test.cpp Change-Id: I04cbc2368a1049b8ebd8913673ed4bfe05a26280
Loading
Please register or sign in to comment