mirror of
https://github.com/servo/servo.git
synced 2025-07-14 19:03:40 +01:00
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:
commit
e05999ea9f
1 changed files with 17 additions and 47 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue