OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MOJO_SYSTEM_DATA_PIPE_H_ | 5 #ifndef MOJO_SYSTEM_DATA_PIPE_H_ |
6 #define MOJO_SYSTEM_DATA_PIPE_H_ | 6 #define MOJO_SYSTEM_DATA_PIPE_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "base/synchronization/lock.h" | 11 #include "base/synchronization/lock.h" |
12 #include "mojo/public/c/system/data_pipe.h" | 12 #include "mojo/public/c/system/data_pipe.h" |
13 #include "mojo/public/c/system/types.h" | 13 #include "mojo/public/c/system/types.h" |
14 #include "mojo/system/system_impl_export.h" | 14 #include "mojo/system/system_impl_export.h" |
| 15 #include "mojo/system/wait_flags_state.h" |
15 | 16 |
16 namespace mojo { | 17 namespace mojo { |
17 namespace system { | 18 namespace system { |
18 | 19 |
19 class Waiter; | 20 class Waiter; |
20 class WaiterList; | 21 class WaiterList; |
21 | 22 |
22 // |DataPipe| is a base class for secondary objects implementing data pipes, | 23 // |DataPipe| is a base class for secondary objects implementing data pipes, |
23 // similar to |MessagePipe| (see the explanatory comment in core.cc). It is | 24 // similar to |MessagePipe| (see the explanatory comment in core.cc). It is |
24 // typically owned by the dispatcher(s) corresponding to the local endpoints. | 25 // typically owned by the dispatcher(s) corresponding to the local endpoints. |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 virtual MojoResult ProducerWriteDataImplNoLock(const void* elements, | 99 virtual MojoResult ProducerWriteDataImplNoLock(const void* elements, |
99 uint32_t* num_bytes, | 100 uint32_t* num_bytes, |
100 bool all_or_none) = 0; | 101 bool all_or_none) = 0; |
101 virtual MojoResult ProducerBeginWriteDataImplNoLock( | 102 virtual MojoResult ProducerBeginWriteDataImplNoLock( |
102 void** buffer, | 103 void** buffer, |
103 uint32_t* buffer_num_bytes, | 104 uint32_t* buffer_num_bytes, |
104 bool all_or_none) = 0; | 105 bool all_or_none) = 0; |
105 virtual MojoResult ProducerEndWriteDataImplNoLock( | 106 virtual MojoResult ProducerEndWriteDataImplNoLock( |
106 uint32_t num_bytes_written) = 0; | 107 uint32_t num_bytes_written) = 0; |
107 // Note: A producer should not be writable during a two-phase write. | 108 // Note: A producer should not be writable during a two-phase write. |
108 virtual MojoWaitFlags ProducerSatisfiedFlagsNoLock() = 0; | 109 virtual WaitFlagsState ProducerGetWaitFlagsStateNoLock() const = 0; |
109 virtual MojoWaitFlags ProducerSatisfiableFlagsNoLock() = 0; | |
110 | 110 |
111 virtual void ConsumerCloseImplNoLock() = 0; | 111 virtual void ConsumerCloseImplNoLock() = 0; |
112 // |*num_bytes| will be a nonzero multiple of |element_num_bytes_|. | 112 // |*num_bytes| will be a nonzero multiple of |element_num_bytes_|. |
113 virtual MojoResult ConsumerReadDataImplNoLock(void* elements, | 113 virtual MojoResult ConsumerReadDataImplNoLock(void* elements, |
114 uint32_t* num_bytes, | 114 uint32_t* num_bytes, |
115 bool all_or_none) = 0; | 115 bool all_or_none) = 0; |
116 virtual MojoResult ConsumerDiscardDataImplNoLock(uint32_t* num_bytes, | 116 virtual MojoResult ConsumerDiscardDataImplNoLock(uint32_t* num_bytes, |
117 bool all_or_none) = 0; | 117 bool all_or_none) = 0; |
118 // |*num_bytes| will be a nonzero multiple of |element_num_bytes_|. | 118 // |*num_bytes| will be a nonzero multiple of |element_num_bytes_|. |
119 virtual MojoResult ConsumerQueryDataImplNoLock(uint32_t* num_bytes) = 0; | 119 virtual MojoResult ConsumerQueryDataImplNoLock(uint32_t* num_bytes) = 0; |
120 virtual MojoResult ConsumerBeginReadDataImplNoLock(const void** buffer, | 120 virtual MojoResult ConsumerBeginReadDataImplNoLock(const void** buffer, |
121 uint32_t* buffer_num_bytes, | 121 uint32_t* buffer_num_bytes, |
122 bool all_or_none) = 0; | 122 bool all_or_none) = 0; |
123 virtual MojoResult ConsumerEndReadDataImplNoLock(uint32_t num_bytes_read) = 0; | 123 virtual MojoResult ConsumerEndReadDataImplNoLock(uint32_t num_bytes_read) = 0; |
124 // Note: A consumer should not be writable during a two-phase read. | 124 // Note: A consumer should not be writable during a two-phase read. |
125 virtual MojoWaitFlags ConsumerSatisfiedFlagsNoLock() = 0; | 125 virtual WaitFlagsState ConsumerGetWaitFlagsStateNoLock() const = 0; |
126 virtual MojoWaitFlags ConsumerSatisfiableFlagsNoLock() = 0; | |
127 | 126 |
128 // Thread-safe and fast (they don't take the lock): | 127 // Thread-safe and fast (they don't take the lock): |
129 bool may_discard() const { return may_discard_; } | 128 bool may_discard() const { return may_discard_; } |
130 size_t element_num_bytes() const { return element_num_bytes_; } | 129 size_t element_num_bytes() const { return element_num_bytes_; } |
131 size_t capacity_num_bytes() const { return capacity_num_bytes_; } | 130 size_t capacity_num_bytes() const { return capacity_num_bytes_; } |
132 | 131 |
133 // Must be called under lock. | 132 // Must be called under lock. |
134 bool producer_open_no_lock() const { | 133 bool producer_open_no_lock() const { |
135 lock_.AssertAcquired(); | 134 lock_.AssertAcquired(); |
136 return producer_open_; | 135 return producer_open_; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 uint32_t producer_two_phase_max_num_bytes_written_; | 192 uint32_t producer_two_phase_max_num_bytes_written_; |
194 uint32_t consumer_two_phase_max_num_bytes_read_; | 193 uint32_t consumer_two_phase_max_num_bytes_read_; |
195 | 194 |
196 DISALLOW_COPY_AND_ASSIGN(DataPipe); | 195 DISALLOW_COPY_AND_ASSIGN(DataPipe); |
197 }; | 196 }; |
198 | 197 |
199 } // namespace system | 198 } // namespace system |
200 } // namespace mojo | 199 } // namespace mojo |
201 | 200 |
202 #endif // MOJO_SYSTEM_DATA_PIPE_H_ | 201 #endif // MOJO_SYSTEM_DATA_PIPE_H_ |
OLD | NEW |