mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
auto merge of #1726 : pcwalton/servo/shut-down-profiler, r=kmcallister
This fixes a hang in content tests in my deleafset branch. No idea why it worked before though… This just replicates the code in non-headless mode over to the headless mode. r? @kmcallister
This commit is contained in:
commit
c140b33f0b
3 changed files with 16 additions and 7 deletions
|
@ -209,7 +209,8 @@ impl CompositorTask {
|
||||||
}
|
}
|
||||||
Headless => {
|
Headless => {
|
||||||
headless::NullCompositor::create(port,
|
headless::NullCompositor::create(port,
|
||||||
constellation_chan.clone())
|
constellation_chan.clone(),
|
||||||
|
profiler_chan)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,8 @@ use compositing::*;
|
||||||
use geom::size::Size2D;
|
use geom::size::Size2D;
|
||||||
use servo_msg::constellation_msg::{ConstellationChan, ExitMsg, ResizedWindowMsg};
|
use servo_msg::constellation_msg::{ConstellationChan, ExitMsg, ResizedWindowMsg};
|
||||||
use std::comm::Port;
|
use std::comm::Port;
|
||||||
|
use servo_util::time::ProfilerChan;
|
||||||
|
use servo_util::time;
|
||||||
|
|
||||||
/// Starts the compositor, which listens for messages on the specified port.
|
/// Starts the compositor, which listens for messages on the specified port.
|
||||||
///
|
///
|
||||||
|
@ -19,20 +20,26 @@ pub struct NullCompositor {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NullCompositor {
|
impl NullCompositor {
|
||||||
|
|
||||||
fn new(port: Port<Msg>) -> NullCompositor {
|
fn new(port: Port<Msg>) -> NullCompositor {
|
||||||
|
|
||||||
NullCompositor {
|
NullCompositor {
|
||||||
port: port
|
port: port,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create(port: Port<Msg>, constellation_chan: ConstellationChan) {
|
pub fn create(port: Port<Msg>,
|
||||||
|
constellation_chan: ConstellationChan,
|
||||||
|
profiler_chan: ProfilerChan) {
|
||||||
let compositor = NullCompositor::new(port);
|
let compositor = NullCompositor::new(port);
|
||||||
|
|
||||||
// Tell the constellation about the initial fake size.
|
// Tell the constellation about the initial fake size.
|
||||||
constellation_chan.send(ResizedWindowMsg(Size2D(640u, 480u)));
|
constellation_chan.send(ResizedWindowMsg(Size2D(640u, 480u)));
|
||||||
compositor.handle_message(constellation_chan);
|
compositor.handle_message(constellation_chan);
|
||||||
|
|
||||||
|
// Drain compositor port, sometimes messages contain channels that are blocking
|
||||||
|
// another task from finishing (i.e. SetIds)
|
||||||
|
while compositor.port.try_recv().is_some() {}
|
||||||
|
|
||||||
|
profiler_chan.send(time::ExitMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_message(&self, constellation_chan: ConstellationChan) {
|
fn handle_message(&self, constellation_chan: ConstellationChan) {
|
||||||
|
|
|
@ -235,7 +235,7 @@ impl ImageResponder for LayoutImageResponder {
|
||||||
let id = self.id.clone();
|
let id = self.id.clone();
|
||||||
let script_chan = self.script_chan.clone();
|
let script_chan = self.script_chan.clone();
|
||||||
let f: proc(ImageResponseMsg) = proc(_) {
|
let f: proc(ImageResponseMsg) = proc(_) {
|
||||||
script_chan.send(SendEventMsg(id.clone(), ReflowEvent))
|
drop(script_chan.try_send(SendEventMsg(id.clone(), ReflowEvent)))
|
||||||
};
|
};
|
||||||
f
|
f
|
||||||
}
|
}
|
||||||
|
@ -392,6 +392,7 @@ impl LayoutTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExitNowMsg => {
|
ExitNowMsg => {
|
||||||
|
debug!("layout task is exiting...");
|
||||||
self.exit_now();
|
self.exit_now();
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue