From d8119d189f4dd06ba866494a8c810382b0ed431a Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Tue, 24 Jan 2017 11:14:28 -0800 Subject: [PATCH] servo: Merge #15164 - Revert several changes that broke tests (from mbrubeck:revert); r=emilio This is based on #15158 by @aneeshusa, with additional reverts. This reverts #15064, which is causing many tests not to run, and #15129 and #15155 which landed while tests were not running and may have caused some new failures in iframe tests. Source-Repo: https://github.com/servo/servo Source-Revision: 185759f87a8dec88f5f65c49ac9df90b47014b19 --- servo/components/compositing/compositor.rs | 16 ++++-- servo/components/config/opts.rs | 3 ++ .../components/constellation/constellation.rs | 54 +++++++++---------- .../components/layout/display_list_builder.rs | 13 +---- servo/components/layout_thread/lib.rs | 11 ---- servo/components/script_traits/lib.rs | 2 + servo/components/script_traits/script_msg.rs | 5 +- servo/tests/heartbeats/characterize.py | 5 ++ .../tests/heartbeats/characterize_android.py | 5 ++ 9 files changed, 57 insertions(+), 57 deletions(-) diff --git a/servo/components/compositing/compositor.rs b/servo/components/compositing/compositor.rs index 49b92f8e1711..6d00a31a9440 100644 --- a/servo/components/compositing/compositor.rs +++ b/servo/components/compositing/compositor.rs @@ -342,13 +342,15 @@ fn initialize_png(width: usize, height: usize) -> RenderTargetInfo { struct RenderNotifier { compositor_proxy: Box, + constellation_chan: Sender, } impl RenderNotifier { fn new(compositor_proxy: Box, - _: Sender) -> RenderNotifier { + constellation_chan: Sender) -> RenderNotifier { RenderNotifier { compositor_proxy: compositor_proxy, + constellation_chan: constellation_chan, } } } @@ -363,8 +365,16 @@ impl webrender_traits::RenderNotifier for RenderNotifier { } fn pipeline_size_changed(&mut self, - _: webrender_traits::PipelineId, - _: Option) { + pipeline_id: webrender_traits::PipelineId, + size: Option) { + let pipeline_id = pipeline_id.from_webrender(); + + if let Some(size) = size { + let msg = ConstellationMsg::FrameSize(pipeline_id, size.to_untyped()); + if let Err(e) = self.constellation_chan.send(msg) { + warn!("Compositor resize to constellation failed ({}).", e); + } + } } } diff --git a/servo/components/config/opts.rs b/servo/components/config/opts.rs index 4abcf1f8421b..df2bb2e041ee 100644 --- a/servo/components/config/opts.rs +++ b/servo/components/config/opts.rs @@ -573,6 +573,8 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { let (app_name, args) = args.split_first().unwrap(); let mut opts = Options::new(); + opts.optflag("c", "cpu", "CPU painting"); + opts.optflag("g", "gpu", "GPU painting"); opts.optopt("o", "output", "Output file", "output.png"); opts.optopt("s", "size", "Size of tiles", "512"); opts.optopt("", "device-pixel-ratio", "Device pixels per px", ""); @@ -618,6 +620,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { opts.optmulti("", "pref", "A preference to set to enable", "dom.mozbrowser.enabled"); opts.optflag("b", "no-native-titlebar", "Do not use native titlebar"); + opts.optflag("w", "webrender", "Use webrender backend"); opts.optopt("G", "graphics", "Select graphics backend (gl or es2)", "gl"); opts.optopt("", "config-dir", "config directory following xdg spec on linux platform", ""); diff --git a/servo/components/constellation/constellation.rs b/servo/components/constellation/constellation.rs index 132bf40e1ac6..e3aefdeaa46f 100644 --- a/servo/components/constellation/constellation.rs +++ b/servo/components/constellation/constellation.rs @@ -817,6 +817,12 @@ impl Constellation debug!("constellation exiting"); self.handle_exit(); } + // The compositor discovered the size of a subframe. This needs to be reflected by all + // frame trees in the navigation context containing the subframe. + FromCompositorMsg::FrameSize(pipeline_id, size) => { + debug!("constellation got frame size message"); + self.handle_frame_size_msg(pipeline_id, &TypedSize2D::from_untyped(&size)); + } FromCompositorMsg::GetFrame(pipeline_id, resp_chan) => { debug!("constellation got get root pipeline message"); self.handle_get_frame(pipeline_id, resp_chan); @@ -1083,12 +1089,6 @@ impl Constellation FromLayoutMsg::ChangeRunningAnimationsState(pipeline_id, animation_state) => { self.handle_change_running_animations_state(pipeline_id, animation_state) } - // Layout sends new sizes for all subframes. This needs to be reflected by all - // frame trees in the navigation context containing the subframe. - FromLayoutMsg::FrameSizes(iframe_sizes) => { - debug!("constellation got frame size message"); - self.handle_frame_size_msg(iframe_sizes); - } FromLayoutMsg::SetCursor(cursor) => { self.handle_set_cursor_msg(cursor) } @@ -1327,30 +1327,30 @@ impl Constellation } fn handle_frame_size_msg(&mut self, - iframe_sizes: Vec<(PipelineId, TypedSize2D)>) { - for (pipeline_id, size) in iframe_sizes { - let result = { - let pipeline = match self.pipelines.get_mut(&pipeline_id) { - Some(pipeline) => pipeline, - None => continue, - }; + pipeline_id: PipelineId, + size: &TypedSize2D) { + let msg = ConstellationControlMsg::Resize(pipeline_id, WindowSizeData { + visible_viewport: *size, + initial_viewport: *size * ScaleFactor::new(1.0), + device_pixel_ratio: self.window_size.device_pixel_ratio, + }, WindowSizeType::Initial); - if pipeline.size == Some(size) { - continue; + // Store the new rect inside the pipeline + let result = { + // Find the pipeline that corresponds to this rectangle. It's possible that this + // pipeline may have already exited before we process this message, so just + // early exit if that occurs. + match self.pipelines.get_mut(&pipeline_id) { + Some(pipeline) => { + pipeline.size = Some(*size); + pipeline.event_loop.send(msg) } - - pipeline.size = Some(size); - let msg = ConstellationControlMsg::Resize(pipeline_id, WindowSizeData { - visible_viewport: size, - initial_viewport: size * ScaleFactor::new(1.0), - device_pixel_ratio: self.window_size.device_pixel_ratio, - }, WindowSizeType::Initial); - - pipeline.event_loop.send(msg) - }; - if let Err(e) = result { - self.handle_send_error(pipeline_id, e); + None => return, } + }; + + if let Err(e) = result { + self.handle_send_error(pipeline_id, e); } } diff --git a/servo/components/layout/display_list_builder.rs b/servo/components/layout/display_list_builder.rs index 107e6cad360b..fa5126471d38 100644 --- a/servo/components/layout/display_list_builder.rs +++ b/servo/components/layout/display_list_builder.rs @@ -14,7 +14,7 @@ use app_units::{AU_PER_PX, Au}; use block::{BlockFlow, BlockStackingContextType}; use canvas_traits::{CanvasData, CanvasMsg, FromLayoutMsg}; use context::SharedLayoutContext; -use euclid::{Point2D, Rect, SideOffsets2D, Size2D, TypedSize2D}; +use euclid::{Point2D, Rect, SideOffsets2D, Size2D}; use flex::FlexFlow; use flow::{BaseFlow, Flow, IS_ABSOLUTELY_POSITIONED}; use flow_ref::FlowRef; @@ -32,7 +32,6 @@ use inline::{FIRST_FRAGMENT_OF_ELEMENT, InlineFlow, LAST_FRAGMENT_OF_ELEMENT}; use ipc_channel::ipc; use list_item::ListItemFlow; use model::{self, MaybeAuto}; -use msg::constellation_msg::PipelineId; use net_traits::image::base::PixelFormat; use net_traits::image_cache_thread::UsePlaceholder; use range::Range; @@ -57,7 +56,6 @@ use style::servo::restyle_damage::REPAINT; use style::values::{RGBA, computed}; use style::values::computed::{AngleOrCorner, Gradient, GradientKind, LengthOrPercentage, LengthOrPercentageOrAuto}; use style::values::specified::{HorizontalDirection, VerticalDirection}; -use style_traits::PagePx; use style_traits::cursor::Cursor; use table_cell::CollapsedBordersForCell; use webrender_traits::{ColorF, GradientStop, ScrollPolicy}; @@ -107,10 +105,6 @@ pub struct DisplayListBuildState<'a> { /// The current scroll root id, used to keep track of state when /// recursively building and processing the display list. pub current_scroll_root_id: ScrollRootId, - - /// Vector containing iframe sizes, used to inform the constellation about - /// new iframe sizes - pub iframe_sizes: Vec<(PipelineId, TypedSize2D)>, } impl<'a> DisplayListBuildState<'a> { @@ -124,7 +118,6 @@ impl<'a> DisplayListBuildState<'a> { processing_scroll_root_element: false, current_stacking_context_id: StackingContextId::root(), current_scroll_root_id: ScrollRootId::root(), - iframe_sizes: Vec::new(), } } @@ -1450,10 +1443,6 @@ impl FragmentDisplayListBuilding for Fragment { iframe: fragment_info.pipeline_id, }); - let size = Size2D::new(item.bounds().size.width.to_f32_px(), - item.bounds().size.height.to_f32_px()); - state.iframe_sizes.push((fragment_info.pipeline_id, TypedSize2D::from_untyped(&size))); - state.add_display_item(item); } } diff --git a/servo/components/layout_thread/lib.rs b/servo/components/layout_thread/lib.rs index cf6ff5571334..19c86f64fff1 100644 --- a/servo/components/layout_thread/lib.rs +++ b/servo/components/layout_thread/lib.rs @@ -933,17 +933,6 @@ impl LayoutThread { let origin = Rect::new(Point2D::new(Au(0), Au(0)), root_size); build_state.root_stacking_context.bounds = origin; build_state.root_stacking_context.overflow = origin; - - if !build_state.iframe_sizes.is_empty() { - // build_state.iframe_sizes is only used here, so its okay to replace - // it with an empty vector - let iframe_sizes = std::mem::replace(&mut build_state.iframe_sizes, vec![]); - let msg = ConstellationMsg::FrameSizes(iframe_sizes); - if let Err(e) = self.constellation_chan.send(msg) { - warn!("Layout resize to constellation failed ({}).", e); - } - } - rw_data.display_list = Some(Arc::new(build_state.to_display_list())); } (ReflowGoal::ForScriptQuery, false) => {} diff --git a/servo/components/script_traits/lib.rs b/servo/components/script_traits/lib.rs index 295000380ca8..c01311583269 100644 --- a/servo/components/script_traits/lib.rs +++ b/servo/components/script_traits/lib.rs @@ -696,6 +696,8 @@ pub enum WebDriverCommandMsg { pub enum ConstellationMsg { /// Exit the constellation. Exit, + /// Inform the constellation of the size of the viewport. + FrameSize(PipelineId, Size2D), /// Request that the constellation send the FrameId corresponding to the document /// with the provided pipeline id GetFrame(PipelineId, IpcSender>), diff --git a/servo/components/script_traits/script_msg.rs b/servo/components/script_traits/script_msg.rs index d35e23a7bb99..fc29563cbbd1 100644 --- a/servo/components/script_traits/script_msg.rs +++ b/servo/components/script_traits/script_msg.rs @@ -15,7 +15,7 @@ use WorkerScriptLoadOrigin; use canvas_traits::CanvasMsg; use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId}; use euclid::point::Point2D; -use euclid::size::{Size2D, TypedSize2D}; +use euclid::size::Size2D; use gfx_traits::ScrollRootId; use ipc_channel::ipc::IpcSender; use msg::constellation_msg::{FrameId, PipelineId, TraversalDirection}; @@ -24,7 +24,6 @@ use net_traits::CoreResourceMsg; use net_traits::storage_thread::StorageType; use offscreen_gl_context::{GLContextAttributes, GLLimits}; use servo_url::ServoUrl; -use style_traits::PagePx; use style_traits::cursor::Cursor; use style_traits::viewport::ViewportConstraints; @@ -33,8 +32,6 @@ use style_traits::viewport::ViewportConstraints; pub enum LayoutMsg { /// Indicates whether this pipeline is currently running animations. ChangeRunningAnimationsState(PipelineId, AnimationState), - /// Inform the constellation of the size of the pipeline's viewport. - FrameSizes(Vec<(PipelineId, TypedSize2D)>), /// Requests that the constellation inform the compositor of the a cursor change. SetCursor(Cursor), /// Notifies the constellation that the viewport has been constrained in some manner diff --git a/servo/tests/heartbeats/characterize.py b/servo/tests/heartbeats/characterize.py index 22f2028e388d..948f5b9de43b 100644 --- a/servo/tests/heartbeats/characterize.py +++ b/servo/tests/heartbeats/characterize.py @@ -210,6 +210,9 @@ def main(): parser.add_argument("-d", "--debug", action='store_true', help="Use debug build instead of release build") + parser.add_argument("-w", "--webrender", + action='store_true', + help="Use webrender backend") parser.add_argument("-l", "--max_layout_threads", help="Specify the maximum number of threads for layout, for example \"-l 5\"") parser.add_argument("-o", "--output", @@ -230,6 +233,8 @@ def main(): benchmark = args.benchmark if args.debug: build_target = "debug" + if args.webrender: + renderer = "-w" if args.max_layout_threads: max_layout_threads = int(args.max_layout_threads) if args.output: diff --git a/servo/tests/heartbeats/characterize_android.py b/servo/tests/heartbeats/characterize_android.py index 0b9b0807fe59..aae26ac2cbb3 100644 --- a/servo/tests/heartbeats/characterize_android.py +++ b/servo/tests/heartbeats/characterize_android.py @@ -85,6 +85,9 @@ def main(): parser.add_argument("-b", "--benchmark", default=benchmark, help="Gets the benchmark, for example \"-b http://www.example.com\"") + parser.add_argument("-w", "--webrender", + action='store_true', + help="Use webrender backend") parser.add_argument("-l", "--layout_threads", help="Specify the number of threads for layout, for example \"-l 5\"") parser.add_argument("-o", "--output", @@ -96,6 +99,8 @@ def main(): args = parser.parse_args() if args.benchmark: benchmark = args.benchmark + if args.webrender: + renderer = "-w" if args.layout_threads: layout_threads = int(args.layout_threads) if args.output: