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

Unified Diff: device/serial/data_receiver.cc

Issue 2410743002: Remove the mojo serial interfaces and related infrastructure. (Closed)
Patch Set: Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/serial/data_receiver.h ('k') | device/serial/data_sender.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/serial/data_receiver.cc
diff --git a/device/serial/data_receiver.cc b/device/serial/data_receiver.cc
deleted file mode 100644
index 361e201a550a096ba8f6db28e7e23fcfcb6ebcd5..0000000000000000000000000000000000000000
--- a/device/serial/data_receiver.cc
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "device/serial/data_receiver.h"
-
-#include <limits>
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
-
-namespace device {
-
-// Represents a receive that is not yet fulfilled.
-class DataReceiver::PendingReceive {
- public:
- PendingReceive(DataReceiver* receiver,
- const ReceiveDataCallback& callback,
- const ReceiveErrorCallback& error_callback,
- int32_t fatal_error_value);
-
- // Dispatches |data| to |receive_callback_|. Returns whether this
- // PendingReceive is finished by this call.
- bool DispatchDataFrame(DataReceiver::DataFrame* data);
-
- // Reports |fatal_error_value_| to |receive_error_callback_|.
- void DispatchFatalError();
-
- bool buffer_in_use() { return buffer_in_use_; }
-
- private:
- class Buffer;
-
- // Invoked when the user is finished with the ReadOnlyBuffer provided to
- // |receive_callback_|.
- void Done(uint32_t num_bytes);
-
- // The DataReceiver that owns this.
- DataReceiver* receiver_;
-
- // The callback to dispatch data.
- ReceiveDataCallback receive_callback_;
-
- // The callback to report errors.
- ReceiveErrorCallback receive_error_callback_;
-
- // The error value to report when DispatchFatalError() is called.
- const int32_t fatal_error_value_;
-
- // True if the user owns a buffer passed to |receive_callback_| as part of
- // DispatchDataFrame().
- bool buffer_in_use_;
-};
-
-// A ReadOnlyBuffer implementation that provides a view of a buffer owned by a
-// DataReceiver.
-class DataReceiver::PendingReceive::Buffer : public ReadOnlyBuffer {
- public:
- Buffer(scoped_refptr<DataReceiver> pipe,
- PendingReceive* receive,
- const char* buffer,
- uint32_t buffer_size);
- ~Buffer() override;
-
- // ReadOnlyBuffer overrides.
- const char* GetData() override;
- uint32_t GetSize() override;
- void Done(uint32_t bytes_consumed) override;
- void DoneWithError(uint32_t bytes_consumed, int32_t error) override;
-
- private:
- // The DataReceiver of whose buffer we are providing a view.
- scoped_refptr<DataReceiver> receiver_;
-
- // The PendingReceive to which this buffer has been created in response.
- PendingReceive* pending_receive_;
-
- const char* buffer_;
- uint32_t buffer_size_;
-};
-
-// A buffer of data or an error received from the DataSource.
-struct DataReceiver::DataFrame {
- explicit DataFrame(mojo::Array<uint8_t> data)
- : is_error(false),
- data(std::move(data)),
- offset(0),
- error(0),
- dispatched(false) {}
-
- explicit DataFrame(int32_t error)
- : is_error(true), offset(0), error(error), dispatched(false) {}
-
- // Whether this DataFrame represents an error.
- bool is_error;
-
- // The data received from the DataSource.
- mojo::Array<uint8_t> data;
-
- // The offset within |data| at which the next read should begin.
- uint32_t offset;
-
- // The value of the error that occurred.
- const int32_t error;
-
- // Whether the error has been dispatched to the user.
- bool dispatched;
-};
-
-DataReceiver::DataReceiver(
- mojo::InterfacePtr<serial::DataSource> source,
- mojo::InterfaceRequest<serial::DataSourceClient> client,
- uint32_t buffer_size,
- int32_t fatal_error_value)
- : source_(std::move(source)),
- client_(this, std::move(client)),
- fatal_error_value_(fatal_error_value),
- shut_down_(false),
- weak_factory_(this) {
- source_.set_connection_error_handler(
- base::Bind(&DataReceiver::OnConnectionError, base::Unretained(this)));
- source_->Init(buffer_size);
- client_.set_connection_error_handler(
- base::Bind(&DataReceiver::OnConnectionError, base::Unretained(this)));
-}
-
-bool DataReceiver::Receive(const ReceiveDataCallback& callback,
- const ReceiveErrorCallback& error_callback) {
- DCHECK(!callback.is_null() && !error_callback.is_null());
- if (pending_receive_ || shut_down_)
- return false;
- // When the DataSource encounters an error, it pauses transmission. When the
- // user starts a new receive following notification of the error (via
- // |error_callback| of the previous Receive call) of the error we can tell the
- // DataSource to resume transmission of data.
- if (!pending_data_frames_.empty() && pending_data_frames_.front()->is_error &&
- pending_data_frames_.front()->dispatched) {
- source_->Resume();
- pending_data_frames_.pop();
- }
-
- pending_receive_.reset(
- new PendingReceive(this, callback, error_callback, fatal_error_value_));
- ReceiveInternal();
- return true;
-}
-
-DataReceiver::~DataReceiver() {
- ShutDown();
-}
-
-void DataReceiver::OnError(int32_t error) {
- if (shut_down_)
- return;
-
- pending_data_frames_.push(linked_ptr<DataFrame>(new DataFrame(error)));
- if (pending_receive_)
- ReceiveInternal();
-}
-
-void DataReceiver::OnData(mojo::Array<uint8_t> data) {
- pending_data_frames_.push(
- linked_ptr<DataFrame>(new DataFrame(std::move(data))));
- if (pending_receive_)
- ReceiveInternal();
-}
-
-void DataReceiver::OnConnectionError() {
- ShutDown();
-}
-
-void DataReceiver::Done(uint32_t bytes_consumed) {
- if (shut_down_)
- return;
-
- DCHECK(pending_receive_);
- DataFrame& pending_data = *pending_data_frames_.front();
- pending_data.offset += bytes_consumed;
- DCHECK_LE(pending_data.offset, pending_data.data.size());
- if (pending_data.offset == pending_data.data.size()) {
- source_->ReportBytesReceived(
- static_cast<uint32_t>(pending_data.data.size()));
- pending_data_frames_.pop();
- }
- pending_receive_.reset();
-}
-
-void DataReceiver::ReceiveInternal() {
- if (shut_down_)
- return;
- DCHECK(pending_receive_);
- if (pending_receive_->buffer_in_use())
- return;
-
- if (!pending_data_frames_.empty() &&
- pending_receive_->DispatchDataFrame(pending_data_frames_.front().get())) {
- pending_receive_.reset();
- }
-}
-
-void DataReceiver::ShutDown() {
- shut_down_ = true;
- if (pending_receive_)
- pending_receive_->DispatchFatalError();
-}
-
-DataReceiver::PendingReceive::PendingReceive(
- DataReceiver* receiver,
- const ReceiveDataCallback& callback,
- const ReceiveErrorCallback& error_callback,
- int32_t fatal_error_value)
- : receiver_(receiver),
- receive_callback_(callback),
- receive_error_callback_(error_callback),
- fatal_error_value_(fatal_error_value),
- buffer_in_use_(false) {
-}
-
-bool DataReceiver::PendingReceive::DispatchDataFrame(
- DataReceiver::DataFrame* data) {
- DCHECK(!buffer_in_use_);
- DCHECK(!data->dispatched);
-
- if (data->is_error) {
- data->dispatched = true;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(receive_error_callback_, data->error));
- return true;
- }
- buffer_in_use_ = true;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(
- receive_callback_,
- base::Passed(std::unique_ptr<ReadOnlyBuffer>(new Buffer(
- receiver_, this,
- reinterpret_cast<char*>(&data->data[0]) + data->offset,
- static_cast<uint32_t>(data->data.size() - data->offset))))));
- return false;
-}
-
-void DataReceiver::PendingReceive::DispatchFatalError() {
- receive_error_callback_.Run(fatal_error_value_);
-}
-
-void DataReceiver::PendingReceive::Done(uint32_t bytes_consumed) {
- DCHECK(buffer_in_use_);
- buffer_in_use_ = false;
- receiver_->Done(bytes_consumed);
-}
-
-DataReceiver::PendingReceive::Buffer::Buffer(
- scoped_refptr<DataReceiver> receiver,
- PendingReceive* receive,
- const char* buffer,
- uint32_t buffer_size)
- : receiver_(receiver),
- pending_receive_(receive),
- buffer_(buffer),
- buffer_size_(buffer_size) {
-}
-
-DataReceiver::PendingReceive::Buffer::~Buffer() {
- if (pending_receive_)
- pending_receive_->Done(0);
-}
-
-const char* DataReceiver::PendingReceive::Buffer::GetData() {
- return buffer_;
-}
-
-uint32_t DataReceiver::PendingReceive::Buffer::GetSize() {
- return buffer_size_;
-}
-
-void DataReceiver::PendingReceive::Buffer::Done(uint32_t bytes_consumed) {
- pending_receive_->Done(bytes_consumed);
- pending_receive_ = NULL;
- receiver_ = NULL;
- buffer_ = NULL;
- buffer_size_ = 0;
-}
-
-void DataReceiver::PendingReceive::Buffer::DoneWithError(
- uint32_t bytes_consumed,
- int32_t error) {
- Done(bytes_consumed);
-}
-
-} // namespace device
« no previous file with comments | « device/serial/data_receiver.h ('k') | device/serial/data_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698