blob: bae5b580cd2330897f0e9d5aa71d415cfecccd1d [file] [log] [blame]
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_CANCELABLE_TASK_H_
#define V8_CANCELABLE_TASK_H_
#include "include/v8-platform.h"
#include "src/base/macros.h"
namespace v8 {
namespace internal {
class Isolate;
class Cancelable {
public:
explicit Cancelable(Isolate* isolate);
virtual ~Cancelable();
virtual void Cancel() { is_cancelled_ = true; }
protected:
Isolate* isolate_;
bool is_cancelled_;
private:
DISALLOW_COPY_AND_ASSIGN(Cancelable);
};
// 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();
}
}
virtual void RunInternal() = 0;
private:
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) {}
// IdleTask 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
#endif // V8_CANCELABLE_TASK_H_