Auto merge of #8150 - Ms2ger:select-layout, r=jdm

Use the select!{} macro in LayoutTask::handle_request.



<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8150)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-10-22 11:14:52 -06:00
commit e05999ea9f

View file

@ -69,7 +69,7 @@ use std::collections::hash_state::DefaultState;
use std::mem::transmute;
use std::ops::{Deref, DerefMut};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::mpsc::{channel, Sender, Receiver, Select};
use std::sync::mpsc::{channel, Sender, Receiver};
use std::sync::{Arc, Mutex, MutexGuard};
use string_cache::Atom;
use style::computed_values::{self, filter, mix_blend_mode};
@ -470,42 +470,13 @@ impl LayoutTask {
fn handle_request<'a>(&'a self,
possibly_locked_rw_data: &mut Option<MutexGuard<'a, LayoutTaskData>>)
-> bool {
enum PortToRead {
Pipeline,
Script,
ImageCache,
FontCache,
}
let port_to_read = {
let select = Select::new();
let mut port_from_script = select.handle(&self.port);
let mut port_from_pipeline = select.handle(&self.pipeline_port);
let mut port_from_image_cache = select.handle(&self.image_cache_receiver);
let mut port_from_font_cache = select.handle(&self.font_cache_receiver);
unsafe {
port_from_script.add();
port_from_pipeline.add();
port_from_image_cache.add();
port_from_font_cache.add();
}
let ret = select.wait();
if ret == port_from_script.id() {
PortToRead::Script
} else if ret == port_from_pipeline.id() {
PortToRead::Pipeline
} else if ret == port_from_image_cache.id() {
PortToRead::ImageCache
} else if ret == port_from_font_cache.id() {
PortToRead::FontCache
} else {
panic!("invalid select result");
}
};
match port_to_read {
PortToRead::Pipeline => {
match self.pipeline_port.recv().unwrap() {
let port_from_script = &self.port;
let port_from_pipeline = &self.pipeline_port;
let port_from_image_cache = &self.image_cache_receiver;
let port_from_font_cache = &self.font_cache_receiver;
select! {
msg = port_from_pipeline.recv() => {
match msg.unwrap() {
LayoutControlMsg::SetVisibleRects(new_visible_rects) => {
self.handle_request_helper(Msg::SetVisibleRects(new_visible_rects),
possibly_locked_rw_data)
@ -526,17 +497,16 @@ impl LayoutTask {
possibly_locked_rw_data)
}
}
}
PortToRead::Script => {
let msg = self.port.recv().unwrap();
self.handle_request_helper(msg, possibly_locked_rw_data)
}
PortToRead::ImageCache => {
let _ = self.image_cache_receiver.recv().unwrap();
},
msg = port_from_script.recv() => {
self.handle_request_helper(msg.unwrap(), possibly_locked_rw_data)
},
msg = port_from_image_cache.recv() => {
msg.unwrap();
self.repaint(possibly_locked_rw_data)
}
PortToRead::FontCache => {
let _ = self.font_cache_receiver.recv().unwrap();
},
msg = port_from_font_cache.recv() => {
msg.unwrap();
let rw_data = self.lock_rw_data(possibly_locked_rw_data);
rw_data.outstanding_web_fonts.fetch_sub(1, Ordering::SeqCst);
font_context::invalidate_font_caches();