layerTreeAsText() dumps GraphicsLayer across frame boundaries, but does not trigger layouts on subframes, so can be flakey.