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::mem::transmute;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use std::sync::atomic::{AtomicUsize, Ordering}; 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 std::sync::{Arc, Mutex, MutexGuard};
use string_cache::Atom; use string_cache::Atom;
use style::computed_values::{self, filter, mix_blend_mode}; use style::computed_values::{self, filter, mix_blend_mode};
@ -470,42 +470,13 @@ impl LayoutTask {
fn handle_request<'a>(&'a self, fn handle_request<'a>(&'a self,
possibly_locked_rw_data: &mut Option<MutexGuard<'a, LayoutTaskData>>) possibly_locked_rw_data: &mut Option<MutexGuard<'a, LayoutTaskData>>)
-> bool { -> bool {
enum PortToRead { let port_from_script = &self.port;
Pipeline, let port_from_pipeline = &self.pipeline_port;
Script, let port_from_image_cache = &self.image_cache_receiver;
ImageCache, let port_from_font_cache = &self.font_cache_receiver;
FontCache, select! {
} msg = port_from_pipeline.recv() => {
match msg.unwrap() {
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() {
LayoutControlMsg::SetVisibleRects(new_visible_rects) => { LayoutControlMsg::SetVisibleRects(new_visible_rects) => {
self.handle_request_helper(Msg::SetVisibleRects(new_visible_rects), self.handle_request_helper(Msg::SetVisibleRects(new_visible_rects),
possibly_locked_rw_data) possibly_locked_rw_data)
@ -526,17 +497,16 @@ impl LayoutTask {
possibly_locked_rw_data) possibly_locked_rw_data)
} }
} }
} },
PortToRead::Script => { msg = port_from_script.recv() => {
let msg = self.port.recv().unwrap(); self.handle_request_helper(msg.unwrap(), possibly_locked_rw_data)
self.handle_request_helper(msg, possibly_locked_rw_data) },
} msg = port_from_image_cache.recv() => {
PortToRead::ImageCache => { msg.unwrap();
let _ = self.image_cache_receiver.recv().unwrap();
self.repaint(possibly_locked_rw_data) self.repaint(possibly_locked_rw_data)
} },
PortToRead::FontCache => { msg = port_from_font_cache.recv() => {
let _ = self.font_cache_receiver.recv().unwrap(); msg.unwrap();
let rw_data = self.lock_rw_data(possibly_locked_rw_data); let rw_data = self.lock_rw_data(possibly_locked_rw_data);
rw_data.outstanding_web_fonts.fetch_sub(1, Ordering::SeqCst); rw_data.outstanding_web_fonts.fetch_sub(1, Ordering::SeqCst);
font_context::invalidate_font_caches(); font_context::invalidate_font_caches();