servo: Merge #12941 - Update euclid to 0.10.1 (from nox:euclid); r=metajack,emilio
authorAnthony Ramine <n.oxyde@gmail.com>
Sat, 20 Aug 2016 20:04:17 -0500
changeset 368556 8eaeb93bfb0265bd780b7fc441e992886c6675c1
parent 368555 8ac75ca7fcf0081d419a9083399858b87cbfd79b
child 368557 b8725e36ac246b19ab54f907fd063eb15f4c33d8
push id10863
push userjlorenzo@mozilla.com
push dateMon, 06 Mar 2017 23:02:23 +0000
treeherdermozilla-aurora@0931190cd725 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmetajack, emilio
servo: Merge #12941 - Update euclid to 0.10.1 (from nox:euclid); r=metajack,emilio Source-Repo: https://github.com/servo/servo Source-Revision: bb0ba644a8a028d6de8b5daf1b578a82ab23d49e
servo/components/canvas/Cargo.toml
servo/components/canvas/canvas_paint_thread.rs
servo/components/canvas_traits/Cargo.toml
servo/components/compositing/Cargo.toml
servo/components/compositing/compositor.rs
servo/components/constellation/Cargo.toml
servo/components/constellation/constellation.rs
servo/components/gfx/Cargo.toml
servo/components/gfx/display_list/mod.rs
servo/components/gfx/paint_context.rs
servo/components/gfx/paint_thread.rs
servo/components/gfx_traits/Cargo.toml
servo/components/layout/Cargo.toml
servo/components/layout/display_list_builder.rs
servo/components/layout/model.rs
servo/components/layout_thread/Cargo.toml
servo/components/layout_thread/lib.rs
servo/components/script/Cargo.toml
servo/components/script/dom/canvasrenderingcontext2d.rs
servo/components/script_layout_interface/Cargo.toml
servo/components/script_traits/Cargo.toml
servo/components/servo/Cargo.lock
servo/components/servo/Cargo.toml
servo/components/servo/lib.rs
servo/components/style/Cargo.toml
servo/components/style/properties/helpers/animated_properties.mako.rs
servo/components/style_traits/Cargo.toml
servo/components/util/Cargo.toml
servo/components/webdriver_server/Cargo.toml
servo/ports/cef/Cargo.lock
servo/ports/cef/Cargo.toml
servo/ports/geckolib/Cargo.lock
servo/ports/geckolib/Cargo.toml
servo/ports/glutin/Cargo.toml
servo/ports/glutin/window.rs
servo/tests/unit/style/Cargo.toml
--- a/servo/components/canvas/Cargo.toml
+++ b/servo/components/canvas/Cargo.toml
@@ -7,22 +7,22 @@ publish = false
 
 [lib]
 name = "canvas"
 path = "lib.rs"
 
 [dependencies]
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
 canvas_traits = {path = "../canvas_traits"}
-euclid = "0.9"
+euclid = "0.10.1"
 gfx_traits = {path = "../gfx_traits"}
 gleam = "0.2.8"
 ipc-channel = "0.5"
 log = "0.3.5"
 num-traits = "0.1.32"
-offscreen_gl_context = "0.3"
+offscreen_gl_context = "0.4"
 plugins = {path = "../plugins"}
 util = {path = "../util"}
 
 [dependencies.webrender_traits]
 git = "https://github.com/servo/webrender"
 default_features = false
 features = ["serde_macros"]
