Skip to content

Commit

Permalink
[Profiler] Bump to libdatadog 13 (#6031)
Browse files Browse the repository at this point in the history
  • Loading branch information
gleocadie authored Sep 26, 2024
1 parent 5ae119d commit e2d7112
Show file tree
Hide file tree
Showing 12 changed files with 59 additions and 65 deletions.
10 changes: 5 additions & 5 deletions build/cmake/FindLibdatadog.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@ endif()

include(FetchContent)

set(LIBDATADOG_VERSION "v10.0.0" CACHE STRING "libdatadog version")
set(LIBDATADOG_VERSION "v13.0.0" CACHE STRING "libdatadog version")

if (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)
if (DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true")
set(SHA256_LIBDATADOG "61249c5a2a3c4c80e6f54a24251b5035a49123b1664d28cc21645fa8c7271432" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "13a0e9966f2174ea17b1203f4174c9dae36c482d522c31e67bca3283efd0b550" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz)
else()
set(SHA256_LIBDATADOG "14df33b816e12533b95bad64ae0df049bb1fce6b4dc0fe7df4add6ce3ce531e7" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "84f2006f2b00b018979f1e74f628cb8043413c1e20d19d610f95fceb7e14a8c1" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz)
endif()
else()
if (DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true")
set(SHA256_LIBDATADOG "7c5dcf51fec39c7fc0cfca47ee1788630e15682f0a5f9580e94518163300f221" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "2d7a1926772a9079facfdbfe096881910f2053fe08e59189a6fed89e2b3f4c4d" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz)
else()
set(SHA256_LIBDATADOG "ec3a8582f8be34edd3b9b89aed7d0642645b41f8e7c9d5b4d1d6ecdcaa8f31f0" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "c0e94fcff4f8129a8e9a3c3805791e189c08ee7a64e803086f33dfec2a767b0d" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz)
endif()
endif()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ extern "C"
{
#include "datadog/common.h"
#include "datadog/profiling.h"
#include "datadog/crashtracker.h"
}

CrashReporting* CrashReporting::Create(int32_t pid)
Expand Down Expand Up @@ -216,9 +217,9 @@ std::vector<StackFrame> CrashReportingLinux::GetThreadFrames(int32_t tid, Resolv
stackFrame.method = std::string(methodData.symbolName);
hasName = true;

auto demangleResult = ddog_demangle(libdatadog::to_char_slice(stackFrame.method), DDOG_PROF_DEMANGLE_OPTIONS_COMPLETE);
auto demangleResult = ddog_crasht_demangle(libdatadog::to_char_slice(stackFrame.method), DDOG_CRASHT_DEMANGLE_OPTIONS_COMPLETE);

if (demangleResult.tag == DDOG_PROF_STRING_WRAPPER_RESULT_OK)
if (demangleResult.tag == DDOG_CRASHT_STRING_WRAPPER_RESULT_OK)
{
// TODO: There is currently no safe way to free the StringWrapper
auto stringWrapper = demangleResult.ok;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props" Condition="Exists('..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props')" />
<Import Project="..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props" Condition="Exists('..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
Expand Down Expand Up @@ -267,6 +267,6 @@
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props'))" />
<Error Condition="!Exists('..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props'))" />
</Target>
</Project>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="libdatadog" version="10.0.0" targetFramework="native" />
</packages>
<package id="libdatadog" version="13.0.0" targetFramework="native" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,7 @@ class AgentProxy
_exporter.get(), start, end,
to_compress_files_view, uncompressed_files_view,
static_cast<ddog_Vec_Tag const*>(*tags._impl),
endpoints_stats, pMetadata, pInfo,
10000);
endpoints_stats, pMetadata, pInfo);

if (requestResult.tag == DDOG_PROF_EXPORTER_REQUEST_BUILD_RESULT_ERR)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@

#include "unknwn.h"
#include "FfiHelper.h"
#include "ScopeFinalizer.h"
#include <shared/src/native-src/util.h>
#include <thread>

extern "C"
{
#include "datadog/common.h"
#include "datadog/profiling.h"
#include "datadog/crashtracker.h"
}

extern "C" IUnknown * STDMETHODCALLTYPE CreateCrashReport(int32_t pid)
Expand All @@ -37,24 +39,24 @@ CrashReporting::~CrashReporting()
ddog_Error_drop(&_error.value());
}

ddog_crashinfo_drop(&_crashInfo);
ddog_crasht_CrashInfo_drop(&_crashInfo);
}

int32_t CrashReporting::Initialize()
{
auto crashInfoResult = ddog_crashinfo_new();
auto crashInfoResult = ddog_crasht_CrashInfo_new();

if (crashInfoResult.tag == DDOG_PROF_CRASH_INFO_NEW_RESULT_ERR)
if (crashInfoResult.tag == DDOG_CRASHT_CRASH_INFO_NEW_RESULT_ERR)
{
SetLastError(crashInfoResult.err);
return 1;
}

_crashInfo = crashInfoResult.ok;

auto result = ddog_crashinfo_set_timestamp_to_now(&_crashInfo);
auto result = ddog_crasht_CrashInfo_set_timestamp_to_now(&_crashInfo);

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
if (result.tag == DDOG_CRASHT_RESULT_ERR)
{
SetLastError(result.err);
return 1;
Expand Down Expand Up @@ -117,9 +119,9 @@ ULONG CrashReporting::Release()

int32_t CrashReporting::AddTag(const char* key, const char* value)
{
auto result = ddog_crashinfo_add_tag(&_crashInfo, libdatadog::to_char_slice(key), libdatadog::to_char_slice(value));
auto result = ddog_crasht_CrashInfo_add_tag(&_crashInfo, libdatadog::to_char_slice(key), libdatadog::to_char_slice(value));

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
if (result.tag == DDOG_CRASHT_RESULT_ERR)
{
SetLastError(result.err);
return 1;
Expand All @@ -142,7 +144,7 @@ int32_t CrashReporting::SetSignalInfo(int32_t signal, const char* description)
signalInfo = std::string(description);
}

ddog_crashinfo_set_siginfo(&_crashInfo, { (uint64_t)signal, libdatadog::to_char_slice(signalInfo) });
ddog_crasht_CrashInfo_set_siginfo(&_crashInfo, { (uint64_t)signal, libdatadog::to_char_slice(signalInfo) });

return 0;
}
Expand All @@ -159,14 +161,14 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa
{
auto frames = GetThreadFrames(thread.first, resolveCallback, context);

ddog_prof_Slice_StackFrame stackTrace;
ddog_crasht_Slice_StackFrame stackTrace;

auto count = frames.size();

stackTrace.len = count;

auto stackFrames = std::make_unique<ddog_prof_StackFrame[]>(count);
auto stackFrameNames = std::make_unique<ddog_prof_StackFrameNames[]>(count);
auto stackFrames = std::make_unique<ddog_crasht_StackFrame[]>(count);
auto stackFrameNames = std::make_unique<ddog_crasht_StackFrameNames[]>(count);
auto strings = std::make_unique<std::string[]>(count);

stackTrace.ptr = stackFrames.get();
Expand All @@ -187,10 +189,10 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa

strings[i] = frame.method;

stackFrameNames[i] = ddog_prof_StackFrameNames{
.colno = { DDOG_PROF_OPTION_U32_NONE_U32, 0},
stackFrameNames[i] = ddog_crasht_StackFrameNames{
.colno = { DDOG_OPTION_U32_NONE_U32, 0},
.filename = {nullptr, 0},
.lineno = { DDOG_PROF_OPTION_U32_NONE_U32, 0},
.lineno = { DDOG_OPTION_U32_NONE_U32, 0},
.name = libdatadog::to_char_slice(strings[i])
};

Expand All @@ -199,7 +201,7 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa
auto moduleAddress = static_cast<uintptr_t>(frame.moduleAddress);
auto symbolAddress = static_cast<uintptr_t>(frame.symbolAddress);

stackFrames[i] = ddog_prof_StackFrame{
stackFrames[i] = ddog_crasht_StackFrame{
.ip = ip,
.module_base_address = moduleAddress,
.names{
Expand All @@ -213,9 +215,9 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa

auto threadIdStr = std::to_string(thread.first);

auto result = ddog_crashinfo_set_stacktrace(&_crashInfo, { threadIdStr.c_str(), threadIdStr.length() }, stackTrace);
auto result = ddog_crasht_CrashInfo_set_stacktrace(&_crashInfo, { threadIdStr.c_str(), threadIdStr.length() }, stackTrace);

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
if (result.tag == DDOG_CRASHT_RESULT_ERR)
{
SetLastError(result.err);
continue;
Expand All @@ -226,9 +228,9 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa
if (thread.first == crashingThreadId)
{
// Setting the default stacktrace
result = ddog_crashinfo_set_stacktrace(&_crashInfo, { nullptr, 0 }, stackTrace);
result = ddog_crasht_CrashInfo_set_stacktrace(&_crashInfo, { nullptr, 0 }, stackTrace);

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
if (result.tag == DDOG_CRASHT_RESULT_ERR)
{
SetLastError(result.err);
continue;
Expand All @@ -248,9 +250,9 @@ int32_t CrashReporting::SetMetadata(const char* libraryName, const char* library
{
auto vecTags = ddog_Vec_Tag_new();

const ddog_prof_CrashtrackerMetadata metadata = {
.profiling_library_name = libdatadog::to_char_slice(libraryName) ,
.profiling_library_version = libdatadog::to_char_slice(libraryVersion),
const ddog_crasht_Metadata metadata = {
.library_name = libdatadog::to_char_slice(libraryName) ,
.library_version = libdatadog::to_char_slice(libraryVersion),
.family = libdatadog::to_char_slice(family),
.tags = &vecTags
};
Expand All @@ -261,11 +263,11 @@ int32_t CrashReporting::SetMetadata(const char* libraryName, const char* library
ddog_Vec_Tag_push(&vecTags, libdatadog::to_char_slice(tag.key), libdatadog::to_char_slice(tag.value));
}

auto result = ddog_crashinfo_set_metadata(&_crashInfo, metadata);
auto result = ddog_crasht_CrashInfo_set_metadata(&_crashInfo, metadata);

ddog_Vec_Tag_drop(vecTags);

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
if (result.tag == DDOG_CRASHT_RESULT_ERR)
{
SetLastError(result.err);
return 1;
Expand All @@ -276,31 +278,22 @@ int32_t CrashReporting::SetMetadata(const char* libraryName, const char* library

int32_t CrashReporting::Send()
{
ddog_prof_CrashtrackerConfiguration config{};

config.timeout_secs = 10;

auto result = ddog_crashinfo_upload_to_endpoint(&_crashInfo, config);

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
{
SetLastError(result.err);
return 1;
}

return 0;
return ExportImpl(nullptr);
}

int32_t CrashReporting::WriteToFile(const char* url)
{
ddog_prof_CrashtrackerConfiguration config{};
auto endpoint = ddog_endpoint_from_url(libdatadog::to_char_slice(url));
return ExportImpl(endpoint);
}

config.endpoint = ddog_Endpoint_file(libdatadog::to_char_slice(url));
config.timeout_secs = 10;
int32_t CrashReporting::ExportImpl(ddog_Endpoint* endpoint)
{
auto result = ddog_crasht_CrashInfo_upload_to_endpoint(&_crashInfo, endpoint);

auto result = ddog_crashinfo_upload_to_endpoint(&_crashInfo, config);
on_leave { if (endpoint != nullptr) ddog_endpoint_drop(endpoint); };

if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR)
if (result.tag == DDOG_CRASHT_RESULT_ERR)
{
SetLastError(result.err);
return 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,13 @@ class CrashReporting : public ICrashReporting
int32_t _pid;
int32_t _signal;
std::optional<ddog_Error> _error;
ddog_prof_CrashInfo _crashInfo;
ddog_crasht_CrashInfo _crashInfo;
void SetLastError(ddog_Error error);
virtual std::vector<std::pair<int32_t, std::string>> GetThreads() = 0;
virtual std::vector<StackFrame> GetThreadFrames(int32_t tid, ResolveManagedCallstack resolveManagedCallstack, void* context) = 0;
virtual std::string GetSignalInfo(int32_t signal) = 0;

private:
int32_t ExportImpl(ddog_Endpoint* endpoint);
int32_t _refCount;
};
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props" Condition="Exists('..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props')" />
<Import Project="..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props" Condition="Exists('..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
Expand Down Expand Up @@ -469,6 +469,6 @@
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props'))" />
<Error Condition="!Exists('..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props'))" />
</Target>
</Project>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="libdatadog" version="10.0.0" targetFramework="native" />
</packages>
<package id="libdatadog" version="13.0.0" targetFramework="native" />
</packages>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props" Condition="Exists('..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props')" />
<Import Project="..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props" Condition="Exists('..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
Expand Down Expand Up @@ -210,6 +210,6 @@
</PropertyGroup>
<Error Condition="!Exists('$(PackagesDir)\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets'))" />
<Error Condition="!Exists('..\..\..\packages\gmock.1.11.0\build\native\gmock.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\gmock.1.11.0\build\native\gmock.targets'))" />
<Error Condition="!Exists('..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\libdatadog.10.0.0\build\native\libdatadog.props'))" />
<Error Condition="!Exists('..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\libdatadog.13.0.0\build\native\libdatadog.props'))" />
</Target>
</Project>
4 changes: 2 additions & 2 deletions profiler/test/Datadog.Profiler.Native.Tests/packages.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="gmock" version="1.11.0" targetFramework="native" />
<package id="libdatadog" version="10.0.0" targetFramework="native" />
<package id="libdatadog" version="13.0.0" targetFramework="native" />
<package id="Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static" version="1.8.1.7" targetFramework="native" />
</packages>
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,7 @@ public TemporaryFile()

public string Path { get; }

public string Url => $"file:/{Path}";
public string Url => $"file://{Path}";

public string GetContent() => File.ReadAllText(Path);

Expand Down

0 comments on commit e2d7112

Please sign in to comment.