aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAgustin Chiappe Berrini <jnieve@gmail.com>2018-09-27 18:43:22 -0400
committerAgustin Chiappe Berrini <jnieve@gmail.com>2018-11-13 14:18:51 -0500
commit14bc8ab7542287a18ecdede1ca7ee2af077eb8a9 (patch)
tree1f93ff8cb9d2111380aa44287e938016107a7055
parentb1a2b6b5bfe72440059834c67dc28ad422b89a82 (diff)
downloadservo-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.rs1
-rw-r--r--components/profile_traits/time.rs1
-rw-r--r--components/script/dom/window.rs9
-rw-r--r--components/script/script_runtime.rs1
-rw-r--r--components/script/script_thread.rs15
-rw-r--r--components/script/task_source/history_traversal.rs30
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(|_| ())
}
}