diff options
author | Ms2ger <Ms2ger@gmail.com> | 2016-06-16 12:28:43 +0100 |
---|---|---|
committer | Ms2ger <Ms2ger@gmail.com> | 2016-06-20 19:08:12 +0200 |
commit | 9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c (patch) | |
tree | aa32e333a8bc0c11895213251a226d5b818a4541 /components/script | |
parent | 2c50318ee7c05ab926e27d225a3409c8da86c991 (diff) | |
download | servo-9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c.tar.gz servo-9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c.zip |
Move the remainder of layout_interface into script_layout_interface.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/document.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmllinkelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlstyleelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/node.rs | 2 | ||||
-rw-r--r-- | components/script/dom/window.rs | 2 | ||||
-rw-r--r-- | components/script/layout_interface.rs | 152 | ||||
-rw-r--r-- | components/script/lib.rs | 1 | ||||
-rw-r--r-- | components/script/script_thread.rs | 22 |
9 files changed, 17 insertions, 170 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 4dfb484a301..a69537d3c1c 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -92,7 +92,6 @@ use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks, QuirksMode}; use ipc_channel::ipc::{self, IpcSender}; use js::jsapi::JS_GetRuntime; use js::jsapi::{JSContext, JSObject, JSRuntime}; -use layout_interface::{Msg, ReflowQueryType}; use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER}; use msg::constellation_msg::{Key, KeyModifiers, KeyState}; use msg::constellation_msg::{PipelineId, ReferrerPolicy, SubpageId}; @@ -103,6 +102,7 @@ use net_traits::{AsyncResponseTarget, PendingAsyncLoad, IpcSend}; use num_traits::ToPrimitive; use origin::Origin; use parse::{ParserRoot, ParserRef, MutNullableParserField}; +use script_layout_interface::message::{Msg, ReflowQueryType}; use script_thread::{MainThreadScriptMsg, Runnable}; use script_traits::UntrustedNodeAddress; use script_traits::{AnimationState, MouseButton, MouseEventType, MozBrowserEvent}; diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 86146b8e915..22e67d162d9 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -38,9 +38,9 @@ use dom::window::{ReflowReason, Window}; use ipc_channel::ipc; use js::jsapi::{JSAutoCompartment, RootedValue, JSContext, MutableHandleValue}; use js::jsval::{UndefinedValue, NullValue}; -use layout_interface::ReflowQueryType; use msg::constellation_msg::{FrameType, LoadData, NavigationDirection, PipelineId, SubpageId}; use net_traits::response::HttpsState; +use script_layout_interface::message::ReflowQueryType; use script_traits::IFrameSandboxState::{IFrameSandboxed, IFrameUnsandboxed}; use script_traits::{IFrameLoadInfo, MozBrowserEvent, ScriptMsg as ConstellationMsg}; use std::cell::Cell; diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 79b6ed32f0b..ab2c2a99887 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -25,9 +25,9 @@ use hyper::header::ContentType; use hyper::mime::{Mime, TopLevel, SubLevel}; use ipc_channel::ipc; use ipc_channel::router::ROUTER; -use layout_interface::Msg; use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError}; use network_listener::{NetworkListener, PreInvoke}; +use script_layout_interface::message::Msg; use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg}; use std::ascii::AsciiExt; use std::borrow::ToOwned; diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index c972cb77bb5..47409402855 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -14,7 +14,7 @@ use dom::element::Element; use dom::htmlelement::HTMLElement; use dom::node::{ChildrenMutation, Node, document_from_node, window_from_node}; use dom::virtualmethods::VirtualMethods; -use layout_interface::Msg; +use script_layout_interface::message::Msg; use std::sync::Arc; use string_cache::Atom; use style::media_queries::parse_media_query_list; diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index fdb9deed87b..53a3f355b9d 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -56,11 +56,11 @@ use euclid::size::Size2D; use heapsize::{HeapSizeOf, heap_size_of}; use html5ever::tree_builder::QuirksMode; use js::jsapi::{JSContext, JSObject, JSRuntime}; -use layout_interface::Msg; use libc::{self, c_void, uintptr_t}; use msg::constellation_msg::PipelineId; use parse::html::parse_html_fragment; use ref_slice::ref_slice; +use script_layout_interface::message::Msg; use script_layout_interface::{HTMLCanvasData, OpaqueStyleAndLayoutData}; use script_layout_interface::{LayoutNodeType, LayoutElementType, TrustedNodeAddress}; use script_traits::UntrustedNodeAddress; diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 6dc43f8b925..eab2e31c907 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -42,7 +42,6 @@ use js::jsapi::{Evaluate2, HandleObject, HandleValue, JSAutoCompartment, JSConte use js::jsapi::{JS_GetRuntime, JS_GC, MutableHandleValue, SetWindowProxy}; use js::rust::CompileOptionsWrapper; use js::rust::Runtime; -use layout_interface::{Msg, Reflow, ReflowQueryType, ScriptReflow}; use libc; use msg::constellation_msg::{FrameType, LoadData, PanicMsg, PipelineId, SubpageId}; use msg::constellation_msg::{WindowSizeData, WindowSizeType}; @@ -59,6 +58,7 @@ use profile_traits::time::{ProfilerChan, TimerMetadataReflowType, profile}; use reporter::CSSErrorReporter; use rustc_serialize::base64::{FromBase64, STANDARD, ToBase64}; use script_layout_interface::TrustedNodeAddress; +use script_layout_interface::message::{Msg, Reflow, ReflowQueryType, ScriptReflow}; use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC}; use script_layout_interface::rpc::{MarginStyleResponse, ResolvedStyleResponse}; use script_runtime::{ScriptChan, ScriptPort}; diff --git a/components/script/layout_interface.rs b/components/script/layout_interface.rs deleted file mode 100644 index 350c8150109..00000000000 --- a/components/script/layout_interface.rs +++ /dev/null @@ -1,152 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -//! The high-level interface from script to layout. Using this abstract -//! interface helps reduce coupling between these two components, and enables -//! the DOM to be placed in a separate crate from layout. - -use app_units::Au; -use euclid::point::Point2D; -use euclid::rect::Rect; -use gfx_traits::{Epoch, LayerId}; -use ipc_channel::ipc::{IpcReceiver, IpcSender}; -use msg::constellation_msg::{PanicMsg, PipelineId, WindowSizeData}; -use net_traits::image_cache_thread::ImageCacheThread; -use profile_traits::mem::ReportsChan; -use script_layout_interface::rpc::LayoutRPC; -use script_layout_interface::{OpaqueStyleAndLayoutData, TrustedNodeAddress}; -use script_traits::{ConstellationControlMsg, LayoutControlMsg}; -use script_traits::{LayoutMsg as ConstellationMsg, StackingContextScrollState}; -use std::sync::Arc; -use std::sync::mpsc::{Receiver, Sender}; -use string_cache::Atom; -use style::context::ReflowGoal; -use style::selector_impl::PseudoElement; -use style::servo::Stylesheet; -use url::Url; -use util::ipc::OptionalOpaqueIpcSender; - -/// Asynchronous messages that script can send to layout. -pub enum Msg { - /// Adds the given stylesheet to the document. - AddStylesheet(Arc<Stylesheet>), - - /// Puts a document into quirks mode, causing the quirks mode stylesheet to be loaded. - SetQuirksMode, - - /// Requests a reflow. - Reflow(ScriptReflow), - - /// Get an RPC interface. - GetRPC(Sender<Box<LayoutRPC + Send>>), - - /// Requests that the layout thread render the next frame of all animations. - TickAnimations, - - /// Requests that the layout thread reflow with a newly-loaded Web font. - ReflowWithNewlyLoadedWebFont, - - /// Updates the layout visible rects, affecting the area that display lists will be constructed - /// for. - SetVisibleRects(Vec<(LayerId, Rect<Au>)>), - - /// Destroys layout data associated with a DOM node. - /// - /// TODO(pcwalton): Maybe think about batching to avoid message traffic. - ReapStyleAndLayoutData(OpaqueStyleAndLayoutData), - - /// Requests that the layout thread measure its memory usage. The resulting reports are sent back - /// via the supplied channel. - CollectReports(ReportsChan), - - /// Requests that the layout thread enter a quiescent state in which no more messages are - /// accepted except `ExitMsg`. A response message will be sent on the supplied channel when - /// this happens. - PrepareToExit(Sender<()>), - - /// Requests that the layout thread immediately shut down. There must be no more nodes left after - /// this, or layout will crash. - ExitNow, - - /// Get the last epoch counter for this layout thread. - GetCurrentEpoch(IpcSender<Epoch>), - - /// Asks the layout thread whether any Web fonts have yet to load (if true, loads are pending; - /// false otherwise). - GetWebFontLoadState(IpcSender<bool>), - - /// Creates a new layout thread. - /// - /// This basically exists to keep the script-layout dependency one-way. - CreateLayoutThread(NewLayoutThreadInfo), - - /// Set the final Url. - SetFinalUrl(Url), - - /// Tells layout about the new scrolling offsets of each scrollable stacking context. - SetStackingContextScrollStates(Vec<StackingContextScrollState>), -} - - -/// Any query to perform with this reflow. -#[derive(PartialEq)] -pub enum ReflowQueryType { - NoQuery, - ContentBoxQuery(TrustedNodeAddress), - ContentBoxesQuery(TrustedNodeAddress), - NodeOverflowQuery(TrustedNodeAddress), - HitTestQuery(Point2D<f32>, bool), - NodeGeometryQuery(TrustedNodeAddress), - NodeLayerIdQuery(TrustedNodeAddress), - NodeScrollGeometryQuery(TrustedNodeAddress), - ResolvedStyleQuery(TrustedNodeAddress, Option<PseudoElement>, Atom), - OffsetParentQuery(TrustedNodeAddress), - MarginStyleQuery(TrustedNodeAddress), -} - -/// Information needed for a reflow. -pub struct Reflow { - /// The goal of reflow: either to render to the screen or to flush layout info for script. - pub goal: ReflowGoal, - /// A clipping rectangle for the page, an enlarged rectangle containing the viewport. - pub page_clip_rect: Rect<Au>, -} - -/// Information needed for a script-initiated reflow. -pub struct ScriptReflow { - /// General reflow data. - pub reflow_info: Reflow, - /// The document node. - pub document: TrustedNodeAddress, - /// The document's list of stylesheets. - pub document_stylesheets: Vec<Arc<Stylesheet>>, - /// Whether the document's stylesheets have changed since the last script reflow. - pub stylesheets_changed: bool, - /// The current window size. - pub window_size: WindowSizeData, - /// The channel that we send a notification to. - pub script_join_chan: Sender<()>, - /// The type of query if any to perform during this reflow. - pub query_type: ReflowQueryType, -} - -impl Drop for ScriptReflow { - fn drop(&mut self) { - self.script_join_chan.send(()).unwrap(); - } -} - -pub struct NewLayoutThreadInfo { - pub id: PipelineId, - pub url: Url, - pub is_parent: bool, - pub layout_pair: (Sender<Msg>, Receiver<Msg>), - pub pipeline_port: IpcReceiver<LayoutControlMsg>, - pub constellation_chan: IpcSender<ConstellationMsg>, - pub panic_chan: IpcSender<PanicMsg>, - pub script_chan: IpcSender<ConstellationControlMsg>, - pub image_cache_thread: ImageCacheThread, - pub paint_chan: OptionalOpaqueIpcSender, - pub content_process_shutdown_chan: IpcSender<()>, -} diff --git a/components/script/lib.rs b/components/script/lib.rs index c191c203889..33467a5dd34 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -94,7 +94,6 @@ mod devtools; pub mod document_loader; #[macro_use] pub mod dom; -pub mod layout_interface; pub mod layout_wrapper; mod mem; mod network_listener; diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 3459e5ddcfa..8418071e908 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -61,7 +61,6 @@ use js::jsapi::{JSAutoCompartment, JSContext, JS_SetWrapObjectCallbacks}; use js::jsapi::{JSTracer, SetWindowProxyClass}; use js::jsval::UndefinedValue; use js::rust::Runtime; -use layout_interface::{self, NewLayoutThreadInfo, ReflowQueryType}; use mem::heap_size_of_self_and_children; use msg::constellation_msg::{FrameType, LoadData, PanicMsg, PipelineId, PipelineNamespace}; use msg::constellation_msg::{SubpageId, WindowSizeData, WindowSizeType}; @@ -77,6 +76,7 @@ use parse::html::{ParseContext, parse_html}; use parse::xml::{self, parse_xml}; use profile_traits::mem::{self, OpaqueSender, Report, ReportKind, ReportsChan}; use profile_traits::time::{self, ProfilerCategory, profile}; +use script_layout_interface::message::{self, NewLayoutThreadInfo, ReflowQueryType}; use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory}; use script_runtime::{ScriptPort, StackRootTLS, new_rt_and_cx, get_reports}; use script_traits::CompositorEvent::{KeyEvent, MouseButtonEvent, MouseMoveEvent, ResizeEvent}; @@ -135,7 +135,7 @@ struct InProgressLoad { /// The current window size associated with this pipeline. window_size: Option<WindowSizeData>, /// Channel to the layout thread associated with this pipeline. - layout_chan: Sender<layout_interface::Msg>, + layout_chan: Sender<message::Msg>, /// The current viewport clipping rectangle applying to this pipeline, if any. clip_rect: Option<Rect<f32>>, /// Window is frozen (navigated away while loading for example). @@ -150,7 +150,7 @@ impl InProgressLoad { /// Create a new InProgressLoad object. fn new(id: PipelineId, parent_info: Option<(PipelineId, SubpageId, FrameType)>, - layout_chan: Sender<layout_interface::Msg>, + layout_chan: Sender<message::Msg>, window_size: Option<WindowSizeData>, url: Url) -> InProgressLoad { InProgressLoad { @@ -438,11 +438,11 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> { } impl ScriptThreadFactory for ScriptThread { - type Message = layout_interface::Msg; + type Message = message::Msg; fn create(state: InitialScriptState, load_data: LoadData) - -> (Sender<layout_interface::Msg>, Receiver<layout_interface::Msg>) { + -> (Sender<message::Msg>, Receiver<message::Msg>) { let panic_chan = state.panic_chan.clone(); let (script_chan, script_port) = channel(); @@ -1184,7 +1184,7 @@ impl ScriptThread { // Tell layout to actually spawn the thread. parent_window.layout_chan() - .send(layout_interface::Msg::CreateLayoutThread(layout_creation_info)) + .send(message::Msg::CreateLayoutThread(layout_creation_info)) .unwrap(); // Kick off the fetch for the new resource. @@ -1462,10 +1462,10 @@ impl ScriptThread { // processed this message. let (response_chan, response_port) = channel(); let chan = &load.layout_chan; - if chan.send(layout_interface::Msg::PrepareToExit(response_chan)).is_ok() { + if chan.send(message::Msg::PrepareToExit(response_chan)).is_ok() { debug!("shutting down layout for page {:?}", id); response_port.recv().unwrap(); - chan.send(layout_interface::Msg::ExitNow).ok(); + chan.send(message::Msg::ExitNow).ok(); } let has_pending_loads = self.incomplete_loads.borrow().len() > 0; @@ -1523,7 +1523,7 @@ impl ScriptThread { { // send the final url to the layout thread. incomplete.layout_chan - .send(layout_interface::Msg::SetFinalUrl(final_url.clone())) + .send(message::Msg::SetFinalUrl(final_url.clone())) .unwrap(); // update the pipeline url @@ -2126,7 +2126,7 @@ fn shut_down_layout(context_tree: &BrowsingContext) { let (response_chan, response_port) = channel(); let window = context.active_window(); let chan = window.layout_chan().clone(); - if chan.send(layout_interface::Msg::PrepareToExit(response_chan)).is_ok() { + if chan.send(message::Msg::PrepareToExit(response_chan)).is_ok() { channels.push(chan); response_port.recv().unwrap(); } @@ -2143,7 +2143,7 @@ fn shut_down_layout(context_tree: &BrowsingContext) { // Destroy the layout thread. If there were node leaks, layout will now crash safely. for chan in channels { - chan.send(layout_interface::Msg::ExitNow).ok(); + chan.send(message::Msg::ExitNow).ok(); } } |