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

Side by Side Diff: mojo/edk/system/remote_consumer_data_pipe_impl.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/local_data_pipe_impl.cc ('k') | mojo/public/c/system/tests/core_unittest.cc » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/remote_consumer_data_pipe_impl.h" 5 #include "mojo/edk/system/remote_consumer_data_pipe_impl.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 // TODO(vtl): (End of mostly copied code.) 250 // TODO(vtl): (End of mostly copied code.)
251 251
252 set_producer_two_phase_max_num_bytes_written(0); 252 set_producer_two_phase_max_num_bytes_written(0);
253 return MOJO_RESULT_OK; 253 return MOJO_RESULT_OK;
254 } 254 }
255 255
256 HandleSignalsState RemoteConsumerDataPipeImpl::ProducerGetHandleSignalsState() 256 HandleSignalsState RemoteConsumerDataPipeImpl::ProducerGetHandleSignalsState()
257 const { 257 const {
258 HandleSignalsState rv; 258 HandleSignalsState rv;
259 if (consumer_open()) { 259 if (consumer_open()) {
260 if (consumer_num_bytes_ < capacity_num_bytes() && 260 if (!producer_in_two_phase_write()) {
261 !producer_in_two_phase_write()) 261 // |producer_write_threshold_num_bytes()| is always at least 1.
262 rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_WRITABLE; 262 if (capacity_num_bytes() - consumer_num_bytes_ >=
263 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_WRITABLE; 263 producer_write_threshold_num_bytes()) {
264 rv.satisfied_signals |=
265 MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD;
266 } else if (consumer_num_bytes_ < capacity_num_bytes()) {
267 rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_WRITABLE;
268 }
269 }
270 rv.satisfiable_signals |=
271 MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD;
264 } else { 272 } else {
265 rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; 273 rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED;
266 } 274 }
267 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; 275 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED;
268 return rv; 276 return rv;
269 } 277 }
270 278
271 void RemoteConsumerDataPipeImpl::ProducerStartSerialize( 279 void RemoteConsumerDataPipeImpl::ProducerStartSerialize(
272 Channel* channel, 280 Channel* channel,
273 size_t* max_size, 281 size_t* max_size,
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 DCHECK(channel_endpoint_); 433 DCHECK(channel_endpoint_);
426 SetConsumerClosed(); 434 SetConsumerClosed();
427 channel_endpoint_->DetachFromClient(); 435 channel_endpoint_->DetachFromClient();
428 channel_endpoint_ = nullptr; 436 channel_endpoint_ = nullptr;
429 if (!producer_in_two_phase_write()) 437 if (!producer_in_two_phase_write())
430 DestroyBuffer(); 438 DestroyBuffer();
431 } 439 }
432 440
433 } // namespace system 441 } // namespace system
434 } // namespace mojo 442 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/local_data_pipe_impl.cc ('k') | mojo/public/c/system/tests/core_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698