anchor.diff:      if (_relayoutSubtreeRoot != this) {
         final parent = this.parent; // TODO(ianh): Remove this once the analyzer is cleverer
         assert(parent is RenderObject);
  -      parent.markNeedsLayout();
  +      if (!_doingThisLayoutWithCallback) {
  +        parent.markNeedsLayout();
  +      } else {
  +        assert(parent._debugDoingThisLayout);
  +      }
         assert(parent == this.parent); // TODO(ianh): Remove this once the analyzer is cleverer
       } else {
         _nodesNeedingLayout.add(this);
  
positive.code:   void invokeLayoutCallback(LayoutCallback callback) {
      assert(_debugMutationsLocked);
      assert(_debugDoingThisLayout);
      assert(!_debugDoingThisLayoutWithCallback);
      assert(() {
        _debugDoingThisLayoutWithCallback = true;
        return true;
      });
      callback(constraints);
      assert(() {
        _debugDoingThisLayoutWithCallback = false;
        return true;
      });
    }
  
    // when the parent has rotated (e.g. when the screen has been turned
  
negative.code:       assert(_relayoutSubtreeRoot == this);
        RenderObject debugPreviousActiveLayout;
        assert(!_debugMutationsLocked);
        assert(!_doingThisLayoutWithCallback);
        assert(_debugCanParentUseSize != null);
        assert(() {
          _debugMutationsLocked = true;
  