diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/FrameworkThreadInfo.cpp b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/FrameworkThreadInfo.cpp index 363b10df1a76..7386b439f4f7 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/FrameworkThreadInfo.cpp +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/FrameworkThreadInfo.cpp @@ -28,13 +28,11 @@ HANDLE FrameworkThreadInfo::GetOsThreadHandle() const std::string FrameworkThreadInfo::GetProfileThreadId() { std::stringstream buffer; - buffer << "<0> [#" << _osThreadId << "]"; + buffer << _osThreadId; return buffer.str(); } std::string FrameworkThreadInfo::GetProfileThreadName() { - std::stringstream buffer; - buffer << "Managed thread (name unknown) [#" << _osThreadId << "]"; - return buffer.str(); + return std::string(""); } diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/ManagedThreadInfo.h b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/ManagedThreadInfo.h index 85feec619cc4..53db1c9a08ad 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/ManagedThreadInfo.h +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/ManagedThreadInfo.h @@ -220,7 +220,7 @@ inline void ManagedThreadInfo::ReleaseLock() inline std::string ManagedThreadInfo::BuildProfileThreadId() { std::stringstream builder; - builder << "<" << std::dec << _profilerThreadInfoId << "> [#" << _osThreadId << "]"; + builder << std::dec << _osThreadId; return builder.str(); } @@ -231,13 +231,10 @@ inline std::string ManagedThreadInfo::BuildProfileThreadName() auto threadName = _threadName; if (threadName.empty()) { - nameBuilder << "Managed thread (name unknown)"; + return ""; } - else - { - nameBuilder << shared::ToString(std::move(threadName)); - } - nameBuilder << " [#" << _osThreadId << "]"; + + nameBuilder << shared::ToString(std::move(threadName)); return nameBuilder.str(); } diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/RawSampleTransformer.cpp b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/RawSampleTransformer.cpp index 5c9d8dcaa367..3ca13675295b 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/RawSampleTransformer.cpp +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/RawSampleTransformer.cpp @@ -72,8 +72,8 @@ void RawSampleTransformer::SetThreadDetails(const RawSample& rawSample, std::sha return; } - sample->SetThreadId("<0> [#0]"); - sample->SetThreadName("Managed thread (name unknown) [#0]"); + sample->SetThreadId("0"); + sample->SetThreadName(""); return; } diff --git a/profiler/test/Datadog.Profiler.IntegrationTests/Bugs/NullOrEmptyThreadNameCheck.cs b/profiler/test/Datadog.Profiler.IntegrationTests/Bugs/NullOrEmptyThreadNameCheck.cs index fb02df926042..a115f63d47b4 100644 --- a/profiler/test/Datadog.Profiler.IntegrationTests/Bugs/NullOrEmptyThreadNameCheck.cs +++ b/profiler/test/Datadog.Profiler.IntegrationTests/Bugs/NullOrEmptyThreadNameCheck.cs @@ -43,7 +43,7 @@ public void ShouldNotCrashWhenNullOrEmptyThreadName(string appName, string frame return (l.Name == "thread name"); }).Value; - if (threadName.Contains("Managed thread (name unknown) [")) + if (threadName == "") { var stackTrace = sample.StackTrace(profile); if (stackTrace.FramesCount == 0) @@ -52,9 +52,13 @@ public void ShouldNotCrashWhenNullOrEmptyThreadName(string appName, string frame return; } } - else if (threadName.Contains(".NET Long Running Task [")) + else if (threadName.StartsWith(".NET ")) { - // expected task that is waiting for nameless threads to join + // .NET ThreadPool IO, .NET TP Worker, .NET Long Running Task, .NET Timer, .NET TP Wait, etc... + } + else if (threadName == "CLR thread (garbage collector)") + { + // hard coded name for GC threads } else { diff --git a/profiler/test/Datadog.Profiler.IntegrationTests/Helpers/SamplesHelper.cs b/profiler/test/Datadog.Profiler.IntegrationTests/Helpers/SamplesHelper.cs index c0160e6085ed..6dbb597e3366 100644 --- a/profiler/test/Datadog.Profiler.IntegrationTests/Helpers/SamplesHelper.cs +++ b/profiler/test/Datadog.Profiler.IntegrationTests/Helpers/SamplesHelper.cs @@ -90,7 +90,6 @@ public static int GetThreadCount(string directory) public static HashSet GetThreadIds(string directory) { HashSet ids = new(); - var regex = new Regex(@"<[0-9]+> \[#(?[0-9]+)\]", RegexOptions.Compiled); foreach (var profile in GetProfiles(directory)) { foreach (var sample in profile.Sample) @@ -99,8 +98,7 @@ public static HashSet GetThreadIds(string directory) { if (label.Name == "thread id") { - var match = regex.Match(label.Value); - ids.Add(int.Parse(match.Groups["OsId"].Value)); + ids.Add(int.Parse(label.Value)); continue; } } diff --git a/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj b/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj index 9e1cf1dfcc37..caf01e440c7a 100644 --- a/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj +++ b/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj @@ -71,6 +71,7 @@ + @@ -220,4 +221,4 @@ - + \ No newline at end of file diff --git a/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj.filters b/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj.filters index 73d316176b7f..68a72bc3d124 100644 --- a/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj.filters +++ b/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj.filters @@ -193,6 +193,9 @@ Tests + + Tests + @@ -225,4 +228,4 @@ - + \ No newline at end of file diff --git a/profiler/test/Datadog.Profiler.Native.Tests/ManagedThreadInfoTest.cpp b/profiler/test/Datadog.Profiler.Native.Tests/ManagedThreadInfoTest.cpp index 63367baa4c5f..d0e6b4eb4bde 100644 --- a/profiler/test/Datadog.Profiler.Native.Tests/ManagedThreadInfoTest.cpp +++ b/profiler/test/Datadog.Profiler.Native.Tests/ManagedThreadInfoTest.cpp @@ -6,25 +6,25 @@ TEST(ManagedThreadInfoTest, CheckGetProfileThreadId) { auto threadInfo = ManagedThreadInfo::CreateForTest(1); - ASSERT_EQ(threadInfo->GetProfileThreadId(), "<1> [#1]"); + ASSERT_EQ(threadInfo->GetProfileThreadId(), "1"); } TEST(ManagedThreadInfoTest, CheckGetProfileThreadIdWithSetThreadName) { auto threadInfo = ManagedThreadInfo::CreateForTest(42); threadInfo->SetThreadName(WStr("Test Thread")); - ASSERT_EQ(threadInfo->GetProfileThreadId(), "<1> [#42]"); + ASSERT_EQ(threadInfo->GetProfileThreadId(), "42"); } TEST(ManagedThreadInfoTest, CheckGetProfileThreadName) { auto threadInfo = ManagedThreadInfo::CreateForTest(1); - ASSERT_EQ(threadInfo->GetProfileThreadName(), "Managed thread (name unknown) [#1]"); + ASSERT_EQ(threadInfo->GetProfileThreadName(), ""); } TEST(ManagedThreadInfoTest, CheckGetProfileThreadNameWithSetThreadName) { auto threadInfo = ManagedThreadInfo::CreateForTest(1); threadInfo->SetThreadName(WStr("Test Thread")); - ASSERT_EQ(threadInfo->GetProfileThreadName(), "Test Thread [#1]"); + ASSERT_EQ(threadInfo->GetProfileThreadName(), "Test Thread"); } \ No newline at end of file