Preserve FrameSinkSourceMapping nodes that have path to root
In the Mus window server, every ServerWindow has a corresponding unique
FrameSinkId whether or not it has a CompositorFrameSink. Some (most)
ServerWindows do not submit CompositorFrames because they are local windows
within some ancestor that does submit a CompositorFrame.
We keep the FrameSinkSourceMapping in sync with the ServerWindow hierarchy
to simplify reparenting of windows across displays.
However, prior to this patch, if a FrameSinkSourceMapping loses all its
children and does not have a CompositorFrameSink (a SurfaceFactoryClient)
registered, then the node will be removed. When the window server adds
a child to the ServerWindow corresponding to the deleted FrameSinkSourceMapping
that child becomes orphaned and an appropriate BeginFrameSource does
not propagate to it. This manifests when all windows are closed in Mus+Ash
and a new window is opened. That window will not show any content because
it will not receive BeginFrames.
This CL fixes this issue by preserving the FrameSinkSourceMapping as long
as it has a BeginFrameSource.