mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Warning police.
This commit is contained in:
parent
e62637fee2
commit
422bda7379
10 changed files with 83 additions and 78 deletions
|
@ -13,6 +13,7 @@ extern "C" {
|
|||
fn tc_deletearray(mem: *mut c_void);
|
||||
}
|
||||
|
||||
#[allow(experimental)]
|
||||
pub fn newarray0<T>(nmem: size_t) -> *mut T {
|
||||
let mem = newarray::<T>(nmem) as *mut T;
|
||||
unsafe {
|
||||
|
@ -27,6 +28,7 @@ pub fn newarray<T>(nmem: size_t) -> *mut T {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(experimental)]
|
||||
pub fn new0<T>(nmem: size_t) -> *mut T {
|
||||
let mem = new(nmem * mem::size_of::<T>() as u64) as *mut T;
|
||||
unsafe {
|
||||
|
|
|
@ -312,7 +312,7 @@ impl LayoutTask {
|
|||
opts: &Opts,
|
||||
time_profiler_chan: TimeProfilerChan)
|
||||
-> LayoutTask {
|
||||
let local_image_cache = Arc::new(Mutex::new(LocalImageCache(image_cache_task.clone())));
|
||||
let local_image_cache = Arc::new(Mutex::new(LocalImageCache::new(image_cache_task.clone())));
|
||||
let screen_size = Size2D(Au(0), Au(0));
|
||||
let parallel_traversal = if opts.layout_threads != 1 {
|
||||
Some(WorkQueue::new("LayoutWorker", opts.layout_threads, ptr::mut_null()))
|
||||
|
|
|
@ -31,7 +31,7 @@ use compositing::{CompositorChan, CompositorTask, Constellation};
|
|||
use servo_msg::constellation_msg::{ConstellationChan, InitLoadUrlMsg};
|
||||
|
||||
#[cfg(not(test))]
|
||||
use servo_net::image_cache_task::{ImageCacheTask, SyncImageCacheTask};
|
||||
use servo_net::image_cache_task::ImageCacheTask;
|
||||
#[cfg(not(test))]
|
||||
use servo_net::resource_task::ResourceTask;
|
||||
#[cfg(not(test))]
|
||||
|
@ -111,9 +111,9 @@ pub fn run(opts: opts::Opts) {
|
|||
// image load or we risk emitting an output file missing the
|
||||
// image.
|
||||
let image_cache_task = if opts.output_file.is_some() {
|
||||
SyncImageCacheTask(resource_task.clone())
|
||||
ImageCacheTask::new_sync(resource_task.clone())
|
||||
} else {
|
||||
ImageCacheTask(resource_task.clone())
|
||||
ImageCacheTask::new(resource_task.clone())
|
||||
};
|
||||
let constellation_chan = Constellation::start(compositor_chan,
|
||||
opts,
|
||||
|
|
|
@ -80,52 +80,53 @@ impl<E, S: Encoder<E>> Encodable<S, E> for ImageCacheTask {
|
|||
|
||||
type DecoderFactory = fn() -> proc(&[u8]) -> Option<Image>;
|
||||
|
||||
pub fn ImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask {
|
||||
let (chan, port) = channel();
|
||||
let chan_clone = chan.clone();
|
||||
impl ImageCacheTask {
|
||||
pub fn new(resource_task: ResourceTask) -> ImageCacheTask {
|
||||
let (chan, port) = channel();
|
||||
let chan_clone = chan.clone();
|
||||
|
||||
spawn(proc() {
|
||||
let mut cache = ImageCache {
|
||||
resource_task: resource_task.clone(),
|
||||
port: port,
|
||||
chan: chan_clone,
|
||||
state_map: url_map(),
|
||||
wait_map: url_map(),
|
||||
need_exit: None
|
||||
};
|
||||
cache.run();
|
||||
});
|
||||
spawn(proc() {
|
||||
let mut cache = ImageCache {
|
||||
resource_task: resource_task.clone(),
|
||||
port: port,
|
||||
chan: chan_clone,
|
||||
state_map: url_map(),
|
||||
wait_map: url_map(),
|
||||
need_exit: None
|
||||
};
|
||||
cache.run();
|
||||
});
|
||||
|
||||
ImageCacheTask {
|
||||
chan: chan,
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: make this priv after visibility rules change
|
||||
pub fn SyncImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask {
|
||||
let (chan, port) = channel();
|
||||
|
||||
spawn(proc() {
|
||||
let inner_cache = ImageCacheTask(resource_task.clone());
|
||||
|
||||
loop {
|
||||
let msg: Msg = port.recv();
|
||||
|
||||
match msg {
|
||||
GetImage(url, response) => {
|
||||
inner_cache.send(WaitForImage(url, response));
|
||||
}
|
||||
Exit(response) => {
|
||||
inner_cache.send(Exit(response));
|
||||
break;
|
||||
}
|
||||
msg => inner_cache.send(msg)
|
||||
}
|
||||
ImageCacheTask {
|
||||
chan: chan,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ImageCacheTask {
|
||||
chan: chan,
|
||||
pub fn new_sync(resource_task: ResourceTask) -> ImageCacheTask {
|
||||
let (chan, port) = channel();
|
||||
|
||||
spawn(proc() {
|
||||
let inner_cache = ImageCacheTask::new(resource_task.clone());
|
||||
|
||||
loop {
|
||||
let msg: Msg = port.recv();
|
||||
|
||||
match msg {
|
||||
GetImage(url, response) => {
|
||||
inner_cache.send(WaitForImage(url, response));
|
||||
}
|
||||
Exit(response) => {
|
||||
inner_cache.send(Exit(response));
|
||||
break;
|
||||
}
|
||||
msg => inner_cache.send(msg)
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ImageCacheTask {
|
||||
chan: chan,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -581,7 +582,7 @@ mod tests {
|
|||
fn should_exit_on_request() {
|
||||
let mock_resource_task = mock_resource_task(box DoesNothing);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let _url = parse_url("file", None);
|
||||
|
||||
image_cache_task.exit();
|
||||
|
@ -593,7 +594,7 @@ mod tests {
|
|||
fn should_fail_if_unprefetched_image_is_requested() {
|
||||
let mock_resource_task = mock_resource_task(box DoesNothing);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let (chan, port) = channel();
|
||||
|
@ -607,7 +608,7 @@ mod tests {
|
|||
|
||||
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url));
|
||||
|
@ -622,7 +623,7 @@ mod tests {
|
|||
|
||||
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
@ -642,7 +643,7 @@ mod tests {
|
|||
|
||||
let mock_resource_task = mock_resource_task(box WaitSendTestImage{wait_port: wait_port});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
@ -659,7 +660,7 @@ mod tests {
|
|||
fn should_return_decoded_image_data_if_data_has_arrived() {
|
||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let join_port = image_cache_task.wait_for_store();
|
||||
|
@ -685,7 +686,7 @@ mod tests {
|
|||
fn should_return_decoded_image_data_for_multiple_requests() {
|
||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let join_port = image_cache_task.wait_for_store();
|
||||
|
@ -732,7 +733,7 @@ mod tests {
|
|||
}
|
||||
});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
@ -778,7 +779,7 @@ mod tests {
|
|||
}
|
||||
});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
@ -807,7 +808,7 @@ mod tests {
|
|||
fn should_return_failed_if_image_bin_cannot_be_fetched() {
|
||||
let mock_resource_task = mock_resource_task(box SendTestImageErr);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let join_port = image_cache_task.wait_for_store_prefetched();
|
||||
|
@ -833,7 +834,7 @@ mod tests {
|
|||
fn should_return_failed_for_multiple_get_image_requests_if_image_bin_cannot_be_fetched() {
|
||||
let mock_resource_task = mock_resource_task(box SendTestImageErr);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let join_port = image_cache_task.wait_for_store_prefetched();
|
||||
|
@ -867,7 +868,7 @@ mod tests {
|
|||
fn should_return_failed_if_image_decode_fails() {
|
||||
let mock_resource_task = mock_resource_task(box SendBogusImage);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let join_port = image_cache_task.wait_for_store();
|
||||
|
@ -895,7 +896,7 @@ mod tests {
|
|||
fn should_return_image_on_wait_if_image_is_already_loaded() {
|
||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
let join_port = image_cache_task.wait_for_store();
|
||||
|
@ -923,7 +924,7 @@ mod tests {
|
|||
|
||||
let mock_resource_task = mock_resource_task(box WaitSendTestImage {wait_port: wait_port});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
@ -949,7 +950,7 @@ mod tests {
|
|||
|
||||
let mock_resource_task = mock_resource_task(box WaitSendTestImageErr{wait_port: wait_port});
|
||||
|
||||
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
@ -973,7 +974,7 @@ mod tests {
|
|||
fn sync_cache_should_wait_for_images() {
|
||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||
|
||||
let image_cache_task = SyncImageCacheTask(mock_resource_task.clone());
|
||||
let image_cache_task = ImageCacheTask::new_sync(mock_resource_task.clone());
|
||||
let url = parse_url("file", None);
|
||||
|
||||
image_cache_task.send(Prefetch(url.clone()));
|
||||
|
|
|
@ -20,15 +20,6 @@ pub trait ImageResponder {
|
|||
fn respond(&self) -> proc(ImageResponseMsg):Send;
|
||||
}
|
||||
|
||||
pub fn LocalImageCache(image_cache_task: ImageCacheTask) -> LocalImageCache {
|
||||
LocalImageCache {
|
||||
image_cache_task: image_cache_task,
|
||||
round_number: 1,
|
||||
on_image_available: None,
|
||||
state_map: url_map()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct LocalImageCache {
|
||||
image_cache_task: ImageCacheTask,
|
||||
round_number: uint,
|
||||
|
@ -36,6 +27,17 @@ pub struct LocalImageCache {
|
|||
state_map: UrlMap<ImageState>
|
||||
}
|
||||
|
||||
impl LocalImageCache {
|
||||
pub fn new(image_cache_task: ImageCacheTask) -> LocalImageCache {
|
||||
LocalImageCache {
|
||||
image_cache_task: image_cache_task,
|
||||
round_number: 1,
|
||||
on_image_available: None,
|
||||
state_map: url_map()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[deriving(Clone)]
|
||||
struct ImageState {
|
||||
prefetched: bool,
|
||||
|
|
|
@ -43,7 +43,7 @@ fn parse_css(provenance: StylesheetProvenance) -> Stylesheet {
|
|||
}
|
||||
InlineProvenance(base_url, data) => {
|
||||
debug!("cssparse: loading inline stylesheet {:s}", data);
|
||||
Stylesheet::from_str(data.as_slice(), base_url, environment_encoding)
|
||||
Stylesheet::from_str(data.as_slice(), base_url)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,12 +53,12 @@ impl Stylesheet {
|
|||
bytes: &[u8], base_url: Url, protocol_encoding_label: Option<&str>,
|
||||
environment_encoding: Option<EncodingRef>) -> Stylesheet {
|
||||
// TODO: bytes.as_slice could be bytes.container_as_bytes()
|
||||
let (string, used_encoding) = decode_stylesheet_bytes(
|
||||
let (string, _) = decode_stylesheet_bytes(
|
||||
bytes.as_slice(), protocol_encoding_label, environment_encoding);
|
||||
Stylesheet::from_str(string.as_slice(), base_url, used_encoding)
|
||||
Stylesheet::from_str(string.as_slice(), base_url)
|
||||
}
|
||||
|
||||
pub fn from_str(css: &str, base_url: Url, encoding: EncodingRef) -> Stylesheet {
|
||||
pub fn from_str(css: &str, base_url: Url) -> Stylesheet {
|
||||
static STATE_CHARSET: uint = 1;
|
||||
static STATE_IMPORTS: uint = 2;
|
||||
static STATE_NAMESPACES: uint = 3;
|
||||
|
|
|
@ -101,7 +101,7 @@ pub fn from_cmdline_args(args: &[String]) -> Option<Opts> {
|
|||
let opt_match = match getopts::getopts(args, opts.as_slice()) {
|
||||
Ok(m) => m,
|
||||
Err(f) => {
|
||||
args_fail(f.to_err_msg().as_slice());
|
||||
args_fail(format!("{}", f).as_slice());
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -128,7 +128,7 @@ pub trait SmallVec<T> : SmallVecPrivate<T> {
|
|||
}
|
||||
unsafe {
|
||||
let end: &mut T = mem::transmute(self.end());
|
||||
mem::overwrite(end, value);
|
||||
ptr::write(end, value);
|
||||
let len = self.len();
|
||||
self.set_len(len + 1)
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ fn parse_config(args: Vec<String>) -> Config {
|
|||
let opts = vec!(reqopt("s", "source-dir", "source-dir", "source-dir"));
|
||||
let matches = match getopts(args, opts.as_slice()) {
|
||||
Ok(m) => m,
|
||||
Err(f) => fail!(f.to_err_msg())
|
||||
Err(f) => fail!(format!("{}", f))
|
||||
};
|
||||
|
||||
Config {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue