[Lldb-commits] [PATCH] D102833: [debugserver]Add platform cache support to improve performance.Under BigSur 11.3 this function causes a performance loss of 0.68s per execution.
kuperxu via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu May 20 02:36:23 PDT 2021
kuperxu updated this revision to Diff 346671.
kuperxu added a comment.
[debugserver]Recalculate the platform cache each time the port is cleared.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D102833/new/
https://reviews.llvm.org/D102833
Files:
lldb/tools/debugserver/source/MacOSX/MachProcess.h
lldb/tools/debugserver/source/MacOSX/MachProcess.mm
Index: lldb/tools/debugserver/source/MacOSX/MachProcess.mm
===================================================================
--- lldb/tools/debugserver/source/MacOSX/MachProcess.mm
+++ lldb/tools/debugserver/source/MacOSX/MachProcess.mm
@@ -701,7 +701,7 @@
// DYLD_FORCE_PLATFORM=6. In that case, force the platform to
// macCatalyst and use the macCatalyst version of the host OS
// instead of the macOS deployment target.
- if (is_executable && GetProcessPlatformViaDYLDSPI() == PLATFORM_MACCATALYST) {
+ if (is_executable && GetPlatform() == PLATFORM_MACCATALYST) {
info.platform = PLATFORM_MACCATALYST;
std::string catalyst_version = GetMacCatalystVersionString();
const char *major = catalyst_version.c_str();
@@ -1094,6 +1094,12 @@
bool privateCache;
};
+uint32_t MachProcess::GetPlatform() {
+ if (m_platform == 0)
+ m_platform = MachProcess::GetProcessPlatformViaDYLDSPI();
+ return m_platform;
+}
+
uint32_t MachProcess::GetProcessPlatformViaDYLDSPI() {
kern_return_t kern_ret;
uint32_t platform = 0;
@@ -1140,7 +1146,7 @@
int pointer_size = GetInferiorAddrSize(pid);
std::vector<struct binary_image_information> image_infos;
GetAllLoadedBinariesViaDYLDSPI(image_infos);
- uint32_t platform = GetProcessPlatformViaDYLDSPI();
+ uint32_t platform = GetPlatform();
const size_t image_count = image_infos.size();
for (size_t i = 0; i < image_count; i++) {
GetMachOInformationFromMemory(platform, image_infos[i].load_address,
@@ -1160,7 +1166,7 @@
std::vector<struct binary_image_information> all_image_infos;
GetAllLoadedBinariesViaDYLDSPI(all_image_infos);
- uint32_t platform = GetProcessPlatformViaDYLDSPI();
+ uint32_t platform = GetPlatform();
std::vector<struct binary_image_information> image_infos;
const size_t macho_addresses_count = macho_addresses.size();
@@ -1324,6 +1330,7 @@
// Clear any cached thread list while the pid and task are still valid
m_task.Clear();
+ m_platform = 0;
// Now clear out all member variables
m_pid = INVALID_NUB_PROCESS;
if (!detaching)
@@ -1615,6 +1622,7 @@
// NULL our task out as we have already restored all exception ports
m_task.Clear();
+ m_platform = 0;
// Clear out any notion of the process we once were
const bool detaching = true;
Index: lldb/tools/debugserver/source/MacOSX/MachProcess.h
===================================================================
--- lldb/tools/debugserver/source/MacOSX/MachProcess.h
+++ lldb/tools/debugserver/source/MacOSX/MachProcess.h
@@ -252,6 +252,7 @@
struct mach_o_information &inf);
JSONGenerator::ObjectSP FormatDynamicLibrariesIntoJSON(
const std::vector<struct binary_image_information> &image_infos);
+ uint32_t GetPlatform();
/// Get the runtime platform from DYLD via SPI.
uint32_t GetProcessPlatformViaDYLDSPI();
/// Use the dyld SPI present in macOS 10.12, iOS 10, tvOS 10,
@@ -378,6 +379,7 @@
pid_t m_pid; // Process ID of child process
cpu_type_t m_cpu_type; // The CPU type of this process
+ uint32_t m_platform; // The platform of this process
int m_child_stdin;
int m_child_stdout;
int m_child_stderr;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102833.346671.patch
Type: text/x-patch
Size: 3219 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210520/f5662174/attachment.bin>
More information about the lldb-commits
mailing list