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

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

Issue 484893004: Mojo: Make Core own a PlatformSupport, and plumb it through to Channel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments Created 6 years, 4 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/core.h ('k') | mojo/system/multiprocess_message_pipe_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 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/system/core.h" 5 #include "mojo/system/core.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "mojo/embedder/platform_shared_buffer.h" 11 #include "mojo/embedder/platform_shared_buffer.h"
12 #include "mojo/embedder/platform_support.h"
12 #include "mojo/embedder/simple_platform_support.h" // TODO(vtl): Remove this. 13 #include "mojo/embedder/simple_platform_support.h" // TODO(vtl): Remove this.
13 #include "mojo/public/c/system/macros.h" 14 #include "mojo/public/c/system/macros.h"
14 #include "mojo/system/constants.h" 15 #include "mojo/system/constants.h"
15 #include "mojo/system/data_pipe.h" 16 #include "mojo/system/data_pipe.h"
16 #include "mojo/system/data_pipe_consumer_dispatcher.h" 17 #include "mojo/system/data_pipe_consumer_dispatcher.h"
17 #include "mojo/system/data_pipe_producer_dispatcher.h" 18 #include "mojo/system/data_pipe_producer_dispatcher.h"
18 #include "mojo/system/dispatcher.h" 19 #include "mojo/system/dispatcher.h"
19 #include "mojo/system/handle_signals_state.h" 20 #include "mojo/system/handle_signals_state.h"
20 #include "mojo/system/local_data_pipe.h" 21 #include "mojo/system/local_data_pipe.h"
21 #include "mojo/system/memory.h" 22 #include "mojo/system/memory.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 // INF. |Waiter| locks 69 // INF. |Waiter| locks
69 // 70 //
70 // Notes: 71 // Notes:
71 // - While holding a |Dispatcher| lock, you may not unconditionally attempt 72 // - While holding a |Dispatcher| lock, you may not unconditionally attempt
72 // to take another |Dispatcher| lock. (This has consequences on the 73 // to take another |Dispatcher| lock. (This has consequences on the
73 // concurrency semantics of |MojoWriteMessage()| when passing handles.) 74 // concurrency semantics of |MojoWriteMessage()| when passing handles.)
74 // Doing so would lead to deadlock. 75 // Doing so would lead to deadlock.
75 // - Locks at the "INF" level may not have any locks taken while they are 76 // - Locks at the "INF" level may not have any locks taken while they are
76 // held. 77 // held.
77 78
78 Core::Core() { 79 // TODO(vtl): This should take a |scoped_ptr<PlatformSupport>| as a parameter.
80 Core::Core() : platform_support_(new embedder::SimplePlatformSupport()) {
79 } 81 }
80 82
81 Core::~Core() { 83 Core::~Core() {
82 } 84 }
83 85
84 MojoHandle Core::AddDispatcher(const scoped_refptr<Dispatcher>& dispatcher) { 86 MojoHandle Core::AddDispatcher(const scoped_refptr<Dispatcher>& dispatcher) {
85 base::AutoLock locker(handle_table_lock_); 87 base::AutoLock locker(handle_table_lock_);
86 return handle_table_.AddDispatcher(dispatcher); 88 return handle_table_.AddDispatcher(dispatcher);
87 } 89 }
88 90
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 MojoResult Core::CreateSharedBuffer( 458 MojoResult Core::CreateSharedBuffer(
457 UserPointer<const MojoCreateSharedBufferOptions> options, 459 UserPointer<const MojoCreateSharedBufferOptions> options,
458 uint64_t num_bytes, 460 uint64_t num_bytes,
459 UserPointer<MojoHandle> shared_buffer_handle) { 461 UserPointer<MojoHandle> shared_buffer_handle) {
460 MojoCreateSharedBufferOptions validated_options = {}; 462 MojoCreateSharedBufferOptions validated_options = {};
461 MojoResult result = SharedBufferDispatcher::ValidateCreateOptions( 463 MojoResult result = SharedBufferDispatcher::ValidateCreateOptions(
462 options, &validated_options); 464 options, &validated_options);
463 if (result != MOJO_RESULT_OK) 465 if (result != MOJO_RESULT_OK)
464 return result; 466 return result;
465 467
466 // TODO(vtl): |Core| should have a |PlatformSupport| passed in at creation
467 // time, and we should use that instead.
468 embedder::SimplePlatformSupport platform_support;
469 scoped_refptr<SharedBufferDispatcher> dispatcher; 468 scoped_refptr<SharedBufferDispatcher> dispatcher;
470 result = SharedBufferDispatcher::Create( 469 result = SharedBufferDispatcher::Create(
471 &platform_support, validated_options, num_bytes, &dispatcher); 470 platform_support(), validated_options, num_bytes, &dispatcher);
472 if (result != MOJO_RESULT_OK) { 471 if (result != MOJO_RESULT_OK) {
473 DCHECK(!dispatcher); 472 DCHECK(!dispatcher);
474 return result; 473 return result;
475 } 474 }
476 475
477 MojoHandle h = AddDispatcher(dispatcher); 476 MojoHandle h = AddDispatcher(dispatcher);
478 if (h == MOJO_HANDLE_INVALID) { 477 if (h == MOJO_HANDLE_INVALID) {
479 LOG(ERROR) << "Handle table full"; 478 LOG(ERROR) << "Handle table full";
480 dispatcher->Close(); 479 dispatcher->Close();
481 return MOJO_RESULT_RESOURCE_EXHAUSTED; 480 return MOJO_RESULT_RESOURCE_EXHAUSTED;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 if (signals_states) { 597 if (signals_states) {
599 for (; i < num_handles; i++) 598 for (; i < num_handles; i++)
600 signals_states[i] = dispatchers[i]->GetHandleSignalsState(); 599 signals_states[i] = dispatchers[i]->GetHandleSignalsState();
601 } 600 }
602 601
603 return rv; 602 return rv;
604 } 603 }
605 604
606 } // namespace system 605 } // namespace system
607 } // namespace mojo 606 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/core.h ('k') | mojo/system/multiprocess_message_pipe_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698