The yellow box should be large enough to scroll off the bottom. At the start there should be no child. After 100ms a red box is added and after 100ms more it should be removed. This tests that we can support very large compositing layers with dynamically added and removed child compositing layers.

First (no children):
(GraphicsLayer
  (anchor 0.00 0.00)
  (bounds 785.00 5129.00)
  (children 1
    (GraphicsLayer
      (bounds 785.00 5129.00)
      (contentsOpaque 1)
      (children 1
        (GraphicsLayer
          (position 8.00 86.00)
          (bounds 502.00 5002.00)
          (contentsOpaque 1)
          (drawsContent 1)
        )
      )
    )
  )
)


Second (child added):
(GraphicsLayer
  (anchor 0.00 0.00)
  (bounds 785.00 5129.00)
  (children 1
    (GraphicsLayer
      (bounds 785.00 5129.00)
      (contentsOpaque 1)
      (children 1
        (GraphicsLayer
          (position 8.00 86.00)
          (bounds 502.00 5002.00)
          (contentsOpaque 1)
          (drawsContent 1)
          (children 1
            (GraphicsLayer
              (position 51.00 401.00)
              (bounds 200.00 200.00)
              (contentsOpaque 1)
            )
          )
        )
      )
    )
  )
)


Third (child removed):
(GraphicsLayer
  (anchor 0.00 0.00)
  (bounds 785.00 5129.00)
  (children 1
    (GraphicsLayer
      (bounds 785.00 5129.00)
      (contentsOpaque 1)
      (children 1
        (GraphicsLayer
          (position 8.00 86.00)
          (bounds 502.00 5002.00)
          (contentsOpaque 1)
          (drawsContent 1)
        )
      )
    )
  )
)

