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
3 // found in the LICENSE file.
5 #include "mojo/system/data_pipe_producer_dispatcher.h"
7 #include "base/logging.h"
8 #include "mojo/system/data_pipe.h"
9 #include "mojo/system/memory.h"
14 DataPipeProducerDispatcher::DataPipeProducerDispatcher() {
17 void DataPipeProducerDispatcher::Init(scoped_refptr<DataPipe> data_pipe) {
18 DCHECK(data_pipe.get());
19 data_pipe_ = data_pipe;
22 Dispatcher::Type DataPipeProducerDispatcher::GetType() const {
23 return kTypeDataPipeProducer;
26 DataPipeProducerDispatcher::~DataPipeProducerDispatcher() {
27 // |Close()|/|CloseImplNoLock()| should have taken care of the pipe.
28 DCHECK(!data_pipe_.get());
31 void DataPipeProducerDispatcher::CancelAllWaitersNoLock() {
32 lock().AssertAcquired();
33 data_pipe_->ProducerCancelAllWaiters();
36 void DataPipeProducerDispatcher::CloseImplNoLock() {
37 lock().AssertAcquired();
38 data_pipe_->ProducerClose();
42 scoped_refptr<Dispatcher>
43 DataPipeProducerDispatcher::CreateEquivalentDispatcherAndCloseImplNoLock() {
44 lock().AssertAcquired();
46 scoped_refptr<DataPipeProducerDispatcher> rv =
47 new DataPipeProducerDispatcher();
50 return scoped_refptr<Dispatcher>(rv.get());
53 MojoResult DataPipeProducerDispatcher::WriteDataImplNoLock(
54 UserPointer<const void> elements,
55 UserPointer<uint32_t> num_bytes,
56 MojoWriteDataFlags flags) {
57 lock().AssertAcquired();
58 return data_pipe_->ProducerWriteData(
59 elements, num_bytes, (flags & MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
62 MojoResult DataPipeProducerDispatcher::BeginWriteDataImplNoLock(
63 UserPointer<void*> buffer,
64 UserPointer<uint32_t> buffer_num_bytes,
65 MojoWriteDataFlags flags) {
66 lock().AssertAcquired();
68 return data_pipe_->ProducerBeginWriteData(
69 buffer, buffer_num_bytes, (flags & MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
72 MojoResult DataPipeProducerDispatcher::EndWriteDataImplNoLock(
73 uint32_t num_bytes_written) {
74 lock().AssertAcquired();
76 return data_pipe_->ProducerEndWriteData(num_bytes_written);
79 HandleSignalsState DataPipeProducerDispatcher::GetHandleSignalsStateImplNoLock()
81 lock().AssertAcquired();
82 return data_pipe_->ProducerGetHandleSignalsState();
85 MojoResult DataPipeProducerDispatcher::AddWaiterImplNoLock(
87 MojoHandleSignals signals,
89 HandleSignalsState* signals_state) {
90 lock().AssertAcquired();
91 return data_pipe_->ProducerAddWaiter(waiter, signals, context, signals_state);
94 void DataPipeProducerDispatcher::RemoveWaiterImplNoLock(
96 HandleSignalsState* signals_state) {
97 lock().AssertAcquired();
98 data_pipe_->ProducerRemoveWaiter(waiter, signals_state);
101 bool DataPipeProducerDispatcher::IsBusyNoLock() const {
102 lock().AssertAcquired();
103 return data_pipe_->ProducerIsBusy();
106 } // namespace system