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

Side by Side Diff: mojo/system/raw_channel.cc

Issue 297683012: Mojo: Add a RawChannel::EnqueueMessage() that can be overridden by subclasses. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « mojo/system/raw_channel.h ('k') | mojo/system/raw_channel_posix.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/system/raw_channel.h" 5 #include "mojo/system/raw_channel.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 212
213 // Reminder: This must be thread-safe. 213 // Reminder: This must be thread-safe.
214 bool RawChannel::WriteMessage(scoped_ptr<MessageInTransit> message) { 214 bool RawChannel::WriteMessage(scoped_ptr<MessageInTransit> message) {
215 DCHECK(message); 215 DCHECK(message);
216 216
217 base::AutoLock locker(write_lock_); 217 base::AutoLock locker(write_lock_);
218 if (write_stopped_) 218 if (write_stopped_)
219 return false; 219 return false;
220 220
221 if (!write_buffer_->message_queue_.empty()) { 221 if (!write_buffer_->message_queue_.empty()) {
222 write_buffer_->message_queue_.push_back(message.release()); 222 EnqueueMessageNoLock(message.Pass());
223 return true; 223 return true;
224 } 224 }
225 225
226 write_buffer_->message_queue_.push_front(message.release()); 226 EnqueueMessageNoLock(message.Pass());
227 DCHECK_EQ(write_buffer_->data_offset_, 0u); 227 DCHECK_EQ(write_buffer_->data_offset_, 0u);
228 228
229 size_t platform_handles_written = 0; 229 size_t platform_handles_written = 0;
230 size_t bytes_written = 0; 230 size_t bytes_written = 0;
231 IOResult io_result = WriteNoLock(&platform_handles_written, &bytes_written); 231 IOResult io_result = WriteNoLock(&platform_handles_written, &bytes_written);
232 if (io_result == IO_PENDING) 232 if (io_result == IO_PENDING)
233 return true; 233 return true;
234 234
235 bool result = OnWriteCompletedNoLock(io_result == IO_SUCCEEDED, 235 bool result = OnWriteCompletedNoLock(io_result == IO_SUCCEEDED,
236 platform_handles_written, 236 platform_handles_written,
(...skipping 10 matching lines...) Expand all
247 247
248 return result; 248 return result;
249 } 249 }
250 250
251 // Reminder: This must be thread-safe. 251 // Reminder: This must be thread-safe.
252 bool RawChannel::IsWriteBufferEmpty() { 252 bool RawChannel::IsWriteBufferEmpty() {
253 base::AutoLock locker(write_lock_); 253 base::AutoLock locker(write_lock_);
254 return write_buffer_->message_queue_.empty(); 254 return write_buffer_->message_queue_.empty();
255 } 255 }
256 256
257 RawChannel::ReadBuffer* RawChannel::read_buffer() {
258 DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io_);
259 return read_buffer_.get();
260 }
261
262 RawChannel::WriteBuffer* RawChannel::write_buffer_no_lock() {
263 write_lock_.AssertAcquired();
264 return write_buffer_.get();
265 }
266
267 void RawChannel::OnReadCompleted(bool result, size_t bytes_read) { 257 void RawChannel::OnReadCompleted(bool result, size_t bytes_read) {
268 DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io_); 258 DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io_);
269 259
270 if (read_stopped_) { 260 if (read_stopped_) {
271 NOTREACHED(); 261 NOTREACHED();
272 return; 262 return;
273 } 263 }
274 264
275 IOResult io_result = result ? IO_SUCCEEDED : IO_FAILED; 265 IOResult io_result = result ? IO_SUCCEEDED : IO_FAILED;
276 266
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 406
417 did_fail = !OnWriteCompletedNoLock(result, 407 did_fail = !OnWriteCompletedNoLock(result,
418 platform_handles_written, 408 platform_handles_written,
419 bytes_written); 409 bytes_written);
420 } 410 }
421 411
422 if (did_fail) 412 if (did_fail)
423 CallOnFatalError(Delegate::FATAL_ERROR_FAILED_WRITE); 413 CallOnFatalError(Delegate::FATAL_ERROR_FAILED_WRITE);
424 } 414 }
425 415
416 void RawChannel::EnqueueMessageNoLock(scoped_ptr<MessageInTransit> message) {
417 write_lock_.AssertAcquired();
418 write_buffer_->message_queue_.push_back(message.release());
419 }
420
426 void RawChannel::CallOnFatalError(Delegate::FatalError fatal_error) { 421 void RawChannel::CallOnFatalError(Delegate::FatalError fatal_error) {
427 DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io_); 422 DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io_);
428 // TODO(vtl): Add a "write_lock_.AssertNotAcquired()"? 423 // TODO(vtl): Add a "write_lock_.AssertNotAcquired()"?
429 if (delegate_) 424 if (delegate_)
430 delegate_->OnFatalError(fatal_error); 425 delegate_->OnFatalError(fatal_error);
431 } 426 }
432 427
433 bool RawChannel::OnWriteCompletedNoLock(bool result, 428 bool RawChannel::OnWriteCompletedNoLock(bool result,
434 size_t platform_handles_written, 429 size_t platform_handles_written,
435 size_t bytes_written) { 430 size_t bytes_written) {
(...skipping 28 matching lines...) Expand all
464 459
465 write_stopped_ = true; 460 write_stopped_ = true;
466 STLDeleteElements(&write_buffer_->message_queue_); 461 STLDeleteElements(&write_buffer_->message_queue_);
467 write_buffer_->platform_handles_offset_ = 0; 462 write_buffer_->platform_handles_offset_ = 0;
468 write_buffer_->data_offset_ = 0; 463 write_buffer_->data_offset_ = 0;
469 return false; 464 return false;
470 } 465 }
471 466
472 } // namespace system 467 } // namespace system
473 } // namespace mojo 468 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/raw_channel.h ('k') | mojo/system/raw_channel_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698