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

Side by Side Diff: mojo/edk/system/data_pipe.cc

Issue 1885663002: EDK: Add implementation of data pipe producer write threshold stuff. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « mojo/edk/system/data_pipe.h ('k') | mojo/edk/system/data_pipe_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "mojo/edk/system/data_pipe.h" 5 #include "mojo/edk/system/data_pipe.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 MutexLocker locker(&mutex_); 274 MutexLocker locker(&mutex_);
275 DCHECK(has_local_producer_no_lock()); 275 DCHECK(has_local_producer_no_lock());
276 producer_awakable_list_->CancelAll(); 276 producer_awakable_list_->CancelAll();
277 } 277 }
278 278
279 void DataPipe::ProducerClose() { 279 void DataPipe::ProducerClose() {
280 MutexLocker locker(&mutex_); 280 MutexLocker locker(&mutex_);
281 ProducerCloseNoLock(); 281 ProducerCloseNoLock();
282 } 282 }
283 283
284 MojoResult DataPipe::ProducerSetOptions(uint32_t write_threshold_num_bytes) {
285 MutexLocker locker(&mutex_);
286 DCHECK(has_local_producer_no_lock());
287
288 if (write_threshold_num_bytes % element_num_bytes() != 0)
289 return MOJO_RESULT_INVALID_ARGUMENT;
290
291 HandleSignalsState old_producer_state =
292 impl_->ProducerGetHandleSignalsState();
293 producer_write_threshold_num_bytes_ = write_threshold_num_bytes;
294 HandleSignalsState new_producer_state =
295 impl_->ProducerGetHandleSignalsState();
296 if (!new_producer_state.equals(old_producer_state))
297 AwakeProducerAwakablesForStateChangeNoLock(new_producer_state);
298 return MOJO_RESULT_OK;
299 }
300
301 void DataPipe::ProducerGetOptions(uint32_t* write_threshold_num_bytes) {
302 MutexLocker locker(&mutex_);
303 DCHECK(has_local_producer_no_lock());
304 *write_threshold_num_bytes = producer_write_threshold_num_bytes_;
305 }
306
284 MojoResult DataPipe::ProducerWriteData(UserPointer<const void> elements, 307 MojoResult DataPipe::ProducerWriteData(UserPointer<const void> elements,
285 UserPointer<uint32_t> num_bytes, 308 UserPointer<uint32_t> num_bytes,
286 bool all_or_none) { 309 bool all_or_none) {
287 MutexLocker locker(&mutex_); 310 MutexLocker locker(&mutex_);
288 DCHECK(has_local_producer_no_lock()); 311 DCHECK(has_local_producer_no_lock());
289 312
290 if (producer_in_two_phase_write_no_lock()) 313 if (producer_in_two_phase_write_no_lock())
291 return MOJO_RESULT_BUSY; 314 return MOJO_RESULT_BUSY;
292 if (!consumer_open_no_lock()) 315 if (!consumer_open_no_lock())
293 return MOJO_RESULT_FAILED_PRECONDITION; 316 return MOJO_RESULT_FAILED_PRECONDITION;
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 } 702 }
680 703
681 DataPipe::DataPipe(bool has_local_producer, 704 DataPipe::DataPipe(bool has_local_producer,
682 bool has_local_consumer, 705 bool has_local_consumer,
683 const MojoCreateDataPipeOptions& validated_options, 706 const MojoCreateDataPipeOptions& validated_options,
684 std::unique_ptr<DataPipeImpl> impl) 707 std::unique_ptr<DataPipeImpl> impl)
685 : element_num_bytes_(validated_options.element_num_bytes), 708 : element_num_bytes_(validated_options.element_num_bytes),
686 capacity_num_bytes_(validated_options.capacity_num_bytes), 709 capacity_num_bytes_(validated_options.capacity_num_bytes),
687 producer_open_(true), 710 producer_open_(true),
688 consumer_open_(true), 711 consumer_open_(true),
712 producer_write_threshold_num_bytes_(0),
689 consumer_read_threshold_num_bytes_(0), 713 consumer_read_threshold_num_bytes_(0),
690 producer_awakable_list_(has_local_producer ? new AwakableList() 714 producer_awakable_list_(has_local_producer ? new AwakableList()
691 : nullptr), 715 : nullptr),
692 consumer_awakable_list_(has_local_consumer ? new AwakableList() 716 consumer_awakable_list_(has_local_consumer ? new AwakableList()
693 : nullptr), 717 : nullptr),
694 producer_two_phase_max_num_bytes_written_(0), 718 producer_two_phase_max_num_bytes_written_(0),
695 consumer_two_phase_max_num_bytes_read_(0), 719 consumer_two_phase_max_num_bytes_read_(0),
696 impl_(std::move(impl)) { 720 impl_(std::move(impl)) {
697 impl_->set_owner(this); 721 impl_->set_owner(this);
698 722
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 SetProducerClosedNoLock(); 858 SetProducerClosedNoLock();
835 } 859 }
836 860
837 void DataPipe::SetConsumerClosed() { 861 void DataPipe::SetConsumerClosed() {
838 MutexLocker locker(&mutex_); 862 MutexLocker locker(&mutex_);
839 SetConsumerClosedNoLock(); 863 SetConsumerClosedNoLock();
840 } 864 }
841 865
842 } // namespace system 866 } // namespace system
843 } // namespace mojo 867 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/data_pipe.h ('k') | mojo/edk/system/data_pipe_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698