Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unify the task source and task canceller API #21804

Merged
merged 2 commits into from Nov 16, 2018
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Next

Implement TaskSource for HistoryTraversal

And remove the method in window that returns it, because it isn't used
so far.
  • Loading branch information
AgustinCB committed Nov 13, 2018
commit 14bc8ab7542287a18ecdede1ca7ee2af077eb8a9
@@ -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(|_| ())
}
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.