Index: device/serial/serial_device_enumerator_win.cc |
diff --git a/device/serial/serial_device_enumerator_win.cc b/device/serial/serial_device_enumerator_win.cc |
index 149331d96c483551066e51190c4a15d5728905c3..aee8e3698fa92adb0d14c1d2eba7d116a5e7e55a 100644 |
--- a/device/serial/serial_device_enumerator_win.cc |
+++ b/device/serial/serial_device_enumerator_win.cc |
@@ -10,6 +10,7 @@ |
#include <windows.h> |
#include <memory> |
+#include <unordered_set> |
#include "base/metrics/histogram_macros.h" |
#include "base/strings/string_number_conversions.h" |
@@ -164,30 +165,27 @@ SerialDeviceEnumeratorWin::SerialDeviceEnumeratorWin() {} |
SerialDeviceEnumeratorWin::~SerialDeviceEnumeratorWin() {} |
mojo::Array<serial::DeviceInfoPtr> SerialDeviceEnumeratorWin::GetDevices() { |
- mojo::Array<serial::DeviceInfoPtr> newDevices = GetDevicesNew(); |
- mojo::Array<serial::DeviceInfoPtr> oldDevices = GetDevicesOld(); |
+ mojo::Array<serial::DeviceInfoPtr> devices = GetDevicesNew(); |
+ mojo::Array<serial::DeviceInfoPtr> old_devices = GetDevicesOld(); |
UMA_HISTOGRAM_SPARSE_SLOWLY( |
"Hardware.Serial.NewMinusOldDeviceListSize", |
- Clamp((int)newDevices.size() - (int)oldDevices.size(), -10, 10)); |
+ Clamp(devices.size() - old_devices.size(), -10, 10)); |
// Add devices found from both the new and old methods of enumeration. If a |
// device is found using both the new and the old enumeration method, then we |
// take the device from the new enumeration method because it's able to |
// collect more information. We do this by inserting the new devices first, |
// because insertions are ignored if the key already exists. |
- mojo::Map<mojo::String, serial::DeviceInfoPtr> deviceMap; |
- for (unsigned long i = 0; i < newDevices.size(); i++) { |
- deviceMap.insert(newDevices[i]->path, newDevices[i].Clone()); |
+ std::unordered_set<std::string> devices_seen; |
+ for (const auto& device : devices) { |
+ bool inserted = devices_seen.insert(device->path).second; |
+ DCHECK(inserted); |
} |
- for (unsigned long i = 0; i < oldDevices.size(); i++) { |
- deviceMap.insert(oldDevices[i]->path, oldDevices[i].Clone()); |
+ for (auto& device : old_devices) { |
+ if (devices_seen.insert(device->path).second) |
+ devices.push_back(std::move(device)); |
} |
- |
- mojo::Array<mojo::String> paths; |
- mojo::Array<serial::DeviceInfoPtr> devices; |
- deviceMap.DecomposeMapTo(&paths, &devices); |
- |
return devices; |
} |