blob: c50c15070ee4cbed798a6736d2757b30872c0891 [file] [log] [blame]
// Copyright 2015 The Chromium 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 SKY_ENGINE_CORE_SCRIPT_MONITOR_H_
#define SKY_ENGINE_CORE_SCRIPT_MONITOR_H_
#include "base/synchronization/condition_variable.h"
#include "base/synchronization/lock.h"
namespace blink {
class Monitor {
public:
Monitor() {
lock_ = new base::Lock();
condition_variable_ = new base::ConditionVariable(lock_);
}
~Monitor() {
delete condition_variable_;
delete lock_;
}
void Enter() {
lock_->Acquire();
}
void Exit() {
lock_->Release();
}
void Notify() {
condition_variable_->Signal();
}
void Wait() {
condition_variable_->Wait();
}
private:
base::Lock* lock_;
base::ConditionVariable* condition_variable_;
DISALLOW_COPY_AND_ASSIGN(Monitor);
};
class MonitorLocker {
public:
explicit MonitorLocker(Monitor* monitor) : monitor_(monitor) {
CHECK(monitor_);
monitor_->Enter();
}
virtual ~MonitorLocker() {
monitor_->Exit();
}
void Wait() {
return monitor_->Wait();
}
void Notify() {
monitor_->Notify();
}
private:
Monitor* const monitor_;
DISALLOW_COPY_AND_ASSIGN(MonitorLocker);
};
} // namespace blink
#endif // SKY_ENGINE_CORE_SCRIPT_MONITOR_H_