Reviewers: epertoso, jochen,
Message:
ptal
Description:
Add CancelableIdleTask.
BUG=chromium:490559
LOG=NO
Please review this at https://codereview.chromium.org/1258923010/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+48, -17 lines):
M src/cancelable-task.h
M src/cancelable-task.cc
M src/isolate.h
M src/isolate.cc
Index: src/cancelable-task.cc
diff --git a/src/cancelable-task.cc b/src/cancelable-task.cc
index
5eab9605b4a3c692b6ce58dd4ce51a148e7bd072..32d5057c49ead4149d9487e91a12cf8cdd304cd0
100644
--- a/src/cancelable-task.cc
+++ b/src/cancelable-task.cc
@@ -11,13 +11,13 @@ namespace v8 {
namespace internal {
-CancelableTask::CancelableTask(Isolate* isolate)
+Cancelable::Cancelable(Isolate* isolate)
: isolate_(isolate), is_cancelled_(false) {
isolate->RegisterCancelableTask(this);
}
-CancelableTask::~CancelableTask() {
+Cancelable::~Cancelable() {
if (!is_cancelled_) {
isolate_->RemoveCancelableTask(this);
}
Index: src/cancelable-task.h
diff --git a/src/cancelable-task.h b/src/cancelable-task.h
index
1a15e248efe8bf555b4f4e6db6e0ca73e7b1a76a..8e1f9b1f505d3b4786ecc88c1caaaf886501adcf
100644
--- a/src/cancelable-task.h
+++ b/src/cancelable-task.h
@@ -13,13 +13,29 @@ namespace internal {
class Isolate;
-class CancelableTask : public Task {
+
+class Cancelable {
public:
- explicit CancelableTask(Isolate* isolate);
- ~CancelableTask() override;
+ explicit Cancelable(Isolate* isolate);
+ virtual ~Cancelable();
+
+ virtual void Cancel() { is_cancelled_ = true; }
+
+ protected:
+ Isolate* isolate_;
+ bool is_cancelled_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Cancelable);
+};
- void Cancel() { is_cancelled_ = true; }
+// Multiple inheritance can be used because Task is a pure interface.
+class CancelableTask : public Cancelable, public Task {
+ public:
+ explicit CancelableTask(Isolate* isolate) : Cancelable(isolate) {}
+
+ // Task overrides.
void Run() final {
if (!is_cancelled_) {
RunInternal();
@@ -28,15 +44,30 @@ class CancelableTask : public Task {
virtual void RunInternal() = 0;
- protected:
- Isolate* isolate_;
-
private:
- bool is_cancelled_;
-
DISALLOW_COPY_AND_ASSIGN(CancelableTask);
};
+
+// Multiple inheritance can be used because IdleTask is a pure interface.
+class CancelableIdleTask : public Cancelable, public IdleTask {
+ public:
+ explicit CancelableIdleTask(Isolate* isolate) : Cancelable(isolate) {}
+
+ // Task overrides.
+ void Run(double deadline_in_seconds) final {
+ if (!is_cancelled_) {
+ RunInternal(deadline_in_seconds);
+ }
+ }
+
+ virtual void RunInternal(double deadline_in_seconds) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CancelableIdleTask);
+};
+
+
} // namespace internal
} // namespace v8
Index: src/isolate.cc
diff --git a/src/isolate.cc b/src/isolate.cc
index
15b16fc5df084860991c45cede3574d5a23c9985..aa67185e26fda26d87447525921694c4f7bad6ae
100644
--- a/src/isolate.cc
+++ b/src/isolate.cc
@@ -1908,7 +1908,7 @@ void Isolate::Deinit() {
delete basic_block_profiler_;
basic_block_profiler_ = NULL;
- for (CancelableTask* task : cancelable_tasks_) {
+ for (Cancelable* task : cancelable_tasks_) {
task->Cancel();
}
cancelable_tasks_.clear();
@@ -2790,12 +2790,12 @@ void Isolate::CheckDetachedContextsAfterGC() {
}
-void Isolate::RegisterCancelableTask(CancelableTask* task) {
+void Isolate::RegisterCancelableTask(Cancelable* task) {
cancelable_tasks_.insert(task);
}
-void Isolate::RemoveCancelableTask(CancelableTask* task) {
+void Isolate::RemoveCancelableTask(Cancelable* task) {
auto removed = cancelable_tasks_.erase(task);
USE(removed);
DCHECK(removed == 1);
Index: src/isolate.h
diff --git a/src/isolate.h b/src/isolate.h
index
585c5b8bf2f5f54bb3013bdcdff0538c12318c64..a11f75ab290a1ce82439fa89c5508f3167e567bb
100644
--- a/src/isolate.h
+++ b/src/isolate.h
@@ -1139,8 +1139,8 @@ class Isolate {
FutexWaitListNode* futex_wait_list_node() { return
&futex_wait_list_node_; }
- void RegisterCancelableTask(CancelableTask* task);
- void RemoveCancelableTask(CancelableTask* task);
+ void RegisterCancelableTask(Cancelable* task);
+ void RemoveCancelableTask(Cancelable* task);
protected:
explicit Isolate(bool enable_serializer);
@@ -1379,7 +1379,7 @@ class Isolate {
FutexWaitListNode futex_wait_list_node_;
- std::set<CancelableTask*> cancelable_tasks_;
+ std::set<Cancelable*> cancelable_tasks_;
friend class ExecutionAccess;
friend class HandleScopeImplementer;
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.