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

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/event_emitter.h

Issue 19271009: [NaCl SDK} Add EventListener and EventEmitter to support epoll. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove extra mutex Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
Sam Clegg 2013/07/17 17:34:56 The convention for C++ headers seem to be to use s
4 */
5 #ifndef LIBRARIES_NACL_IO_EVENT_EMITTER_H_
6 #define LIBRARIES_NACL_IO_EVENT_EMITTER_H_
7
8 #include <map>
9 #include <set>
10
11 #include "nacl_io/error.h"
12
13 #include "sdk_util/ref_object.h"
14 #include "sdk_util/scoped_ref.h"
15 #include "sdk_util/simple_lock.h"
16
17 class EventEmitter;
18 class EventInfo;
Sam Clegg 2013/07/17 17:34:56 Remove since its is declared just below?
binji 2013/07/19 20:47:17 ping
noelallen1 2013/07/19 21:35:43 Done.
19 class EventListener;
20
21 // A ref counted object for storing the state of a single signal request.
22 // Requests are unique to any FD/EventListener pair.
23 struct EventInfo : public RefObject {
binji 2013/07/17 22:23:20 might want to mention that this is not POD, becaus
noelallen1 2013/07/19 21:35:43 Done.
24 volatile uint64_t data;
25 volatile uint32_t events;
Sam Clegg 2013/07/17 17:34:56 Is this a bitfield of KernnelEventTypes? Perhaps
noelallen1 2013/07/19 21:35:43 Done.
26 volatile uint32_t filter;
Sam Clegg 2013/07/17 17:34:56 Didn't we come to the conclusion that volatile is
noelallen1 2013/07/19 21:35:43 Done.
27 // We do not use a ScopedRef to prevent circular references.
28 EventEmitter* emitter;
29 EventListener* listener;
30 uint32_t id;
31 };
32
33 typedef ScopedRef<EventInfo> ScopedEventInfo;
34
35 typedef std::map<int, ScopedEventInfo> EventInfoMap_t;
36 typedef std::set<ScopedEventInfo> EventInfoSet_t;
37
38 // EventEmitter
39 //
40 // The EventEmitter class provides notification of events to EventListeners
41 // by registering EventInfo objects and signalling the EventListener when
binji 2013/07/17 22:23:20 sp: whenever their state
binji 2013/07/17 22:23:20 signalled or signaled are both correct, but signal
binji 2013/07/19 20:47:18 ping
noelallen1 2013/07/19 21:35:43 Done.
noelallen1 2013/07/19 21:35:43 Done.
noelallen1 2013/07/19 21:35:43 Done.
42 // ever thier state is changed.
43 //
44 // See "Kernel Events" in event_listener.h for additional information.
45 class EventEmitter : public RefObject {
46 typedef std::set<ScopedEventInfo> EventInfoSet_t;
Sam Clegg 2013/07/17 17:34:56 Isn't this is duplicate of the typedef 10 lines ab
binji 2013/07/19 20:47:18 ping
noelallen1 2013/07/19 21:35:43 Done.
noelallen1 2013/07/19 21:35:43 Done.
47
48 protected:
49 // Called automatically prior to delete to inform the EventListeners that
50 // this EventEmitter is abandoning an associated EventInfo.
51 virtual void Destroy();
52
53 private:
54 // Regisiter or unregister an EventInfo. The lock of the EventListener
binji 2013/07/17 22:23:20 sp: Register
binji 2013/07/19 20:47:18 ping
noelallen1 2013/07/19 21:35:43 Done.
noelallen1 2013/07/19 21:35:43 Done.
55 // associated with this EventInfo must be held prior to calling these
56 // functions. These functions are private to ensure they are called by the
57 // EventListener.
58 void RegisterEventInfo(const ScopedEventInfo& info);
59 void UnregisterEventInfo(const ScopedEventInfo& info);
60
61 public:
62 // Returns the current state of the emitter.
Sam Clegg 2013/07/17 17:34:56 The state is a bitfield of KennelEventType? Perha
noelallen1 2013/07/19 21:35:43 I'm going to think about that as I do the select/p
63 virtual uint32_t GetEventStatus() = 0;
64
65 // REturns the type of the emitter (compatible with st_mode in stat)
binji 2013/07/17 22:23:20 nit: Returns
binji 2013/07/19 20:47:18 ping
noelallen1 2013/07/19 21:35:43 Done.
noelallen1 2013/07/19 21:35:43 Done.
66 virtual int GetType() = 0;
67
68 protected:
69 // Called by the thread causing the Event.
70 void RaiseEvent(uint32_t events);
71
72 // Called after registering locally, but while lock is still held.
73 virtual void ChainRegister(const ScopedEventInfo& event);
binji 2013/07/17 22:23:20 I'd prefer a name that made it clear that it was c
noelallen1 2013/07/19 21:35:43 Done.
74
75 // Called before unregistering locally, but while lock is still held.
76 virtual void ChainUnregister(const ScopedEventInfo& event);
77
78 private:
79 SimpleLock emitter_lock_;
80 EventInfoSet_t events_;
81 friend class EventListener;
82 };
83
84 typedef ScopedRef<EventEmitter> ScopedEventEmitter;
85
86 #endif // LIBRARIES_NACL_IO_EVENT_EMITTER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698