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

Unified Diff: mojo/edk/system/awakable_list.h

Issue 2088833003: Add different behavior to AwakableList for "persistent" vs "one-shot" awakables. (Closed) Base URL: https://github.com/domokit/mojo.git@work793_wait_set_4.5
Patch Set: Created 4 years, 6 months 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 | « mojo/edk/system/awakable.cc ('k') | mojo/edk/system/awakable_list.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/awakable_list.h
diff --git a/mojo/edk/system/awakable_list.h b/mojo/edk/system/awakable_list.h
index d1e947dfd464e397f230dd0dc13dc6d3d10f078e..83b60930f429442464b6b7a73a596c9ef54bb978 100644
--- a/mojo/edk/system/awakable_list.h
+++ b/mojo/edk/system/awakable_list.h
@@ -32,10 +32,27 @@ class AwakableList {
void OnStateChange(const HandleSignalsState& old_state,
const HandleSignalsState& new_state);
- void CancelAll();
+ // This will awake all awakables with |Awakable::AwakeReason::CANCELLED|, and
+ // remove all awakes.
+ void CancelAndRemoveAll();
// Adds an awakable, identified by its pointer and its context.
- void Add(Awakable* awakable, uint64_t context, MojoHandleSignals signals);
+ //
+ // An awakable may either be persistent or one-shot (non-persistent).
+ // - A one-shot's |Awake()| will be called at most once per |Add()|, and
+ // will only be called if a watched signal goes from unsatisfied to
+ // satisfied (|Awake()| will be called with reason
+ // |Awakable::AwakeReason::SATISFIED|), all watched signals become
+ // never-satisfiable (|Awakable::AwakeReason::UNSATISFIABLE|), or
+ // |CancelAndRemoveAll()| is called (|Awakable::AwakeReason::CANCELLED|).
+ // - A persistent awakable's |Awake()| will be called for all state changes
+ // on watched signals (with reason |Awakable::AwakeReason::CHANGED|) until
+ // |CancelAndRemoveAll()| is called (at which point its |Awake()| will be
+ // called a final time with reason |Awakable::AwakeReason::CANCELLED|).
+ void Add(Awakable* awakable,
+ uint64_t context,
+ bool persistent,
+ MojoHandleSignals signals);
// Removes all awakables matching the given pointer and, if |match_context| is
// true, the given context.
@@ -43,12 +60,19 @@ class AwakableList {
private:
struct AwakeInfo {
- AwakeInfo(Awakable* awakable, MojoHandleSignals signals, uint64_t context)
- : awakable(awakable), signals(signals), context(context) {}
+ AwakeInfo(Awakable* awakable,
+ uint64_t context,
+ bool persistent,
+ MojoHandleSignals signals)
+ : awakable(awakable),
+ context(context),
+ persistent(persistent),
+ signals(signals) {}
Awakable* awakable;
- MojoHandleSignals signals;
uint64_t context;
+ bool persistent;
+ MojoHandleSignals signals;
};
using AwakeInfoList = std::vector<AwakeInfo>;
« no previous file with comments | « mojo/edk/system/awakable.cc ('k') | mojo/edk/system/awakable_list.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698