Implement TaskSource for HistoryTraversal

And remove the method in window that returns it, because it isn't used
so far.
This commit is contained in:
Agustin Chiappe Berrini 2018-09-27 18:43:22 -04:00
parent b1a2b6b5bf
commit 14bc8ab754
6 changed files with 42 additions and 15 deletions

View file

@ -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",

View file

@ -103,6 +103,7 @@ pub enum ProfilerCategory {
ScriptWebVREvent = 0x79,
ScriptWorkletEvent = 0x7a,
ScriptPerformanceEvent = 0x7b,
ScriptHistoryEvent = 0x7c,
TimeToFirstPaint = 0x80,
TimeToFirstContentfulPaint = 0x81,
TimeToInteractive = 0x82,

View file

@ -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 {

View file

@ -100,6 +100,7 @@ pub enum ScriptThreadEventCategory {
DomEvent,
FileRead,
FormPlannedNavigation,
HistoryEvent,
ImageCacheMsg,
InputEvent,
NetworkEvent,

View file

@ -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(),

View file

@ -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(|_| ())
}
}