mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Auto merge of #15164 - mbrubeck:revert, r=emilio
Revert several changes that broke tests 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. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15164) <!-- Reviewable:end -->
This commit is contained in:
commit
185759f87a
26 changed files with 149 additions and 126 deletions
|
@ -342,13 +342,15 @@ fn initialize_png(width: usize, height: usize) -> RenderTargetInfo {
|
||||||
|
|
||||||
struct RenderNotifier {
|
struct RenderNotifier {
|
||||||
compositor_proxy: Box<CompositorProxy>,
|
compositor_proxy: Box<CompositorProxy>,
|
||||||
|
constellation_chan: Sender<ConstellationMsg>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RenderNotifier {
|
impl RenderNotifier {
|
||||||
fn new(compositor_proxy: Box<CompositorProxy>,
|
fn new(compositor_proxy: Box<CompositorProxy>,
|
||||||
_: Sender<ConstellationMsg>) -> RenderNotifier {
|
constellation_chan: Sender<ConstellationMsg>) -> RenderNotifier {
|
||||||
RenderNotifier {
|
RenderNotifier {
|
||||||
compositor_proxy: compositor_proxy,
|
compositor_proxy: compositor_proxy,
|
||||||
|
constellation_chan: constellation_chan,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,8 +365,16 @@ impl webrender_traits::RenderNotifier for RenderNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pipeline_size_changed(&mut self,
|
fn pipeline_size_changed(&mut self,
|
||||||
_: webrender_traits::PipelineId,
|
pipeline_id: webrender_traits::PipelineId,
|
||||||
_: Option<webrender_traits::LayoutSize>) {
|
size: Option<webrender_traits::LayoutSize>) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -573,6 +573,8 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
||||||
let (app_name, args) = args.split_first().unwrap();
|
let (app_name, args) = args.split_first().unwrap();
|
||||||
|
|
||||||
let mut opts = Options::new();
|
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("o", "output", "Output file", "output.png");
|
||||||
opts.optopt("s", "size", "Size of tiles", "512");
|
opts.optopt("s", "size", "Size of tiles", "512");
|
||||||
opts.optopt("", "device-pixel-ratio", "Device pixels per px", "");
|
opts.optopt("", "device-pixel-ratio", "Device pixels per px", "");
|
||||||
|
@ -618,6 +620,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
||||||
opts.optmulti("", "pref",
|
opts.optmulti("", "pref",
|
||||||
"A preference to set to enable", "dom.mozbrowser.enabled");
|
"A preference to set to enable", "dom.mozbrowser.enabled");
|
||||||
opts.optflag("b", "no-native-titlebar", "Do not use native titlebar");
|
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("G", "graphics", "Select graphics backend (gl or es2)", "gl");
|
||||||
opts.optopt("", "config-dir",
|
opts.optopt("", "config-dir",
|
||||||
"config directory following xdg spec on linux platform", "");
|
"config directory following xdg spec on linux platform", "");
|
||||||
|
|
|
@ -817,6 +817,12 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
||||||
debug!("constellation exiting");
|
debug!("constellation exiting");
|
||||||
self.handle_exit();
|
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) => {
|
FromCompositorMsg::GetFrame(pipeline_id, resp_chan) => {
|
||||||
debug!("constellation got get root pipeline message");
|
debug!("constellation got get root pipeline message");
|
||||||
self.handle_get_frame(pipeline_id, resp_chan);
|
self.handle_get_frame(pipeline_id, resp_chan);
|
||||||
|
@ -1083,12 +1089,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
||||||
FromLayoutMsg::ChangeRunningAnimationsState(pipeline_id, animation_state) => {
|
FromLayoutMsg::ChangeRunningAnimationsState(pipeline_id, animation_state) => {
|
||||||
self.handle_change_running_animations_state(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) => {
|
FromLayoutMsg::SetCursor(cursor) => {
|
||||||
self.handle_set_cursor_msg(cursor)
|
self.handle_set_cursor_msg(cursor)
|
||||||
}
|
}
|
||||||
|
@ -1327,30 +1327,30 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_frame_size_msg(&mut self,
|
fn handle_frame_size_msg(&mut self,
|
||||||
iframe_sizes: Vec<(PipelineId, TypedSize2D<f32, PagePx>)>) {
|
pipeline_id: PipelineId,
|
||||||
for (pipeline_id, size) in iframe_sizes {
|
size: &TypedSize2D<f32, PagePx>) {
|
||||||
let result = {
|
let msg = ConstellationControlMsg::Resize(pipeline_id, WindowSizeData {
|
||||||
let pipeline = match self.pipelines.get_mut(&pipeline_id) {
|
visible_viewport: *size,
|
||||||
Some(pipeline) => pipeline,
|
initial_viewport: *size * ScaleFactor::new(1.0),
|
||||||
None => continue,
|
device_pixel_ratio: self.window_size.device_pixel_ratio,
|
||||||
};
|
}, WindowSizeType::Initial);
|
||||||
|
|
||||||
if pipeline.size == Some(size) {
|
// Store the new rect inside the pipeline
|
||||||
continue;
|
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)
|
||||||
}
|
}
|
||||||
|
None => return,
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Err(e) = result {
|
||||||
|
self.handle_send_error(pipeline_id, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ use app_units::{AU_PER_PX, Au};
|
||||||
use block::{BlockFlow, BlockStackingContextType};
|
use block::{BlockFlow, BlockStackingContextType};
|
||||||
use canvas_traits::{CanvasData, CanvasMsg, FromLayoutMsg};
|
use canvas_traits::{CanvasData, CanvasMsg, FromLayoutMsg};
|
||||||
use context::SharedLayoutContext;
|
use context::SharedLayoutContext;
|
||||||
use euclid::{Point2D, Rect, SideOffsets2D, Size2D, TypedSize2D};
|
use euclid::{Point2D, Rect, SideOffsets2D, Size2D};
|
||||||
use flex::FlexFlow;
|
use flex::FlexFlow;
|
||||||
use flow::{BaseFlow, Flow, IS_ABSOLUTELY_POSITIONED};
|
use flow::{BaseFlow, Flow, IS_ABSOLUTELY_POSITIONED};
|
||||||
use flow_ref::FlowRef;
|
use flow_ref::FlowRef;
|
||||||
|
@ -32,7 +32,6 @@ use inline::{FIRST_FRAGMENT_OF_ELEMENT, InlineFlow, LAST_FRAGMENT_OF_ELEMENT};
|
||||||
use ipc_channel::ipc;
|
use ipc_channel::ipc;
|
||||||
use list_item::ListItemFlow;
|
use list_item::ListItemFlow;
|
||||||
use model::{self, MaybeAuto};
|
use model::{self, MaybeAuto};
|
||||||
use msg::constellation_msg::PipelineId;
|
|
||||||
use net_traits::image::base::PixelFormat;
|
use net_traits::image::base::PixelFormat;
|
||||||
use net_traits::image_cache_thread::UsePlaceholder;
|
use net_traits::image_cache_thread::UsePlaceholder;
|
||||||
use range::Range;
|
use range::Range;
|
||||||
|
@ -57,7 +56,6 @@ use style::servo::restyle_damage::REPAINT;
|
||||||
use style::values::{RGBA, computed};
|
use style::values::{RGBA, computed};
|
||||||
use style::values::computed::{AngleOrCorner, Gradient, GradientKind, LengthOrPercentage, LengthOrPercentageOrAuto};
|
use style::values::computed::{AngleOrCorner, Gradient, GradientKind, LengthOrPercentage, LengthOrPercentageOrAuto};
|
||||||
use style::values::specified::{HorizontalDirection, VerticalDirection};
|
use style::values::specified::{HorizontalDirection, VerticalDirection};
|
||||||
use style_traits::PagePx;
|
|
||||||
use style_traits::cursor::Cursor;
|
use style_traits::cursor::Cursor;
|
||||||
use table_cell::CollapsedBordersForCell;
|
use table_cell::CollapsedBordersForCell;
|
||||||
use webrender_traits::{ColorF, GradientStop, ScrollPolicy};
|
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
|
/// The current scroll root id, used to keep track of state when
|
||||||
/// recursively building and processing the display list.
|
/// recursively building and processing the display list.
|
||||||
pub current_scroll_root_id: ScrollRootId,
|
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<f32, PagePx>)>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> DisplayListBuildState<'a> {
|
impl<'a> DisplayListBuildState<'a> {
|
||||||
|
@ -124,7 +118,6 @@ impl<'a> DisplayListBuildState<'a> {
|
||||||
processing_scroll_root_element: false,
|
processing_scroll_root_element: false,
|
||||||
current_stacking_context_id: StackingContextId::root(),
|
current_stacking_context_id: StackingContextId::root(),
|
||||||
current_scroll_root_id: ScrollRootId::root(),
|
current_scroll_root_id: ScrollRootId::root(),
|
||||||
iframe_sizes: Vec::new(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1450,10 +1443,6 @@ impl FragmentDisplayListBuilding for Fragment {
|
||||||
iframe: fragment_info.pipeline_id,
|
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);
|
state.add_display_item(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -933,17 +933,6 @@ impl LayoutThread {
|
||||||
let origin = Rect::new(Point2D::new(Au(0), Au(0)), root_size);
|
let origin = Rect::new(Point2D::new(Au(0), Au(0)), root_size);
|
||||||
build_state.root_stacking_context.bounds = origin;
|
build_state.root_stacking_context.bounds = origin;
|
||||||
build_state.root_stacking_context.overflow = 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()));
|
rw_data.display_list = Some(Arc::new(build_state.to_display_list()));
|
||||||
}
|
}
|
||||||
(ReflowGoal::ForScriptQuery, false) => {}
|
(ReflowGoal::ForScriptQuery, false) => {}
|
||||||
|
|
|
@ -696,6 +696,8 @@ pub enum WebDriverCommandMsg {
|
||||||
pub enum ConstellationMsg {
|
pub enum ConstellationMsg {
|
||||||
/// Exit the constellation.
|
/// Exit the constellation.
|
||||||
Exit,
|
Exit,
|
||||||
|
/// Inform the constellation of the size of the viewport.
|
||||||
|
FrameSize(PipelineId, Size2D<f32>),
|
||||||
/// Request that the constellation send the FrameId corresponding to the document
|
/// Request that the constellation send the FrameId corresponding to the document
|
||||||
/// with the provided pipeline id
|
/// with the provided pipeline id
|
||||||
GetFrame(PipelineId, IpcSender<Option<FrameId>>),
|
GetFrame(PipelineId, IpcSender<Option<FrameId>>),
|
||||||
|
|
|
@ -15,7 +15,7 @@ use WorkerScriptLoadOrigin;
|
||||||
use canvas_traits::CanvasMsg;
|
use canvas_traits::CanvasMsg;
|
||||||
use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId};
|
use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId};
|
||||||
use euclid::point::Point2D;
|
use euclid::point::Point2D;
|
||||||
use euclid::size::{Size2D, TypedSize2D};
|
use euclid::size::Size2D;
|
||||||
use gfx_traits::ScrollRootId;
|
use gfx_traits::ScrollRootId;
|
||||||
use ipc_channel::ipc::IpcSender;
|
use ipc_channel::ipc::IpcSender;
|
||||||
use msg::constellation_msg::{FrameId, PipelineId, TraversalDirection};
|
use msg::constellation_msg::{FrameId, PipelineId, TraversalDirection};
|
||||||
|
@ -24,7 +24,6 @@ use net_traits::CoreResourceMsg;
|
||||||
use net_traits::storage_thread::StorageType;
|
use net_traits::storage_thread::StorageType;
|
||||||
use offscreen_gl_context::{GLContextAttributes, GLLimits};
|
use offscreen_gl_context::{GLContextAttributes, GLLimits};
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
use style_traits::PagePx;
|
|
||||||
use style_traits::cursor::Cursor;
|
use style_traits::cursor::Cursor;
|
||||||
use style_traits::viewport::ViewportConstraints;
|
use style_traits::viewport::ViewportConstraints;
|
||||||
|
|
||||||
|
@ -33,8 +32,6 @@ use style_traits::viewport::ViewportConstraints;
|
||||||
pub enum LayoutMsg {
|
pub enum LayoutMsg {
|
||||||
/// Indicates whether this pipeline is currently running animations.
|
/// Indicates whether this pipeline is currently running animations.
|
||||||
ChangeRunningAnimationsState(PipelineId, AnimationState),
|
ChangeRunningAnimationsState(PipelineId, AnimationState),
|
||||||
/// Inform the constellation of the size of the pipeline's viewport.
|
|
||||||
FrameSizes(Vec<(PipelineId, TypedSize2D<f32, PagePx>)>),
|
|
||||||
/// Requests that the constellation inform the compositor of the a cursor change.
|
/// Requests that the constellation inform the compositor of the a cursor change.
|
||||||
SetCursor(Cursor),
|
SetCursor(Cursor),
|
||||||
/// Notifies the constellation that the viewport has been constrained in some manner
|
/// Notifies the constellation that the viewport has been constrained in some manner
|
||||||
|
|
|
@ -210,6 +210,9 @@ def main():
|
||||||
parser.add_argument("-d", "--debug",
|
parser.add_argument("-d", "--debug",
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help="Use debug build instead of release build")
|
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",
|
parser.add_argument("-l", "--max_layout_threads",
|
||||||
help="Specify the maximum number of threads for layout, for example \"-l 5\"")
|
help="Specify the maximum number of threads for layout, for example \"-l 5\"")
|
||||||
parser.add_argument("-o", "--output",
|
parser.add_argument("-o", "--output",
|
||||||
|
@ -230,6 +233,8 @@ def main():
|
||||||
benchmark = args.benchmark
|
benchmark = args.benchmark
|
||||||
if args.debug:
|
if args.debug:
|
||||||
build_target = "debug"
|
build_target = "debug"
|
||||||
|
if args.webrender:
|
||||||
|
renderer = "-w"
|
||||||
if args.max_layout_threads:
|
if args.max_layout_threads:
|
||||||
max_layout_threads = int(args.max_layout_threads)
|
max_layout_threads = int(args.max_layout_threads)
|
||||||
if args.output:
|
if args.output:
|
||||||
|
|
|
@ -85,6 +85,9 @@ def main():
|
||||||
parser.add_argument("-b", "--benchmark",
|
parser.add_argument("-b", "--benchmark",
|
||||||
default=benchmark,
|
default=benchmark,
|
||||||
help="Gets the benchmark, for example \"-b http://www.example.com\"")
|
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",
|
parser.add_argument("-l", "--layout_threads",
|
||||||
help="Specify the number of threads for layout, for example \"-l 5\"")
|
help="Specify the number of threads for layout, for example \"-l 5\"")
|
||||||
parser.add_argument("-o", "--output",
|
parser.add_argument("-o", "--output",
|
||||||
|
@ -96,6 +99,8 @@ def main():
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
if args.benchmark:
|
if args.benchmark:
|
||||||
benchmark = args.benchmark
|
benchmark = args.benchmark
|
||||||
|
if args.webrender:
|
||||||
|
renderer = "-w"
|
||||||
if args.layout_threads:
|
if args.layout_threads:
|
||||||
layout_threads = int(args.layout_threads)
|
layout_threads = int(args.layout_threads)
|
||||||
if args.output:
|
if args.output:
|
||||||
|
|
|
@ -10,20 +10,17 @@ from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExec
|
||||||
|
|
||||||
here = os.path.join(os.path.split(__file__)[0])
|
here = os.path.join(os.path.split(__file__)[0])
|
||||||
|
|
||||||
__wptrunner__ = {
|
__wptrunner__ = {"product": "servo",
|
||||||
"product": "servo",
|
"check_args": "check_args",
|
||||||
"check_args": "check_args",
|
"browser": "ServoBrowser",
|
||||||
"browser": "ServoBrowser",
|
"executor": {"testharness": "ServoTestharnessExecutor",
|
||||||
"executor": {
|
"reftest": "ServoRefTestExecutor",
|
||||||
"testharness": "ServoTestharnessExecutor",
|
"wdspec": "ServoWdspecExecutor"},
|
||||||
"reftest": "ServoRefTestExecutor",
|
"browser_kwargs": "browser_kwargs",
|
||||||
"wdspec": "ServoWdspecExecutor",
|
"executor_kwargs": "executor_kwargs",
|
||||||
},
|
"env_options": "env_options",
|
||||||
"browser_kwargs": "browser_kwargs",
|
"run_info_extras": "run_info_extras",
|
||||||
"executor_kwargs": "executor_kwargs",
|
"update_properties": "update_properties"}
|
||||||
"env_options": "env_options",
|
|
||||||
"update_properties": "update_properties",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def check_args(**kwargs):
|
def check_args(**kwargs):
|
||||||
|
@ -31,12 +28,11 @@ def check_args(**kwargs):
|
||||||
|
|
||||||
|
|
||||||
def browser_kwargs(**kwargs):
|
def browser_kwargs(**kwargs):
|
||||||
return {
|
return {"binary": kwargs["binary"],
|
||||||
"binary": kwargs["binary"],
|
"debug_info": kwargs["debug_info"],
|
||||||
"debug_info": kwargs["debug_info"],
|
"binary_args": kwargs["binary_args"],
|
||||||
"binary_args": kwargs["binary_args"],
|
"user_stylesheets": kwargs.get("user_stylesheets"),
|
||||||
"user_stylesheets": kwargs.get("user_stylesheets"),
|
"render_backend": kwargs.get("servo_backend")}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
||||||
|
@ -55,23 +51,31 @@ def env_options():
|
||||||
"supports_debugger": True}
|
"supports_debugger": True}
|
||||||
|
|
||||||
|
|
||||||
|
def run_info_extras(**kwargs):
|
||||||
|
return {"backend": kwargs["servo_backend"]}
|
||||||
|
|
||||||
|
|
||||||
def update_properties():
|
def update_properties():
|
||||||
return ["debug", "os", "version", "processor", "bits"], None
|
return ["debug", "os", "version", "processor", "bits", "backend"], None
|
||||||
|
|
||||||
|
|
||||||
|
def render_arg(render_backend):
|
||||||
|
return {"cpu": "--cpu", "webrender": "-w"}[render_backend]
|
||||||
|
|
||||||
|
|
||||||
class ServoBrowser(NullBrowser):
|
class ServoBrowser(NullBrowser):
|
||||||
def __init__(self, logger, binary, debug_info=None, binary_args=None,
|
def __init__(self, logger, binary, debug_info=None, binary_args=None,
|
||||||
user_stylesheets=None):
|
user_stylesheets=None, render_backend="webrender"):
|
||||||
NullBrowser.__init__(self, logger)
|
NullBrowser.__init__(self, logger)
|
||||||
self.binary = binary
|
self.binary = binary
|
||||||
self.debug_info = debug_info
|
self.debug_info = debug_info
|
||||||
self.binary_args = binary_args or []
|
self.binary_args = binary_args or []
|
||||||
self.user_stylesheets = user_stylesheets or []
|
self.user_stylesheets = user_stylesheets or []
|
||||||
|
self.render_backend = render_backend
|
||||||
|
|
||||||
def executor_browser(self):
|
def executor_browser(self):
|
||||||
return ExecutorBrowser, {
|
return ExecutorBrowser, {"binary": self.binary,
|
||||||
"binary": self.binary,
|
"debug_info": self.debug_info,
|
||||||
"debug_info": self.debug_info,
|
"binary_args": self.binary_args,
|
||||||
"binary_args": self.binary_args,
|
"user_stylesheets": self.user_stylesheets,
|
||||||
"user_stylesheets": self.user_stylesheets,
|
"render_backend": self.render_backend}
|
||||||
}
|
|
||||||
|
|
|
@ -9,25 +9,23 @@ import tempfile
|
||||||
from mozprocess import ProcessHandler
|
from mozprocess import ProcessHandler
|
||||||
|
|
||||||
from .base import Browser, require_arg, get_free_port, browser_command, ExecutorBrowser
|
from .base import Browser, require_arg, get_free_port, browser_command, ExecutorBrowser
|
||||||
|
from .servo import render_arg
|
||||||
from ..executors import executor_kwargs as base_executor_kwargs
|
from ..executors import executor_kwargs as base_executor_kwargs
|
||||||
from ..executors.executorservodriver import (ServoWebDriverTestharnessExecutor,
|
from ..executors.executorservodriver import (ServoWebDriverTestharnessExecutor,
|
||||||
ServoWebDriverRefTestExecutor)
|
ServoWebDriverRefTestExecutor)
|
||||||
|
|
||||||
here = os.path.join(os.path.split(__file__)[0])
|
here = os.path.join(os.path.split(__file__)[0])
|
||||||
|
|
||||||
__wptrunner__ = {
|
__wptrunner__ = {"product": "servodriver",
|
||||||
"product": "servodriver",
|
"check_args": "check_args",
|
||||||
"check_args": "check_args",
|
"browser": "ServoWebDriverBrowser",
|
||||||
"browser": "ServoWebDriverBrowser",
|
"executor": {"testharness": "ServoWebDriverTestharnessExecutor",
|
||||||
"executor": {
|
"reftest": "ServoWebDriverRefTestExecutor"},
|
||||||
"testharness": "ServoWebDriverTestharnessExecutor",
|
"browser_kwargs": "browser_kwargs",
|
||||||
"reftest": "ServoWebDriverRefTestExecutor",
|
"executor_kwargs": "executor_kwargs",
|
||||||
},
|
"env_options": "env_options",
|
||||||
"browser_kwargs": "browser_kwargs",
|
"run_info_extras": "run_info_extras",
|
||||||
"executor_kwargs": "executor_kwargs",
|
"update_properties": "update_properties"}
|
||||||
"env_options": "env_options",
|
|
||||||
"update_properties": "update_properties",
|
|
||||||
}
|
|
||||||
|
|
||||||
hosts_text = """127.0.0.1 web-platform.test
|
hosts_text = """127.0.0.1 web-platform.test
|
||||||
127.0.0.1 www.web-platform.test
|
127.0.0.1 www.web-platform.test
|
||||||
|
@ -43,11 +41,10 @@ def check_args(**kwargs):
|
||||||
|
|
||||||
|
|
||||||
def browser_kwargs(**kwargs):
|
def browser_kwargs(**kwargs):
|
||||||
return {
|
return {"binary": kwargs["binary"],
|
||||||
"binary": kwargs["binary"],
|
"debug_info": kwargs["debug_info"],
|
||||||
"debug_info": kwargs["debug_info"],
|
"user_stylesheets": kwargs.get("user_stylesheets"),
|
||||||
"user_stylesheets": kwargs.get("user_stylesheets"),
|
"render_backend": kwargs.get("servo_backend")}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def executor_kwargs(test_type, server_config, cache_manager, run_info_data, **kwargs):
|
def executor_kwargs(test_type, server_config, cache_manager, run_info_data, **kwargs):
|
||||||
|
@ -64,8 +61,12 @@ def env_options():
|
||||||
"supports_debugger": True}
|
"supports_debugger": True}
|
||||||
|
|
||||||
|
|
||||||
|
def run_info_extras(**kwargs):
|
||||||
|
return {"backend": kwargs["servo_backend"]}
|
||||||
|
|
||||||
|
|
||||||
def update_properties():
|
def update_properties():
|
||||||
return ["debug", "os", "version", "processor", "bits"], None
|
return ["debug", "os", "version", "processor", "bits", "backend"], None
|
||||||
|
|
||||||
|
|
||||||
def make_hosts_file():
|
def make_hosts_file():
|
||||||
|
@ -79,7 +80,7 @@ class ServoWebDriverBrowser(Browser):
|
||||||
used_ports = set()
|
used_ports = set()
|
||||||
|
|
||||||
def __init__(self, logger, binary, debug_info=None, webdriver_host="127.0.0.1",
|
def __init__(self, logger, binary, debug_info=None, webdriver_host="127.0.0.1",
|
||||||
user_stylesheets=None):
|
user_stylesheets=None, render_backend="webrender"):
|
||||||
Browser.__init__(self, logger)
|
Browser.__init__(self, logger)
|
||||||
self.binary = binary
|
self.binary = binary
|
||||||
self.webdriver_host = webdriver_host
|
self.webdriver_host = webdriver_host
|
||||||
|
@ -89,6 +90,7 @@ class ServoWebDriverBrowser(Browser):
|
||||||
self.hosts_path = make_hosts_file()
|
self.hosts_path = make_hosts_file()
|
||||||
self.command = None
|
self.command = None
|
||||||
self.user_stylesheets = user_stylesheets if user_stylesheets else []
|
self.user_stylesheets = user_stylesheets if user_stylesheets else []
|
||||||
|
self.render_backend = render_backend
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.webdriver_port = get_free_port(4444, exclude=self.used_ports)
|
self.webdriver_port = get_free_port(4444, exclude=self.used_ports)
|
||||||
|
@ -98,15 +100,11 @@ class ServoWebDriverBrowser(Browser):
|
||||||
env["HOST_FILE"] = self.hosts_path
|
env["HOST_FILE"] = self.hosts_path
|
||||||
env["RUST_BACKTRACE"] = "1"
|
env["RUST_BACKTRACE"] = "1"
|
||||||
|
|
||||||
debug_args, command = browser_command(
|
debug_args, command = browser_command(self.binary,
|
||||||
self.binary,
|
[render_arg(self.render_backend), "--hard-fail",
|
||||||
[
|
"--webdriver", str(self.webdriver_port),
|
||||||
"--hard-fail",
|
"about:blank"],
|
||||||
"--webdriver", str(self.webdriver_port),
|
self.debug_info)
|
||||||
"about:blank",
|
|
||||||
],
|
|
||||||
self.debug_info
|
|
||||||
)
|
|
||||||
|
|
||||||
for stylesheet in self.user_stylesheets:
|
for stylesheet in self.user_stylesheets:
|
||||||
command += ["--user-stylesheet", stylesheet]
|
command += ["--user-stylesheet", stylesheet]
|
||||||
|
|
|
@ -30,10 +30,15 @@ from ..webdriver_server import ServoDriverServer
|
||||||
from .executormarionette import WdspecRun
|
from .executormarionette import WdspecRun
|
||||||
|
|
||||||
pytestrunner = None
|
pytestrunner = None
|
||||||
|
render_arg = None
|
||||||
webdriver = None
|
webdriver = None
|
||||||
|
|
||||||
extra_timeout = 5 # seconds
|
extra_timeout = 5 # seconds
|
||||||
|
|
||||||
|
def do_delayed_imports():
|
||||||
|
global render_arg
|
||||||
|
from ..browsers.servo import render_arg
|
||||||
|
|
||||||
hosts_text = """127.0.0.1 web-platform.test
|
hosts_text = """127.0.0.1 web-platform.test
|
||||||
127.0.0.1 www.web-platform.test
|
127.0.0.1 www.web-platform.test
|
||||||
127.0.0.1 www1.web-platform.test
|
127.0.0.1 www1.web-platform.test
|
||||||
|
@ -75,10 +80,8 @@ class ServoTestharnessExecutor(ProcessTestExecutor):
|
||||||
self.result_data = None
|
self.result_data = None
|
||||||
self.result_flag = threading.Event()
|
self.result_flag = threading.Event()
|
||||||
|
|
||||||
args = [
|
args = [render_arg(self.browser.render_backend), "--hard-fail", "-u", "Servo/wptrunner",
|
||||||
"--hard-fail", "-u", "Servo/wptrunner",
|
"-Z", "replace-surrogates", "-z", self.test_url(test)]
|
||||||
"-Z", "replace-surrogates", "-z", self.test_url(test),
|
|
||||||
]
|
|
||||||
for stylesheet in self.browser.user_stylesheets:
|
for stylesheet in self.browser.user_stylesheets:
|
||||||
args += ["--user-stylesheet", stylesheet]
|
args += ["--user-stylesheet", stylesheet]
|
||||||
for pref, value in test.environment.get('prefs', {}).iteritems():
|
for pref, value in test.environment.get('prefs', {}).iteritems():
|
||||||
|
@ -210,12 +213,9 @@ class ServoRefTestExecutor(ProcessTestExecutor):
|
||||||
with TempFilename(self.tempdir) as output_path:
|
with TempFilename(self.tempdir) as output_path:
|
||||||
debug_args, command = browser_command(
|
debug_args, command = browser_command(
|
||||||
self.binary,
|
self.binary,
|
||||||
[
|
[render_arg(self.browser.render_backend), "--hard-fail", "--exit",
|
||||||
"--hard-fail", "--exit",
|
"-u", "Servo/wptrunner", "-Z", "disable-text-aa,load-webfonts-synchronously,replace-surrogates",
|
||||||
"-u", "Servo/wptrunner",
|
"--output=%s" % output_path, full_url] + self.browser.binary_args,
|
||||||
"-Z", "disable-text-aa,load-webfonts-synchronously,replace-surrogates",
|
|
||||||
"--output=%s" % output_path, full_url
|
|
||||||
] + self.browser.binary_args,
|
|
||||||
self.debug_info)
|
self.debug_info)
|
||||||
|
|
||||||
for stylesheet in self.browser.user_stylesheets:
|
for stylesheet in self.browser.user_stylesheets:
|
||||||
|
@ -295,7 +295,7 @@ class ServoWdspecProtocol(Protocol):
|
||||||
|
|
||||||
def setup(self, runner):
|
def setup(self, runner):
|
||||||
try:
|
try:
|
||||||
self.server = ServoDriverServer(self.logger, binary=self.browser.binary, binary_args=self.browser.binary_args)
|
self.server = ServoDriverServer(self.logger, binary=self.browser.binary, binary_args=self.browser.binary_args, render_backend=self.browser.render_backend)
|
||||||
self.server.start(block=False)
|
self.server.start(block=False)
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
"WebDriver HTTP server listening at %s" % self.server.url)
|
"WebDriver HTTP server listening at %s" % self.server.url)
|
||||||
|
|
|
@ -165,11 +165,12 @@ class GeckoDriverServer(WebDriverServer):
|
||||||
|
|
||||||
|
|
||||||
class ServoDriverServer(WebDriverServer):
|
class ServoDriverServer(WebDriverServer):
|
||||||
def __init__(self, logger, binary="servo", binary_args=None, host="127.0.0.1", port=None):
|
def __init__(self, logger, binary="servo", binary_args=None, host="127.0.0.1", port=None, render_backend=None):
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
env["RUST_BACKTRACE"] = "1"
|
env["RUST_BACKTRACE"] = "1"
|
||||||
WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env)
|
WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env)
|
||||||
self.binary_args = binary_args
|
self.binary_args = binary_args
|
||||||
|
self.render_backend = render_backend
|
||||||
|
|
||||||
def make_command(self):
|
def make_command(self):
|
||||||
command = [self.binary,
|
command = [self.binary,
|
||||||
|
@ -178,6 +179,10 @@ class ServoDriverServer(WebDriverServer):
|
||||||
"--headless"]
|
"--headless"]
|
||||||
if self.binary_args:
|
if self.binary_args:
|
||||||
command += self.binary_args
|
command += self.binary_args
|
||||||
|
if self.render_backend == "cpu":
|
||||||
|
command += ["--cpu"]
|
||||||
|
elif self.render_backend == "webrender":
|
||||||
|
command += ["--webrender"]
|
||||||
return command
|
return command
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,10 @@ scheme host and port.""")
|
||||||
servo_group.add_argument("--user-stylesheet",
|
servo_group.add_argument("--user-stylesheet",
|
||||||
default=[], action="append", dest="user_stylesheets",
|
default=[], action="append", dest="user_stylesheets",
|
||||||
help="Inject a user CSS stylesheet into every test.")
|
help="Inject a user CSS stylesheet into every test.")
|
||||||
|
servo_group.add_argument("--servo-backend",
|
||||||
|
default="webrender", choices=["cpu", "webrender"],
|
||||||
|
help="Rendering backend to use with Servo.")
|
||||||
|
|
||||||
|
|
||||||
parser.add_argument("test_list", nargs="*",
|
parser.add_argument("test_list", nargs="*",
|
||||||
help="List of URLs for tests to run, or paths including tests to run. "
|
help="List of URLs for tests to run, or paths including tests to run. "
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
expected:
|
expected:
|
||||||
if os == "linux": TIMEOUT
|
if os == "linux": TIMEOUT
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected:
|
expected:
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
expected:
|
expected:
|
||||||
if os == "linux": TIMEOUT
|
if os == "linux": TIMEOUT
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
expected:
|
expected:
|
||||||
if os == "linux": TIMEOUT
|
if os == "linux": TIMEOUT
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
expected:
|
expected:
|
||||||
if os == "linux": TIMEOUT
|
if os == "linux": TIMEOUT
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected:
|
expected:
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected:
|
expected:
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
expected:
|
expected:
|
||||||
if os == "linux": TIMEOUT
|
if os == "linux": TIMEOUT
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
expected:
|
expected:
|
||||||
if os == "linux": TIMEOUT
|
if os == "linux": TIMEOUT
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected:
|
expected:
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected:
|
expected:
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected:
|
expected:
|
||||||
if os == "mac": CRASH
|
if os == "mac": CRASH
|
||||||
|
if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue