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

Unified Diff: device/bluetooth/bluetooth_task_manager_win.h

Issue 424093004: Improve processing of Bluetooth device discovery on Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address code review feedback (nits and memory leak). Created 6 years, 5 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/bluetooth/bluetooth_service_record_win.cc ('k') | device/bluetooth/bluetooth_task_manager_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/bluetooth/bluetooth_task_manager_win.h
diff --git a/device/bluetooth/bluetooth_task_manager_win.h b/device/bluetooth/bluetooth_task_manager_win.h
index 7f6c98878b8d5763eb7c4203ac29390d0a3da577..be8b90ce950195689ffca7c47d17a8b791b94146 100644
--- a/device/bluetooth/bluetooth_task_manager_win.h
+++ b/device/bluetooth/bluetooth_task_manager_win.h
@@ -46,9 +46,9 @@ class BluetoothTaskManagerWin
struct ServiceRecordState {
ServiceRecordState();
~ServiceRecordState();
- // Properties common to Bluetooth Radio and LE devices.
+ // Properties common to Bluetooth Classic and LE devices.
std::string name;
- // Properties specific to Bluetooth Radio devices.
+ // Properties specific to Bluetooth Classic devices.
std::vector<uint8> sdp_bytes;
// Properties specific to Bluetooth LE devices.
BluetoothUUID gatt_uuid;
@@ -57,14 +57,17 @@ class BluetoothTaskManagerWin
struct DeviceState {
DeviceState();
~DeviceState();
- // Properties common to Bluetooth Radio and LE devices.
- std::string name;
- std::string address;
+
+ bool is_bluetooth_classic() const { return path.empty(); }
+
+ // Properties common to Bluetooth Classic and LE devices.
+ std::string address; // This uniquely identifies the device.
+ std::string name; // Friendly name
bool visible;
bool connected;
bool authenticated;
ScopedVector<ServiceRecordState> service_record_states;
- // Properties specific to Bluetooth Radio devices.
+ // Properties specific to Bluetooth Classic devices.
uint32 bluetooth_class;
// Properties specific to Bluetooth LE devices.
base::FilePath path;
@@ -77,8 +80,14 @@ class BluetoothTaskManagerWin
virtual void AdapterStateChanged(const AdapterState& state) {}
virtual void DiscoveryStarted(bool success) {}
virtual void DiscoveryStopped() {}
- virtual void DevicesUpdated(const ScopedVector<DeviceState>& devices) {}
- virtual void DevicesDiscovered(const ScopedVector<DeviceState>& devices) {}
+ // Called when the adapter has just been polled for the list of *all* known
+ // devices. This includes devices previously paired, devices paired using
+ // the underlying Operating System UI, and devices discovered recently due
+ // to an active discovery session. Note that for a given device (address),
+ // the associated state can change over time. For example, during a
+ // discovery session, the "friendly" name may initially be "unknown" before
+ // the actual name is retrieved in subsequent poll events.
+ virtual void DevicesPolled(const ScopedVector<DeviceState>& devices) {}
};
explicit BluetoothTaskManagerWin(
@@ -107,13 +116,16 @@ class BluetoothTaskManagerWin
virtual ~BluetoothTaskManagerWin();
+ // Logs Win32 errors occuring during polling on the worker thread. The method
+ // may discards messages to avoid logging being too verbose.
+ void LogPollingError(const char* message, int win32_error);
+
// Notify all Observers of updated AdapterState. Should only be called on the
// UI thread.
void OnAdapterStateChanged(const AdapterState* state);
void OnDiscoveryStarted(bool success);
void OnDiscoveryStopped();
- void OnDevicesUpdated(const ScopedVector<DeviceState>* devices);
- void OnDevicesDiscovered(const ScopedVector<DeviceState>* devices);
+ void OnDevicesPolled(const ScopedVector<DeviceState>* devices);
// Called on BluetoothTaskRunner.
void StartPolling();
@@ -130,23 +142,47 @@ class BluetoothTaskManagerWin
void StartDiscovery();
void StopDiscovery();
- // Issues a device inquiry that runs for |timeout| * 1.28 seconds.
- // This posts itself again with |timeout| + 1 until |timeout| reaches the
- // maximum value or stop discovery call is received.
- void DiscoverDevices(int timeout);
+ // Issues a device inquiry that runs for |timeout_multiplier| * 1.28 seconds.
+ // This posts itself again with |timeout_multiplier| + 1 until
+ // |timeout_multiplier| reaches the maximum value or stop discovery call is
+ // received.
+ void DiscoverDevices(int timeout_multiplier);
// Fetch already known device information. Similar to |StartDiscovery|, except
// this function does not issue a discovery inquiry. Instead it gets the
// device info cached in the adapter.
void GetKnownDevices();
- // Sends a device search API call to the adapter.
- void SearchDevices(int timeout,
+ // Looks for Bluetooth Classic and Low Energy devices, as well as the services
+ // exposed by those devices.
+ bool SearchDevices(int timeout_multiplier,
bool search_cached_devices_only,
ScopedVector<DeviceState>* device_list);
+ // Sends a device search API call to the adapter to look for Bluetooth Classic
+ // devices.
+ bool SearchClassicDevices(int timeout_multiplier,
+ bool search_cached_devices_only,
+ ScopedVector<DeviceState>* device_list);
+
+ // Enumerate Bluetooth Low Energy devices.
+ bool SearchLowEnergyDevices(ScopedVector<DeviceState>* device_list);
+
// Discover services for the devices in |device_list|.
- void DiscoverServices(ScopedVector<DeviceState>* device_list);
+ bool DiscoverServices(ScopedVector<DeviceState>* device_list,
+ bool search_cached_services_only);
+
+ // Discover Bluetooth Classic services for the given |device_address|.
+ bool DiscoverClassicDeviceServices(
+ const std::string& device_address,
+ const GUID& protocol_uuid,
+ bool search_cached_services_only,
+ ScopedVector<ServiceRecordState>* service_record_states);
+
+ // Discover Bluetooth Low Energy services for the given |device_path|.
+ bool DiscoverLowEnergyDeviceServices(
+ const base::FilePath& device_path,
+ ScopedVector<ServiceRecordState>* service_record_states);
// UI task runner reference.
scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
@@ -163,6 +199,10 @@ class BluetoothTaskManagerWin
// indicates whether the adapter is in discovery mode or not.
bool discovering_;
+ // Use for discarding too many log messages.
+ base::TimeTicks current_logging_batch_ticks_;
+ int current_logging_batch_count_;
+
DISALLOW_COPY_AND_ASSIGN(BluetoothTaskManagerWin);
};
« no previous file with comments | « device/bluetooth/bluetooth_service_record_win.cc ('k') | device/bluetooth/bluetooth_task_manager_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698