Index: services/media/framework/util/incident.h |
diff --git a/services/media/framework/util/incident.h b/services/media/framework/util/incident.h |
deleted file mode 100644 |
index 378a58ffe47e7b63728796085caee09a9687644f..0000000000000000000000000000000000000000 |
--- a/services/media/framework/util/incident.h |
+++ /dev/null |
@@ -1,151 +0,0 @@ |
-// Copyright 2016 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 MOJO_SERVICES_MEDIA_FRAMEWORK_UTIL_INCIDENT_H_ |
-#define MOJO_SERVICES_MEDIA_FRAMEWORK_UTIL_INCIDENT_H_ |
- |
-#include <functional> |
-#include <vector> |
- |
-#include "base/synchronization/lock.h" |
- |
-namespace mojo { |
-namespace media { |
- |
-// The Incident class provides a facility for executing code as the consequence |
-// of some occurrence. This can be useful for building state machines and |
-// otherwise dealing with asynchronous operations. |
-// |
-// Incident is not a thread-safe class and has no ability to make a thread wait |
-// or to execute code on a particular thread. |
-// |
-// Incidents rely heavily on std::function, so they shouldn't be used in |
-// enormous numbers. |
-// |
-// An Incident can be in one of two states: initial state or occurred state. |
-// |
-// Code can be executed when an incident occurs: |
-// |
-// incident.When([]() { |
-// // Do something... |
-// }); |
-// |
-// The behavior of the When method depends on the incident's state. In initial |
-// state, the consequence is added to a list to be executed when the incident |
-// occurs. In occurred state, When executes the consequence immediately (before |
-// When returns). |
-// |
-// An Incident occurs when its Occur (or Run) method is invoked and the Incident |
-// is in the initial state. All registered consequences of the Incident are |
-// executed during the call to Occur in the order they were added. Subsequent |
-// calls to Occur are ignored until the Incident is reset. |
-// |
-// The Reset method ensures that the Incident is in its initial state and that |
-// the list of consequences is cleared (without running the consequences). |
-class Incident { |
- public: |
- Incident(); |
- |
- ~Incident(); |
- |
- // Determines if this Incident has occurred due to a past call to Occur. |
- bool occurred() { return occurred_; } |
- |
- // Executes the consequence when this Incident occurs. If this Incident hasn't |
- // occurred when this method is called, a copy of the consequence is held |
- // until this Incident occurs or is reset. If this Incident has occurred when |
- // this method is called, the consequence is executed immediately and no copy |
- // of the consequence is held. |
- void When(const std::function<void()>& consequence) { |
- if (occurred_) { |
- consequence(); |
- } else { |
- consequences_.push_back(consequence); |
- } |
- } |
- |
- // If this Incident is in inital state (!occurred()), this method makes this |
- // Incident occur, executing and deleting all its consequences. Otherwise, |
- // does nothing. |
- void Occur(); |
- |
- // Resets this Incident to initial state and clears the list of consequences. |
- void Reset() { |
- occurred_ = false; |
- consequences_.clear(); |
- } |
- |
- // Calls Occur. This method makes an Incident convertible to |
- // mojo::Callback<void()>. |
- void Run() { Occur(); } |
- |
- private: |
- bool occurred_ = false; |
- std::vector<std::function<void()>> consequences_; |
-}; |
- |
-// Like Incident, but threadsafe. |
-class ThreadsafeIncident { |
- public: |
- ThreadsafeIncident(); |
- |
- ~ThreadsafeIncident(); |
- |
- // Determines if this ThreadsafeIncident has occurred due to a past call to |
- // Occur. Note that the state of the this ThreadsafeIncident may change |
- // immediately after this method returns, so there's no guarantee that the |
- // result is still valid. |
- bool occurred() { |
- base::AutoLock lock(consequences_lock_); |
- return occurred_; |
- } |
- |
- // Executes the consequence when this ThreadsafeIncident occurs. If this |
- // ThreadsafeIncident hasn't occurred when this method is called, a copy of |
- // the consequence is held until this ThreadsafeIncident occurs or is reset. |
- // If this ThreadsafeIncident has occurred when this method is called, the |
- // consequence is executed immediately and no copy of the consequence is held. |
- // Note that this ThreadsafeIncident's internal lock is not held when the |
- // consequence is called. It's therefore possible for this ThreadsafeIncident |
- // to be reset between the time the decision is made to run the consequence |
- // and when the consequence is actually run. |
- void When(const std::function<void()>& consequence) { |
- { |
- base::AutoLock lock(consequences_lock_); |
- if (!occurred_) { |
- consequences_.push_back(consequence); |
- return; |
- } |
- } |
- |
- consequence(); |
- } |
- |
- // If this ThreadsafeIncident is in inital state (!occurred()), this method |
- // makes this ThreadsafeIncident occur, executing and deleting all its |
- // consequences. Otherwise, does nothing. |
- void Occur(); |
- |
- // Resets this ThreadsafeIncident to initial state and clears the list of |
- // consequences. |
- void Reset() { |
- base::AutoLock lock(consequences_lock_); |
- occurred_ = false; |
- consequences_.clear(); |
- } |
- |
- // Calls Occur. This method makes an ThreadsafeIncident convertible to |
- // mojo::Callback<void()>. |
- void Run() { Occur(); } |
- |
- private: |
- mutable base::Lock consequences_lock_; |
- bool occurred_ = false; |
- std::vector<std::function<void()>> consequences_; |
-}; |
- |
-} // namespace media |
-} // namespace mojo |
- |
-#endif // MOJO_SERVICES_MEDIA_FRAMEWORK_UTIL_INCIDENT_H_ |