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

Side by Side Diff: device/usb/usb_device_handle_usbfs.h

Issue 2797433005: Remove MessageLoop destruction observer from //device/usb (Closed)
Patch Set: Further clarify cross-thread ownership Created 3 years, 8 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 unified diff | Download patch
« no previous file with comments | « device/usb/usb_device_handle_android.cc ('k') | device/usb/usb_device_handle_usbfs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 #ifndef DEVICE_USB_USB_DEVICE_HANDLE_USBFS_H_ 5 #ifndef DEVICE_USB_USB_DEVICE_HANDLE_USBFS_H_
6 #define DEVICE_USB_USB_DEVICE_HANDLE_USBFS_H_ 6 #define DEVICE_USB_USB_DEVICE_HANDLE_USBFS_H_
7 7
8 #include <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 const UsbInterfaceDescriptor* FindInterfaceByEndpoint( 82 const UsbInterfaceDescriptor* FindInterfaceByEndpoint(
83 uint8_t endpoint_address) override; 83 uint8_t endpoint_address) override;
84 84
85 protected: 85 protected:
86 ~UsbDeviceHandleUsbfs() override; 86 ~UsbDeviceHandleUsbfs() override;
87 87
88 scoped_refptr<base::SingleThreadTaskRunner> task_runner() const { 88 scoped_refptr<base::SingleThreadTaskRunner> task_runner() const {
89 return task_runner_; 89 return task_runner_;
90 } 90 }
91 91
92 // Stops |helper_| and releases ownership of |fd_| without closing it. 92 // Destroys |helper_| and releases ownership of |fd_| without closing it.
93 void ReleaseFileDescriptor(); 93 void ReleaseFileDescriptor();
94 94
95 // Destroys |helper_| and closes |fd_|. Override to call
96 // ReleaseFileDescriptor() if necessary.
97 virtual void CloseBlocking();
98
95 private: 99 private:
96 class FileThreadHelper; 100 class FileThreadHelper;
97 struct Transfer; 101 struct Transfer;
98 struct InterfaceInfo { 102 struct InterfaceInfo {
99 uint8_t alternate_setting; 103 uint8_t alternate_setting;
100 }; 104 };
101 struct EndpointInfo { 105 struct EndpointInfo {
102 UsbTransferType type; 106 UsbTransferType type;
103 const UsbInterfaceDescriptor* interface; 107 const UsbInterfaceDescriptor* interface;
104 }; 108 };
105 109
106 virtual void CloseBlocking();
107 void SetConfigurationBlocking(int configuration_value,
108 const ResultCallback& callback);
109 void SetConfigurationComplete(int configuration_value, 110 void SetConfigurationComplete(int configuration_value,
110 bool success, 111 bool success,
111 const ResultCallback& callback); 112 const ResultCallback& callback);
112 void ReleaseInterfaceBlocking(int interface_number,
113 const ResultCallback& callback);
114 void ReleaseInterfaceComplete(int interface_number, 113 void ReleaseInterfaceComplete(int interface_number,
115 const ResultCallback& callback); 114 const ResultCallback& callback);
116 void SetInterfaceBlocking(int interface_number,
117 int alternate_setting,
118 const ResultCallback& callback);
119 void ResetDeviceBlocking(const ResultCallback& callback);
120 void ClearHaltBlocking(uint8_t endpoint_address,
121 const ResultCallback& callback);
122 void IsochronousTransferInternal(uint8_t endpoint_address, 115 void IsochronousTransferInternal(uint8_t endpoint_address,
123 scoped_refptr<net::IOBuffer> buffer, 116 scoped_refptr<net::IOBuffer> buffer,
124 size_t total_length, 117 size_t total_length,
125 const std::vector<uint32_t>& packet_lengths, 118 const std::vector<uint32_t>& packet_lengths,
126 unsigned int timeout, 119 unsigned int timeout,
127 const IsochronousTransferCallback& callback); 120 const IsochronousTransferCallback& callback);
128 void GenericTransferInternal( 121 void GenericTransferInternal(
129 UsbEndpointDirection direction, 122 UsbEndpointDirection direction,
130 uint8_t endpoint_number, 123 uint8_t endpoint_number,
131 scoped_refptr<net::IOBuffer> buffer, 124 scoped_refptr<net::IOBuffer> buffer,
132 size_t length, 125 size_t length,
133 unsigned int timeout, 126 unsigned int timeout,
134 const TransferCallback& callback, 127 const TransferCallback& callback,
135 scoped_refptr<base::SingleThreadTaskRunner> callback_runner); 128 scoped_refptr<base::SingleThreadTaskRunner> callback_runner);
136 void ReapedUrbs(const std::vector<usbdevfs_urb*>& urbs); 129 void ReapedUrbs(const std::vector<usbdevfs_urb*>& urbs);
137 void TransferComplete(std::unique_ptr<Transfer> transfer); 130 void TransferComplete(std::unique_ptr<Transfer> transfer);
138 void RefreshEndpointInfo(); 131 void RefreshEndpointInfo();
139 void ReportIsochronousError( 132 void ReportIsochronousError(
140 const std::vector<uint32_t>& packet_lengths, 133 const std::vector<uint32_t>& packet_lengths,
141 const UsbDeviceHandle::IsochronousTransferCallback& callback, 134 const UsbDeviceHandle::IsochronousTransferCallback& callback,
142 UsbTransferStatus status); 135 UsbTransferStatus status);
143 void SetUpTimeoutCallback(Transfer* transfer, unsigned int timeout); 136 void SetUpTimeoutCallback(Transfer* transfer, unsigned int timeout);
144 std::unique_ptr<Transfer> RemoveFromTransferList(Transfer* transfer); 137 std::unique_ptr<Transfer> RemoveFromTransferList(Transfer* transfer);
145 void CancelTransfer(Transfer* transfer, UsbTransferStatus status); 138 void CancelTransfer(Transfer* transfer, UsbTransferStatus status);
146 void DiscardUrbBlocking(Transfer* transfer); 139 void DiscardUrbBlocking(Transfer* transfer);
147 void UrbDiscarded(Transfer* transfer); 140 void UrbDiscarded(Transfer* transfer);
148 141
149 scoped_refptr<UsbDevice> device_; 142 scoped_refptr<UsbDevice> device_;
150 base::ScopedFD fd_; 143 int fd_; // Copy of the base::ScopedFD held by |helper_| valid if |device_|.
151 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 144 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
152 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 145 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
153 146
154 // Maps claimed interfaces by interface number to their current alternate 147 // Maps claimed interfaces by interface number to their current alternate
155 // setting. 148 // setting.
156 std::map<uint8_t, InterfaceInfo> interfaces_; 149 std::map<uint8_t, InterfaceInfo> interfaces_;
157 150
158 // Maps endpoints (by endpoint address) to the interface they are a part of. 151 // Maps endpoints (by endpoint address) to the interface they are a part of.
159 // Only endpoints of currently claimed and selected interface alternates are 152 // Only endpoints of currently claimed and selected interface alternates are
160 // included in the map. 153 // included in the map.
161 std::map<uint8_t, EndpointInfo> endpoints_; 154 std::map<uint8_t, EndpointInfo> endpoints_;
162 155
163 // Helper object owned by the blocking task thread. It will be freed if that 156 // Helper object exists on the blocking task thread and all calls to it and
164 // thread's message loop is destroyed but can also be freed by this class on 157 // its destruction must be posted there.
165 // destruction. 158 std::unique_ptr<FileThreadHelper> helper_;
166 FileThreadHelper* helper_;
167 159
168 std::list<std::unique_ptr<Transfer>> transfers_; 160 std::list<std::unique_ptr<Transfer>> transfers_;
169 }; 161 };
170 162
171 } // namespace device 163 } // namespace device
172 164
173 #endif // DEVICE_USB_USB_DEVICE_HANDLE_USBFS_H_ 165 #endif // DEVICE_USB_USB_DEVICE_HANDLE_USBFS_H_
OLDNEW
« no previous file with comments | « device/usb/usb_device_handle_android.cc ('k') | device/usb/usb_device_handle_usbfs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698