--- a/servo/components/canvas/canvas_paint_thread.rs
+++ b/servo/components/canvas/canvas_paint_thread.rs
@@ -678,19 +678,20 @@ impl<'a> CanvasPaintThread<'a> {
          self.state.shadow_offset_y != 0.0f64 ||
          self.state.shadow_blur != 0.0f64)
     }
 
     fn create_draw_target_for_shadow(&self, source_rect: &Rect<f32>) -> DrawTarget {
         let draw_target = self.drawtarget.create_similar_draw_target(&Size2D::new(source_rect.size.width as i32,
                                                                                   source_rect.size.height as i32),
                                                                      self.drawtarget.get_format());
-        let matrix = Matrix2D::identity().translate(-source_rect.origin.x as AzFloat,
-                                                    -source_rect.origin.y as AzFloat)
-                                         .mul(&self.state.transform);
+        let matrix = Matrix2D::identity()
+            .pre_translated(-source_rect.origin.x as AzFloat,
+                            -source_rect.origin.y as AzFloat)
+            .pre_mul(&self.state.transform);
         draw_target.set_transform(&matrix);
         draw_target
     }
 
     fn draw_with_shadow<F>(&self, rect: &Rect<f32>, draw_shadow_source: F)
         where F: FnOnce(&DrawTarget)
     {
         let shadow_src_rect = self.state.transform.transform_rect(rect);
--- a/servo/components/canvas_traits/Cargo.toml
+++ b/servo/components/canvas_traits/Cargo.toml
@@ -7,17 +7,17 @@ publish = false
 
 [lib]
 name = "canvas_traits"
 path = "lib.rs"
 
 [dependencies]
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
 cssparser = {version = "0.5.7", features = ["heap_size", "serde-serialization"]}
-euclid = "0.9"
+euclid = "0.10.1"
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 ipc-channel = "0.5"
 plugins = {path = "../plugins"}
 serde = {version = "0.8", features = ["unstable"]}
 serde_macros = "0.8"
 
--- a/servo/components/compositing/Cargo.toml
+++ b/servo/components/compositing/Cargo.toml
@@ -7,17 +7,17 @@ publish = false
 
 [lib]
 name = "compositing"
 path = "lib.rs"
 
 [dependencies]
 app_units = "0.3"
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
-euclid = "0.9"
+euclid = "0.10.1"
 gfx_traits = {path = "../gfx_traits"}
 gleam = "0.2.8"
 image = "0.10"
 ipc-channel = "0.5"
 layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
 log = "0.3.5"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
--- a/servo/components/compositing/compositor.rs
+++ b/servo/components/compositing/compositor.rs
@@ -462,17 +462,17 @@ impl<Window: WindowMethods> IOCompositor
 
         IOCompositor {
             window: window,
             native_display: native_display,
             port: state.receiver,
             context: None,
             root_pipeline: None,
             pipeline_details: HashMap::new(),
-            scene: Scene::new(TypedRect::new(TypedPoint2D::zero(), window_size.as_f32())),
+            scene: Scene::new(TypedRect::new(TypedPoint2D::zero(), window_size.to_f32())),
             window_size: window_size,
             viewport: None,
             scale_factor: scale_factor,
             channel_to_self: state.sender.clone_compositor_proxy(),
             delayed_composition_timer: DelayedCompositionTimerProxy::new(state.sender),
             composition_request: CompositionRequest::NoCompositingNecessary,
             touch_handler: TouchHandler::new(),
             pending_scroll_zoom_events: Vec::new(),
@@ -893,17 +893,17 @@ impl<Window: WindowMethods> IOCompositor
         // If we have an old root layer, release all old tiles before replacing it.
         let old_root_layer = self.scene.root.take();
         if let Some(ref old_root_layer) = old_root_layer {
             old_root_layer.clear_all_tiles(self)
         }
 
         self.scene.root = Some(self.create_root_layer_for_pipeline_and_size(&frame_tree.pipeline,
                                                                             None));
-        self.scene.set_root_layer_size(self.window_size.as_f32());
+        self.scene.set_root_layer_size(self.window_size.to_f32());
 
         self.create_pipeline_details_for_frame_tree(&frame_tree);
 
         self.send_window_size(WindowSizeType::Initial);
 
         self.frame_tree_id.next();
         self.composite_if_necessary_if_not_using_webrender(CompositingReason::NewFrameTree);
     }
@@ -1141,17 +1141,17 @@ impl<Window: WindowMethods> IOCompositor
                                                       parent_layer.tile_size);
         *subpage_layer.masks_to_bounds.borrow_mut() = true;
         parent_layer.add_child(subpage_layer);
         self.pending_subpages.insert(subpage_pipeline_id);
     }
 
     fn send_window_size(&self, size_type: WindowSizeType) {
         let dppx = self.page_zoom * self.device_pixels_per_screen_px();
-        let initial_viewport = self.window_size.as_f32() / dppx;
+        let initial_viewport = self.window_size.to_f32() / dppx;
         let visible_viewport = initial_viewport / self.viewport_zoom;
         let msg = ConstellationMsg::WindowSize(WindowSizeData {
             device_pixel_ratio: dppx,
             initial_viewport: initial_viewport,
             visible_viewport: visible_viewport,
         }, size_type);
 
         if let Err(e) = self.constellation_chan.send(msg) {
@@ -1378,17 +1378,17 @@ impl<Window: WindowMethods> IOCompositor
         }
 
         if self.window_size == new_size {
             return;
         }
 
         self.window_size = new_size;
 
-        self.scene.set_root_layer_size(new_size.as_f32());
+        self.scene.set_root_layer_size(new_size.to_f32());
         self.send_window_size(WindowSizeType::Resize);
     }
 
     fn on_load_url_window_event(&mut self, url_string: String) {
         debug!("osmain: loading URL `{}`", url_string);
         self.got_load_complete_message = false;
         match Url::parse(&url_string) {
             Ok(url) => {
@@ -1622,18 +1622,18 @@ impl<Window: WindowMethods> IOCompositor
                 // Batch up all scroll events into one, or else we'll do way too much painting.
                 let mut last_combined_event: Option<ScrollZoomEvent> = None;
                 for scroll_event in self.pending_scroll_zoom_events.drain(..) {
                     let this_delta = scroll_event.delta;
                     let this_cursor = scroll_event.cursor;
                     if let Some(combined_event) = last_combined_event {
                         if combined_event.phase != scroll_event.phase {
                             let delta = (combined_event.delta / self.scene.scale).to_untyped();
-                            let cursor = (combined_event.cursor.as_f32() /
-                                          self.scene.scale).to_untyped();
+                            let cursor =
+                                (combined_event.cursor.to_f32() / self.scene.scale).to_untyped();
                             webrender_api.scroll(delta, cursor, combined_event.phase);
                             last_combined_event = None
                         }
                     }
 
                     match (&mut last_combined_event, scroll_event.phase) {
                         (last_combined_event @ &mut None, _) => {
                             *last_combined_event = Some(ScrollZoomEvent {
@@ -1664,26 +1664,26 @@ impl<Window: WindowMethods> IOCompositor
                             last_combined_event.event_count += 1
                         }
                     }
                 }
 
                 // TODO(gw): Support zoom (WR issue #28).
                 if let Some(combined_event) = last_combined_event {
                     let delta = (combined_event.delta / self.scene.scale).to_untyped();
-                    let cursor = (combined_event.cursor.as_f32() / self.scene.scale).to_untyped();
+                    let cursor = (combined_event.cursor.to_f32() / self.scene.scale).to_untyped();
                     webrender_api.scroll(delta, cursor, combined_event.phase);
                     self.waiting_for_results_of_scroll = true
                 }
             }
             None => {
                 for event in std_mem::replace(&mut self.pending_scroll_zoom_events,
                                                      Vec::new()) {
                     let delta = event.delta / self.scene.scale;
-                    let cursor = event.cursor.as_f32() / self.scene.scale;
+                    let cursor = event.cursor.to_f32() / self.scene.scale;
 
                     if let Some(ref mut layer) = self.scene.root {
                         layer.handle_scroll_event(delta, cursor);
                     }
 
                     if event.magnification != 1.0 {
                         self.zoom_action = true;
                         self.zoom_time = precise_time_s();
@@ -1731,17 +1731,17 @@ impl<Window: WindowMethods> IOCompositor
             }
 
             for kid in &*layer.children.borrow() {
                 process_layer(&*kid, window_size, new_display_ports)
             }
         }
 
         let dppx = self.page_zoom * self.device_pixels_per_screen_px();
-        let window_size = self.window_size.as_f32() / dppx * ScaleFactor::new(1.0);
+        let window_size = self.window_size.to_f32() / dppx * ScaleFactor::new(1.0);
         let mut new_visible_rects = HashMap::new();
         if let Some(ref layer) = self.scene.root {
             process_layer(&**layer, &window_size, &mut new_visible_rects)
         }
 
         for (pipeline_id, new_visible_rects) in &new_visible_rects {
             if let Some(pipeline_details) = self.pipeline_details.get(&pipeline_id) {
                 if let Some(ref pipeline) = pipeline_details.pipeline {
@@ -1830,17 +1830,17 @@ impl<Window: WindowMethods> IOCompositor
     }
 
     fn update_zoom_transform(&mut self) {
         let scale = self.device_pixels_per_page_px();
         self.scene.scale = ScaleFactor::new(scale.get());
 
         // We need to set the size of the root layer again, since the window size
         // has changed in unscaled layer pixels.
-        self.scene.set_root_layer_size(self.window_size.as_f32());
+        self.scene.set_root_layer_size(self.window_size.to_f32());
     }
 
     fn on_zoom_reset_window_event(&mut self) {
         self.page_zoom = ScaleFactor::new(1.0);
         self.update_zoom_transform();
         self.send_window_size(WindowSizeType::Resize);
     }
 
@@ -2231,18 +2231,18 @@ impl<Window: WindowMethods> IOCompositor
             _ => initialize_png(width, height)
         };
 
         profile(ProfilerCategory::Compositing, None, self.time_profiler_chan.clone(), || {
             debug!("compositor: compositing");
             self.dump_layer_tree();
             // Adjust the layer dimensions as necessary to correspond to the size of the window.
             self.scene.viewport = match self.viewport {
-                Some((point, size)) => TypedRect::new(point.as_f32(), size.as_f32()),
-                None => TypedRect::new(TypedPoint2D::zero(), self.window_size.as_f32()),
+                Some((point, size)) => TypedRect::new(point.to_f32(), size.to_f32()),
+                None => TypedRect::new(TypedPoint2D::zero(), self.window_size.to_f32()),
             };
 
             // Paint the scene.
             if let Some(ref mut webrender) = self.webrender {
                 assert!(self.context.is_none());
                 webrender.render(self.window_size.to_untyped());
             } else if let Some(ref layer) = self.scene.root {
                 match self.context {
--- a/servo/components/constellation/Cargo.toml
+++ b/servo/components/constellation/Cargo.toml
@@ -10,26 +10,26 @@ name = "constellation"
 path = "lib.rs"
 
 [dependencies]
 backtrace = "0.2.1"
 canvas = {path = "../canvas"}
 canvas_traits = {path = "../canvas_traits"}
 compositing = {path = "../compositing"}
 devtools_traits = {path = "../devtools_traits"}
-euclid = "0.9"
+euclid = "0.10.1"
 gfx = {path = "../gfx"}
 gfx_traits = {path = "../gfx_traits"}
 ipc-channel = "0.5"
 layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
 layout_traits = {path = "../layout_traits"}
 log = "0.3.5"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
-offscreen_gl_context = "0.3"
+offscreen_gl_context = "0.4"
 plugins = {path = "../plugins"}
 profile_traits = {path = "../profile_traits"}
 rand = "0.3"
 script_traits = {path = "../script_traits"}
 serde = "0.8"
 serde_macros = "0.8"
 style_traits = {path = "../style_traits"}
 url = {version = "1.2", features = ["heap_size"]}
--- a/servo/components/constellation/constellation.rs
+++ b/servo/components/constellation/constellation.rs
@@ -496,19 +496,19 @@ impl<Message, LTF, STF> Constellation<Me
                 pending_frames: vec!(),
                 next_pipeline_namespace_id: PipelineNamespaceId(0),
                 root_frame_id: None,
                 next_frame_id: FrameId(0),
                 focus_pipeline_id: None,
                 time_profiler_chan: state.time_profiler_chan,
                 mem_profiler_chan: state.mem_profiler_chan,
                 window_size: WindowSizeData {
-                    visible_viewport: opts::get().initial_window_size.as_f32() *
+                    visible_viewport: opts::get().initial_window_size.to_f32() *
                                           ScaleFactor::new(1.0),
-                    initial_viewport: opts::get().initial_window_size.as_f32() *
+                    initial_viewport: opts::get().initial_window_size.to_f32() *
                         ScaleFactor::new(1.0),
                     device_pixel_ratio:
                         ScaleFactor::new(opts::get().device_pixels_per_px.unwrap_or(1.0)),
                 },
                 phantom: PhantomData,
                 webdriver: WebDriverData::new(),
                 scheduler_chan: TimerScheduler::start(),
                 child_processes: Vec::new(),
--- a/servo/components/gfx/Cargo.toml
+++ b/servo/components/gfx/Cargo.toml
@@ -9,17 +9,17 @@ publish = false
 [lib]
 name = "gfx"
 path = "lib.rs"
 
 [dependencies]
 app_units = "0.3"
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
 bitflags = "0.7"
-euclid = "0.9"
+euclid = "0.10.1"
 fnv = "1.0"
 gfx_traits = {path = "../gfx_traits"}
 harfbuzz-sys = "0.1"
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 ipc-channel = "0.5"
 layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
 lazy_static = "0.2"
--- a/servo/components/gfx/display_list/mod.rs
+++ b/servo/components/gfx/display_list/mod.rs
@@ -16,17 +16,17 @@
 
 use app_units::Au;
 use azure::azure::AzFloat;
 use azure::azure_hl::Color;
 use euclid::approxeq::ApproxEq;
 use euclid::num::{One, Zero};
 use euclid::rect::TypedRect;
 use euclid::side_offsets::SideOffsets2D;
-use euclid::{Matrix2D, Matrix4D, Point2D, Rect, Size2D};
+use euclid::{Matrix4D, Point2D, Rect, Size2D};
 use fnv::FnvHasher;
 use gfx_traits::print_tree::PrintTree;
 use gfx_traits::{LayerId, ScrollPolicy, StackingContextId};
 use ipc_channel::ipc::IpcSharedMemory;
 use msg::constellation_msg::PipelineId;
 use net_traits::image::base::{Image, PixelFormat};
 use paint_context::PaintContext;
 use range::Range;
@@ -334,20 +334,17 @@ impl DisplayList {
     }
 
     /// Draws a single DisplayItem into the given PaintContext.
     pub fn draw_item_at_index_into_context(&self,
                                            paint_context: &mut PaintContext,
                                            transform: &Matrix4D<f32>,
                                            index: usize) {
         let old_transform = paint_context.draw_target.get_transform();
-        paint_context.draw_target.set_transform(
-            &Matrix2D::new(transform.m11, transform.m12,
-                           transform.m21, transform.m22,
-                           transform.m41, transform.m42));
+        paint_context.draw_target.set_transform(&transform.to_2d());
 
         let item = &self.list[index];
         item.draw_into_context(paint_context);
 
         paint_context.draw_target.set_transform(&old_transform);
     }
 
     pub fn find_stacking_context<'a>(&'a self,
@@ -454,60 +451,71 @@ impl DisplayList {
             // compositor.
             Some(..) => (*transform, *subpixel_offset),
             None => {
                 let origin = stacking_context.bounds.origin + *subpixel_offset;
                 let pixel_snapped_origin =
                     Point2D::new(origin.x.to_nearest_pixel(pixels_per_px.get()),
                                  origin.y.to_nearest_pixel(pixels_per_px.get()));
 
-                let transform = transform.translate(pixel_snapped_origin.x as AzFloat,
-                                                    pixel_snapped_origin.y as AzFloat,
-                                                    0.0).mul(&stacking_context.transform);
+                let transform = transform
+                    .pre_translated(pixel_snapped_origin.x as AzFloat,
+                                    pixel_snapped_origin.y as AzFloat,
+                                    0.0)
+                    .pre_mul(&stacking_context.transform);
 
                 if transform.is_identity_or_simple_translation() {
                     let pixel_snapped_origin = Point2D::new(Au::from_f32_px(pixel_snapped_origin.x),
                                                             Au::from_f32_px(pixel_snapped_origin.y));
                     (transform, origin - pixel_snapped_origin)
                 } else {
                     // In the case of a more complicated transformation, don't attempt to
                     // preserve subpixel offsets. This causes problems with reference tests
                     // that do scaling and rotation and it's unclear if we even want to be doing
                     // this.
                     (transform, Point2D::zero())
                 }
             }
         };
 
+        let transformed_transform =
+            match transformed_tile_rect(paint_context.screen_rect, &transform) {
+                Some(transformed) => transformed,
+                None => {
+                    // https://drafts.csswg.org/css-transforms/#transform-function-lists
+                    // If a transform function causes the current transformation matrix (CTM)
+                    // of an object to be non-invertible, the object and its content do not
+                    // get displayed.
+                    return;
+                },
+            };
+
         {
             let mut paint_subcontext = PaintContext {
                 draw_target: draw_target.clone(),
                 font_context: &mut *paint_context.font_context,
                 page_rect: paint_context.page_rect,
                 screen_rect: paint_context.screen_rect,
                 clip_rect: Some(stacking_context.overflow),
                 transient_clip: None,
                 layer_kind: paint_context.layer_kind,
                 subpixel_offset: subpixel_offset,
             };
 
             // Set up our clip rect and transform.
-            paint_subcontext.draw_target.set_transform(
-                &Matrix2D::new(transform.m11, transform.m12,
-                               transform.m21, transform.m22,
-                               transform.m41, transform.m42));
+            paint_subcontext.draw_target.set_transform(&transform.to_2d());
             paint_subcontext.push_clip_if_applicable();
 
             self.draw_stacking_context_contents(
                 stacking_context,
                 traversal,
                 &mut paint_subcontext,
                 &transform,
                 &subpixel_offset,
-                Some(transformed_tile_rect(paint_context.screen_rect, &transform)));
+                Some(transformed_transform));
 
             paint_subcontext.remove_transient_clip_if_applicable();
             paint_subcontext.pop_clip_if_applicable();
         }
 
         draw_target.set_transform(&old_transform);
         paint_context.draw_temporary_draw_target_if_necessary(
             &draw_target, &stacking_context.filters, stacking_context.blend_mode);
@@ -530,27 +538,30 @@ impl DisplayList {
                                             translated_point,
                                             client_point,
                                             scroll_offsets,
                                             &mut result);
         result
     }
 }
 
-fn transformed_tile_rect(tile_rect: TypedRect<usize, ScreenPx>, transform: &Matrix4D<f32>) -> Rect<Au> {
+fn transformed_tile_rect(tile_rect: TypedRect<usize, ScreenPx>,
+                         transform: &Matrix4D<f32>)
+                         -> Option<Rect<Au>> {
     // Invert the current transform, then use this to back transform
     // the tile rect (placed at the origin) into the space of this
     // stacking context.
-    let inverse_transform = transform.invert();
-    let inverse_transform_2d = Matrix2D::new(inverse_transform.m11, inverse_transform.m12,
-                                             inverse_transform.m21, inverse_transform.m22,
-                                             inverse_transform.m41, inverse_transform.m42);
-    let tile_size = Size2D::new(tile_rect.as_f32().size.width, tile_rect.as_f32().size.height);
+    let inverse_transform = match transform.inverse() {
+        Some(inverse) => inverse,
+        None => return None,
+    };
+    let inverse_transform_2d = inverse_transform.to_2d();
+    let tile_size = Size2D::new(tile_rect.to_f32().size.width, tile_rect.to_f32().size.height);
     let tile_rect = Rect::new(Point2D::zero(), tile_size).to_untyped();
-    geometry::f32_rect_to_au_rect(inverse_transform_2d.transform_rect(&tile_rect))
+    Some(geometry::f32_rect_to_au_rect(inverse_transform_2d.transform_rect(&tile_rect)))
 }
 
 
 /// Display list sections that make up a stacking context. Each section  here refers
 /// to the steps in CSS 2.1 Appendix E.
 ///
 #[derive(Clone, Copy, Debug, Deserialize, Eq, HeapSizeOf, Ord, PartialEq, PartialOrd, RustcEncodable, Serialize)]
 pub enum DisplayListSection {
@@ -694,21 +705,19 @@ impl StackingContext {
         // Transform this stacking context to get it into the same space as
         // the parent stacking context.
         //
         // TODO: Take into account 3d transforms, even though it's a fairly
         // uncommon case.
         let origin_x = self.bounds.origin.x.to_f32_px();
         let origin_y = self.bounds.origin.y.to_f32_px();
 
-        let transform = Matrix4D::identity().translate(origin_x, origin_y, 0.0)
-                                            .mul(&self.transform);
-        let transform_2d = Matrix2D::new(transform.m11, transform.m12,
-                                         transform.m21, transform.m22,
-                                         transform.m41, transform.m42);
+        let transform = Matrix4D::identity().pre_translated(origin_x, origin_y, 0.0)
+                                            .pre_mul(&self.transform);
+        let transform_2d = transform.to_2d();
 
         let overflow = geometry::au_rect_to_f32_rect(self.overflow);
         let overflow = transform_2d.transform_rect(&overflow);
         geometry::f32_rect_to_au_rect(overflow)
     }
 
     pub fn hit_test<'a>(&self,
                         traversal: &mut DisplayListTraversal<'a>,
@@ -721,17 +730,17 @@ impl StackingContext {
             None => false,
         };
 
         let effective_point = if is_fixed { client_point } else { translated_point };
 
         // Convert the point into stacking context local transform space.
         let mut point = if self.context_type == StackingContextType::Real {
             let point = *effective_point - self.bounds.origin;
-            let inv_transform = self.transform.invert();
+            let inv_transform = self.transform.inverse().unwrap();
             let frac_point = inv_transform.transform_point(&Point2D::new(point.x.to_f32_px(),
                                                                          point.y.to_f32_px()));
             Point2D::new(Au::from_f32_px(frac_point.x), Au::from_f32_px(frac_point.y))
         } else {
             *effective_point
         };
 
         // Adjust the translated point to account for the scroll offset if
--- a/servo/components/gfx/paint_context.rs
+++ b/servo/components/gfx/paint_context.rs
@@ -122,17 +122,17 @@ struct CornerOrigin {
 }
 
 impl<'a> PaintContext<'a> {
     pub fn to_nearest_azure_rect(&self, rect: &Rect<Au>) -> Rect<AzFloat> {
         rect.translate(&self.subpixel_offset).to_nearest_azure_rect(self.screen_pixels_per_px())
     }
 
     pub fn screen_pixels_per_px(&self) -> ScaleFactor<f32, PagePx, ScreenPx> {
-        ScaleFactor::new(self.screen_rect.as_f32().size.width / self.page_rect.size.width)
+        ScaleFactor::new(self.screen_rect.to_f32().size.width / self.page_rect.size.width)
     }
 
     pub fn draw_target(&self) -> &DrawTarget {
         &self.draw_target
     }
 
     pub fn draw_solid_color(&self, bounds: &Rect<Au>, color: Color) {
         self.draw_target.make_current();
@@ -237,17 +237,17 @@ impl<'a> PaintContext<'a> {
                                          draw_options);
             return
         }
 
         // Slightly slower path: No need to stretch.
         //
         // Annoyingly, surface patterns in Azure/Skia are relative to the top left of the *canvas*,
         // not the rectangle we're drawing to. So we need to translate it explicitly.
-        let matrix = Matrix2D::identity().translate(dest_rect.origin.x, dest_rect.origin.y);
+        let matrix = Matrix2D::identity().pre_translated(dest_rect.origin.x, dest_rect.origin.y);
         let stretch_size = stretch_size.to_nearest_azure_size(scale);
         if source_rect.size == stretch_size {
             let pattern = SurfacePattern::new(azure_surface.azure_source_surface,
                                               true,
                                               true,
                                               &matrix);
             draw_target_ref.fill_rect(&dest_rect,
                                       PatternRef::Surface(&pattern),
@@ -1353,27 +1353,25 @@ impl<'a> PaintContext<'a> {
         //
         // For sideways text, it’s easier to do the rotation such that its center (the baseline’s
         // start point) is at (0, 0) coordinates.
         let baseline_origin = match text.orientation {
             Upright => origin,
             SidewaysLeft => {
                 let x = origin.x.to_f32_px();
                 let y = origin.y.to_f32_px();
-                self.draw_target.set_transform(&draw_target_transform.mul(&Matrix2D::new(0., -1.,
-                                                                                         1., 0.,
-                                                                                         x, y)));
+                self.draw_target.set_transform(
+                    &draw_target_transform.pre_mul(&Matrix2D::row_major(0., -1., 1., 0., x, y)));
                 Point2D::zero()
             }
             SidewaysRight => {
                 let x = origin.x.to_f32_px();
                 let y = origin.y.to_f32_px();
-                self.draw_target.set_transform(&draw_target_transform.mul(&Matrix2D::new(0., 1.,
-                                                                                         -1., 0.,
-                                                                                         x, y)));
+                self.draw_target.set_transform(
+                    &draw_target_transform.pre_mul(&Matrix2D::row_major(0., 1., -1., 0., x, y)));
                 Point2D::zero()
             }
         };
 
         // Draw the text.
         let temporary_draw_target =
             self.create_draw_target_for_blur_if_necessary(&text.base.bounds, text.blur_radius);
         {
@@ -1445,19 +1443,20 @@ impl<'a> PaintContext<'a> {
                                size.height + (side_inflation.to_nearest_px() * 2) as i32);
 
             // Calculate the transform matrix.
             let old_transform = self.draw_target.get_transform();
             let inflated_size = Rect::new(Point2D::new(0.0, 0.0),
                                           Size2D::new(size.width as AzFloat,
                                                       size.height as AzFloat));
             let temporary_draw_target_bounds = old_transform.transform_rect(&inflated_size);
-            matrix = Matrix2D::identity().translate(
-                -temporary_draw_target_bounds.origin.x as AzFloat,
-                -temporary_draw_target_bounds.origin.y as AzFloat).mul(&old_transform);
+            matrix = Matrix2D::identity()
+                .pre_translated(-temporary_draw_target_bounds.origin.x as AzFloat,
+                                -temporary_draw_target_bounds.origin.y as AzFloat)
+                .pre_mul(&old_transform);
         }
 
         let temporary_draw_target =
             self.draw_target.create_similar_draw_target(&size, self.draw_target.get_format());
 
         temporary_draw_target.set_transform(&matrix);
         temporary_draw_target
     }
@@ -1973,20 +1972,20 @@ impl TemporaryDrawTarget {
         let temporary_draw_target_bounds =
             draw_target_transform.transform_rect(&bounds.to_azure_rect());
         let temporary_draw_target_size =
             Size2D::new(temporary_draw_target_bounds.size.width.ceil() as i32,
                         temporary_draw_target_bounds.size.height.ceil() as i32);
         let temporary_draw_target =
             main_draw_target.create_similar_draw_target(&temporary_draw_target_size,
                                                         main_draw_target.get_format());
-        let matrix =
-            Matrix2D::identity().translate(-temporary_draw_target_bounds.origin.x as AzFloat,
-                                           -temporary_draw_target_bounds.origin.y as AzFloat)
-                                .mul(&draw_target_transform);
+        let matrix = Matrix2D::identity()
+            .pre_translated(-temporary_draw_target_bounds.origin.x as AzFloat,
+                            -temporary_draw_target_bounds.origin.y as AzFloat)
+            .pre_mul(&draw_target_transform);
         temporary_draw_target.set_transform(&matrix);
         TemporaryDrawTarget {
             draw_target: temporary_draw_target,
             offset: temporary_draw_target_bounds.origin,
         }
     }
 
     /// Composites this temporary draw target onto the main surface, with the given Azure filter.
--- a/servo/components/gfx/paint_thread.rs
+++ b/servo/components/gfx/paint_thread.rs
@@ -72,18 +72,18 @@ impl PaintLayer {
         let bounds = Rect::new(stacking_context.bounds.origin + stacking_context.overflow.origin,
                                stacking_context.overflow.size);
         let layer_boundaries = Rect::new(
             Point2D::new((parent_origin.x + bounds.min_x()).to_nearest_px() as f32,
                          (parent_origin.y + bounds.min_y()).to_nearest_px() as f32),
             Size2D::new(bounds.size.width.to_nearest_px() as f32,
                         bounds.size.height.to_nearest_px() as f32));
 
-        let transform = transform.mul(&stacking_context.transform);
-        let perspective = perspective.mul(&stacking_context.perspective);
+        let transform = transform.pre_mul(&stacking_context.transform);
+        let perspective = perspective.pre_mul(&stacking_context.perspective);
         let establishes_3d_context = stacking_context.establishes_3d_context;
         let scrolls_overflow_area = stacking_context.scrolls_overflow_area;
 
         PaintLayer {
             layer_properties: LayerProperties {
                 id: layer_info.layer_id,
                 parent_id: parent_id,
                 rect: layer_boundaries,
@@ -239,18 +239,18 @@ impl LayerCreator {
                                                 transform,
                                                 perspective);
             return;
         }
 
         self.process_stacking_context_items(stacking_context,
                                             traversal,
                                             &(stacking_context.bounds.origin + *parent_origin),
-                                            &transform.mul(&stacking_context.transform),
-                                            &perspective.mul(&stacking_context.perspective));
+                                            &transform.pre_mul(&stacking_context.transform),
+                                            &perspective.pre_mul(&stacking_context.perspective));
     }
 
     fn process_stacking_context_items<'a>(&mut self,
                                           stacking_context: &StackingContext,
                                           traversal: &mut DisplayListTraversal<'a>,
                                           parent_origin: &Point2D<Au>,
                                           transform: &Matrix4D<f32>,
                                           perspective: &Matrix4D<f32>) {
@@ -689,21 +689,21 @@ impl WorkerThread {
                 clip_rect: None,
                 transient_clip: None,
                 layer_kind: layer_kind,
                 subpixel_offset: Point2D::zero(),
             };
 
             // Apply the translation to paint the tile we want.
             let matrix = Matrix4D::identity();
-            let matrix = matrix.scale(scale as AzFloat, scale as AzFloat, 1.0);
+            let matrix = matrix.pre_scaled(scale as AzFloat, scale as AzFloat, 1.0);
             let tile_bounds = tile.page_rect.translate(&paint_layer.display_list_origin);
-            let matrix = matrix.translate(-tile_bounds.origin.x as AzFloat,
-                                          -tile_bounds.origin.y as AzFloat,
-                                          0.0);
+            let matrix = matrix.pre_translated(-tile_bounds.origin.x as AzFloat,
+                                                -tile_bounds.origin.y as AzFloat,
+                                                0.0);
 
             // Clear the buffer.
             paint_context.clear();
 
             // Draw the display list.
             time::profile(time::ProfilerCategory::PaintingPerTile,
                           None,
                           self.time_profiler_sender.clone(), || {
--- a/servo/components/gfx_traits/Cargo.toml
+++ b/servo/components/gfx_traits/Cargo.toml
@@ -6,17 +6,17 @@ license = "MPL-2.0"
 publish = false
 
 [lib]
 name = "gfx_traits"
 path = "lib.rs"
 
 [dependencies]
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
-euclid = "0.9"
+euclid = "0.10.1"
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
 msg = {path = "../msg"}
 plugins = {path = "../plugins"}
 profile_traits = {path = "../profile_traits"}
 range = {path = "../range"}
 rustc-serialize = "0.3"
--- a/servo/components/layout/Cargo.toml
+++ b/servo/components/layout/Cargo.toml
@@ -10,17 +10,17 @@ name = "layout"
 path = "lib.rs"
 
 [dependencies]
 app_units = "0.3"
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
 bitflags = "0.7"
 canvas_traits = {path = "../canvas_traits"}
 cssparser = {version = "0.5.7", features = ["heap_size", "serde-serialization"]}
-euclid = "0.9"
+euclid = "0.10.1"
 fnv = "1.0"
 gfx = {path = "../gfx"}
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 ipc-channel = "0.5"
 libc = "0.2"
 log = "0.3.5"
--- a/servo/components/layout/display_list_builder.rs
+++ b/servo/components/layout/display_list_builder.rs
@@ -10,17 +10,17 @@
 
 #![deny(unsafe_code)]
 
 use app_units::{Au, AU_PER_PX};
 use azure::azure_hl::Color;
 use block::{BlockFlow, BlockStackingContextType};
 use canvas_traits::{CanvasMsg, CanvasData, FromLayoutMsg};
 use context::LayoutContext;
-use euclid::{Matrix4D, Point2D, Point3D, Rect, SideOffsets2D, Size2D};
+use euclid::{Matrix4D, Point2D, Point3D, Radians, Rect, SideOffsets2D, Size2D};
 use flex::FlexFlow;
 use flow::{BaseFlow, Flow, IS_ABSOLUTELY_POSITIONED};
 use flow_ref;
 use fragment::SpecificFragmentInfo;
 use fragment::{CoordinateSystem, Fragment, HAS_LAYER, ImageFragmentInfo, ScannedTextFragmentInfo};
 use gfx::display_list::{BLUR_INFLATION_FACTOR, BaseDisplayItem, BorderDisplayItem};
 use gfx::display_list::{BorderRadii, BoxShadowClipMode, BoxShadowDisplayItem, ClippingRegion};
 use gfx::display_list::{DisplayItem, DisplayItemMetadata, DisplayListSection, GradientDisplayItem};
@@ -1362,17 +1362,17 @@ impl FragmentDisplayListBuilding for Fra
             let post_transform = Matrix4D::create_translation(-transform_origin.x,
                                                               -transform_origin.y,
                                                               -transform_origin.z);
 
             for operation in operations {
                 let matrix = match *operation {
                     transform::ComputedOperation::Rotate(ax, ay, az, theta) => {
                         let theta = 2.0f32 * f32::consts::PI - theta.radians();
-                        Matrix4D::create_rotation(ax, ay, az, theta)
+                        Matrix4D::create_rotation(ax, ay, az, Radians::new(theta))
                     }
                     transform::ComputedOperation::Perspective(d) => {
                         create_perspective_matrix(d)
                     }
                     transform::ComputedOperation::Scale(sx, sy, sz) => {
                         Matrix4D::create_scale(sx, sy, sz)
                     }
                     transform::ComputedOperation::Translate(tx, ty, tz) => {
@@ -1380,24 +1380,25 @@ impl FragmentDisplayListBuilding for Fra
                         let ty = model::specified(ty, border_box.size.height).to_f32_px();
                         let tz = tz.to_f32_px();
                         Matrix4D::create_translation(tx, ty, tz)
                     }
                     transform::ComputedOperation::Matrix(m) => {
                         m.to_gfx_matrix()
                     }
                     transform::ComputedOperation::Skew(theta_x, theta_y) => {
-                        Matrix4D::create_skew(theta_x.radians(), theta_y.radians())
+                        Matrix4D::create_skew(Radians::new(theta_x.radians()),
+                                              Radians::new(theta_y.radians()))
                     }
                 };
 
-                transform = transform.mul(&matrix);
+                transform = transform.pre_mul(&matrix);
             }
 
-            transform = pre_transform.mul(&transform).mul(&post_transform);
+            transform = pre_transform.pre_mul(&transform).pre_mul(&post_transform);
         }
 
         let perspective = match self.style().get_effects().perspective {
             LengthOrNone::Length(d) => {
                 let perspective_origin = self.style().get_effects().perspective_origin;
                 let perspective_origin =
                     Point2D::new(model::specified(perspective_origin.horizontal,
                                                   border_box.size.width).to_f32_px(),
@@ -1408,17 +1409,17 @@ impl FragmentDisplayListBuilding for Fra
                                                                  perspective_origin.y,
                                                                  0.0);
                 let post_transform = Matrix4D::create_translation(-perspective_origin.x,
                                                                   -perspective_origin.y,
                                                                   0.0);
 
                 let perspective_matrix = create_perspective_matrix(d);
 
-                pre_transform.mul(&perspective_matrix).mul(&post_transform)
+                pre_transform.pre_mul(&perspective_matrix).pre_mul(&post_transform)
             }
             LengthOrNone::None => {
                 Matrix4D::identity()
             }
         };
 
         // Create the filter pipeline.
         let effects = self.style().get_effects();
--- a/servo/components/layout/model.rs
+++ b/servo/components/layout/model.rs
@@ -488,17 +488,17 @@ pub fn specified_margin_from_style(style
 }
 
 pub trait ToGfxMatrix {
     fn to_gfx_matrix(&self) -> Matrix4D<f32>;
 }
 
 impl ToGfxMatrix for ComputedMatrix {
     fn to_gfx_matrix(&self) -> Matrix4D<f32> {
-        Matrix4D::new(
+        Matrix4D::row_major(
             self.m11 as f32, self.m12 as f32, self.m13 as f32, self.m14 as f32,
             self.m21 as f32, self.m22 as f32, self.m23 as f32, self.m24 as f32,
             self.m31 as f32, self.m32 as f32, self.m33 as f32, self.m34 as f32,
             self.m41 as f32, self.m42 as f32, self.m43 as f32, self.m44 as f32)
     }
 }
 
 // Used to specify the logical direction.
--- a/servo/components/layout_thread/Cargo.toml
+++ b/servo/components/layout_thread/Cargo.toml
@@ -7,17 +7,17 @@ publish = false
 
 [lib]
 name = "layout_thread"
 path = "lib.rs"
 
 [dependencies]
 app_units = "0.3"
 azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
-euclid = "0.9"
+euclid = "0.10.1"
 fnv = "1.0"
 gfx = {path = "../gfx"}
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 ipc-channel = "0.5"
 layout = {path = "../layout"}
 layout_traits = {path = "../layout_traits"}
--- a/servo/components/layout_thread/lib.rs
+++ b/servo/components/layout_thread/lib.rs
@@ -387,17 +387,17 @@ impl LayoutThread {
            font_cache_thread: FontCacheThread,
            time_profiler_chan: time::ProfilerChan,
            mem_profiler_chan: mem::ProfilerChan,
            webrender_api_sender: Option<webrender_traits::RenderApiSender>,
            layout_threads: usize)
            -> LayoutThread {
         let device = Device::new(
             MediaType::Screen,
-            opts::get().initial_window_size.as_f32() * ScaleFactor::new(1.0));
+            opts::get().initial_window_size.to_f32() * ScaleFactor::new(1.0));
         let parallel_traversal = if layout_threads != 1 {
             Some(WorkQueue::new("LayoutWorker", thread_state::LAYOUT, layout_threads))
         } else {
             None
         };
 
         // Create the channel on which new animations can be sent.
         let (new_animations_sender, new_animations_receiver) = channel();
--- a/servo/components/script/Cargo.toml
+++ b/servo/components/script/Cargo.toml
@@ -25,17 +25,17 @@ angle = {git = "https://github.com/servo
 app_units = "0.3"
 bitflags = "0.7"
 canvas_traits = {path = "../canvas_traits"}
 caseless = "0.1.0"
 cookie = {version = "0.2.5", features = ["serialize-rustc"]}
 cssparser = {version = "0.5.7", features = ["heap_size", "serde-serialization"]}
 devtools_traits = {path = "../devtools_traits"}
 encoding = "0.2"
-euclid = "0.9"
+euclid = "0.10.1"
 fnv = "1.0"
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.6"
 heapsize_plugin = "0.1.2"
 html5ever = {version = "0.5.1", features = ["heap_size", "unstable"]}
 hyper = "0.9.9"
 hyper_serde = "0.1.4"
 image = "0.10"
@@ -43,17 +43,17 @@ ipc-channel = "0.5"
 js = {git = "https://github.com/servo/rust-mozjs"}
 libc = "0.2"
 log = "0.3.5"
 mime = "0.2.1"
 mime_guess = "1.8.0"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
 num-traits = "0.1.32"
-offscreen_gl_context = "0.3"
+offscreen_gl_context = "0.4"
 open = "1.1.1"
 phf = "0.7.16"
 phf_macros = "0.7.16"
 plugins = {path = "../plugins"}
 profile_traits = {path = "../profile_traits"}
 rand = "0.3"
 range = {path = "../range"}
 ref_filter_map = "1.0"
--- a/servo/components/script/dom/canvasrenderingcontext2d.rs
+++ b/servo/components/script/dom/canvasrenderingcontext2d.rs
@@ -568,75 +568,68 @@ impl CanvasRenderingContext2DMethods for
 
     // https://html.spec.whatwg.org/multipage/#dom-context-2d-scale
     fn Scale(&self, x: f64, y: f64) {
         if !(x.is_finite() && y.is_finite()) {
             return;
         }
 
         let transform = self.state.borrow().transform;
-        self.state.borrow_mut().transform = transform.scale(x as f32, y as f32);
+        self.state.borrow_mut().transform = transform.pre_scaled(x as f32, y as f32);
         self.update_transform()
     }
 
     // https://html.spec.whatwg.org/multipage/#dom-context-2d-rotate
     fn Rotate(&self, angle: f64) {
         if angle == 0.0 || !angle.is_finite() {
             return;
         }
 
         let (sin, cos) = (angle.sin(), angle.cos());
         let transform = self.state.borrow().transform;
-        self.state.borrow_mut().transform = transform.mul(&Matrix2D::new(cos as f32, sin as f32,
-                                                                         -sin as f32, cos as f32,
-                                                                         0.0, 0.0));
+        self.state.borrow_mut().transform = transform.pre_mul(
+            &Matrix2D::row_major(cos as f32, sin as f32,
+                                 -sin as f32, cos as f32,
+                                 0.0, 0.0));
         self.update_transform()
     }
 
     // https://html.spec.whatwg.org/multipage/#dom-context-2d-translate
     fn Translate(&self, x: f64, y: f64) {
         if !(x.is_finite() && y.is_finite()) {
             return;
         }
 
         let transform = self.state.borrow().transform;
-        self.state.borrow_mut().transform = transform.translate(x as f32, y as f32);
+        self.state.borrow_mut().transform = transform.pre_translated(x as f32, y as f32);
         self.update_transform()
     }
 
     // https://html.spec.whatwg.org/multipage/#dom-context-2d-transform
     fn Transform(&self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64) {
         if !(a.is_finite() && b.is_finite() && c.is_finite() &&
              d.is_finite() && e.is_finite() && f.is_finite()) {
             return;
         }
 
         let transform = self.state.borrow().transform;
-        self.state.borrow_mut().transform = transform.mul(&Matrix2D::new(a as f32,
-                                                                         b as f32,
-                                                                         c as f32,
-                                                                         d as f32,
-                                                                         e as f32,
-                                                                         f as f32));
+        self.state.borrow_mut().transform = transform.pre_mul(
+            &Matrix2D::row_major(a as f32, b as f32, c as f32, d as f32, e as f32, f as f32));
         self.update_transform()
     }
 
     // https://html.spec.whatwg.org/multipage/#dom-context-2d-settransform
     fn SetTransform(&self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64) {
         if !(a.is_finite() && b.is_finite() && c.is_finite() &&
              d.is_finite() && e.is_finite() && f.is_finite()) {
             return;
         }
 
-        self.state.borrow_mut().transform = Matrix2D::new(a as f32,
-                                                          b as f32,
-                                                          c as f32,
-                                                          d as f32,
-                                                          e as f32,
-                                                          f as f32);
+        self.state.borrow_mut().transform =
+            Matrix2D::row_major(a as f32, b as f32, c as f32, d as f32, e as f32, f as f32);
         self.update_transform()
     }
 
     // https://html.spec.whatwg.org/multipage/#dom-context-2d-resettransform
     fn ResetTransform(&self) {
         self.state.borrow_mut().transform = Matrix2D::identity();
         self.update_transform()
     }
--- a/servo/components/script_layout_interface/Cargo.toml
+++ b/servo/components/script_layout_interface/Cargo.toml
@@ -9,17 +9,17 @@ publish = false
 name = "script_layout_interface"
 path = "lib.rs"
 
 [dependencies]
 app_units = "0.3"
 bitflags = "0.7"
 canvas_traits = {path = "../canvas_traits"}
 cssparser = {version = "0.5.7", features = ["heap_size", "serde-serialization"]}
-euclid = "0.9"
+euclid = "0.10.1"
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 ipc-channel = "0.5"
 libc = "0.2"
 log = "0.3.5"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
--- a/servo/components/script_traits/Cargo.toml
+++ b/servo/components/script_traits/Cargo.toml
@@ -9,27 +9,27 @@ publish = false
 name = "script_traits"
 path = "lib.rs"
 
 [dependencies]
 app_units = "0.3"
 canvas_traits = {path = "../canvas_traits"}
 cookie = {version = "0.2.5", features = ["serialize-rustc"]}
 devtools_traits = {path = "../devtools_traits"}
-euclid = "0.9"
+euclid = "0.10.1"
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
 heapsize_plugin = "0.1.2"
 hyper_serde = "0.1.4"
 ipc-channel = "0.5"
 layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
 libc = "0.2"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
-offscreen_gl_context = "0.3"
+offscreen_gl_context = "0.4"
 plugins = {path = "../plugins"}
 profile_traits = {path = "../profile_traits"}
 rustc-serialize = "0.3.4"
 serde = "0.8"
 serde_macros = "0.8"
 style_traits = {path = "../style_traits", features = ["servo"]}
 time = "0.1.12"
 url = {version = "1.2", features = ["heap_size"]}
--- a/servo/components/servo/Cargo.lock
+++ b/servo/components/servo/Cargo.lock
@@ -8,17 +8,17 @@ dependencies = [
  "canvas 0.0.1",
  "canvas_traits 0.0.1",
  "compiletest_helper 0.0.1",
  "compositing 0.0.1",
  "constellation 0.0.1",
  "devtools 0.0.1",
  "devtools_traits 0.0.1",
  "env_logger 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gaol 0.0.1 (git+https://github.com/servo/gaol)",
  "gfx 0.0.1",
  "gfx_tests 0.0.1",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glutin_app 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "layout 0.0.1",
  "layout_tests 0.0.1",
@@ -40,18 +40,18 @@ dependencies = [
  "script_traits 0.0.1",
  "sig 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_tests 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "util_tests 0.0.1",
  "webdriver_server 0.0.1",
- "webrender 0.4.0 (git+https://github.com/servo/webrender)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender 0.5.1 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "aho-corasick"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -98,33 +98,33 @@ dependencies = [
 
 [[package]]
 name = "aster"
 version = "0.24.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "azure"
-version = "0.7.1"
-source = "git+https://github.com/servo/rust-azure#d5ca43ba0e1e0fc33832060728d7ed60520541f8"
+version = "0.8.0"
+source = "git+https://github.com/servo/rust-azure#9fb666b2fc86b23761f9b0f877a3d42f182263a9"
 dependencies = [
  "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-freetype-sys 4.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "servo-skia 0.20130412.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-skia 0.20130412.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "backtrace"
 version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -206,45 +206,45 @@ source = "git+https://github.com/browser
 name = "byteorder"
 version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "canvas"
 version = "0.0.1"
 dependencies = [
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "canvas_traits 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "canvas_traits"
 version = "0.0.1"
 dependencies = [
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "caseless"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -306,69 +306,69 @@ dependencies = [
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "compositing"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "script_traits 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender 0.4.0 (git+https://github.com/servo/webrender)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender 0.5.1 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "constellation"
 version = "0.0.1"
 dependencies = [
  "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas 0.0.1",
  "canvas_traits 0.0.1",
  "compositing 0.0.1",
  "devtools_traits 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gaol 0.0.1 (git+https://github.com/servo/gaol)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "layout_traits 0.0.1",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "script_traits 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "content-blocker"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -659,17 +659,17 @@ version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "euclid"
-version = "0.9.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -753,31 +753,31 @@ name = "getopts"
 version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "gfx"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
  "gfx_traits 0.0.1",
  "harfbuzz-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "ordered-float 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
@@ -792,38 +792,38 @@ dependencies = [
  "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
  "xi-unicode 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "gfx_tests"
 version = "0.0.1"
 dependencies = [
  "gfx 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
 ]
 
 [[package]]
 name = "gfx_traits"
 version = "0.0.1"
 dependencies = [
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "msg 0.0.1",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "range 0.0.1",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -861,20 +861,20 @@ version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "glutin_app"
 version = "0.0.1"
 dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "compositing 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "script_traits 0.0.1",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-glutin 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1038,22 +1038,21 @@ dependencies = [
 
 [[package]]
 name = "inflate"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "io-surface"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "ipc-channel"
 version = "0.5.1"
@@ -1111,45 +1110,45 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "language-tags"
 version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "layers"
-version = "0.4.0"
-source = "git+https://github.com/servo/rust-layers#614d62f48a258cd94f6cf2c6500cd7801e340981"
+version = "0.5.1"
+source = "git+https://github.com/servo/rust-layers#9b90d76cf0bc108ef6b29dab42d2ea36dbd718f8"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "io-surface 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "io-surface 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "servo-skia 0.20130412.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-skia 0.20130412.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "layout"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1167,33 +1166,33 @@ dependencies = [
  "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
  "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "layout_tests"
 version = "0.0.1"
 dependencies = [
  "layout 0.0.1",
 ]
 
 [[package]]
 name = "layout_thread"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "layout 0.0.1",
  "layout_traits 0.0.1",
@@ -1205,32 +1204,32 @@ dependencies = [
  "script 0.0.1",
  "script_layout_interface 0.0.1",
  "script_traits 0.0.1",
  "serde_json 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "layout_traits"
 version = "0.0.1"
 dependencies = [
  "gfx 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "profile_traits 0.0.1",
  "script_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "lazy_static"
 version = "0.1.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1379,17 +1378,17 @@ dependencies = [
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "net"
 version = "0.0.1"
 dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1417,17 +1416,17 @@ dependencies = [
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "threadpool 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)",
  "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "uuid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
  "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "net2"
 version = "0.2.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -1570,22 +1569,22 @@ dependencies = [
 
 [[package]]
 name = "odds"
 version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "offscreen_gl_context"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1894,17 +1893,17 @@ dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "caseless 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "devtools_traits 0.0.1",
  "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "html5ever 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1912,17 +1911,17 @@ dependencies = [
  "js 0.1.3 (git+https://github.com/servo/rust-mozjs)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime_guess 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "open 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf 0.7.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf_macros 0.7.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "range 0.0.1",
  "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1936,30 +1935,30 @@ dependencies = [
  "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "uuid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
  "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "xml5ever 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "script_layout_interface"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
@@ -1987,27 +1986,27 @@ dependencies = [
 [[package]]
 name = "script_traits"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "devtools_traits 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2137,26 +2136,26 @@ dependencies = [
  "wayland-kbd 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "wayland-window 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11-dl 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "servo-skia"
-version = "0.20130412.22"
+version = "0.20130412.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "expat-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "io-surface 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "io-surface 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-fontconfig-sys 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-freetype-sys 4.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-glutin 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -2219,17 +2218,17 @@ dependencies = [
 name = "style"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2251,32 +2250,32 @@ dependencies = [
 ]
 
 [[package]]
 name = "style_tests"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
 ]
 
 [[package]]
 name = "style_traits"
 version = "0.0.1"
 dependencies = [
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -2442,17 +2441,17 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "util"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2555,17 +2554,17 @@ dependencies = [
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webdriver_server"
 version = "0.0.1"
 dependencies = [
  "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "plugins 0.0.1",
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2573,51 +2572,52 @@ dependencies = [
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "uuid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "webdriver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender"
-version = "0.4.0"
-source = "git+https://github.com/servo/webrender#b8b719ad5d69249093f505cec8a7d5dac344b802"
+version = "0.5.1"
+source = "git+https://github.com/servo/webrender#1c907208bcd4ad14f651383417a7031de92de6d4"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "webrender_traits"
-version = "0.4.0"
-source = "git+https://github.com/servo/webrender#b8b719ad5d69249093f505cec8a7d5dac344b802"
+version = "0.5.1"
+source = "git+https://github.com/servo/webrender#1c907208bcd4ad14f651383417a7031de92de6d4"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "websocket"
 version = "0.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
--- a/servo/components/servo/Cargo.toml
+++ b/servo/components/servo/Cargo.toml
@@ -47,17 +47,17 @@ util_tests = {path = "../../tests/unit/u
 browserhtml = {git = "https://github.com/browserhtml/browserhtml", branch = "crate"}
 canvas = {path = "../canvas"}
 canvas_traits = {path = "../canvas_traits"}
 compositing = {path = "../compositing"}
 constellation = {path = "../constellation"}
 devtools = {path = "../devtools"}
 devtools_traits = {path = "../devtools_traits"}
 env_logger = "0.3"
-euclid = "0.9"
+euclid = "0.10.1"
 gfx = {path = "../gfx"}
 gleam = "0.2"
 glutin_app = {path = "../../ports/glutin"}
 ipc-channel = "0.5"
 layout = {path = "../layout"}
 layout_thread = {path = "../layout_thread"}
 libc = "0.2"
 log = "0.3"
--- a/servo/components/servo/lib.rs
+++ b/servo/components/servo/lib.rs
@@ -146,16 +146,17 @@ impl<Window> Browser<Window> where Windo
                 let (webrender, webrender_sender) =
                     webrender::Renderer::new(webrender::RendererOptions {
                         device_pixel_ratio: device_pixel_ratio,
                         resource_path: resource_path,
                         enable_aa: opts.enable_text_antialiasing,
                         enable_msaa: opts.use_msaa,
                         enable_profiler: opts.webrender_stats,
                         debug: opts.webrender_debug,
+                        enable_recording: false,
                     });
                 (Some(webrender), Some(webrender_sender))
             } else {
                 (None, None)
             }
         } else {
             (None, None)
         };
--- a/servo/components/style/Cargo.toml
+++ b/servo/components/style/Cargo.toml
@@ -20,17 +20,17 @@ servo = ["serde", "serde/unstable", "ser
          "url/heap_size", "plugins"]
 
 [dependencies]
 app_units = "0.3"
 bitflags = "0.7"
 cssparser = "0.5.7"
 deque = "0.3.1"
 encoding = "0.2"
-euclid = "0.9"
+euclid = "0.10.1"
 fnv = "1.0"
 gecko_bindings = {path = "../../ports/geckolib/gecko_bindings", optional = true}
 gecko_string_cache = {path = "../../ports/geckolib/string_cache", optional = true}
 heapsize = {version = "0.3.0", optional = true}
 heapsize_plugin = {version = "0.1.2", optional = true}
 lazy_static = "0.2"
 log = "0.3.5"
 matches = "0.1"
--- a/servo/components/style/properties/helpers/animated_properties.mako.rs
+++ b/servo/components/style/properties/helpers/animated_properties.mako.rs
@@ -237,27 +237,27 @@ impl Interpolate for ZIndex {
              ZIndex::Number(ref other)) => {
                 this.interpolate(other, time).map(ZIndex::Number)
             }
             _ => Err(()),
         }
     }
 }
 
-impl<T: Interpolate + Clone> Interpolate for Size2D<T> {
+impl<T: Interpolate + Copy> Interpolate for Size2D<T> {
     #[inline]
     fn interpolate(&self, other: &Self, time: f64) -> Result<Self, ()> {
         let width = try!(self.width.interpolate(&other.width, time));
         let height = try!(self.height.interpolate(&other.height, time));
 
         Ok(Size2D::new(width, height))
     }
 }
 
-impl<T: Interpolate + Clone> Interpolate for Point2D<T> {
+impl<T: Interpolate + Copy> Interpolate for Point2D<T> {
     #[inline]
     fn interpolate(&self, other: &Self, time: f64) -> Result<Self, ()> {
         let x = try!(self.x.interpolate(&other.x, time));
         let y = try!(self.y.interpolate(&other.y, time));
 
         Ok(Point2D::new(x, y))
     }
 }
--- a/servo/components/style_traits/Cargo.toml
+++ b/servo/components/style_traits/Cargo.toml
@@ -10,14 +10,14 @@ name = "style_traits"
 path = "lib.rs"
 
 [features]
 servo = ["heapsize", "heapsize_plugin", "serde", "serde_macros",
          "cssparser/heap_size", "cssparser/serde-serialization"]
 
 [dependencies]
 cssparser = "0.5.7"
-euclid = "0.9"
+euclid = "0.10.1"
 heapsize = {version = "0.3.0", optional = true}
 heapsize_plugin = {version = "0.1.2", optional = true}
 rustc-serialize = "0.3"
 serde = {version = "0.8", optional = true}
 serde_macros = {version = "0.8", optional = true}
--- a/servo/components/util/Cargo.toml
+++ b/servo/components/util/Cargo.toml
@@ -12,17 +12,17 @@ path = "lib.rs"
 [features]
 # servo as opposed to geckolib
 servo = ["serde", "serde_macros", "ipc-channel", "app_units/plugins",
          "euclid/unstable", "url/heap_size", "url/serde", "plugins"]
 
 [dependencies]
 app_units = "0.3"
 bitflags = "0.7"
-euclid = "0.9"
+euclid = "0.10.1"
 getopts = "0.2.11"
 heapsize = "0.3.0"
 ipc-channel = {version = "0.5", optional = true}
 lazy_static = "0.2"
 log = "0.3.5"
 num_cpus = "0.2.2"
 rustc-serialize = "0.3"
 serde = {version = "0.8", optional = true}
--- a/servo/components/webdriver_server/Cargo.toml
+++ b/servo/components/webdriver_server/Cargo.toml
@@ -5,17 +5,17 @@ authors = ["The Servo Project Developers
 license = "MPL-2.0"
 publish = false
 
 [lib]
 name = "webdriver_server"
 path = "lib.rs"
 
 [dependencies]
-euclid = "0.9"
+euclid = "0.10.1"
 hyper = "0.9.9"
 image = "0.10"
 ipc-channel = "0.5"
 log = "0.3.5"
 msg = {path = "../msg"}
 plugins = {path = "../plugins"}
 regex = "0.1.55"
 rustc-serialize = "0.3.4"
--- a/servo/ports/cef/Cargo.lock
+++ b/servo/ports/cef/Cargo.lock
@@ -1,19 +1,19 @@
 [root]
 name = "embedding"
 version = "0.0.1"
 dependencies = [
  "cocoa 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "compositing 0.0.1",
  "devtools 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glutin_app 0.0.1",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "objc 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "script_traits 0.0.1",
  "servo 0.0.1",
@@ -72,33 +72,33 @@ dependencies = [
 
 [[package]]
 name = "aster"
 version = "0.24.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "azure"
-version = "0.7.1"
-source = "git+https://github.com/servo/rust-azure#d5ca43ba0e1e0fc33832060728d7ed60520541f8"
+version = "0.8.0"
+source = "git+https://github.com/servo/rust-azure#9fb666b2fc86b23761f9b0f877a3d42f182263a9"
 dependencies = [
  "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-freetype-sys 4.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "servo-skia 0.20130412.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-skia 0.20130412.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "backtrace"
 version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -180,45 +180,45 @@ source = "git+https://github.com/browser
 name = "byteorder"
 version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "canvas"
 version = "0.0.1"
 dependencies = [
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "canvas_traits 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "canvas_traits"
 version = "0.0.1"
 dependencies = [
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "caseless"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -264,69 +264,69 @@ name = "color_quant"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "compositing"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "script_traits 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender 0.4.0 (git+https://github.com/servo/webrender)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender 0.5.1 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "constellation"
 version = "0.0.1"
 dependencies = [
  "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas 0.0.1",
  "canvas_traits 0.0.1",
  "compositing 0.0.1",
  "devtools_traits 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gaol 0.0.1 (git+https://github.com/servo/gaol)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "layout_traits 0.0.1",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "script_traits 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "content-blocker"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -576,17 +576,17 @@ version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "euclid"
-version = "0.9.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -670,31 +670,31 @@ name = "getopts"
 version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "gfx"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
  "gfx_traits 0.0.1",
  "harfbuzz-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "ordered-float 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
@@ -709,29 +709,29 @@ dependencies = [
  "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
  "xi-unicode 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "gfx_traits"
 version = "0.0.1"
 dependencies = [
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "msg 0.0.1",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "range 0.0.1",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -769,20 +769,20 @@ version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "glutin_app"
 version = "0.0.1"
 dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "compositing 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "script_traits 0.0.1",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-glutin 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -946,22 +946,21 @@ dependencies = [
 
 [[package]]
 name = "inflate"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "io-surface"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "ipc-channel"
 version = "0.5.1"
@@ -1019,45 +1018,45 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "language-tags"
 version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "layers"
-version = "0.4.0"
-source = "git+https://github.com/servo/rust-layers#614d62f48a258cd94f6cf2c6500cd7801e340981"
+version = "0.5.1"
+source = "git+https://github.com/servo/rust-layers#9b90d76cf0bc108ef6b29dab42d2ea36dbd718f8"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "io-surface 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "io-surface 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "servo-skia 0.20130412.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-skia 0.20130412.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "layout"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1075,26 +1074,26 @@ dependencies = [
  "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
  "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "layout_thread"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "azure 0.7.1 (git+https://github.com/servo/rust-azure)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "azure 0.8.0 (git+https://github.com/servo/rust-azure)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "layout 0.0.1",
  "layout_traits 0.0.1",
@@ -1106,32 +1105,32 @@ dependencies = [
  "script 0.0.1",
  "script_layout_interface 0.0.1",
  "script_traits 0.0.1",
  "serde_json 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "layout_traits"
 version = "0.0.1"
 dependencies = [
  "gfx 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "profile_traits 0.0.1",
  "script_traits 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "lazy_static"
 version = "0.1.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1280,17 +1279,17 @@ dependencies = [
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "net"
 version = "0.0.1"
 dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1318,17 +1317,17 @@ dependencies = [
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "threadpool 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)",
  "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "uuid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
  "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "net2"
 version = "0.2.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -1442,22 +1441,22 @@ dependencies = [
 
 [[package]]
 name = "odds"
 version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "offscreen_gl_context"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1746,17 +1745,17 @@ dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "caseless 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "devtools_traits 0.0.1",
  "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "html5ever 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1764,17 +1763,17 @@ dependencies = [
  "js 0.1.3 (git+https://github.com/servo/rust-mozjs)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime_guess 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "open 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf 0.7.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf_macros 0.7.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "range 0.0.1",
  "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1788,30 +1787,30 @@ dependencies = [
  "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "uuid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
  "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "xml5ever 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "script_layout_interface"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
@@ -1829,27 +1828,27 @@ dependencies = [
 [[package]]
 name = "script_traits"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "devtools_traits 0.0.1",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "layers 0.4.0 (git+https://github.com/servo/rust-layers)",
+ "layers 0.5.1 (git+https://github.com/servo/rust-layers)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "profile_traits 0.0.1",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_traits 0.0.1",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1926,17 +1925,17 @@ dependencies = [
  "browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)",
  "canvas 0.0.1",
  "canvas_traits 0.0.1",
  "compositing 0.0.1",
  "constellation 0.0.1",
  "devtools 0.0.1",
  "devtools_traits 0.0.1",
  "env_logger 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gaol 0.0.1 (git+https://github.com/servo/gaol)",
  "gfx 0.0.1",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glutin_app 0.0.1",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "layout 0.0.1",
  "layout_thread 0.0.1",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1949,18 +1948,18 @@ dependencies = [
  "script 0.0.1",
  "script_layout_interface 0.0.1",
  "script_traits 0.0.1",
  "sig 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "webdriver_server 0.0.1",
- "webrender 0.4.0 (git+https://github.com/servo/webrender)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender 0.5.1 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "servo-egl"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2020,26 +2019,26 @@ dependencies = [
  "wayland-kbd 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "wayland-window 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11-dl 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "servo-skia"
-version = "0.20130412.22"
+version = "0.20130412.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "expat-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "io-surface 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "io-surface 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-fontconfig-sys 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-freetype-sys 4.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo-glutin 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -2102,17 +2101,17 @@ dependencies = [
 name = "style"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2133,17 +2132,17 @@ dependencies = [
  "walkdir 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "style_traits"
 version = "0.0.1"
 dependencies = [
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -2309,17 +2308,17 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "util"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "plugins 0.0.1",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2415,17 +2414,17 @@ dependencies = [
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webdriver_server"
 version = "0.0.1"
 dependencies = [
  "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "plugins 0.0.1",
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2433,51 +2432,52 @@ dependencies = [
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "util 0.0.1",
  "uuid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "webdriver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender"
-version = "0.4.0"
-source = "git+https://github.com/servo/webrender#b8b719ad5d69249093f505cec8a7d5dac344b802"
+version = "0.5.1"
+source = "git+https://github.com/servo/webrender#1c907208bcd4ad14f651383417a7031de92de6d4"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
- "webrender_traits 0.4.0 (git+https://github.com/servo/webrender)",
+ "webrender_traits 0.5.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "webrender_traits"
-version = "0.4.0"
-source = "git+https://github.com/servo/webrender#b8b719ad5d69249093f505cec8a7d5dac344b802"
+version = "0.5.1"
+source = "git+https://github.com/servo/webrender#1c907208bcd4ad14f651383417a7031de92de6d4"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "websocket"
 version = "0.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
--- a/servo/ports/cef/Cargo.toml
+++ b/servo/ports/cef/Cargo.toml
@@ -12,17 +12,17 @@ crate-type = ["dylib"]
 opt-level = 3
 # Uncomment to profile on Linux:
 # debug = true
 # lto = false
 
 [dependencies]
 compositing = {path = "../../components/compositing"}
 devtools = {path = "../../components/devtools"}
-euclid = "0.9"
+euclid = "0.10.1"
 gleam = "0.2.8"
 glutin_app = {path = "../glutin"}
 layers = {git = "https://github.com/servo/rust-layers"}
 libc = "0.2"
 log = {version = "0.3.5", features = ["release_max_level_info"]}
 msg = {path = "../../components/msg"}
 net_traits = {path = "../../components/net_traits"}
 plugins = {path = "../../components/plugins"}
--- a/servo/ports/geckolib/Cargo.lock
+++ b/servo/ports/geckolib/Cargo.lock
@@ -1,15 +1,15 @@
 [root]
 name = "geckoservo"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "env_logger 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gecko_bindings 0.0.1",
  "gecko_string_cache 0.2.20",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
@@ -135,17 +135,17 @@ version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "euclid"
-version = "0.9.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -349,17 +349,17 @@ dependencies = [
 name = "style"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gecko_bindings 0.0.1",
  "gecko_string_cache 0.2.20",
  "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -376,17 +376,17 @@ dependencies = [
  "walkdir 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "style_traits"
 version = "0.0.1"
 dependencies = [
  "cssparser 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "thread-id"
 version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -448,17 +448,17 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "util"
 version = "0.0.1"
 dependencies = [
  "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "euclid 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "xdg 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
--- a/servo/ports/geckolib/Cargo.toml
+++ b/servo/ports/geckolib/Cargo.toml
@@ -7,17 +7,17 @@ license = "MPL-2.0"
 [lib]
 name = "geckoservo"
 path = "lib.rs"
 crate-type = ["staticlib"]
 
 [dependencies]
 app_units = "0.3"
 env_logger = "0.3"
-euclid = "0.9"
+euclid = "0.10.1"
 gecko_bindings = {version = "0.0.1", path = "gecko_bindings"}
 gecko_string_cache = {path = "string_cache"}
 lazy_static = "0.2"
 libc = "0.2"
 log = {version = "0.3.5", features = ["release_max_level_info"]}
 num_cpus = "0.2.2"
 selectors = "0.11"
 style = {path = "../../components/style", features = ["gecko"]}
--- a/servo/ports/glutin/Cargo.toml
+++ b/servo/ports/glutin/Cargo.toml
@@ -6,17 +6,17 @@ license = "MPL-2.0"
 
 [lib]
 name = "glutin_app"
 path = "lib.rs"
 
 [dependencies]
 bitflags = "0.7"
 compositing = {path = "../../components/compositing"}
-euclid = "0.9"
+euclid = "0.10.1"
 gleam = "0.2.8"
 layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
 log = "0.3.5"
 msg = {path = "../../components/msg"}
 net_traits = {path = "../../components/net_traits"}
 script_traits = {path = "../../components/script_traits"}
 servo-glutin = "0.6"
 style_traits = {path = "../../components/style_traits"}
--- a/servo/ports/glutin/window.rs
+++ b/servo/ports/glutin/window.rs
@@ -120,18 +120,18 @@ fn window_creation_scale_factor() -> Sca
 }
 
 
 impl Window {
     pub fn new(is_foreground: bool,
                window_size: TypedSize2D<u32, ScreenPx>,
                parent: Option<glutin::WindowID>) -> Rc<Window> {
         let win_size: TypedSize2D<u32, DevicePixel> =
-            (window_size.as_f32() * window_creation_scale_factor())
-            .as_uint().cast().expect("Window size should fit in u32");
+            (window_size.to_f32() * window_creation_scale_factor())
+                .to_uint().cast().expect("Window size should fit in u32");
         let width = win_size.to_untyped().width;
         let height = win_size.to_untyped().height;
 
         // If there's no chrome, start off with the window invisible. It will be set to visible in
         // `load_end()`. This avoids an ugly flash of unstyled content (especially important since
         // unstyled content is white and chrome often has a transparent background). See issue
         // #9996.
         let visible = is_foreground && !opts::get().no_native_titlebar;
@@ -881,26 +881,26 @@ impl WindowMethods for Window {
             (CMD_OR_ALT, None, Key::Left) => {
                 self.event_queue.borrow_mut().push(WindowEvent::Navigation(WindowNavigateMsg::Back));
             }
 
             (NONE, None, Key::PageDown) |
             (NONE, Some(' '), _) => {
                 self.scroll_window(0.0,
                                    -self.framebuffer_size()
-                                        .as_f32()
+                                        .to_f32()
                                         .to_untyped()
                                         .height + 2.0 * LINE_HEIGHT,
                                    TouchEventType::Move);
             }
             (NONE, None, Key::PageUp) |
             (SHIFT, Some(' '), _) => {
                 self.scroll_window(0.0,
                                    self.framebuffer_size()
-                                       .as_f32()
+                                       .to_f32()
                                        .to_untyped()
                                        .height - 2.0 * LINE_HEIGHT,
                                    TouchEventType::Move);
             }
             (NONE, None, Key::Up) => {
                 self.scroll_window(0.0, 3.0 * LINE_HEIGHT, TouchEventType::Move);
             }
             (NONE, None, Key::Down) => {
--- a/servo/tests/unit/style/Cargo.toml
+++ b/servo/tests/unit/style/Cargo.toml
@@ -7,16 +7,16 @@ license = "MPL-2.0"
 [lib]
 name = "style_tests"
 path = "lib.rs"
 doctest = false
 
 [dependencies]
 app_units = "0.3"
 cssparser = {version = "0.5.7", features = ["heap_size"]}
-euclid = "0.9"
+euclid = "0.10.1"
 rustc-serialize = "0.3"
 selectors = {version = "0.11", features = ["heap_size"]}
 string_cache = {version = "0.2.23", features = ["heap_size"]}
 style = {path = "../../../components/style"}
 style_traits = {path = "../../../components/style_traits"}
 url = {version = "1.2", features = ["heap_size"]}
 util = {path = "../../../components/util"}