anchor.diff:  Set<Component> _dirtyComponents = new Set<Component>();
   bool _buildScheduled = false;
   bool _inRenderDirtyComponents = false;
  +int _inLayoutCallbackBuilder = 0;
  +
  +class LayoutCallbackBuilderHandle { bool _active = true; }
  +LayoutCallbackBuilderHandle enterLayoutCallbackBuilder() {
  +  if (!inDebugBuild)
  +    return null;
  +  _inLayoutCallbackBuilder += 1;
  +  return new LayoutCallbackBuilderHandle();
  +}
  +void exitLayoutCallbackBuilder(LayoutCallbackBuilderHandle handle) {
  +  if (!inDebugBuild)
  +    return;
  +  assert(handle._active);
  +  handle._active = false;
  +  _inLayoutCallbackBuilder -= 1;
  +}
   
   List<int> _debugFrameTimes = <int>[];
   
  
positive.code: 
      if (oldNode != null) {
        if (oldNode.runtimeType == newNode.runtimeType && oldNode.key == newNode.key) {
          if (newNode._retainStatefulNodeIfPossible(oldNode)) {
            assert(oldNode.mounted);
            assert(!newNode.mounted);
            oldNode.setParent(this);
  
negative.code: 
  import 'package:sky/mojo/activity.dart' as activity;
  
  import '../base/debug.dart';
  import '../base/hit_test.dart';
  import '../rendering/box.dart';
  import '../rendering/object.dart';
  