// 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_