Commit bc15972f authored by Anton Bikineev's avatar Anton Bikineev Committed by Commit Bot

heap: Use PostCancellableTask API to schedule incremental tasks

Bug: 1002998
Change-Id: Ic2acd0c15501a3cbe3c361f7003c7b8736893558
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1878830Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarMichael Lippautz <mlippautz@chromium.org>
Commit-Queue: Anton Bikineev <bikineev@chromium.org>
Cr-Commit-Position: refs/heads/master@{#709278}
parent 06c7b1cd
...@@ -67,6 +67,7 @@ ...@@ -67,6 +67,7 @@
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/web_memory_allocator_dump.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/web_memory_allocator_dump.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
...@@ -143,16 +144,11 @@ class ThreadState::IncrementalMarkingScheduler { ...@@ -143,16 +144,11 @@ class ThreadState::IncrementalMarkingScheduler {
} }
// Cancels incremental marking task in case there is any pending. // Cancels incremental marking task in case there is any pending.
void Cancel() { void Cancel() { task_.Cancel(); }
if (!pending_task_) {
return;
}
pending_task_->Cancel();
}
private: private:
void Init(BlinkGC::GCReason reason) { void Init(BlinkGC::GCReason reason) {
DCHECK(!pending_task_); DCHECK(!task_.IsActive());
reason_ = reason; reason_ = reason;
next_incremental_marking_step_duration_ = next_incremental_marking_step_duration_ =
kDefaultIncrementalMarkingStepDuration; kDefaultIncrementalMarkingStepDuration;
...@@ -160,46 +156,12 @@ class ThreadState::IncrementalMarkingScheduler { ...@@ -160,46 +156,12 @@ class ThreadState::IncrementalMarkingScheduler {
} }
void ScheduleTask() { void ScheduleTask() {
if (pending_task_) { // Reassigning to the task will cancel the currently scheduled one.
return; task_ = PostNonNestableCancellableTask(
} *ThreadScheduler::Current()->V8TaskRunner(), FROM_HERE,
auto task = std::make_unique<Task>(this); WTF::Bind(&IncrementalMarkingScheduler::Dispatch,
pending_task_ = task.get(); WTF::Unretained(this)));
ThreadScheduler::Current()->V8TaskRunner()->PostNonNestableTask( }
FROM_HERE, WTF::Bind(&Task::Run, std::move(task)));
}
// TODO(bikineev): Replace with PostNonNestableCancelableTask when
// implemented.
class Task {
public:
explicit Task(IncrementalMarkingScheduler* scheduler)
: scheduler_(scheduler) {}
~Task() {
if (cancelled_) {
return;
}
Cancel();
}
void Run() {
// Bail out if the ThreadState has been cancelled/destroyed.
if (cancelled_) {
return;
}
Cancel();
scheduler_->Dispatch();
}
void Cancel() {
cancelled_ = true;
scheduler_->pending_task_ = nullptr;
}
private:
IncrementalMarkingScheduler* scheduler_;
bool cancelled_ = false;
};
void Dispatch() { void Dispatch() {
switch (thread_state_->GetGCState()) { switch (thread_state_->GetGCState()) {
...@@ -241,7 +203,7 @@ class ThreadState::IncrementalMarkingScheduler { ...@@ -241,7 +203,7 @@ class ThreadState::IncrementalMarkingScheduler {
kDefaultIncrementalMarkingStepDuration; kDefaultIncrementalMarkingStepDuration;
base::TimeDelta previous_incremental_marking_time_left_ = base::TimeDelta previous_incremental_marking_time_left_ =
base::TimeDelta::Max(); base::TimeDelta::Max();
Task* pending_task_ = nullptr; TaskHandle task_;
}; };
ThreadState::ThreadState() ThreadState::ThreadState()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment