servo: Merge #16200 - Update WR (various optimizations, gradient improvements) (from glennw:update-wr-clear-opts); r=emilio

Source-Repo: https://github.com/servo/servo
Source-Revision: e45d7e0e2e5d47945d3d821db5767feff64d7634

--HG--
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
extra : subtree_revision : d1a41f20df61036023a26584e0f3fba726a3d506
This commit is contained in:
Glenn Watson 2017-04-02 17:05:01 -05:00
Родитель fcdd5dbd1f
Коммит 5ad8c3136c
5 изменённых файлов: 112 добавлений и 78 удалений

76
servo/Cargo.lock сгенерированный
Просмотреть файл

@ -291,13 +291,13 @@ dependencies = [
"canvas_traits 0.0.1",
"cssparser 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
"offscreen_gl_context 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
"servo_config 0.0.1",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -311,7 +311,7 @@ dependencies = [
"ipc-channel 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -341,7 +341,7 @@ name = "cgl"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -419,7 +419,7 @@ version = "0.0.1"
dependencies = [
"euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx_traits 0.0.1",
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
@ -432,8 +432,8 @@ dependencies = [
"servo_url 0.0.1",
"style_traits 0.0.1",
"time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender 0.26.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -467,7 +467,7 @@ dependencies = [
"servo_remutex 0.0.1",
"servo_url 0.0.1",
"style_traits 0.0.1",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"webvr_traits 0.0.1",
]
@ -696,7 +696,7 @@ dependencies = [
"compositing 0.0.1",
"devtools 0.0.1",
"euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"glutin_app 0.0.1",
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"libservo 0.0.1",
@ -709,7 +709,7 @@ dependencies = [
"servo_geometry 0.0.1",
"servo_url 0.0.1",
"style_traits 0.0.1",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"x11 2.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -996,7 +996,7 @@ dependencies = [
"time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
"truetype 0.26.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"xi-unicode 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1041,7 +1041,7 @@ dependencies = [
[[package]]
name = "gleam"
version = "0.4.1"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1061,7 +1061,7 @@ dependencies = [
"compositing 0.0.1",
"euclid 0.11.0 (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.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
"net_traits 0.0.1",
@ -1075,7 +1075,7 @@ dependencies = [
"servo_url 0.0.1",
"style_traits 0.0.1",
"user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"x11 2.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1261,7 +1261,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cgl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (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.21 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1385,7 +1385,7 @@ dependencies = [
"style_traits 0.0.1",
"unicode-bidi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -1425,7 +1425,7 @@ dependencies = [
"servo_geometry 0.0.1",
"servo_url 0.0.1",
"style 0.0.1",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -1439,7 +1439,7 @@ dependencies = [
"profile_traits 0.0.1",
"script_traits 0.0.1",
"servo_url 0.0.1",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -1498,7 +1498,7 @@ dependencies = [
"euclid 0.11.0 (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.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"layout_thread 0.0.1",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1516,8 +1516,8 @@ dependencies = [
"style 0.0.1",
"style_traits 0.0.1",
"webdriver_server 0.0.1",
"webrender 0.26.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"webvr 0.0.1",
"webvr_traits 0.0.1",
]
@ -1666,7 +1666,7 @@ dependencies = [
"heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -1708,7 +1708,7 @@ dependencies = [
"unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -1768,7 +1768,7 @@ dependencies = [
"servo_url 0.0.1",
"url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
@ -1857,7 +1857,7 @@ dependencies = [
"euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gdi32-sys 0.2.0 (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.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2286,7 +2286,7 @@ dependencies = [
"tinyfiledialogs 2.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"webvr 0.0.1",
"webvr_traits 0.0.1",
"xml5ever 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2507,7 +2507,7 @@ dependencies = [
"cmake 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.11.0 (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.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (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.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3144,8 +3144,8 @@ dependencies = [
[[package]]
name = "webrender"
version = "0.26.0"
source = "git+https://github.com/servo/webrender#b2dd9f792d0cb3dfc591567c105755f56f35956d"
version = "0.27.0"
source = "git+https://github.com/servo/webrender#4b72bb1921628d01b08ab356c0f2365a927b711e"
dependencies = [
"app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3159,7 +3159,7 @@ dependencies = [
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gamma-lut 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3167,20 +3167,20 @@ dependencies = [
"thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
]
[[package]]
name = "webrender_traits"
version = "0.27.0"
source = "git+https://github.com/servo/webrender#b2dd9f792d0cb3dfc591567c105755f56f35956d"
version = "0.28.0"
source = "git+https://github.com/servo/webrender#4b72bb1921628d01b08ab356c0f2365a927b711e"
dependencies = [
"app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"dwrote 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"offscreen_gl_context 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3197,7 +3197,7 @@ dependencies = [
"msg 0.0.1",
"script_traits 0.0.1",
"servo_config 0.0.1",
"webrender_traits 0.27.0 (git+https://github.com/servo/webrender)",
"webrender_traits 0.28.0 (git+https://github.com/servo/webrender)",
"webvr_traits 0.0.1",
]
@ -3375,7 +3375,7 @@ dependencies = [
"checksum getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9047cfbd08a437050b363d35ef160452c5fe8ea5187ae0a624708c91581d685"
"checksum gif 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8a80d6fe9e52f637df9afd4779449a7be17c39cc9c35b01589bb833f956ba596"
"checksum gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1d8edc81c5ae84605a62f5dac661a2313003b26d59839f81d47d46cf0f16a55"
"checksum gleam 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2958396a0a358d2de747b31329f5ae2229070602b0f51edd5d682f92c307c332"
"checksum gleam 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3232655dbe4fc5ab688c05024f2c816b5d20c19ad8216d5c7d85cf915b24e005"
"checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
"checksum glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b280007fa9c7442cfd1e0b1addb8d1a59240267110e8705f8f7e2c7bfb7e2f72"
"checksum harfbuzz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6b76113246f5c089dcf272cf89c3f61168a4d77b50ec5b2c1fab8c628c9ea762"
@ -3536,8 +3536,8 @@ dependencies = [
"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
"checksum walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff"
"checksum webdriver 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d548aabf87411b1b4ba91fd07eacd8b238135c7131a452b8a9f6386209167e18"
"checksum webrender 0.26.0 (git+https://github.com/servo/webrender)" = "<none>"
"checksum webrender_traits 0.27.0 (git+https://github.com/servo/webrender)" = "<none>"
"checksum webrender 0.27.0 (git+https://github.com/servo/webrender)" = "<none>"
"checksum webrender_traits 0.28.0 (git+https://github.com/servo/webrender)" = "<none>"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
"checksum ws 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "04614a58714f3fd4a8b1da4bcae9f031c532d35988c3d39627619248113f8be8"

Просмотреть файл

@ -18,6 +18,7 @@ use ipc_channel::ipc::{self, IpcSender};
use num_traits::ToPrimitive;
use std::borrow::ToOwned;
use std::mem;
use std::sync::Arc;
use std::thread;
use webrender_traits;
@ -60,7 +61,7 @@ pub struct CanvasPaintThread<'a> {
state: CanvasPaintState<'a>,
saved_states: Vec<CanvasPaintState<'a>>,
webrender_api: webrender_traits::RenderApi,
webrender_image_key: webrender_traits::ImageKey,
image_key: Option<webrender_traits::ImageKey>,
}
#[derive(Clone)]
@ -106,14 +107,13 @@ impl<'a> CanvasPaintThread<'a> {
let draw_target = CanvasPaintThread::create(size);
let path_builder = draw_target.create_path_builder();
let webrender_api = webrender_api_sender.create_api();
let webrender_image_key = webrender_api.generate_image_key();
CanvasPaintThread {
drawtarget: draw_target,
path_builder: path_builder,
state: CanvasPaintState::new(antialias),
saved_states: vec![],
webrender_api: webrender_api,
webrender_image_key: webrender_image_key,
image_key: None,
}
}
@ -558,20 +558,35 @@ impl<'a> CanvasPaintThread<'a> {
fn send_data(&mut self, chan: IpcSender<CanvasData>) {
self.drawtarget.snapshot().get_data_surface().with_data(|element| {
let size = self.drawtarget.get_size();
self.webrender_api.update_image(self.webrender_image_key,
webrender_traits::ImageDescriptor {
width: size.width as u32,
height: size.height as u32,
stride: None,
format: webrender_traits::ImageFormat::RGBA8,
offset: 0,
is_opaque: false,
},
element.into(),
None);
let descriptor = webrender_traits::ImageDescriptor {
width: size.width as u32,
height: size.height as u32,
stride: None,
format: webrender_traits::ImageFormat::RGBA8,
offset: 0,
is_opaque: false,
};
let data = webrender_traits::ImageData::Raw(Arc::new(element.into()));
match self.image_key {
Some(image_key) => {
self.webrender_api.update_image(image_key,
descriptor,
data,
None);
}
None => {
self.image_key = Some(self.webrender_api.generate_image_key());
self.webrender_api.add_image(self.image_key.unwrap(),
descriptor,
data,
None);
}
}
let data = CanvasImageData {
image_key: self.webrender_image_key,
image_key: self.image_key.unwrap(),
};
chan.send(CanvasData::Image(data)).unwrap();
})
@ -728,7 +743,9 @@ impl<'a> CanvasPaintThread<'a> {
impl<'a> Drop for CanvasPaintThread<'a> {
fn drop(&mut self) {
self.webrender_api.delete_image(self.webrender_image_key);
if let Some(image_key) = self.image_key {
self.webrender_api.delete_image(image_key);
}
}
}

Просмотреть файл

@ -11,6 +11,7 @@ use offscreen_gl_context::{ColorAttachmentType, GLContext, GLLimits};
use offscreen_gl_context::{GLContextAttributes, NativeGLContext, OSMesaContext};
use servo_config::opts;
use std::borrow::ToOwned;
use std::sync::Arc;
use std::sync::mpsc::channel;
use std::thread;
use webrender_traits;
@ -101,7 +102,7 @@ impl GLContextWrapper {
enum WebGLPaintTaskData {
WebRender(webrender_traits::RenderApi, webrender_traits::WebGLContextId),
Readback(GLContextWrapper, webrender_traits::RenderApi, webrender_traits::ImageKey),
Readback(GLContextWrapper, webrender_traits::RenderApi, Option<webrender_traits::ImageKey>),
}
pub struct WebGLPaintThread {
@ -116,10 +117,9 @@ fn create_readback_painter(size: Size2D<i32>,
-> Result<(WebGLPaintThread, GLLimits), String> {
let context = try!(GLContextWrapper::new(size, attrs, gl_type));
let limits = context.get_limits();
let image_key = webrender_api.generate_image_key();
let painter = WebGLPaintThread {
size: size,
data: WebGLPaintTaskData::Readback(context, webrender_api, image_key)
data: WebGLPaintTaskData::Readback(context, webrender_api, None)
};
Ok((painter, limits))
@ -229,7 +229,7 @@ impl WebGLPaintThread {
fn send_data(&mut self, chan: IpcSender<CanvasData>) {
match self.data {
WebGLPaintTaskData::Readback(ref ctx, ref webrender_api, image_key) => {
WebGLPaintTaskData::Readback(ref ctx, ref webrender_api, ref mut image_key) => {
let width = self.size.width as usize;
let height = self.size.height as usize;
@ -250,22 +250,34 @@ impl WebGLPaintThread {
// rgba -> bgra
byte_swap(&mut pixels);
// TODO: This shouldn't be a common path, but try to avoid
// the spurious clone().
webrender_api.update_image(image_key,
webrender_traits::ImageDescriptor {
width: width as u32,
height: height as u32,
stride: None,
format: webrender_traits::ImageFormat::RGBA8,
offset: 0,
is_opaque: false,
},
pixels.clone(),
None);
let descriptor = webrender_traits::ImageDescriptor {
width: width as u32,
height: height as u32,
stride: None,
format: webrender_traits::ImageFormat::RGBA8,
offset: 0,
is_opaque: false,
};
let data = webrender_traits::ImageData::Raw(Arc::new(pixels));
match *image_key {
Some(image_key) => {
webrender_api.update_image(image_key,
descriptor,
data,
None);
}
None => {
*image_key = Some(webrender_api.generate_image_key());
webrender_api.add_image(image_key.unwrap(),
descriptor,
data,
None);
}
}
let image_data = CanvasImageData {
image_key: image_key,
image_key: image_key.unwrap(),
};
chan.send(CanvasData::Image(image_data)).unwrap();
@ -307,7 +319,9 @@ impl WebGLPaintThread {
impl Drop for WebGLPaintThread {
fn drop(&mut self) {
if let WebGLPaintTaskData::Readback(_, ref mut wr, image_key) = self.data {
wr.delete_image(image_key);
if let Some(image_key) = image_key {
wr.delete_image(image_key);
}
}
}
}

Просмотреть файл

@ -76,9 +76,12 @@ trait ConvertScrollRootIdFromWebRender {
fn from_webrender(&self) -> ScrollRootId;
}
impl ConvertScrollRootIdFromWebRender for usize {
impl ConvertScrollRootIdFromWebRender for u64 {
fn from_webrender(&self) -> ScrollRootId {
ScrollRootId(*self)
// This conversion is lossy on 32 bit platforms,
// but we only actually use the bottom 32 bits
// on Servo anyway.
ScrollRootId(*self as usize)
}
}
@ -794,7 +797,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
pipeline_id: PipelineId,
scroll_root_id: ScrollRootId,
point: Point2D<f32>) {
let id = ScrollLayerId::new(scroll_root_id.0, pipeline_id.to_webrender());
let id = ScrollLayerId::new(scroll_root_id.0 as u64, pipeline_id.to_webrender());
self.webrender_api.scroll_layer_with_id(LayoutPoint::from_untyped(&point), id);
}

Просмотреть файл

@ -425,7 +425,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
vec![],
None);
let provided_id = ScrollLayerId::new(item.scroll_root.id.0, builder.pipeline_id);
let provided_id = ScrollLayerId::new(item.scroll_root.id.0 as u64, builder.pipeline_id);
let id = builder.define_clip(clip,
item.scroll_root.size.to_sizef(),
Some(provided_id));
@ -444,7 +444,7 @@ impl WebRenderScrollRootIdConverter for ScrollRootId {
if *self == ScrollRootId::root() {
ScrollLayerId::root_scroll_layer(pipeline_id)
} else {
ScrollLayerId::new(self.0, pipeline_id)
ScrollLayerId::new(self.0 as u64, pipeline_id)
}
}
}