OLD | NEW |
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 <cstdlib> | 5 #include <cstdlib> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 base::Thread::Options options; | 39 base::Thread::Options options; |
40 options.message_loop_type = base::MessageLoop::TYPE_CUSTOM; | 40 options.message_loop_type = base::MessageLoop::TYPE_CUSTOM; |
41 options.message_pump_factory = base::Bind(&common::MessagePumpMojo::Create); | 41 options.message_pump_factory = base::Bind(&common::MessagePumpMojo::Create); |
42 CHECK(thread_.StartWithOptions(options)); | 42 CHECK(thread_.StartWithOptions(options)); |
43 | 43 |
44 thread_.message_loop()->PostTask( | 44 thread_.message_loop()->PostTask( |
45 FROM_HERE, base::Bind(&DemoTask::Run, base::Unretained(this))); | 45 FROM_HERE, base::Bind(&DemoTask::Run, base::Unretained(this))); |
46 } | 46 } |
47 | 47 |
48 void Run() { | 48 void Run() { |
49 integer_service_.Bind(proxy_handle_.Pass()); | 49 integer_service_.Bind( |
| 50 InterfacePtrInfo<IntegerService>(proxy_handle_.Pass(), 0u)); |
50 base::Callback<void(int32_t)> callback = | 51 base::Callback<void(int32_t)> callback = |
51 base::Bind(&DemoTask::SaveResultAndFinish, base::Unretained(this)); | 52 base::Bind(&DemoTask::SaveResultAndFinish, base::Unretained(this)); |
52 for(int unsigned i = 0; i < iteration_count_; i++) { | 53 for(int unsigned i = 0; i < iteration_count_; i++) { |
53 integer_service_->Increment(callback); | 54 integer_service_->Increment(callback); |
54 // To ensure that the DemoTask threads' execution overlaps, sleep. | 55 // To ensure that the DemoTask threads' execution overlaps, sleep. |
55 if (i < iteration_count_ - 1) | 56 if (i < iteration_count_ - 1) |
56 base::PlatformThread::Sleep( | 57 base::PlatformThread::Sleep( |
57 base::TimeDelta::FromMilliseconds(rand() % 10)); | 58 base::TimeDelta::FromMilliseconds(rand() % 10)); |
58 } | 59 } |
59 } | 60 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 | 101 |
101 for (unsigned i = 0; i < kTaskCount; i++) { | 102 for (unsigned i = 0; i < kTaskCount; i++) { |
102 IntegerServicePtr integer_service; | 103 IntegerServicePtr integer_service; |
103 indirect_integer_service_->Get(GetProxy(&integer_service)); | 104 indirect_integer_service_->Get(GetProxy(&integer_service)); |
104 DemoTaskFinishedCallback finished_callback = base::Bind( | 105 DemoTaskFinishedCallback finished_callback = base::Bind( |
105 &IndirectServiceDemoAppDelegate::FinishDemoTask, | 106 &IndirectServiceDemoAppDelegate::FinishDemoTask, |
106 base::Unretained(this), | 107 base::Unretained(this), |
107 base::Unretained(base::MessageLoop::current())); | 108 base::Unretained(base::MessageLoop::current())); |
108 // We're passing the integer_service_ proxy to another thread, so | 109 // We're passing the integer_service_ proxy to another thread, so |
109 // use its MessagePipe. | 110 // use its MessagePipe. |
110 tasks_.push_back(new DemoTask(integer_service.PassMessagePipe(), | 111 tasks_.push_back( |
111 finished_callback, | 112 new DemoTask(integer_service.PassInterface().PassHandle(), |
112 kTaskIterationCount)); | 113 finished_callback, kTaskIterationCount)); |
113 } | 114 } |
114 } | 115 } |
115 | 116 |
116 private: | 117 private: |
117 static const unsigned kTaskCount = 10; | 118 static const unsigned kTaskCount = 10; |
118 static const unsigned kTaskIterationCount = 6; | 119 static const unsigned kTaskIterationCount = 6; |
119 | 120 |
120 // This method is called on a DemoTask thread. It just calls DoFinishDemoTask | 121 // This method is called on a DemoTask thread. It just calls DoFinishDemoTask |
121 // on the application's run loop. Doing so serializes the DoFinishDemoTask | 122 // on the application's run loop. Doing so serializes the DoFinishDemoTask |
122 // calls. | 123 // calls. |
(...skipping 24 matching lines...) Expand all Loading... |
147 | 148 |
148 | 149 |
149 } // namespace examples | 150 } // namespace examples |
150 } // namespace mojo | 151 } // namespace mojo |
151 | 152 |
152 MojoResult MojoMain(MojoHandle application_request) { | 153 MojoResult MojoMain(MojoHandle application_request) { |
153 mojo::ApplicationRunnerChromium runner( | 154 mojo::ApplicationRunnerChromium runner( |
154 new mojo::examples::IndirectServiceDemoAppDelegate); | 155 new mojo::examples::IndirectServiceDemoAppDelegate); |
155 return runner.Run(application_request); | 156 return runner.Run(application_request); |
156 } | 157 } |
OLD | NEW |