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::ScriptDomEvent => "Script Dom Event",
ProfilerCategory::ScriptEvaluate => "Script JS Evaluate", ProfilerCategory::ScriptEvaluate => "Script JS Evaluate",
ProfilerCategory::ScriptFileRead => "Script File Read", ProfilerCategory::ScriptFileRead => "Script File Read",
ProfilerCategory::ScriptHistoryEvent => "Script History Event",
ProfilerCategory::ScriptImageCacheMsg => "Script Image Cache Msg", ProfilerCategory::ScriptImageCacheMsg => "Script Image Cache Msg",
ProfilerCategory::ScriptInputEvent => "Script Input Event", ProfilerCategory::ScriptInputEvent => "Script Input Event",
ProfilerCategory::ScriptNetworkEvent => "Script Network Event", ProfilerCategory::ScriptNetworkEvent => "Script Network Event",

View file

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

View file

@ -381,12 +381,9 @@ impl Window {
self.networking_task_source.clone() self.networking_task_source.clone()
} }
pub fn history_traversal_task_source(&self) -> Box<dyn ScriptChan + Send> { pub fn file_reading_task_source(&self) -> TaskManagement<FileReadingTaskSource> {
self.history_traversal_task_source.clone() let canceller = self.task_canceller(TaskSourceName::FileReading);
} TaskManagement(self.file_reading_task_source.clone(), canceller)
pub fn file_reading_task_source(&self) -> FileReadingTaskSource {
self.file_reading_task_source.clone()
} }
pub fn performance_timeline_task_source(&self) -> PerformanceTimelineTaskSource { pub fn performance_timeline_task_source(&self) -> PerformanceTimelineTaskSource {

View file

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

View file

@ -521,7 +521,7 @@ pub struct ScriptThread {
networking_task_sender: Box<dyn ScriptChan>, networking_task_sender: Box<dyn ScriptChan>,
history_traversal_task_source: HistoryTraversalTaskSource, history_traversal_task_sender: Sender<MainThreadScriptMsg>,
file_reading_task_sender: Box<dyn ScriptChan>, file_reading_task_sender: Box<dyn ScriptChan>,
@ -1042,7 +1042,7 @@ impl ScriptThread {
performance_timeline_task_sender: boxed_script_sender.clone(), performance_timeline_task_sender: boxed_script_sender.clone(),
remote_event_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_chan: state.control_chan,
control_port: control_port, control_port: control_port,
@ -1409,6 +1409,7 @@ impl ScriptThread {
ScriptThreadEventCategory::FormPlannedNavigation => { ScriptThreadEventCategory::FormPlannedNavigation => {
ProfilerCategory::ScriptPlannedNavigation ProfilerCategory::ScriptPlannedNavigation
}, },
ScriptThreadEventCategory::HistoryEvent => ProfilerCategory::ScriptHistoryEvent,
ScriptThreadEventCategory::ImageCacheMsg => ProfilerCategory::ScriptImageCacheMsg, ScriptThreadEventCategory::ImageCacheMsg => ProfilerCategory::ScriptImageCacheMsg,
ScriptThreadEventCategory::InputEvent => ProfilerCategory::ScriptInputEvent, ScriptThreadEventCategory::InputEvent => ProfilerCategory::ScriptInputEvent,
ScriptThreadEventCategory::NetworkEvent => ProfilerCategory::ScriptNetworkEvent, ScriptThreadEventCategory::NetworkEvent => ProfilerCategory::ScriptNetworkEvent,
@ -2180,6 +2181,13 @@ impl ScriptThread {
PerformanceTimelineTaskSource(self.performance_timeline_task_sender.clone(), pipeline_id) 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( pub fn user_interaction_task_source(
&self, &self,
pipeline_id: PipelineId, pipeline_id: PipelineId,
@ -2560,7 +2568,6 @@ impl ScriptThread {
); );
let MainThreadScriptChan(ref sender) = self.chan; 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(); 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()); 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.media_element_task_source(incomplete.pipeline_id),
self.user_interaction_task_source(incomplete.pipeline_id), self.user_interaction_task_source(incomplete.pipeline_id),
self.networking_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.file_reading_task_source(incomplete.pipeline_id),
self.performance_timeline_task_source(incomplete.pipeline_id) self.performance_timeline_task_source(incomplete.pipeline_id)
.clone(), .clone(),

View file

@ -2,12 +2,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * 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/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use crate::script_runtime::{CommonScriptMsg, ScriptChan}; use msg::constellation_msg::PipelineId;
use crate::script_thread::MainThreadScriptMsg; use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory};
use script_thread::MainThreadScriptMsg;
use servo_channel::Sender; use servo_channel::Sender;
use task::{TaskCanceller, TaskOnce};
use task_source::{TaskSource, TaskSourceName};
#[derive(JSTraceable)] #[derive(JSTraceable)]
pub struct HistoryTraversalTaskSource(pub Sender<MainThreadScriptMsg>); pub struct HistoryTraversalTaskSource(pub Sender<MainThreadScriptMsg>, pub PipelineId);
impl ScriptChan for HistoryTraversalTaskSource { impl ScriptChan for HistoryTraversalTaskSource {
fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> {
@ -16,7 +19,24 @@ impl ScriptChan for HistoryTraversalTaskSource {
.map_err(|_| ()) .map_err(|_| ())
} }
fn clone(&self) -> Box<dyn ScriptChan + Send> { fn clone(&self) -> Box<ScriptChan + Send> {
Box::new(HistoryTraversalTaskSource((&self.0).clone())) 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(|_| ())
} }
} }