Skip to content

Commit c241737

Browse files
committed
Remove old rendering backend.
This removes paint threads, rust-layers dependency, and changes optional webrender types to be required. The use_webrender option has been removed, however I've left the "-w" command line option in place for now so that wpt runner can continue to pass that. Once it's removed from there we can also remove the -w option. Once this stage is complete, it should be fine to change the display list building code to generate webrender display lists directly and avoid the conversion step.
1 parent 768a699 commit c241737

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+431
-3585
lines changed

components/canvas/canvas_paint_thread.rs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ pub struct CanvasPaintThread<'a> {
5858
path_builder: PathBuilder,
5959
state: CanvasPaintState<'a>,
6060
saved_states: Vec<CanvasPaintState<'a>>,
61-
webrender_api: Option<webrender_traits::RenderApi>,
62-
webrender_image_key: Option<webrender_traits::ImageKey>,
61+
webrender_api: webrender_traits::RenderApi,
62+
webrender_image_key: webrender_traits::ImageKey,
6363
}
6464

6565
#[derive(Clone)]
@@ -100,12 +100,12 @@ impl<'a> CanvasPaintState<'a> {
100100

101101
impl<'a> CanvasPaintThread<'a> {
102102
fn new(size: Size2D<i32>,
103-
webrender_api_sender: Option<webrender_traits::RenderApiSender>,
103+
webrender_api_sender: webrender_traits::RenderApiSender,
104104
antialias: bool) -> CanvasPaintThread<'a> {
105105
let draw_target = CanvasPaintThread::create(size);
106106
let path_builder = draw_target.create_path_builder();
107-
let webrender_api = webrender_api_sender.map(|wr| wr.create_api());
108-
let webrender_image_key = webrender_api.as_ref().map(|wr| wr.alloc_image());
107+
let webrender_api = webrender_api_sender.create_api();
108+
let webrender_image_key = webrender_api.alloc_image();
109109
CanvasPaintThread {
110110
drawtarget: draw_target,
111111
path_builder: path_builder,
@@ -119,7 +119,7 @@ impl<'a> CanvasPaintThread<'a> {
119119
/// Creates a new `CanvasPaintThread` and returns an `IpcSender` to
120120
/// communicate with it.
121121
pub fn start(size: Size2D<i32>,
122-
webrender_api_sender: Option<webrender_traits::RenderApiSender>,
122+
webrender_api_sender: webrender_traits::RenderApiSender,
123123
antialias: bool)
124124
-> IpcSender<CanvasMsg> {
125125
let (sender, receiver) = ipc::channel::<CanvasMsg>().unwrap();
@@ -542,14 +542,12 @@ impl<'a> CanvasPaintThread<'a> {
542542

543543
fn send_data(&mut self, chan: IpcSender<CanvasData>) {
544544
self.drawtarget.snapshot().get_data_surface().with_data(|element| {
545-
if let Some(ref webrender_api) = self.webrender_api {
546-
let size = self.drawtarget.get_size();
547-
webrender_api.update_image(self.webrender_image_key.unwrap(),
548-
size.width as u32,
549-
size.height as u32,
550-
webrender_traits::ImageFormat::RGBA8,
551-
element.into());
552-
}
545+
let size = self.drawtarget.get_size();
546+
self.webrender_api.update_image(self.webrender_image_key,
547+
size.width as u32,
548+
size.height as u32,
549+
webrender_traits::ImageFormat::RGBA8,
550+
element.into());
553551

554552
let pixel_data = CanvasPixelData {
555553
image_data: IpcSharedMemory::from_bytes(element),
@@ -710,9 +708,7 @@ impl<'a> CanvasPaintThread<'a> {
710708

711709
impl<'a> Drop for CanvasPaintThread<'a> {
712710
fn drop(&mut self) {
713-
if let Some(ref mut wr) = self.webrender_api {
714-
wr.delete_image(self.webrender_image_key.unwrap());
715-
}
711+
self.webrender_api.delete_image(self.webrender_image_key);
716712
}
717713
}
718714

components/canvas/webgl_paint_thread.rs

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl GLContextWrapper {
8787

8888
enum WebGLPaintTaskData {
8989
WebRender(webrender_traits::RenderApi, webrender_traits::WebGLContextId),
90-
Readback(GLContextWrapper, (Option<(webrender_traits::RenderApi, webrender_traits::ImageKey)>)),
90+
Readback(GLContextWrapper, webrender_traits::RenderApi, webrender_traits::ImageKey),
9191
}
9292

9393
pub struct WebGLPaintThread {
@@ -97,17 +97,14 @@ pub struct WebGLPaintThread {
9797

9898
fn create_readback_painter(size: Size2D<i32>,
9999
attrs: GLContextAttributes,
100-
webrender_api: Option<webrender_traits::RenderApi>)
100+
webrender_api: webrender_traits::RenderApi)
101101
-> Result<(WebGLPaintThread, GLLimits), String> {
102102
let context = try!(GLContextWrapper::new(size, attrs));
103103
let limits = context.get_limits();
104-
let webrender_api_and_image_key = webrender_api.map(|wr| {
105-
let key = wr.alloc_image();
106-
(wr, key)
107-
});
104+
let image_key = webrender_api.alloc_image();
108105
let painter = WebGLPaintThread {
109106
size: size,
110-
data: WebGLPaintTaskData::Readback(context, webrender_api_and_image_key)
107+
data: WebGLPaintTaskData::Readback(context, webrender_api, image_key)
111108
};
112109

113110
Ok((painter, limits))
@@ -116,25 +113,21 @@ fn create_readback_painter(size: Size2D<i32>,
116113
impl WebGLPaintThread {
117114
fn new(size: Size2D<i32>,
118115
attrs: GLContextAttributes,
119-
webrender_api_sender: Option<webrender_traits::RenderApiSender>)
116+
webrender_api_sender: webrender_traits::RenderApiSender)
120117
-> Result<(WebGLPaintThread, GLLimits), String> {
121-
if let Some(sender) = webrender_api_sender {
122-
let wr_api = sender.create_api();
123-
match wr_api.request_webgl_context(&size, attrs) {
124-
Ok((id, limits)) => {
125-
let painter = WebGLPaintThread {
126-
data: WebGLPaintTaskData::WebRender(wr_api, id),
127-
size: size
128-
};
129-
Ok((painter, limits))
130-
},
131-
Err(msg) => {
132-
warn!("Initial context creation failed, falling back to readback: {}", msg);
133-
create_readback_painter(size, attrs, Some(wr_api))
134-
}
118+
let wr_api = webrender_api_sender.create_api();
119+
match wr_api.request_webgl_context(&size, attrs) {
120+
Ok((id, limits)) => {
121+
let painter = WebGLPaintThread {
122+
data: WebGLPaintTaskData::WebRender(wr_api, id),
123+
size: size
124+
};
125+
Ok((painter, limits))
126+
},
127+
Err(msg) => {
128+
warn!("Initial context creation failed, falling back to readback: {}", msg);
129+
create_readback_painter(size, attrs, wr_api)
135130
}
136-
} else {
137-
create_readback_painter(size, attrs, None)
138131
}
139132
}
140133

@@ -144,7 +137,7 @@ impl WebGLPaintThread {
144137
WebGLPaintTaskData::WebRender(ref api, id) => {
145138
api.send_webgl_command(id, message);
146139
}
147-
WebGLPaintTaskData::Readback(ref ctx, _) => {
140+
WebGLPaintTaskData::Readback(ref ctx, _, _) => {
148141
ctx.apply_command(message);
149142
}
150143
}
@@ -154,7 +147,7 @@ impl WebGLPaintThread {
154147
/// communicate with it.
155148
pub fn start(size: Size2D<i32>,
156149
attrs: GLContextAttributes,
157-
webrender_api_sender: Option<webrender_traits::RenderApiSender>)
150+
webrender_api_sender: webrender_traits::RenderApiSender)
158151
-> Result<(IpcSender<CanvasMsg>, GLLimits), String> {
159152
let (sender, receiver) = ipc::channel::<CanvasMsg>().unwrap();
160153
let (result_chan, result_port) = channel();
@@ -196,7 +189,7 @@ impl WebGLPaintThread {
196189

197190
fn send_data(&mut self, chan: IpcSender<CanvasData>) {
198191
match self.data {
199-
WebGLPaintTaskData::Readback(_, ref webrender_api_and_image_key) => {
192+
WebGLPaintTaskData::Readback(_, ref webrender_api, image_key) => {
200193
let width = self.size.width as usize;
201194
let height = self.size.height as usize;
202195

@@ -217,19 +210,17 @@ impl WebGLPaintThread {
217210
// rgba -> bgra
218211
byte_swap(&mut pixels);
219212

220-
if let Some((ref wr, wr_image_key)) = *webrender_api_and_image_key {
221-
// TODO: This shouldn't be a common path, but try to avoid
222-
// the spurious clone().
223-
wr.update_image(wr_image_key,
224-
width as u32,
225-
height as u32,
226-
webrender_traits::ImageFormat::RGBA8,
227-
pixels.clone());
228-
}
213+
// TODO: This shouldn't be a common path, but try to avoid
214+
// the spurious clone().
215+
webrender_api.update_image(image_key,
216+
width as u32,
217+
height as u32,
218+
webrender_traits::ImageFormat::RGBA8,
219+
pixels.clone());
229220

230221
let pixel_data = CanvasPixelData {
231222
image_data: IpcSharedMemory::from_bytes(&pixels[..]),
232-
image_key: webrender_api_and_image_key.as_ref().map(|&(_, key)| key),
223+
image_key: image_key,
233224
};
234225

235226
chan.send(CanvasData::Pixels(pixel_data)).unwrap();
@@ -243,7 +234,7 @@ impl WebGLPaintThread {
243234
#[allow(unsafe_code)]
244235
fn recreate(&mut self, size: Size2D<i32>) -> Result<(), &'static str> {
245236
match self.data {
246-
WebGLPaintTaskData::Readback(ref mut context, _) => {
237+
WebGLPaintTaskData::Readback(ref mut context, _, _) => {
247238
if size.width > self.size.width ||
248239
size.height > self.size.height {
249240
self.size = try!(context.resize(size));
@@ -261,15 +252,15 @@ impl WebGLPaintThread {
261252
}
262253

263254
fn init(&mut self) {
264-
if let WebGLPaintTaskData::Readback(ref context, _) = self.data {
255+
if let WebGLPaintTaskData::Readback(ref context, _, _) = self.data {
265256
context.make_current();
266257
}
267258
}
268259
}
269260

270261
impl Drop for WebGLPaintThread {
271262
fn drop(&mut self) {
272-
if let WebGLPaintTaskData::Readback(_, Some((ref mut wr, image_key))) = self.data {
263+
if let WebGLPaintTaskData::Readback(_, ref mut wr, image_key) = self.data {
273264
wr.delete_image(image_key);
274265
}
275266
}

components/canvas_traits/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ pub enum CanvasData {
6969
#[derive(Clone, Deserialize, Serialize)]
7070
pub struct CanvasPixelData {
7171
pub image_data: IpcSharedMemory,
72-
pub image_key: Option<webrender_traits::ImageKey>,
72+
pub image_key: webrender_traits::ImageKey,
7373
}
7474

7575
#[derive(Clone, Deserialize, Serialize)]

components/compositing/Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,11 @@ name = "compositing"
1010
path = "lib.rs"
1111

1212
[dependencies]
13-
app_units = "0.3"
14-
azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
1513
euclid = "0.10.1"
1614
gfx_traits = {path = "../gfx_traits"}
1715
gleam = "0.2.8"
1816
image = "0.10"
1917
ipc-channel = "0.5"
20-
layers = {git = "https://github.com/servo/rust-layers", features = ["plugins"]}
2118
log = "0.3.5"
2219
msg = {path = "../msg"}
2320
net_traits = {path = "../net_traits"}

0 commit comments

Comments
 (0)