Auto merge of #11443 - kyleheadley:remove_trait_11339, r=asajeffrey

Remove CompositorEventListener trait

<!-- Please describe your changes on the following line: -->

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #11339 (github issue number if applicable).

<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because refactoring

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11443)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-06-01 14:06:41 -05:00
commit c641ec97f0
6 changed files with 41 additions and 53 deletions

View file

@ -6,8 +6,8 @@ use CompositionPipeline;
use SendableFrameTree; use SendableFrameTree;
use app_units::Au; use app_units::Au;
use compositor_layer::{CompositorData, CompositorLayer, RcCompositorLayer, WantsScrollEventsFlag}; use compositor_layer::{CompositorData, CompositorLayer, RcCompositorLayer, WantsScrollEventsFlag};
use compositor_thread::{CompositorEventListener, CompositorProxy}; use compositor_thread::{CompositorProxy, CompositorReceiver};
use compositor_thread::{CompositorReceiver, InitialCompositorState, Msg, RenderListener}; use compositor_thread::{InitialCompositorState, Msg, RenderListener};
use delayed_composition::DelayedCompositionTimerProxy; use delayed_composition::DelayedCompositionTimerProxy;
use euclid::point::TypedPoint2D; use euclid::point::TypedPoint2D;
use euclid::rect::TypedRect; use euclid::rect::TypedRect;
@ -2501,31 +2501,8 @@ impl<Window: WindowMethods> IOCompositor<Window> {
webrender_api.tick_scrolling_bounce_animations() webrender_api.tick_scrolling_bounce_animations()
} }
} }
}
fn find_layer_with_pipeline_and_layer_id_for_layer(layer: Rc<Layer<CompositorData>>, pub fn handle_events(&mut self, messages: Vec<WindowEvent>) -> bool {
pipeline_id: PipelineId,
layer_id: LayerId)
-> Option<Rc<Layer<CompositorData>>> {
if layer.extra_data.borrow().pipeline_id == pipeline_id &&
layer.extra_data.borrow().id == layer_id {
return Some(layer);
}
for kid in &*layer.children() {
let result = find_layer_with_pipeline_and_layer_id_for_layer(kid.clone(),
pipeline_id,
layer_id);
if result.is_some() {
return result;
}
}
None
}
impl<Window> CompositorEventListener for IOCompositor<Window> where Window: WindowMethods {
fn handle_events(&mut self, messages: Vec<WindowEvent>) -> bool {
// Check for new messages coming from the other threads in the system. // Check for new messages coming from the other threads in the system.
while let Some(msg) = self.port.try_recv_compositor_msg() { while let Some(msg) = self.port.try_recv_compositor_msg() {
if !self.handle_browser_message(msg) { if !self.handle_browser_message(msg) {
@ -2568,7 +2545,7 @@ impl<Window> CompositorEventListener for IOCompositor<Window> where Window: Wind
/// paint is not scheduled the compositor will hang forever. /// paint is not scheduled the compositor will hang forever.
/// ///
/// This is used when resizing the window. /// This is used when resizing the window.
fn repaint_synchronously(&mut self) { pub fn repaint_synchronously(&mut self) {
if self.webrender.is_none() { if self.webrender.is_none() {
while self.shutdown_state != ShutdownState::ShuttingDown { while self.shutdown_state != ShutdownState::ShuttingDown {
let msg = self.port.recv_compositor_msg(); let msg = self.port.recv_compositor_msg();
@ -2604,11 +2581,11 @@ impl<Window> CompositorEventListener for IOCompositor<Window> where Window: Wind
} }
} }
fn pinch_zoom_level(&self) -> f32 { pub fn pinch_zoom_level(&self) -> f32 {
self.viewport_zoom.get() as f32 self.viewport_zoom.get() as f32
} }
fn title_for_main_frame(&self) { pub fn title_for_main_frame(&self) {
let root_pipeline_id = match self.root_pipeline { let root_pipeline_id = match self.root_pipeline {
None => return, None => return,
Some(ref root_pipeline) => root_pipeline.id, Some(ref root_pipeline) => root_pipeline.id,
@ -2620,6 +2597,27 @@ impl<Window> CompositorEventListener for IOCompositor<Window> where Window: Wind
} }
} }
fn find_layer_with_pipeline_and_layer_id_for_layer(layer: Rc<Layer<CompositorData>>,
pipeline_id: PipelineId,
layer_id: LayerId)
-> Option<Rc<Layer<CompositorData>>> {
if layer.extra_data.borrow().pipeline_id == pipeline_id &&
layer.extra_data.borrow().id == layer_id {
return Some(layer);
}
for kid in &*layer.children() {
let result = find_layer_with_pipeline_and_layer_id_for_layer(kid.clone(),
pipeline_id,
layer_id);
if result.is_some() {
return result;
}
}
None
}
/// Why we performed a composite. This is used for debugging. /// Why we performed a composite. This is used for debugging.
#[derive(Copy, Clone, PartialEq, Debug)] #[derive(Copy, Clone, PartialEq, Debug)]
pub enum CompositingReason { pub enum CompositingReason {

View file

@ -5,7 +5,7 @@
//! Communication with the compositor thread. //! Communication with the compositor thread.
use SendableFrameTree; use SendableFrameTree;
use compositor::{self, CompositingReason}; use compositor::{CompositingReason, IOCompositor};
use euclid::point::Point2D; use euclid::point::Point2D;
use euclid::size::Size2D; use euclid::size::Size2D;
use gfx_traits::{Epoch, FrameTreeId, LayerId, LayerProperties, PaintListener}; use gfx_traits::{Epoch, FrameTreeId, LayerId, LayerProperties, PaintListener};
@ -24,7 +24,7 @@ use style_traits::viewport::ViewportConstraints;
use url::Url; use url::Url;
use webrender; use webrender;
use webrender_traits; use webrender_traits;
use windowing::{WindowEvent, WindowMethods}; use windowing::WindowMethods;
/// Sends messages to the compositor. This is a trait supplied by the port because the method used /// Sends messages to the compositor. This is a trait supplied by the port because the method used
/// to communicate with the compositor may have to kick OS event loops awake, communicate cross- /// to communicate with the compositor may have to kick OS event loops awake, communicate cross-
@ -236,21 +236,12 @@ pub struct CompositorThread;
impl CompositorThread { impl CompositorThread {
pub fn create<Window>(window: Rc<Window>, pub fn create<Window>(window: Rc<Window>,
state: InitialCompositorState) state: InitialCompositorState)
-> Box<CompositorEventListener + 'static> -> IOCompositor<Window>
where Window: WindowMethods + 'static { where Window: WindowMethods + 'static {
box compositor::IOCompositor::create(window, state) IOCompositor::create(window, state)
as Box<CompositorEventListener>
} }
} }
pub trait CompositorEventListener {
fn handle_events(&mut self, events: Vec<WindowEvent>) -> bool;
fn repaint_synchronously(&mut self);
fn pinch_zoom_level(&self) -> f32;
/// Requests that the compositor send the title for the main frame as soon as possible.
fn title_for_main_frame(&self);
}
/// Data used to construct a compositor. /// Data used to construct a compositor.
pub struct InitialCompositorState { pub struct InitialCompositorState {
/// A channel to the compositor. /// A channel to the compositor.

View file

@ -36,7 +36,8 @@ extern crate util;
extern crate webrender; extern crate webrender;
extern crate webrender_traits; extern crate webrender_traits;
pub use compositor_thread::{CompositorEventListener, CompositorProxy, CompositorThread}; pub use compositor_thread::{CompositorProxy, CompositorThread};
pub use compositor::IOCompositor;
use euclid::size::TypedSize2D; use euclid::size::TypedSize2D;
use gfx::paint_thread::ChromeToPaintMsg; use gfx::paint_thread::ChromeToPaintMsg;
use ipc_channel::ipc::IpcSender; use ipc_channel::ipc::IpcSender;

View file

@ -57,11 +57,10 @@ fn webdriver(port: u16, constellation: Sender<ConstellationMsg>) {
#[cfg(not(feature = "webdriver"))] #[cfg(not(feature = "webdriver"))]
fn webdriver(_port: u16, _constellation: Sender<ConstellationMsg>) { } fn webdriver(_port: u16, _constellation: Sender<ConstellationMsg>) { }
use compositing::CompositorEventListener;
use compositing::compositor_thread::InitialCompositorState; use compositing::compositor_thread::InitialCompositorState;
use compositing::windowing::WindowEvent; use compositing::windowing::WindowEvent;
use compositing::windowing::WindowMethods; use compositing::windowing::WindowMethods;
use compositing::{CompositorProxy, CompositorThread}; use compositing::{CompositorProxy, CompositorThread, IOCompositor};
#[cfg(not(target_os = "windows"))] #[cfg(not(target_os = "windows"))]
use constellation::content_process_sandbox_profile; use constellation::content_process_sandbox_profile;
use constellation::{Constellation, InitialConstellationState, UnprivilegedPipelineContent}; use constellation::{Constellation, InitialConstellationState, UnprivilegedPipelineContent};
@ -97,13 +96,12 @@ pub use gleam::gl;
/// application Servo is embedded in. Clients then create an event /// application Servo is embedded in. Clients then create an event
/// loop to pump messages between the embedding application and /// loop to pump messages between the embedding application and
/// various browser components. /// various browser components.
pub struct Browser { pub struct Browser<Window: WindowMethods + 'static> {
compositor: Box<CompositorEventListener + 'static>, compositor: IOCompositor<Window>,
} }
impl Browser { impl<Window> Browser<Window> where Window: WindowMethods + 'static {
pub fn new<Window>(window: Rc<Window>) -> Browser pub fn new(window: Rc<Window>) -> Browser<Window> {
where Window: WindowMethods + 'static {
// Global configuration options, parsed from the command line. // Global configuration options, parsed from the command line.
let opts = opts::get(); let opts = opts::get();

View file

@ -98,7 +98,7 @@ fn unregister_glutin_resize_handler(window: &Rc<app::window::Window>) {
} }
struct BrowserWrapper { struct BrowserWrapper {
browser: Browser, browser: Browser<app::window::Window>,
} }
impl app::NestedEventLoopListener for BrowserWrapper { impl app::NestedEventLoopListener for BrowserWrapper {

View file

@ -27,8 +27,8 @@ thread_local!(pub static BROWSERS: RefCell<Vec<CefBrowser>> = RefCell::new(vec!(
pub enum ServoBrowser { pub enum ServoBrowser {
Invalid, Invalid,
OnScreen(Browser), OnScreen(Browser<glutin_app::window::Window>),
OffScreen(Browser), OffScreen(Browser<window::Window>),
} }
impl ServoBrowser { impl ServoBrowser {