Merge pull request #813 from abarth/device_pixel_ratio

Don't freeze devicePixelRatio at startup
diff --git a/sky/packages/sky/lib/rendering/sky_binding.dart b/sky/packages/sky/lib/rendering/sky_binding.dart
index d993d8d..5eca6e8 100644
--- a/sky/packages/sky/lib/rendering/sky_binding.dart
+++ b/sky/packages/sky/lib/rendering/sky_binding.dart
@@ -40,7 +40,7 @@
     sky.view.setMetricsChangedCallback(_handleMetricsChanged);
     scheduler.init();
     if (renderViewOverride == null) {
-      _renderView = new RenderView(child: root, devicePixelRatio: sky.view.devicePixelRatio);
+      _renderView = new RenderView(child: root);
       _renderView.attach();
       _renderView.rootConstraints = _createConstraints();
       _renderView.scheduleInitialFrame();
diff --git a/sky/packages/sky/lib/rendering/view.dart b/sky/packages/sky/lib/rendering/view.dart
index b1ede69..e835ce3 100644
--- a/sky/packages/sky/lib/rendering/view.dart
+++ b/sky/packages/sky/lib/rendering/view.dart
@@ -22,13 +22,11 @@
 class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox> {
   RenderView({
     RenderBox child,
-    this.devicePixelRatio,
     this.timeForRotation: const Duration(microseconds: 83333)
   }) {
     this.child = child;
   }
 
-  final double devicePixelRatio;
   Duration timeForRotation;
 
   Size _size = Size.zero;
@@ -46,10 +44,14 @@
     markNeedsLayout();
   }
 
+  Matrix4 get _logicalToDeviceTransform {
+    double devicePixelRatio = sky.view.devicePixelRatio;
+    return new Matrix4.diagonal3Values(devicePixelRatio, devicePixelRatio, 1.0);
+  }
+
   void scheduleInitialFrame() {
-    Matrix4 logicalToDeviceZoom = new Matrix4.diagonal3Values(devicePixelRatio, devicePixelRatio, 1.0);
     scheduleInitialLayout();
-    scheduleInitialPaint(new TransformLayer(transform: logicalToDeviceZoom));
+    scheduleInitialPaint(new TransformLayer(transform: _logicalToDeviceTransform));
     scheduler.ensureVisualUpdate();
   }
 
@@ -98,6 +100,7 @@
   void compositeFrame() {
     sky.tracing.begin('RenderView.compositeFrame');
     try {
+      (layer as TransformLayer).transform = _logicalToDeviceTransform;
       Rect bounds = Point.origin & (size * sky.view.devicePixelRatio);
       sky.SceneBuilder builder = new sky.SceneBuilder(bounds);
       layer.addToScene(builder, Offset.zero);