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.

Reply via email to