aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_source/mod.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-07-10 08:23:34 -0400
committerGitHub <noreply@github.com>2018-07-10 08:23:34 -0400
commit8988d674d0cbea59eaaa8c80f36f29d214682a0b (patch)
treeb661e8bbf9be062af35f5d1eb8eda80de7918dfd /components/script/task_source/mod.rs
parent2bc70e738b01051a64f2183691e0abd9a0f84072 (diff)
parent671627e97e20ae4baf728ae6dda61ef6f857c193 (diff)
downloadservo-8988d674d0cbea59eaaa8c80f36f29d214682a0b.tar.gz
servo-8988d674d0cbea59eaaa8c80f36f29d214682a0b.zip
Auto merge of #21126 - gterzian:tasksource_specific_cancelation, r=jdm
Introduce "per task source" cancellation <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [ ] `./mach build -d` does not report any errors - [ ] `./mach test-tidy` does not report any errors - [ ] These changes fix #21119 (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21126) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/task_source/mod.rs')
-rw-r--r--components/script/task_source/mod.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/components/script/task_source/mod.rs b/components/script/task_source/mod.rs
index 4818ba2c80c..cf605976b46 100644
--- a/components/script/task_source/mod.rs
+++ b/components/script/task_source/mod.rs
@@ -2,6 +2,7 @@
* 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/. */
+
pub mod dom_manipulation;
pub mod file_reading;
pub mod history_traversal;
@@ -10,10 +11,33 @@ pub mod performance_timeline;
pub mod user_interaction;
use dom::globalscope::GlobalScope;
+use enum_iterator::IntoEnumIterator;
use std::result::Result;
use task::{TaskCanceller, TaskOnce};
+// The names of all task sources, used to differentiate TaskCancellers.
+// Note: When adding a task source, update this enum.
+// Note: The HistoryTraversalTaskSource is not part of this,
+// because it doesn't implement TaskSource.
+#[derive(Eq, Hash, IntoEnumIterator, JSTraceable, PartialEq)]
+pub enum TaskSourceName {
+ DOMManipulation,
+ FileReading,
+ HistoryTraversal,
+ Networking,
+ PerformanceTimeline,
+ UserInteraction
+}
+
+impl TaskSourceName {
+ pub fn all() -> Vec<TaskSourceName> {
+ TaskSourceName::into_enum_iter().collect()
+ }
+}
+
pub trait TaskSource {
+ const NAME: TaskSourceName;
+
fn queue_with_canceller<T>(
&self,
task: T,
@@ -26,6 +50,7 @@ pub trait TaskSource {
where
T: TaskOnce + 'static,
{
- self.queue_with_canceller(task, &global.task_canceller())
+ let canceller = global.task_canceller(Self::NAME);
+ self.queue_with_canceller(task, &canceller)
}
}