From 23320658282f830afdc6209da931fe8d0611dba8 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 17 May 2024 14:09:22 +0000 Subject: [PATCH] Bug 1841030 - cache the thread id in thread-local storage r=profiler-reviewers,canaltinova Differential Revision: https://phabricator.services.mozilla.com/D205838 --- mozglue/baseprofiler/core/ProfilerUtils.cpp | 8 ++++++-- tools/profiler/core/ProfilerUtils.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mozglue/baseprofiler/core/ProfilerUtils.cpp b/mozglue/baseprofiler/core/ProfilerUtils.cpp index 5f539107749f..517efcbb29de 100644 --- a/mozglue/baseprofiler/core/ProfilerUtils.cpp +++ b/mozglue/baseprofiler/core/ProfilerUtils.cpp @@ -102,8 +102,12 @@ BaseProfilerThreadId profiler_current_thread_id() { namespace mozilla::baseprofiler { BaseProfilerThreadId profiler_current_thread_id() { - // glibc doesn't provide a wrapper for gettid() until 2.30 - return BaseProfilerThreadId::FromNativeId(syscall(SYS_gettid)); + static thread_local pid_t tid; + if (!tid) { + // glibc doesn't provide a wrapper for gettid() until 2.30 + tid = static_cast(syscall(SYS_gettid)); + } + return BaseProfilerThreadId::FromNativeId(tid); } } // namespace mozilla::baseprofiler diff --git a/tools/profiler/core/ProfilerUtils.cpp b/tools/profiler/core/ProfilerUtils.cpp index 6a46878ad75e..4c5306114fe3 100644 --- a/tools/profiler/core/ProfilerUtils.cpp +++ b/tools/profiler/core/ProfilerUtils.cpp @@ -67,8 +67,12 @@ ProfilerThreadId profiler_current_thread_id() { # include ProfilerThreadId profiler_current_thread_id() { - // glibc doesn't provide a wrapper for gettid() until 2.30 - return ProfilerThreadId::FromNativeId(syscall(SYS_gettid)); + static thread_local pid_t tid; + if (!tid) { + // glibc doesn't provide a wrapper for gettid() until 2.30 + tid = static_cast(syscall(SYS_gettid)); + } + return ProfilerThreadId::FromNativeId(tid); } // ------------------------------------------------------- FreeBSD