Skip to content

Commit

Permalink
Implement TaskSource for HistoryTraversal
Browse files Browse the repository at this point in the history
And remove the method in window that returns it, because it isn't used
so far.
  • Loading branch information
Agustin Chiappe Berrini committed Nov 13, 2018
1 parent b1a2b6b commit 14bc8ab
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 15 deletions.
1 change: 1 addition & 0 deletions components/profile/time.rs
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions components/profile_traits/time.rs
Expand Up @@ -103,6 +103,7 @@ pub enum ProfilerCategory {
ScriptWebVREvent = 0x79,
ScriptWorkletEvent = 0x7a,
ScriptPerformanceEvent = 0x7b,
ScriptHistoryEvent = 0x7c,
TimeToFirstPaint = 0x80,
TimeToFirstContentfulPaint = 0x81,
TimeToInteractive = 0x82,
Expand Down
9 changes: 3 additions & 6 deletions components/script/dom/window.rs
Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions components/script/script_runtime.rs
Expand Up @@ -100,6 +100,7 @@ pub enum ScriptThreadEventCategory {
DomEvent,
FileRead,
FormPlannedNavigation,
HistoryEvent,
ImageCacheMsg,
InputEvent,
NetworkEvent,
Expand Down
15 changes: 11 additions & 4 deletions components/script/script_thread.rs
Expand Up @@ -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>,

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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());
Expand All @@ -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(),
Expand Down
30 changes: 25 additions & 5 deletions components/script/task_source/history_traversal.rs
Expand Up @@ -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<(), ()> {
Expand All @@ -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(|_| ())
}
}

0 comments on commit 14bc8ab

Please sign in to comment.