diff options
author | Agustin Chiappe Berrini <jnieve@gmail.com> | 2018-09-27 18:43:22 -0400 |
---|---|---|
committer | Agustin Chiappe Berrini <jnieve@gmail.com> | 2018-11-13 14:18:51 -0500 |
commit | 14bc8ab7542287a18ecdede1ca7ee2af077eb8a9 (patch) | |
tree | 1f93ff8cb9d2111380aa44287e938016107a7055 | |
parent | b1a2b6b5bfe72440059834c67dc28ad422b89a82 (diff) | |
download | servo-14bc8ab7542287a18ecdede1ca7ee2af077eb8a9.tar.gz servo-14bc8ab7542287a18ecdede1ca7ee2af077eb8a9.zip |
Implement TaskSource for HistoryTraversal
And remove the method in window that returns it, because it isn't used
so far.
-rw-r--r-- | components/profile/time.rs | 1 | ||||
-rw-r--r-- | components/profile_traits/time.rs | 1 | ||||
-rw-r--r-- | components/script/dom/window.rs | 9 | ||||
-rw-r--r-- | components/script/script_runtime.rs | 1 | ||||
-rw-r--r-- | components/script/script_thread.rs | 15 | ||||
-rw-r--r-- | components/script/task_source/history_traversal.rs | 30 |
6 files changed, 42 insertions, 15 deletions
diff --git a/components/profile/time.rs b/components/profile/time.rs index a2dd71e605a..c8e7113d587 100644 --- a/components/profile/time.rs +++ b/components/profile/time.rs @@ -129,6 +129,7 @@ impl Formattable for ProfilerCategory { ProfilerCategory::ScriptDomEvent => "Script Dom Event", ProfilerCategory::ScriptEvaluate => "Script JS Evaluate", ProfilerCategory::ScriptFileRead => "Script File Read", + ProfilerCategory::ScriptHistoryEvent => "Script History Event", ProfilerCategory::ScriptImageCacheMsg => "Script Image Cache Msg", ProfilerCategory::ScriptInputEvent => "Script Input Event", ProfilerCategory::ScriptNetworkEvent => "Script Network Event", diff --git a/components/profile_traits/time.rs b/components/profile_traits/time.rs index 1107099f91b..eed797289e7 100644 --- a/components/profile_traits/time.rs +++ b/components/profile_traits/time.rs @@ -103,6 +103,7 @@ pub enum ProfilerCategory { ScriptWebVREvent = 0x79, ScriptWorkletEvent = 0x7a, ScriptPerformanceEvent = 0x7b, + ScriptHistoryEvent = 0x7c, TimeToFirstPaint = 0x80, TimeToFirstContentfulPaint = 0x81, TimeToInteractive = 0x82, diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index e1a287df603..110356374f6 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -381,12 +381,9 @@ impl Window { self.networking_task_source.clone() } - pub fn history_traversal_task_source(&self) -> Box<dyn ScriptChan + Send> { - self.history_traversal_task_source.clone() - } - - pub fn file_reading_task_source(&self) -> FileReadingTaskSource { - self.file_reading_task_source.clone() + pub fn file_reading_task_source(&self) -> TaskManagement<FileReadingTaskSource> { + let canceller = self.task_canceller(TaskSourceName::FileReading); + TaskManagement(self.file_reading_task_source.clone(), canceller) } pub fn performance_timeline_task_source(&self) -> PerformanceTimelineTaskSource { diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs index f0cdd8ccad0..a3fb1c800f4 100644 --- a/components/script/script_runtime.rs +++ b/components/script/script_runtime.rs @@ -100,6 +100,7 @@ pub enum ScriptThreadEventCategory { DomEvent, FileRead, FormPlannedNavigation, + HistoryEvent, ImageCacheMsg, InputEvent, NetworkEvent, diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index cd2008bf56b..c4177500b64 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -521,7 +521,7 @@ pub struct ScriptThread { networking_task_sender: Box<dyn ScriptChan>, - history_traversal_task_source: HistoryTraversalTaskSource, + history_traversal_task_sender: Sender<MainThreadScriptMsg>, file_reading_task_sender: Box<dyn ScriptChan>, @@ -1042,7 +1042,7 @@ impl ScriptThread { performance_timeline_task_sender: boxed_script_sender.clone(), remote_event_task_sender: boxed_script_sender.clone(), - history_traversal_task_source: HistoryTraversalTaskSource(chan), + history_traversal_task_sender: chan.clone(), control_chan: state.control_chan, control_port: control_port, @@ -1409,6 +1409,7 @@ impl ScriptThread { ScriptThreadEventCategory::FormPlannedNavigation => { ProfilerCategory::ScriptPlannedNavigation }, + ScriptThreadEventCategory::HistoryEvent => ProfilerCategory::ScriptHistoryEvent, ScriptThreadEventCategory::ImageCacheMsg => ProfilerCategory::ScriptImageCacheMsg, ScriptThreadEventCategory::InputEvent => ProfilerCategory::ScriptInputEvent, ScriptThreadEventCategory::NetworkEvent => ProfilerCategory::ScriptNetworkEvent, @@ -2180,6 +2181,13 @@ impl ScriptThread { PerformanceTimelineTaskSource(self.performance_timeline_task_sender.clone(), pipeline_id) } + pub fn history_traversal_task_source( + &self, + pipeline_id: PipelineId, + ) -> HistoryTraversalTaskSource { + HistoryTraversalTaskSource(self.history_traversal_task_sender.clone(), pipeline_id) + } + pub fn user_interaction_task_source( &self, pipeline_id: PipelineId, @@ -2560,7 +2568,6 @@ impl ScriptThread { ); let MainThreadScriptChan(ref sender) = self.chan; - let HistoryTraversalTaskSource(ref history_sender) = self.history_traversal_task_source; let (ipc_timer_event_chan, ipc_timer_event_port) = ipc::channel().unwrap(); route_ipc_receiver_to_new_servo_sender(ipc_timer_event_port, self.timer_event_chan.clone()); @@ -2584,7 +2591,7 @@ impl ScriptThread { self.media_element_task_source(incomplete.pipeline_id), self.user_interaction_task_source(incomplete.pipeline_id), self.networking_task_source(incomplete.pipeline_id), - HistoryTraversalTaskSource(history_sender.clone()), + self.history_traversal_task_source(incomplete.pipeline_id), self.file_reading_task_source(incomplete.pipeline_id), self.performance_timeline_task_source(incomplete.pipeline_id) .clone(), diff --git a/components/script/task_source/history_traversal.rs b/components/script/task_source/history_traversal.rs index c1bc6d26d83..ee73e7e991e 100644 --- a/components/script/task_source/history_traversal.rs +++ b/components/script/task_source/history_traversal.rs @@ -2,12 +2,15 @@ * 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/. */ -use crate::script_runtime::{CommonScriptMsg, ScriptChan}; -use crate::script_thread::MainThreadScriptMsg; +use msg::constellation_msg::PipelineId; +use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory}; +use script_thread::MainThreadScriptMsg; use servo_channel::Sender; +use task::{TaskCanceller, TaskOnce}; +use task_source::{TaskSource, TaskSourceName}; #[derive(JSTraceable)] -pub struct HistoryTraversalTaskSource(pub Sender<MainThreadScriptMsg>); +pub struct HistoryTraversalTaskSource(pub Sender<MainThreadScriptMsg>, pub PipelineId); impl ScriptChan for HistoryTraversalTaskSource { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { @@ -16,7 +19,24 @@ impl ScriptChan for HistoryTraversalTaskSource { .map_err(|_| ()) } - fn clone(&self) -> Box<dyn ScriptChan + Send> { - Box::new(HistoryTraversalTaskSource((&self.0).clone())) + fn clone(&self) -> Box<ScriptChan + Send> { + Box::new(HistoryTraversalTaskSource((&self.0).clone(), (&self.1).clone())) + } +} + +impl TaskSource for HistoryTraversalTaskSource { + const NAME: TaskSourceName = TaskSourceName::HistoryTraversal; + + fn queue_with_canceller<T>(&self, task: T, canceller: &TaskCanceller) -> Result<(), ()> + where + T: TaskOnce + 'static, + { + let msg = MainThreadScriptMsg::Common(CommonScriptMsg::Task( + ScriptThreadEventCategory::HistoryEvent, + Box::new(canceller.wrap_task(task)), + Some(self.1), + HistoryTraversalTaskSource::NAME, + )); + self.0.send(msg).map_err(|_| ()) } } |