anchor.diff:      return new sky.RSTransform(scos, ssin, tx, ty);
     }
   }
  +
  +class TestPerformanceAtlas2 extends PerformanceTest {
  +  String get name => "1001 rects drawAtlas (24% offscreen never added)";
  +
  +  final int grid = 100;
  +
  +  double rotation = 0.0;
  +  List<Rect> rects = [];
  +  Paint cachedPaint = new Paint()
  +    ..setFilterQuality(sky.FilterQuality.low)
  +    ..isAntiAlias = false;
  +
  +  TestPerformanceAtlas2() {
  +    for (int x = 12; x < grid - 12; x++) {
  +      for (int y = 0; y < grid; y++) {
  +        rects.add(_spriteSheet["asteroid_big_1.png"].frame);
  +      }
  +    }
  +    rects.add(_spriteSheet["asteroid_big_1.png"].frame);
  +  }
  +
  +  void paint(PaintingCanvas canvas) {
  +    // Setup transforms
  +    List<sky.RSTransform> transforms = [];
  +
  +    for (int x = 12; x < grid - 12; x++) {
  +      for (int y = 0; y < grid; y++) {
  +        double xPos = x * 1024.0 / (grid - 1);
  +        double yPos = y * 1024.0 / (grid - 1);
  +
  +        transforms.add(createTransform(xPos, yPos, rects[0].size.width / 2.0, rects[0].size.height / 2.0, rotation, 1.0));
  +      }
  +    }
  +
  +    transforms.add(createTransform(512.0, 512.0, rects[0].size.width / 2.0, rects[0].size.height / 2.0, rotation, 1.0));
  +
  +    // Draw atlas
  +    Rect cullRect = spriteBox.visibleArea;
  +    canvas.drawAtlas(_spriteSheet.image, transforms, rects, null, null, cullRect, cachedPaint);
  +  }
  +
  +  void update(double dt) {
  +    rotation += 1.0;
  +  }
  +
  +  sky.RSTransform createTransform(double x, double y, double ax, double ay, double rot, double scale) {
  +    double scos = math.cos(convertDegrees2Radians(rot)) * scale;
  +    double ssin = math.sin(convertDegrees2Radians(rot)) * scale;
  +    double tx = x + -scos * ax + ssin * ay;
  +    double ty = y + -ssin * ax - scos * ay;
  +    return new sky.RSTransform(scos, ssin, tx, ty);
  +  }
  +}
  
positive.code: 
  class TestPerformance extends NodeWithSize {
    final int numFramesPerTest = 100;
    final int numTests = 3;
  
    TestPerformance() : super(new Size(1024.0, 1024.0)) {
    }
  
negative.code:         int totalTestTime = currentTime - testStartTime;
          double millisPerFrame =
            totalTestTime.toDouble() / numFramesPerTest.toDouble();
          print("  - RESULT fps: ${(1.0 / (millisPerFrame / 1000)).toStringAsFixed(1)} millis/frame: ${millisPerFrame.round()}");
  
          // Clear test
          removeAllChildren();
  