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 "device/serial/data_source_sender.h" | 5 #include "device/serial/data_source_sender.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/message_loop/message_loop.h" | 13 #include "base/location.h" |
| 14 #include "base/single_thread_task_runner.h" |
| 15 #include "base/threading/thread_task_runner_handle.h" |
14 | 16 |
15 namespace device { | 17 namespace device { |
16 | 18 |
17 // Represents a send that is not yet fulfilled. | 19 // Represents a send that is not yet fulfilled. |
18 class DataSourceSender::PendingSend { | 20 class DataSourceSender::PendingSend { |
19 public: | 21 public: |
20 PendingSend(DataSourceSender* sender, const ReadyCallback& callback); | 22 PendingSend(DataSourceSender* sender, const ReadyCallback& callback); |
21 | 23 |
22 // Asynchronously fills |data_| with up to |num_bytes| of data. Following | 24 // Asynchronously fills |data_| with up to |num_bytes| of data. Following |
23 // this, one of Done() and DoneWithError() will be called with the result. | 25 // this, one of Done() and DoneWithError() will be called with the result. |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 if (shut_down_ || paused_ || pending_send_ || !available_buffer_capacity_) | 133 if (shut_down_ || paused_ || pending_send_ || !available_buffer_capacity_) |
132 return; | 134 return; |
133 | 135 |
134 pending_send_.reset(new PendingSend(this, ready_callback_)); | 136 pending_send_.reset(new PendingSend(this, ready_callback_)); |
135 pending_send_->GetData(available_buffer_capacity_); | 137 pending_send_->GetData(available_buffer_capacity_); |
136 } | 138 } |
137 | 139 |
138 void DataSourceSender::Done(const std::vector<char>& data) { | 140 void DataSourceSender::Done(const std::vector<char>& data) { |
139 DoneInternal(data); | 141 DoneInternal(data); |
140 if (!shut_down_ && available_buffer_capacity_) { | 142 if (!shut_down_ && available_buffer_capacity_) { |
141 base::MessageLoop::current()->PostTask( | 143 base::ThreadTaskRunnerHandle::Get()->PostTask( |
142 FROM_HERE, | 144 FROM_HERE, |
143 base::Bind(&DataSourceSender::GetMoreData, weak_factory_.GetWeakPtr())); | 145 base::Bind(&DataSourceSender::GetMoreData, weak_factory_.GetWeakPtr())); |
144 } | 146 } |
145 } | 147 } |
146 | 148 |
147 void DataSourceSender::DoneWithError(const std::vector<char>& data, | 149 void DataSourceSender::DoneWithError(const std::vector<char>& data, |
148 int32_t error) { | 150 int32_t error) { |
149 DoneInternal(data); | 151 DoneInternal(data); |
150 if (!shut_down_) | 152 if (!shut_down_) |
151 client_->OnError(error); | 153 client_->OnError(error); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 uint32_t bytes_written, | 245 uint32_t bytes_written, |
244 int32_t error) { | 246 int32_t error) { |
245 DCHECK(sender_.get()); | 247 DCHECK(sender_.get()); |
246 PendingSend* send = pending_send_; | 248 PendingSend* send = pending_send_; |
247 pending_send_ = nullptr; | 249 pending_send_ = nullptr; |
248 send->DoneWithError(bytes_written, error); | 250 send->DoneWithError(bytes_written, error); |
249 sender_ = nullptr; | 251 sender_ = nullptr; |
250 } | 252 } |
251 | 253 |
252 } // namespace device | 254 } // namespace device |
OLD | NEW |