anchor.diff:      assert(!_needsPaint);
     }
   
  -  bool get createNewDisplayList => false;
  +  bool get requiresCompositing => false;
     Rect get paintBounds;
     void debugPaint(PaintingContext context, Offset offset) { }
     void paint(PaintingContext context, Offset offset) { }
  
positive.code:     try {
        _paintWithContext(context, Offset.zero);
      } catch (e) {
        print('Exception raised during _updatePaintingCanvas:\n${e}\nContext:\n${this}');
        if (inDebugBuild)
          rethrow;
        return;
      }
      assert(!_needsLayout); // check that the paint() method didn't mark us dirty again
      assert(!_needsPaint); // check that the paint() method didn't mark us dirty again
      _paintingNode.setBackingDrawable(recorder.endRecordingAsDrawable());
      if (context._descendentsWithPaintingCanvases != null) {
        for (RenderObject node in context._descendentsWithPaintingCanvases) {
          assert(node.attached == attached);
          if (node._needsPaint)
            node._updatePaintingCanvas();
        };
      }
    }
  
    void _paintWithContext(PaintingContext context, Offset offset) {
  
negative.code: 
    PaintingContext(this.canvas);
  
    void paintChild(RenderObject child, Point point) {
      // TODO(abarth): Support compositing.
      assert(!child.requiresCompositing);
      child._paintWithContext(this, point.toOffset());
    }
  }
  
  