Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1518)

Unified Diff: cc/base/completion_event.h

Issue 1531403002: Revert "Delete CC." (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/base/blocking_task_runner.cc ('k') | cc/base/float_quad_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/base/completion_event.h
diff --git a/cc/base/completion_event.h b/cc/base/completion_event.h
new file mode 100644
index 0000000000000000000000000000000000000000..6bae765dd20e2173065bccab670afd2618547a95
--- /dev/null
+++ b/cc/base/completion_event.h
@@ -0,0 +1,63 @@
+// Copyright 2011 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 CC_BASE_COMPLETION_EVENT_H_
+#define CC_BASE_COMPLETION_EVENT_H_
+
+#include "base/logging.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/thread_restrictions.h"
+
+namespace cc {
+
+// Used for making blocking calls from one thread to another. Use only when
+// absolutely certain that doing-so will not lead to a deadlock.
+//
+// It is safe to destroy this object as soon as Wait() returns.
+class CompletionEvent {
+ public:
+ CompletionEvent()
+ : event_(false /* manual_reset */, false /* initially_signaled */) {
+#if DCHECK_IS_ON()
+ waited_ = false;
+ signaled_ = false;
+#endif
+ }
+
+ ~CompletionEvent() {
+#if DCHECK_IS_ON()
+ DCHECK(waited_);
+ DCHECK(signaled_);
+#endif
+ }
+
+ void Wait() {
+#if DCHECK_IS_ON()
+ DCHECK(!waited_);
+ waited_ = true;
+#endif
+ base::ThreadRestrictions::ScopedAllowWait allow_wait;
+ event_.Wait();
+ }
+
+ void Signal() {
+#if DCHECK_IS_ON()
+ DCHECK(!signaled_);
+ signaled_ = true;
+#endif
+ event_.Signal();
+ }
+
+ private:
+ base::WaitableEvent event_;
+#if DCHECK_IS_ON()
+ // Used to assert that Wait() and Signal() are each called exactly once.
+ bool waited_;
+ bool signaled_;
+#endif
+};
+
+} // namespace cc
+
+#endif // CC_BASE_COMPLETION_EVENT_H_
« no previous file with comments | « cc/base/blocking_task_runner.cc ('k') | cc/base/float_quad_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698