Shut down the profiler in headless compositing mode

This commit is contained in:
Patrick Walton 2014-02-20 22:15:44 -08:00
parent 65191b0d63
commit 509cc3cb3a
3 changed files with 16 additions and 7 deletions

View file

@ -209,7 +209,8 @@ impl CompositorTask {
} }
Headless => { Headless => {
headless::NullCompositor::create(port, headless::NullCompositor::create(port,
constellation_chan.clone()) constellation_chan.clone(),
profiler_chan)
} }
}; };
} }

View file

@ -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) {

View file

@ -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
} }