mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00: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::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",
|
||||
|
|
|
@ -103,6 +103,7 @@ pub enum ProfilerCategory {
|
|||
ScriptWebVREvent = 0x79,
|
||||
ScriptWorkletEvent = 0x7a,
|
||||
ScriptPerformanceEvent = 0x7b,
|
||||
ScriptHistoryEvent = 0x7c,
|
||||
TimeToFirstPaint = 0x80,
|
||||
TimeToFirstContentfulPaint = 0x81,
|
||||
TimeToInteractive = 0x82,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -100,6 +100,7 @@ pub enum ScriptThreadEventCategory {
|
|||
DomEvent,
|
||||
FileRead,
|
||||
FormPlannedNavigation,
|
||||
HistoryEvent,
|
||||
ImageCacheMsg,
|
||||
InputEvent,
|
||||
NetworkEvent,
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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(|_| ())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue