Commit 3f022dd4 authored by Jaroslav Sevcik's avatar Jaroslav Sevcik Committed by Commit Bot

Use std::atomic in optimizing compiler dispatcher.

Change-Id: Ia1f47083689abb7d37c91098465a107a71f4dbea
Reviewed-on: https://chromium-review.googlesource.com/c/1225757
Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#57375}
parent 123a56a3
......@@ -112,7 +112,7 @@ OptimizedCompilationJob* OptimizingCompileDispatcher::NextInput(
input_queue_shift_ = InputQueueIndex(1);
input_queue_length_--;
if (check_if_flushing) {
if (static_cast<ModeFlag>(base::Acquire_Load(&mode_)) == FLUSH) {
if (mode_ == FLUSH) {
AllowHandleDereference allow_handle_dereference;
DisposeCompilationJob(job, true);
return nullptr;
......@@ -167,12 +167,12 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) {
}
return;
}
base::Release_Store(&mode_, static_cast<base::AtomicWord>(FLUSH));
mode_ = FLUSH;
if (FLAG_block_concurrent_recompilation) Unblock();
{
base::MutexGuard lock_guard(&ref_count_mutex_);
while (ref_count_ > 0) ref_count_zero_.Wait(&ref_count_mutex_);
base::Release_Store(&mode_, static_cast<base::AtomicWord>(COMPILE));
mode_ = COMPILE;
}
FlushOutputQueue(true);
if (FLAG_trace_concurrent_recompilation) {
......@@ -181,12 +181,12 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) {
}
void OptimizingCompileDispatcher::Stop() {
base::Release_Store(&mode_, static_cast<base::AtomicWord>(FLUSH));
mode_ = FLUSH;
if (FLAG_block_concurrent_recompilation) Unblock();
{
base::MutexGuard lock_guard(&ref_count_mutex_);
while (ref_count_ > 0) ref_count_zero_.Wait(&ref_count_mutex_);
base::Release_Store(&mode_, static_cast<base::AtomicWord>(COMPILE));
mode_ = COMPILE;
}
if (recompilation_delay_ != 0) {
......
......@@ -5,10 +5,10 @@
#ifndef V8_COMPILER_DISPATCHER_OPTIMIZING_COMPILE_DISPATCHER_H_
#define V8_COMPILER_DISPATCHER_OPTIMIZING_COMPILE_DISPATCHER_H_
#include <atomic>
#include <queue>
#include "src/allocation.h"
#include "src/base/atomicops.h"
#include "src/base/platform/condition-variable.h"
#include "src/base/platform/mutex.h"
#include "src/base/platform/platform.h"
......@@ -28,10 +28,10 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher {
input_queue_capacity_(FLAG_concurrent_recompilation_queue_length),
input_queue_length_(0),
input_queue_shift_(0),
mode_(COMPILE),
blocked_jobs_(0),
ref_count_(0),
recompilation_delay_(FLAG_concurrent_recompilation_delay) {
base::Relaxed_Store(&mode_, static_cast<base::AtomicWord>(COMPILE));
input_queue_ = NewArray<OptimizedCompilationJob*>(input_queue_capacity_);
}
......@@ -82,7 +82,7 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher {
// different threads.
base::Mutex output_queue_mutex_;
volatile base::AtomicWord mode_;
std::atomic<ModeFlag> mode_;
int blocked_jobs_;
......
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