emrekultursay created this revision. Herald added subscribers: lldb-commits, mgorny. Herald added a project: LLDB.
On Android, this method gets called twice: first when establishing a host-server connection, then when attaching to a process id. Each call takes several seconds to finish (especially slower on Windows) and eliminating the call for the typical case improves latency significantly. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D79586 Files: lldb/source/Plugins/Platform/Android/AdbClient.cpp lldb/unittests/Platform/Android/AdbClientTest.cpp lldb/unittests/Platform/Android/CMakeLists.txt lldb/unittests/Platform/CMakeLists.txt
Index: lldb/unittests/Platform/CMakeLists.txt =================================================================== --- lldb/unittests/Platform/CMakeLists.txt +++ lldb/unittests/Platform/CMakeLists.txt @@ -6,3 +6,5 @@ LINK_COMPONENTS Support ) + +add_subdirectory(Android) Index: lldb/unittests/Platform/Android/CMakeLists.txt =================================================================== --- /dev/null +++ lldb/unittests/Platform/Android/CMakeLists.txt @@ -0,0 +1,8 @@ +include_directories(${LLDB_SOURCE_DIR}/source/Plugins/Platform/Android) + +add_lldb_unittest(AdbClientTest + AdbClientTest.cpp + + LINK_LIBS + lldbPluginPlatformAndroid + ) Index: lldb/unittests/Platform/Android/AdbClientTest.cpp =================================================================== --- /dev/null +++ lldb/unittests/Platform/Android/AdbClientTest.cpp @@ -0,0 +1,45 @@ +//===-- AdbClientTest.cpp -------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" + +#include "Plugins/Platform/Android/AdbClient.h" + +#include <stdlib.h> + +using namespace lldb; +using namespace lldb_private; + +namespace lldb_private { +namespace platform_android { + +class AdbClientTest : public ::testing::Test { +public: + void SetUp() override { putenv("ANDROID_SERIAL="); } + + void TearDown() override { putenv("ANDROID_SERIAL="); } +}; + +TEST(AdbClientTest, CreateByDeviceId) { + AdbClient adb; + Status error = AdbClient::CreateByDeviceID("device1", adb); + EXPECT_TRUE(error.Success()); + EXPECT_EQ("device1", adb.GetDeviceID()); +} + +TEST(AdbClientTest, CreateByDeviceId_ByEnvVar) { + putenv("ANDROID_SERIAL=device2"); + + AdbClient adb; + Status error = AdbClient::CreateByDeviceID("", adb); + EXPECT_TRUE(error.Success()); + EXPECT_EQ("device2", adb.GetDeviceID()); +} + +} // end namespace platform_android +} // end namespace lldb_private \ No newline at end of file Index: lldb/source/Plugins/Platform/Android/AdbClient.cpp =================================================================== --- lldb/source/Plugins/Platform/Android/AdbClient.cpp +++ lldb/source/Plugins/Platform/Android/AdbClient.cpp @@ -94,11 +94,7 @@ Status AdbClient::CreateByDeviceID(const std::string &device_id, AdbClient &adb) { - DeviceIDList connect_devices; - auto error = adb.GetDevices(connect_devices); - if (error.Fail()) - return error; - + Status error; std::string android_serial; if (!device_id.empty()) android_serial = device_id; @@ -106,18 +102,18 @@ android_serial = env_serial; if (android_serial.empty()) { - if (connect_devices.size() != 1) + DeviceIDList connected_devices; + error = adb.GetDevices(connected_devices); + if (error.Fail()) + return error; + + if (connected_devices.size() != 1) return Status("Expected a single connected device, got instead %zu - try " "setting 'ANDROID_SERIAL'", - connect_devices.size()); - adb.SetDeviceID(connect_devices.front()); + connected_devices.size()); + adb.SetDeviceID(connected_devices.front()); } else { - auto find_it = std::find(connect_devices.begin(), connect_devices.end(), - android_serial); - if (find_it == connect_devices.end()) - return Status("Device \"%s\" not found", android_serial.c_str()); - - adb.SetDeviceID(*find_it); + adb.SetDeviceID(android_serial); } return error; }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits