mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
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:
parent
b1a2b6b5bf
commit
14bc8ab754
6 changed files with 42 additions and 15 deletions
|
@ -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",
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -100,6 +100,7 @@ pub enum ScriptThreadEventCategory {
|
||||||
DomEvent,
|
DomEvent,
|
||||||
FileRead,
|
FileRead,
|
||||||
FormPlannedNavigation,
|
FormPlannedNavigation,
|
||||||
|
HistoryEvent,
|
||||||
ImageCacheMsg,
|
ImageCacheMsg,
|
||||||
InputEvent,
|
InputEvent,
|
||||||
NetworkEvent,
|
NetworkEvent,
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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(|_| ())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue