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

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

Issue 782693004: Update mojo sdk to rev f6c8ec07c01deebc13178d516225fd12695c3dc2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: hack mojo_system_impl gypi for android :| Created 6 years 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
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/edk/system/message_pipe_test_utils.h" 5 #include "mojo/edk/system/message_pipe_test_utils.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/threading/platform_thread.h" // For |Sleep()|. 8 #include "base/threading/platform_thread.h" // For |Sleep()|.
9 #include "mojo/edk/system/channel.h" 9 #include "mojo/edk/system/channel.h"
10 #include "mojo/edk/system/channel_endpoint.h" 10 #include "mojo/edk/system/channel_endpoint.h"
11 #include "mojo/edk/system/message_pipe.h" 11 #include "mojo/edk/system/message_pipe.h"
12 #include "mojo/edk/system/waiter.h" 12 #include "mojo/edk/system/waiter.h"
13 13
14 namespace mojo { 14 namespace mojo {
15 namespace system { 15 namespace system {
16 namespace test { 16 namespace test {
17 17
18 MojoResult WaitIfNecessary(scoped_refptr<MessagePipe> mp, 18 MojoResult WaitIfNecessary(scoped_refptr<MessagePipe> mp,
19 MojoHandleSignals signals, 19 MojoHandleSignals signals,
20 HandleSignalsState* signals_state) { 20 HandleSignalsState* signals_state) {
21 Waiter waiter; 21 Waiter waiter;
22 waiter.Init(); 22 waiter.Init();
23 23
24 MojoResult add_result = mp->AddWaiter(0, &waiter, signals, 0, signals_state); 24 MojoResult add_result =
25 mp->AddAwakable(0, &waiter, signals, 0, signals_state);
25 if (add_result != MOJO_RESULT_OK) { 26 if (add_result != MOJO_RESULT_OK) {
26 return (add_result == MOJO_RESULT_ALREADY_EXISTS) ? MOJO_RESULT_OK 27 return (add_result == MOJO_RESULT_ALREADY_EXISTS) ? MOJO_RESULT_OK
27 : add_result; 28 : add_result;
28 } 29 }
29 30
30 MojoResult wait_result = waiter.Wait(MOJO_DEADLINE_INDEFINITE, nullptr); 31 MojoResult wait_result = waiter.Wait(MOJO_DEADLINE_INDEFINITE, nullptr);
31 mp->RemoveWaiter(0, &waiter, signals_state); 32 mp->RemoveAwakable(0, &waiter, signals_state);
32 return wait_result; 33 return wait_result;
33 } 34 }
34 35
35 ChannelThread::ChannelThread(embedder::PlatformSupport* platform_support) 36 ChannelThread::ChannelThread(embedder::PlatformSupport* platform_support)
36 : platform_support_(platform_support), 37 : platform_support_(platform_support),
37 test_io_thread_(base::TestIOThread::kManualStart) { 38 test_io_thread_(base::TestIOThread::kManualStart) {
38 } 39 }
39 40
40 ChannelThread::~ChannelThread() { 41 ChannelThread::~ChannelThread() {
41 Stop(); 42 Stop();
42 } 43 }
43 44
44 void ChannelThread::Start(embedder::ScopedPlatformHandle platform_handle, 45 void ChannelThread::Start(embedder::ScopedPlatformHandle platform_handle,
45 scoped_refptr<ChannelEndpoint> channel_endpoint) { 46 scoped_refptr<ChannelEndpoint> channel_endpoint) {
46 test_io_thread_.Start(); 47 test_io_thread_.Start();
47 test_io_thread_.PostTaskAndWait( 48 test_io_thread_.PostTaskAndWait(
48 FROM_HERE, 49 FROM_HERE,
49 base::Bind(&ChannelThread::InitChannelOnIOThread, base::Unretained(this), 50 base::Bind(&ChannelThread::InitChannelOnIOThread, base::Unretained(this),
50 base::Passed(&platform_handle), channel_endpoint)); 51 base::Passed(&platform_handle), channel_endpoint));
51 } 52 }
52 53
53 void ChannelThread::Stop() { 54 void ChannelThread::Stop() {
54 if (channel_.get()) { 55 if (channel_) {
55 // Hack to flush write buffers before quitting. 56 // Hack to flush write buffers before quitting.
56 // TODO(vtl): Remove this once |Channel| has a 57 // TODO(vtl): Remove this once |Channel| has a
57 // |FlushWriteBufferAndShutdown()| (or whatever). 58 // |FlushWriteBufferAndShutdown()| (or whatever).
58 while (!channel_->IsWriteBufferEmpty()) 59 while (!channel_->IsWriteBufferEmpty())
59 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(20)); 60 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(20));
60 61
61 test_io_thread_.PostTaskAndWait( 62 test_io_thread_.PostTaskAndWait(
62 FROM_HERE, base::Bind(&ChannelThread::ShutdownChannelOnIOThread, 63 FROM_HERE, base::Bind(&ChannelThread::ShutdownChannelOnIOThread,
63 base::Unretained(this))); 64 base::Unretained(this)));
64 } 65 }
(...skipping 13 matching lines...) Expand all
78 // Attach and run the endpoint. 79 // Attach and run the endpoint.
79 // Note: On the "server" (parent process) side, we need not attach/run the 80 // Note: On the "server" (parent process) side, we need not attach/run the
80 // endpoint immediately. However, on the "client" (child process) side, this 81 // endpoint immediately. However, on the "client" (child process) side, this
81 // *must* be done here -- otherwise, the |Channel| may receive/process 82 // *must* be done here -- otherwise, the |Channel| may receive/process
82 // messages (which it can do as soon as it's hooked up to the IO thread 83 // messages (which it can do as soon as it's hooked up to the IO thread
83 // message loop, and that message loop runs) before the endpoint is attached. 84 // message loop, and that message loop runs) before the endpoint is attached.
84 channel_->AttachAndRunEndpoint(channel_endpoint, true); 85 channel_->AttachAndRunEndpoint(channel_endpoint, true);
85 } 86 }
86 87
87 void ChannelThread::ShutdownChannelOnIOThread() { 88 void ChannelThread::ShutdownChannelOnIOThread() {
88 CHECK(channel_.get()); 89 CHECK(channel_);
89 channel_->Shutdown(); 90 channel_->Shutdown();
90 channel_ = nullptr; 91 channel_ = nullptr;
91 } 92 }
92 93
93 #if !defined(OS_IOS) 94 #if !defined(OS_IOS)
94 MultiprocessMessagePipeTestBase::MultiprocessMessagePipeTestBase() 95 MultiprocessMessagePipeTestBase::MultiprocessMessagePipeTestBase()
95 : channel_thread_(&platform_support_) { 96 : channel_thread_(&platform_support_) {
96 } 97 }
97 98
98 MultiprocessMessagePipeTestBase::~MultiprocessMessagePipeTestBase() { 99 MultiprocessMessagePipeTestBase::~MultiprocessMessagePipeTestBase() {
99 } 100 }
100 101
101 void MultiprocessMessagePipeTestBase::Init(scoped_refptr<ChannelEndpoint> ep) { 102 void MultiprocessMessagePipeTestBase::Init(scoped_refptr<ChannelEndpoint> ep) {
102 channel_thread_.Start(helper_.server_platform_handle.Pass(), ep); 103 channel_thread_.Start(helper_.server_platform_handle.Pass(), ep);
103 } 104 }
104 #endif 105 #endif
105 106
106 } // namespace test 107 } // namespace test
107 } // namespace system 108 } // namespace system
108 } // namespace mojo 109 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698