| 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 |