Remove RAD (pending future interface for external profiler registration)

Signed-off-by: Jeremy Ong <jcong@amazon.com>
monroegm-disable-blank-issue-2
Jeremy Ong 4 years ago
parent 11d4543442
commit ec6e9407f6

@ -11,7 +11,6 @@
#include <AzCore/Component/Component.h>
#include <AzCore/Component/Entity.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/Debug/ProfileModuleInit.h>
#include <AzCore/Memory/AllocationRecords.h>
#include <AzCore/Memory/OSAllocator.h>
#include <AzCore/Module/DynamicModuleHandle.h>

@ -38,17 +38,6 @@ namespace AZ
}
}
#ifdef AZ_PROFILE_TELEMETRY
# define AZ_TRACE_METHOD_NAME_CATEGORY(name, category) AZ::Debug::EventTrace::ScopedSlice AZ_JOIN(ScopedSlice__, __LINE__)(name, category);
# define AZ_TRACE_METHOD_NAME(name) \
AZ_TRACE_METHOD_NAME_CATEGORY(name, "") \
AZ_PROFILE_SCOPE(AzTrace, name)
# define AZ_TRACE_METHOD() \
AZ_TRACE_METHOD_NAME_CATEGORY(AZ_FUNCTION_SIGNATURE, "") \
AZ_PROFILE_FUNCTION(AzTrace)
#else
# define AZ_TRACE_METHOD_NAME_CATEGORY(name, category)
# define AZ_TRACE_METHOD_NAME(name) AZ_TRACE_METHOD_NAME_CATEGORY(name, "")
# define AZ_TRACE_METHOD() AZ_TRACE_METHOD_NAME(AZ_FUNCTION_SIGNATURE)
#endif
#define AZ_TRACE_METHOD_NAME_CATEGORY(name, category)
#define AZ_TRACE_METHOD_NAME(name) AZ_TRACE_METHOD_NAME_CATEGORY(name, "")
#define AZ_TRACE_METHOD() AZ_TRACE_METHOD_NAME(AZ_FUNCTION_SIGNATURE)

@ -1,53 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <AzCore/Debug/ProfileModuleInit.h>
#ifdef AZ_PROFILE_TELEMETRY
# include <RADTelemetry/ProfileTelemetryBus.h>
// Define the per-module RAD Telemetry instance pointer
struct tm_api;
tm_api* g_radTmApi;
#endif
namespace AZ
{
namespace Debug
{
void ProfileModuleInit()
{
#if defined(AZ_PROFILE_TELEMETRY)
{
if (!g_radTmApi)
{
using namespace RADTelemetry;
ProfileTelemetryRequestBus::BroadcastResult(g_radTmApi, &ProfileTelemetryRequests::GetApiInstance);
}
}
#endif
// Add additional per-DLL required profiler initialization here
}
ProfileModuleInitializer::ProfileModuleInitializer()
{
ProfilerNotificationBus::Handler::BusConnect();
}
ProfileModuleInitializer::~ProfileModuleInitializer()
{
ProfilerNotificationBus::Handler::BusDisconnect();
}
void ProfileModuleInitializer::OnProfileSystemInitialized()
{
ProfileModuleInit();
}
}
}

@ -1,36 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/Debug/ProfilerBus.h>
namespace AZ
{
namespace Debug
{
//! Perform any required per-module initialization of the current profiler
void ProfileModuleInit();
/*!
* ProfileModuleInitializer
* Helper class that calls ProfileModuleInit when OnProfileSystemInitialized is fired.
*/
class ProfileModuleInitializer
: private AZ::Debug::ProfilerNotificationBus::Handler
{
public:
ProfileModuleInitializer();
~ProfileModuleInitializer() override;
private:
void OnProfileSystemInitialized() override;
};
}
}

@ -15,10 +15,6 @@
#include <WinPixEventRuntime/pix3.h>
#endif
#ifdef AZ_PROFILE_TELEMETRY
# include <RADTelemetry/ProfileTelemetry.h>
#endif
#if defined(AZ_PROFILER_MACRO_DISABLE) // by default we never disable the profiler registers as their overhead should be minimal, you can still do that for your code though.
# define AZ_PROFILE_SCOPE(...)
# define AZ_PROFILE_FUNCTION(...)
@ -38,7 +34,6 @@
#endif // AZ_PROFILER_MACRO_DISABLE
#ifndef AZ_PROFILE_INTERVAL_START
// No other profiler has defined the performance markers AZ_PROFILE_INTERVAL_START/END, fallback to a Driller implementation (currently empty)
# define AZ_PROFILE_INTERVAL_START(...)
# define AZ_PROFILE_INTERVAL_START_COLORED(...)
# define AZ_PROFILE_INTERVAL_END(...)
@ -46,7 +41,6 @@
#endif
#ifndef AZ_PROFILE_DATAPOINT
// No other profiler has defined the performance markers AZ_PROFILE_DATAPOINT, fallback to a Driller implementation (currently empty)
# define AZ_PROFILE_DATAPOINT(...)
# define AZ_PROFILE_DATAPOINT_PERCENT(...)
#endif

@ -9,7 +9,6 @@
#define AZCORE_MODULE_INCLUDE_H 1
#include <AzCore/Component/Component.h>
#include <AzCore/Debug/ProfileModuleInit.h>
#include <AzCore/Memory/SystemAllocator.h>
#include <AzCore/Module/Environment.h>
#include <AzCore/Interface/Interface.h>
@ -78,9 +77,6 @@ namespace AZ
protected:
AZStd::list<AZ::ComponentDescriptor*> m_descriptors;
private:
AZ::Debug::ProfileModuleInitializer m_moduleProfilerInit;
};
} // namespace AZ

@ -287,14 +287,6 @@ void ScriptSystemComponent::OnSystemTick()
contextContainer.m_context->GetDebugContext()->ProcessDebugCommands();
}
#ifdef AZ_PROFILE_TELEMETRY
if (contextContainer.m_context->GetId() == ScriptContextIds::DefaultScriptContextId)
{
size_t memoryUsageBytes = contextContainer.m_context->GetMemoryUsage();
AZ_PROFILE_DATAPOINT(Script, memoryUsageBytes / 1024.0, "Script Memory (KB)");
}
#endif // AZ_PROFILE_TELEMETRY
contextContainer.m_context->GarbageCollectStep(contextContainer.m_garbageCollectorSteps);
}
}

@ -17,7 +17,7 @@
#include <AzCore/Debug/Profiler.h>
#if !defined(AZ_PROFILE_TELEMETRY) && defined(AZ_STATISTICAL_PROFILING_ENABLED)
#if defined(AZ_STATISTICAL_PROFILING_ENABLED)
#if defined(AZ_PROFILE_SCOPE)
#undef AZ_PROFILE_SCOPE
@ -27,7 +27,7 @@
static const AZStd::string AZ_JOIN(blockName, __LINE__)(scopeNameId); \
AZ::Statistics::StatisticalProfilerProxy::TimedScope AZ_JOIN(scope, __LINE__)(profiler, AZ_JOIN(blockName, __LINE__));
#endif //#if !defined(AZ_PROFILE_TELEMETRY)
#endif //#if defined(AZ_STATISTICAL_PROFILING_ENABLED)
namespace AZ::Statistics
{

@ -100,8 +100,6 @@ set(FILES
Debug/FrameProfilerComponent.h
Debug/IEventLogger.h
Debug/MemoryProfiler.h
Debug/ProfileModuleInit.cpp
Debug/ProfileModuleInit.h
Debug/Profiler.cpp
Debug/Profiler.h
Debug/ProfilerBus.h

@ -12,13 +12,6 @@
ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
ly_get_list_relative_pal_filename(common_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/Common)
if(LY_RAD_TELEMETRY_ENABLED)
set(AZ_CORE_RADTELEMETRY_FILES ${common_dir}/azcore_profile_telemetry_files.cmake)
set(AZ_CORE_RADTELEMETRY_PLATFORM_INCLUDES ${pal_dir}/profile_telemetry_platform_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
set(AZ_CORE_RADTELEMETRY_INCLUDE_DIRECTORIES ${common_dir})
set(AZ_CORE_RADTELEMETRY_BUILD_DEPENDENCIES 3rdParty::RadTelemetry)
endif()
if(PAL_TRAIT_PROF_PIX_SUPPORTED AND LY_PIX_ENABLED)
set(LY_PIX_PATH "${LY_3RDPARTY_PATH}/winpixeventruntime" CACHE PATH "Path to the Windows Pix Event Runtime.")
set(AZ_CORE_PIX_BUILD_DEPENDENCIES 3rdParty::pix)
@ -32,16 +25,13 @@ ly_add_target(
AzCore/azcore_files.cmake
AzCore/std/azstd_files.cmake
${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
${AZ_CORE_RADTELEMETRY_FILES}
PLATFORM_INCLUDE_FILES
${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}.cmake
${AZ_CORE_RADTELEMETRY_PLATFORM_INCLUDES}
INCLUDE_DIRECTORIES
PUBLIC
.
${pal_dir}
${common_dir}
${AZ_CORE_RADTELEMETRY_INCLUDE_DIRECTORIES}
BUILD_DEPENDENCIES
PUBLIC
3rdParty::Lua
@ -50,7 +40,6 @@ ly_add_target(
3rdParty::zlib
3rdParty::zstd
3rdParty::cityhash
${AZ_CORE_RADTELEMETRY_BUILD_DEPENDENCIES}
${AZ_CORE_PIX_BUILD_DEPENDENCIES}
COMPILE_DEFINITIONS
PUBLIC

@ -11,7 +11,3 @@
# NOTE: functions in cmake are global, therefore adding functions to this file
# is being avoided to prevent overriding functions declared in other targets platfrom
# specific cmake files
if(LY_RAD_TELEMETRY_ENABLED)
set(LY_COMPILE_DEFINITIONS PUBLIC AZ_PROFILE_TELEMETRY)
endif()

@ -1,143 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#ifdef AZ_PROFILE_TELEMETRY
/*!
* ProfileTelemetry.h provides a RAD Telemetry specific implementation of the AZ_PROFILE_FUNCTION, AZ_PROFILE_SCOPE, and AZ_PROFILE_SCOPE_DYNAMIC performance instrumentation markers
*/
#define TM_API_PTR g_radTmApi
#include <rad_tm.h>
#include <AzCore/Math/Color.h>
namespace ProfileTelemetryInternal
{
inline constexpr tm_uint32 ConvertColor(uint32_t rgba)
{
return
((rgba >> 24) & 0x000000ff) | // move byte 3 to byte 0
((rgba << 8) & 0x00ff0000) | // move byte 1 to byte 2
((rgba >> 8) & 0x0000ff00) | // move byte 2 to byte 1
((rgba << 24) & 0xff000000); // byte 0 to byte 3
}
inline constexpr tm_uint32 ConvertColor(const AZ::Color& color)
{
return ConvertColor(color.ToU32());
}
}
#define AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category) (static_cast<uint32_t>(1) << static_cast<uint32_t>(category))
// Helpers
#define AZ_INTERNAL_PROF_MEMORY_CAT_TO_FLAGS(category) (AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category) | \
AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(AZ::Debug::ProfileCategory::MemoryReserved))
#define AZ_INTERNAL_PROF_VERIFY_INTERVAL_ID(id) static_assert(sizeof(id) <= sizeof(tm_uint64), "Interval id must be a unique value no larger than 64-bits")
#define AZ_INTERNAL_PROF_TM_FUNC_VERIFY_CAT(category, flags) \
tmFunction(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), flags)
#define AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, flags, ...) \
tmZone(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), flags, __VA_ARGS__)
// AZ_PROFILE_FUNCTION
#define AZ_PROFILE_FUNCTION(category) \
AZ_INTERNAL_PROF_TM_FUNC_VERIFY_CAT(category, TMZF_NONE)
#define AZ_PROFILE_FUNCTION_STALL(category) \
AZ_INTERNAL_PROF_TM_FUNC_VERIFY_CAT(category, TMZF_STALL)
#define AZ_PROFILE_FUNCTION_IDLE(category) \
AZ_INTERNAL_PROF_TM_FUNC_VERIFY_CAT(category, TMZF_IDLE)
// AZ_PROFILE_SCOPE
#define AZ_PROFILE_SCOPE(category, name) \
AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, TMZF_NONE, name)
#define AZ_PROFILE_SCOPE_STALL(category, name) \
AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, TMZF_STALL, name)
#define AZ_PROFILE_SCOPE_IDLE(category, name) \
AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, TMZF_IDLE, name)
// AZ_PROFILE_SCOPE_DYNAMIC
// For profiling events with dynamic scope names
// Note: the first variable argument must be a const format string
// Usage: AZ_PROFILE_SCOPE_DYNAMIC(AZ::Debug::ProfileCategory, <printf style const format string>, format args...)
#define AZ_PROFILE_SCOPE_DYNAMIC(category, ...) \
AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, TMZF_NONE, __VA_ARGS__)
#define AZ_PROFILE_SCOPE_STALL_DYNAMIC(category, ...) \
AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, TMZF_STALL, __VA_ARGS__)
#define AZ_PROFILE_SCOPE_IDLE_DYNAMIC(category, ...) \
AZ_INTERNAL_PROF_TM_ZONE_VERIFY_CAT(category, TMZF_IDLE, __VA_ARGS__)
// AZ_PROFILE_EVENT_BEGIN/END
// For profiling events that do not start and stop in the same scope (they MUST start/stop on the same thread)
// ALWAYS favor using scoped events (AZ_PROFILE_FUNCTION, AZ_PROFILE_SCOPE) as debugging an unmatched begin/end can be challenging
#define AZ_PROFILE_EVENT_BEGIN(category, name) \
tmEnter(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), TMZF_NONE, name)
#define AZ_PROFILE_EVENT_END(category) \
tmLeave(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category))
// AZ_PROFILE_INTERVAL (mapped to Telemetry Timespan APIs)
// Note: using C-style casting as we allow either pointers or integral types as IDs
#define AZ_PROFILE_INTERVAL_START(category, id, ...) \
AZ_INTERNAL_PROF_VERIFY_INTERVAL_ID(id); \
tmBeginTimeSpan(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), (tm_uint64)(id), TMZF_NONE, __VA_ARGS__)
#define AZ_PROFILE_INTERVAL_START_COLORED(category, id, color, ...) \
AZ_INTERNAL_PROF_VERIFY_INTERVAL_ID(id); \
tmBeginColoredTimeSpan(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), (tm_uint64)(id), 0, ProfileTelemetryInternal::ConvertColor(color), TMZF_NONE, __VA_ARGS__)
#define AZ_PROFILE_INTERVAL_END(category, id) \
AZ_INTERNAL_PROF_VERIFY_INTERVAL_ID(id); \
tmEndTimeSpan(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), (tm_uint64)(id))
// AZ_PROFILE_INTERVAL_SCOPED
// Scoped interval event that implicitly starts and ends in the same scope
// Note: using C-style casting as we allow either pointers or integral types as IDs
// Note: the first variable argument must be a const format string
// Usage: AZ_PROFILE_INTERVAL_SCOPED(AZ::Debug::ProfileCategory, <unique interval id>, <printf style const format string>, format args...)
#define AZ_PROFILE_INTERVAL_SCOPED(category, id, ...) \
AZ_INTERNAL_PROF_VERIFY_INTERVAL_ID(id); \
tmTimeSpan(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), (tm_uint64)(id), TM_MIN_TIME_SPAN_TRACK_ID + static_cast<AZ::Debug::ProfileCategoryPrimitiveType>(category), 0, TMZF_NONE, __VA_ARGS__)
// AZ_PROFILE_DATAPOINT (mapped to tmPlot APIs)
// Note: data points can have static or dynamic names, if using a dynamic name the first variable argument must be a const format string
// Usage: AZ_PROFILE_DATAPOINT(AZ::Debug::ProfileCategory, <printf style const format string>, format args...)
#define AZ_PROFILE_DATAPOINT(category, value, ...) \
tmPlot(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), TM_PLOT_UNITS_REAL, TM_PLOT_DRAW_LINE, static_cast<double>(value), __VA_ARGS__)
#define AZ_PROFILE_DATAPOINT_PERCENT(category, value, ...) \
tmPlot(AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(category), TM_PLOT_UNITS_PERCENTAGE_DIRECT, TM_PLOT_DRAW_LINE, static_cast<double>(value), __VA_ARGS__)
// AZ_PROFILE_MEMORY_ALLOC
#define AZ_PROFILE_MEMORY_ALLOC(category, address, size, context) \
tmAlloc(AZ_INTERNAL_PROF_MEMORY_CAT_TO_FLAGS(category), address, size, context)
#define AZ_PROFILE_MEMORY_ALLOC_EX(category, filename, lineNumber, address, size, context) \
tmAllocEx(AZ_INTERNAL_PROF_MEMORY_CAT_TO_FLAGS(category), filename, lineNumber, address, size, context)
#define AZ_PROFILE_MEMORY_FREE(category, address) \
tmFree(AZ_INTERNAL_PROF_MEMORY_CAT_TO_FLAGS(category), address)
#define AZ_PROFILE_MEMORY_FREE_EX(category, filename, lineNumber, address) \
tmFreeEx(AZ_INTERNAL_PROF_MEMORY_CAT_TO_FLAGS(category), filename, lineNumber, address)
#endif

@ -1,49 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#ifdef AZ_PROFILE_TELEMETRY
#include <AzCore/base.h>
#include <AzCore/Debug/Profiler.h>
#include <AzCore/Debug/ProfilerBus.h>
#include <AzCore/EBus/EBus.h>
struct tm_api;
namespace RADTelemetry
{
class ProfileTelemetryRequests
: public AZ::EBusTraits
{
public:
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual ~ProfileTelemetryRequests() = default;
virtual void ToggleEnabled() = 0;
virtual void SetAddress(const char* address, AZ::u16 port) = 0;
virtual void SetCaptureMask(AZ::Debug::ProfileCategoryPrimitiveType mask) = 0;
virtual void SetFrameAdvanceType(AZ::Debug::ProfileFrameAdvanceType type) = 0;
virtual AZ::Debug::ProfileCategoryPrimitiveType GetCaptureMask() = 0;
virtual AZ::Debug::ProfileCategoryPrimitiveType GetDefaultCaptureMask() = 0;
virtual tm_api* GetApiInstance() = 0;
};
using ProfileTelemetryRequestBus = AZ::EBus<ProfileTelemetryRequests>;
}
#endif

@ -11,7 +11,3 @@
# NOTE: functions in cmake are global, therefore adding functions to this file
# is being avoided to prevent overriding functions declared in other targets platfrom
# specific cmake files
if(LY_RAD_TELEMETRY_ENABLED)
set(LY_COMPILE_DEFINITIONS PUBLIC AZ_PROFILE_TELEMETRY)
endif()

@ -11,7 +11,3 @@
# NOTE: functions in cmake are global, therefore adding functions to this file
# is being avoided to prevent overriding functions declared in other targets platfrom
# specific cmake files
if(LY_RAD_TELEMETRY_ENABLED)
set(LY_COMPILE_DEFINITIONS PUBLIC AZ_PROFILE_TELEMETRY)
endif()

@ -5,7 +5,3 @@
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
if(LY_RAD_TELEMETRY_ENABLED)
set(LY_COMPILE_DEFINITIONS PUBLIC AZ_PROFILE_TELEMETRY)
endif()

@ -83,7 +83,7 @@ namespace UnitTest
int ChildFunction0(int numIterations, int sleepTimeMilliseconds)
{
AZ_PROFILE_TIMER("UnitTest", CHILD_TIMER_STAT0);
AZ_PROFILE_SCOPE(UnitTest, CHILD_TIMER_STAT0);
AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(sleepTimeMilliseconds));
int result = 5;
for (int i = 0; i < numIterations; ++i)
@ -95,7 +95,7 @@ namespace UnitTest
int ChildFunction1(int numIterations, int sleepTimeMilliseconds)
{
AZ_PROFILE_TIMER("UnitTest", CHILD_TIMER_STAT1);
AZ_PROFILE_SCOPE(UnitTest, CHILD_TIMER_STAT1);
AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(sleepTimeMilliseconds));
int result = 5;
for (int i = 0; i < numIterations; ++i)
@ -107,7 +107,7 @@ namespace UnitTest
int ParentFunction(int numIterations, int sleepTimeMilliseconds)
{
AZ_PROFILE_TIMER("UnitTest", PARENT_TIMER_STAT);
AZ_PROFILE_SCOPE(UnitTest, PARENT_TIMER_STAT);
AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(sleepTimeMilliseconds));
int result = 0;
result += ChildFunction0(numIterations, sleepTimeMilliseconds);
@ -198,9 +198,10 @@ namespace UnitTest
AZStd::unique_ptr<Statistics::TimeDataStatisticsManager> m_statsManager;
};//class TimeDataStatisticsManagerTest
TEST_F(TimeDataStatisticsManagerTest, Test)
// TODO:BUDGETS disabled until profiler budgets system comes online
// TEST_F(TimeDataStatisticsManagerTest, Test)
{
run();
// run();
}
//End of all Tests of TimeDataStatisticsManagerTest

@ -1149,22 +1149,11 @@ struct DiskOperationInfo
#endif
#if defined(ENABLE_LOADING_PROFILER) && AZ_PROFILE_TELEMETRY
#define LOADING_TIME_PROFILE_SECTION AZ_PROFILE_FUNCTION(AzCore)
#define LOADING_TIME_PROFILE_SECTION_ARGS(...) AZ_PROFILE_SCOPE(AzCore, __VA_ARGS__)
#define LOADING_TIME_PROFILE_SECTION_NAMED(sectionName) AZ_PROFILE_SCOPE(AzCore, sectionName)
#define LOADING_TIME_PROFILE_SECTION_NAMED_ARGS(sectionName, ...) AZ_PROFILE_SCOPE(AzCore, sectionName, __VA_ARGS__)
#else
#define LOADING_TIME_PROFILE_SECTION
#define LOADING_TIME_PROFILE_SECTION_ARGS(...)
#define LOADING_TIME_PROFILE_SECTION_NAMED(sectionName)
#define LOADING_TIME_PROFILE_SECTION_NAMED_ARGS(sectionName, ...)
#endif
//////////////////////////////////////////////////////////////////////////
// CrySystem DLL Exports.
//////////////////////////////////////////////////////////////////////////

@ -173,7 +173,7 @@
#if defined(ENABLE_PROFILING_CODE)
#define USE_DISK_PROFILER
#define ENABLE_LOADING_PROFILER // requires AZ_PROFILE_TELEMETRY to also be defined
#define ENABLE_LOADING_PROFILER
#endif
// The maximum number of joints in an animation

@ -13,7 +13,6 @@
#include <IConsole.h>
#include <AzCore/Debug/Profiler.h>
#include <AzCore/Debug/ProfileModuleInit.h>
#include <AzCore/Memory/AllocatorManager.h>
#include <AzCore/Module/Environment.h>
#include <AzCore/std/string/conversions.h>
@ -94,7 +93,6 @@ extern "C" AZ_DLL_EXPORT void ModuleInitISystem(ISystem* pSystem, [[maybe_unused
AZ::Environment::Attach(gEnv->pSharedEnvironment);
AZ::AllocatorManager::Instance(); // Force the AllocatorManager to instantiate and register any allocators defined in data sections
}
AZ::Debug::ProfileModuleInit();
} // if pSystem
}

@ -1,9 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
add_subdirectory(Code)

@ -1,47 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(LY_RAD_TELEMETRY_ENABLED OFF CACHE BOOL "Enables RAD Telemetry in Debug/Profile mode.")
set(LY_RAD_TELEMETRY_INSTALL_ROOT "@LY_3RDPARTY_PATH@/RadTelemetry" CACHE PATH "Install path to RAD Telemetry.")
string(CONFIGURE ${LY_RAD_TELEMETRY_INSTALL_ROOT} LY_RAD_TELEMETRY_INSTALL_ROOT @ONLY)
ly_get_list_relative_pal_filename(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME})
ly_add_target(
NAME RADTelemetry.Static STATIC
NAMESPACE Gem
FILES_CMAKE
radtelemetry_files.cmake
${pal_source_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Source
${pal_source_dir}
BUILD_DEPENDENCIES
PUBLIC
AZ::AzCore
Legacy::CryCommon
)
ly_add_target(
NAME RADTelemetry ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
NAMESPACE Gem
FILES_CMAKE
radtelemetry_shared_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Source
BUILD_DEPENDENCIES
PRIVATE
Gem::RADTelemetry.Static
)
# the RADTelemetry module above can be used in all kinds of applications, but we don't enable it in asset builders
ly_create_alias(NAME RADTelemetry.Clients NAMESPACE Gem TARGETS Gem::RADTelemetry)
ly_create_alias(NAME RADTelemetry.Tools NAMESPACE Gem TARGETS Gem::RADTelemetry)
ly_create_alias(NAME RADTelemetry.Servers NAMESPACE Gem TARGETS Gem::RADTelemetry)

@ -1,10 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#define AZ_TRAIT_RAD_TELEMETRY_OPEN_FLAGS TMOF_INIT_NETWORKING

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
RADTelemetry_Traits_Platform.h
)

@ -1,10 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#define AZ_TRAIT_RAD_TELEMETRY_OPEN_FLAGS TMOF_INIT_NETWORKING

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
RADTelemetry_Traits_Platform.h
)

@ -1,10 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#define AZ_TRAIT_RAD_TELEMETRY_OPEN_FLAGS TMOF_INIT_NETWORKING

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
RADTelemetry_Traits_Platform.h
)

@ -1,10 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#define AZ_TRAIT_RAD_TELEMETRY_OPEN_FLAGS TMOF_INIT_NETWORKING

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
RADTelemetry_Traits_Platform.h
)

@ -1,10 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#define AZ_TRAIT_RAD_TELEMETRY_OPEN_FLAGS TMOF_INIT_NETWORKING

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
RADTelemetry_Traits_Platform.h
)

@ -1,344 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#ifdef AZ_PROFILE_TELEMETRY
#include <AzCore/Debug/ProfilerBus.h>
#include <AzCore/PlatformIncl.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <RADTelemetry/ProfileTelemetry.h>
#include <RADTelemetry_Traits_Platform.h>
#include "ProfileTelemetryComponent.h"
namespace RADTelemetry
{
static const char * ProfileChannel = "RADTelemetry";
static const AZ::u32 MaxProfileThreadCount = 128;
static void MessageFrameTickType(AZ::Debug::ProfileFrameAdvanceType type)
{
const char * frameAdvanceTypeMessage = "Profile tick set to %s";
const char* frameAdvanceTypeString = (type == AZ::Debug::ProfileFrameAdvanceType::Game) ? "Game Thread" : "Render Frame";
AZ_Printf(ProfileChannel, frameAdvanceTypeMessage, frameAdvanceTypeString);
tmMessage(0, TMMF_SEVERITY_LOG, frameAdvanceTypeMessage, frameAdvanceTypeString);
}
ProfileTelemetryComponent::ProfileTelemetryComponent()
{
// Connecting in the constructor because we need to catch ALL created threads
AZStd::ThreadEventBus::Handler::BusConnect();
}
ProfileTelemetryComponent::~ProfileTelemetryComponent()
{
AZ_Assert(!m_running, "A telemetry session should not be open.");
AZStd::ThreadEventBus::Handler::BusDisconnect();
if (IsInitialized())
{
tmShutdown();
AZ_OS_FREE(m_buffer);
m_buffer = nullptr;
}
}
void ProfileTelemetryComponent::Activate()
{
AZ::Debug::ProfilerRequestBus::Handler::BusConnect();
ProfileTelemetryRequestBus::Handler::BusConnect();
AZ::SystemTickBus::Handler::BusConnect();
}
void ProfileTelemetryComponent::Deactivate()
{
AZ::SystemTickBus::Handler::BusDisconnect();
ProfileTelemetryRequestBus::Handler::BusDisconnect();
AZ::Debug::ProfilerRequestBus::Handler::BusDisconnect();
Disable();
}
void ProfileTelemetryComponent::OnThreadEnter(const AZStd::thread_id& id, const AZStd::thread_desc* desc)
{
(void)id;
(void)desc;
#if AZ_TRAIT_OS_USE_WINDOWS_THREADS
if (!desc)
{
// Skip unnamed threads
return;
}
if (IsInitialized())
{
// We can send the thread name to Telemetry now
const AZ::u32 newProfiledThreadCount = ++m_profiledThreadCount;
AZ_Assert(newProfiledThreadCount <= MaxProfileThreadCount, "RAD Telemetry profiled threadcount exceeded MaxProfileThreadCount!");
tmThreadName(0, id.m_id, desc->m_name);
return;
}
// Save off to send on the next connection
ScopedLock lock(m_threadNameLock);
auto end = m_threadNames.end();
auto itr = AZStd::find_if(m_threadNames.begin(), end, [id](const ThreadNameEntry& entry)
{
return entry.id == id;
});
if (itr != end)
{
itr->name = desc->m_name;
}
else
{
m_threadNames.push_back({ id, desc->m_name });
}
#else
const AZ::u32 newProfiledThreadCount = ++m_profiledThreadCount;
AZ_Assert(newProfiledThreadCount <= MaxProfileThreadCount, "RAD Telemetry profiled threadcount exceeded MaxProfileThreadCount!");
#endif
}
void ProfileTelemetryComponent::OnThreadExit(const AZStd::thread_id& id)
{
(void)id;
#if AZ_TRAIT_OS_USE_WINDOWS_THREADS
{
ScopedLock lock(m_threadNameLock);
auto end = m_threadNames.end();
auto itr = AZStd::find_if(m_threadNames.begin(), end, [id](const ThreadNameEntry& entry)
{
return entry.id == id;
});
if (itr != end)
{
m_threadNames.erase(itr);
}
else
{
// assume it was already sent on to RAD Telemetry
tmEndThread(0, id.m_id);
--m_profiledThreadCount;
}
}
#else
--m_profiledThreadCount;
#endif
}
void ProfileTelemetryComponent::OnSystemTick()
{
FrameAdvance(AZ::Debug::ProfileFrameAdvanceType::Game);
}
void ProfileTelemetryComponent::FrameAdvance(AZ::Debug::ProfileFrameAdvanceType type)
{
if (type == m_frameAdvanceType)
{
tmTick(0);
}
}
bool ProfileTelemetryComponent::IsActive()
{
return m_running;
}
void ProfileTelemetryComponent::ToggleEnabled()
{
Initialize();
if (!m_running)
{
Enable();
}
else
{
Disable();
}
}
tm_api* ProfileTelemetryComponent::GetApiInstance()
{
Initialize();
return TM_API_PTR;
}
void ProfileTelemetryComponent::Enable()
{
AZ_Printf(ProfileChannel, "Attempting to connect to the Telemetry server at %s:%d", m_address, m_port);
tmSetCaptureMask(m_captureMask);
tm_error result = tmOpen(
0, // unused
"ly", // program name, don't use slashes or weird character that will screw up a filename
__DATE__ " " __TIME__, // identifier, could be date time, or a build number ... whatever you want
m_address, // telemetry server address
TMCT_TCP, // network capture
m_port, // telemetry server port
AZ_TRAIT_RAD_TELEMETRY_OPEN_FLAGS,// flags
3000 // timeout in milliseconds ... pass -1 for infinite
);
switch (result)
{
case TM_OK:
{
m_running = true;
AZ_Printf(ProfileChannel, "Connected to the Telemetry server at %s:%d", m_address, m_port);
MessageFrameTickType(m_frameAdvanceType);
#if AZ_TRAIT_OS_USE_WINDOWS_THREADS
ScopedLock lock(m_threadNameLock);
for (const auto& threadNameEntry : m_threadNames)
{
const AZ::u32 newProfiledThreadCount = ++m_profiledThreadCount;
AZ_Assert(newProfiledThreadCount <= MaxProfileThreadCount, "RAD Telemetry profiled thread count exceeded MaxProfileThreadCount!");
tmThreadName(0, threadNameEntry.id.m_id, threadNameEntry.name.c_str());
}
m_threadNames.clear(); // Telemetry caches names so we can clear what we have sent on
#endif
break;
}
case TMERR_DISABLED:
AZ_Printf(ProfileChannel, "Telemetry is disabled via #define NTELEMETRY");
break;
case TMERR_UNINITIALIZED:
AZ_Printf(ProfileChannel, "tmInitialize failed or was not called");
break;
case TMERR_NETWORK_NOT_INITIALIZED:
AZ_Printf(ProfileChannel, "WSAStartup was not called before tmOpen! Call WSAStartup or pass TMOF_INIT_NETWORKING.");
break;
case TMERR_NULL_API:
AZ_Printf(ProfileChannel, "There is no Telemetry API (the DLL isn't in the EXE's path)!");
break;
case TMERR_COULD_NOT_CONNECT:
AZ_Printf(ProfileChannel, "Unable to connect to the Telemetry server at %s:%d (1. is it running? 2. check firewall settings)", m_address, m_port);
break;
case TMERR_UNKNOWN:
AZ_Printf(ProfileChannel, "Unknown error occurred");
break;
default:
AZ_Assert(false, "Unhandled tmOpen error case %d", result);
break;
}
}
void ProfileTelemetryComponent::Disable()
{
if (m_running)
{
m_running = false;
tmClose(0);
AZ_Printf(ProfileChannel, "Disconnected from the Telemetry server.");
}
}
TM_EXPORT_API tm_api* g_tm_api; // Required for the RAD Telemetry as static lib case
void ProfileTelemetryComponent::Initialize()
{
if (IsInitialized())
{
return;
}
tmLoadLibrary(TM_RELEASE);
if (!TM_API_PTR)
{
// Work around for UnixLike platforms that do not load RAD Telemetry static lib (they are incorrectly compiled with the dynamic library version of tmLoadLibrary. RAD is aware of the issue.)
TM_API_PTR = g_tm_api;
}
AZ_Assert(TM_API_PTR, "Invalid RAD Telemetry API pointer state");
tmSetMaxThreadCount(MaxProfileThreadCount);
const tm_int32 telemetryBufferSize = 16 * 1024 * 1024;
m_buffer = static_cast<char*>(AZ_OS_MALLOC(telemetryBufferSize, sizeof(void*)));
tmInitialize(telemetryBufferSize, m_buffer);
// Notify so individual modules can update their Telemetry pointer
AZ::Debug::ProfilerNotificationBus::Broadcast(&AZ::Debug::ProfilerNotifications::OnProfileSystemInitialized);
}
bool ProfileTelemetryComponent::IsInitialized() const {
return m_buffer != nullptr;
}
void ProfileTelemetryComponent::SetAddress(const char *address, AZ::u16 port)
{
m_address = address;
m_port = port;
}
void ProfileTelemetryComponent::SetCaptureMask(AZ::Debug::ProfileCategoryPrimitiveType mask)
{
m_captureMask = mask;
if (IsInitialized())
{
tmSetCaptureMask(m_captureMask);
}
}
void ProfileTelemetryComponent::SetFrameAdvanceType(AZ::Debug::ProfileFrameAdvanceType type)
{
if (type != m_frameAdvanceType)
{
MessageFrameTickType(type);
m_frameAdvanceType = type;
}
}
AZ::Debug::ProfileCategoryPrimitiveType ProfileTelemetryComponent::GetDefaultCaptureMaskInternal()
{
using MaskType = AZ::Debug::ProfileCategoryPrimitiveType;
// Set all the category bits "below" FirstDetailedCategory and do not enable memory capture by default
return (static_cast<MaskType>(1) << static_cast<MaskType>(FirstDetailedCategory)) - 1;
}
AZ::Debug::ProfileCategoryPrimitiveType ProfileTelemetryComponent::GetDefaultCaptureMask()
{
return GetDefaultCaptureMaskInternal();
}
AZ::Debug::ProfileCategoryPrimitiveType ProfileTelemetryComponent::GetCaptureMask()
{
return m_captureMask;
}
void ProfileTelemetryComponent::Reflect(AZ::ReflectContext* context)
{
if (AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<ProfileTelemetryComponent, AZ::Component>()
->Version(1)
;
}
}
void ProfileTelemetryComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
provided.push_back(AZ_CRC("ProfilerService"));
}
}
#endif

@ -1,103 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#ifdef AZ_PROFILE_TELEMETRY
#include <AzCore/std/parallel/threadbus.h>
#include <AzCore/Component/Component.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/std/string/string.h>
#include <RADTelemetry/ProfileTelemetryBus.h>
namespace RADTelemetry
{
class ProfileTelemetryComponent
: public AZ::Component
, private AZStd::ThreadEventBus::Handler
, private AZ::SystemTickBus::Handler
, private AZ::Debug::ProfilerRequestBus::Handler
, private ProfileTelemetryRequestBus::Handler
{
public:
AZ_COMPONENT(ProfileTelemetryComponent, "{51118122-7214-4918-BFF3-237E25FF4918}");
ProfileTelemetryComponent();
~ProfileTelemetryComponent() override;
//////////////////////////////////////////////////////////////////////////
// AZ::Component
void Activate() override;
void Deactivate() override;
private:
ProfileTelemetryComponent(const ProfileTelemetryComponent&) = delete;
//////////////////////////////////////////////////////////////////////////
// Thread event bus
void OnThreadEnter(const AZStd::thread_id& id, const AZStd::thread_desc* desc) override;
void OnThreadExit(const AZStd::thread_id& id) override;
//////////////////////////////////////////////////////////////////////////
// SystemTickBus
void OnSystemTick() override;
//////////////////////////////////////////////////////////////////////////
// ProfilerRequstBus
bool IsActive() override;
void FrameAdvance(AZ::Debug::ProfileFrameAdvanceType type) override;
//////////////////////////////////////////////////////////////////////////
// ProfileTelemetryRequestBus
void ToggleEnabled() override;
void SetAddress(const char *address, AZ::u16 port) override;
void SetCaptureMask(AZ::Debug::ProfileCategoryPrimitiveType mask) override;
void SetFrameAdvanceType(AZ::Debug::ProfileFrameAdvanceType type) override;
AZ::Debug::ProfileCategoryPrimitiveType GetCaptureMask() override;
AZ::Debug::ProfileCategoryPrimitiveType GetDefaultCaptureMask() override;
tm_api* GetApiInstance() override;
//////////////////////////////////////////////////////////////////////////
// Component descriptor
static void Reflect(AZ::ReflectContext* context);
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
//////////////////////////////////////////////////////////////////////////
// Private helpers
void Enable();
void Disable();
void Initialize();
bool IsInitialized() const;
static AZ::Debug::ProfileCategoryPrimitiveType GetDefaultCaptureMaskInternal();
//////////////////////////////////////////////////////////////////////////
// Data members
struct ThreadNameEntry
{
AZStd::thread_id id;
AZStd::string name;
};
AZStd::vector<ThreadNameEntry> m_threadNames;
using LockType = AZStd::mutex;
using ScopedLock = AZStd::lock_guard<LockType>;
LockType m_threadNameLock;
AZStd::atomic_uint m_profiledThreadCount = { 0 };
const char* m_address = "127.0.0.1";
char* m_buffer = nullptr;
AZ::Debug::ProfileCategoryPrimitiveType m_captureMask = GetDefaultCaptureMaskInternal();
AZ::Debug::ProfileFrameAdvanceType m_frameAdvanceType = AZ::Debug::ProfileFrameAdvanceType::Game;
AZ::u16 m_port = 4719;
bool m_running = false;
bool m_initialized = false;
};
}
#endif

@ -1,132 +0,0 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <IGem.h>
#include <IConsole.h>
#include <cstdint>
#include <cstdio> // snprintf
#include <limits>
#include "ProfileTelemetryComponent.h"
namespace RADTelemetry
{
#ifdef AZ_PROFILE_TELEMETRY
using TelemetryRequestBus = RADTelemetry::ProfileTelemetryRequestBus;
using TelemetryRequests = RADTelemetry::ProfileTelemetryRequests;
using MaskType = AZ::Debug::ProfileCategoryPrimitiveType;
static const char* s_telemetryAddress;
static int s_telemetryPort;
static const char* s_telemetryCaptureMask;
static int s_memCaptureEnabled;
static int s_frameAdvanceType;
using FrameAdvanceType = AZ::Debug::ProfileFrameAdvanceType;
static void MaskCvarChangedCallback(ICVar*)
{
if (!s_telemetryCaptureMask || !s_telemetryCaptureMask[0])
{
return;
}
// Parse as a 64-bit hex string
MaskType maskCvarValue = strtoull(s_telemetryCaptureMask, nullptr, 16);
if (maskCvarValue == std::numeric_limits<MaskType>::max())
{
MaskType defaultMask = 0;
TelemetryRequestBus::BroadcastResult(defaultMask, &TelemetryRequests::GetDefaultCaptureMask);
AZ_Error("RADTelemetryGem", false, "Invalid RAD Telemetry capture mask cvar value: %s, using default capture mask 0x%" PRIx64, s_telemetryCaptureMask, defaultMask);
maskCvarValue = defaultMask;
}
// Mask off the memory capture flag and add it back if memory capture is enabled
const MaskType fullCaptureMask = (maskCvarValue & ~AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(MemoryReserved)) | (s_memCaptureEnabled ? AZ_PROFILE_CAT_TO_RAD_CAPFLAGS(MemoryReserved) : 0);
TelemetryRequestBus::Broadcast(&TelemetryRequests::SetCaptureMask, fullCaptureMask);
}
static void FrameAdvancedTypeCvarChangedCallback(ICVar*)
{
TelemetryRequestBus::Broadcast(&TelemetryRequests::SetFrameAdvanceType, (s_frameAdvanceType == 0) ? FrameAdvanceType::Game : FrameAdvanceType::Render);
}
static void CmdTelemetryToggleEnabled([[maybe_unused]] IConsoleCmdArgs* args)
{
TelemetryRequestBus::Broadcast(&TelemetryRequests::SetAddress, s_telemetryAddress, s_telemetryPort);
FrameAdvancedTypeCvarChangedCallback(nullptr); // Set frame advance type
MaskCvarChangedCallback(nullptr); // Set the capture mask
TelemetryRequestBus::Broadcast(&TelemetryRequests::ToggleEnabled);
}
#endif
class RADTelemetryModule
: public CryHooksModule
{
public:
AZ_RTTI(RADTelemetryModule, "{50BB63A6-4669-41F2-B93D-6EB8529413CD}", CryHooksModule);
RADTelemetryModule()
: CryHooksModule()
{
#ifdef AZ_PROFILE_TELEMETRY
m_descriptors.insert(m_descriptors.end(), {
ProfileTelemetryComponent::CreateDescriptor(),
});
#endif
}
/**
* Add required SystemComponents to the SystemEntity.
*/
AZ::ComponentTypeList GetRequiredSystemComponents() const override
{
AZ::ComponentTypeList components;
#ifdef AZ_PROFILE_TELEMETRY
components.insert(components.end(),
azrtti_typeid<ProfileTelemetryComponent>()
);
#endif
return components;
}
void OnCrySystemInitialized(ISystem& system, const SSystemInitParams& initParams) override
{
CryHooksModule::OnCrySystemInitialized(system, initParams);
#ifdef AZ_PROFILE_TELEMETRY
REGISTER_COMMAND("radtm_ToggleEnabled", &CmdTelemetryToggleEnabled, 0, "Enabled or Disable RAD Telemetry");
REGISTER_CVAR2("radtm_Address", &s_telemetryAddress, "127.0.0.1", VF_NULL, "The IP address for the telemetry server");
REGISTER_CVAR2("radtm_Port", &s_telemetryPort, 4719, VF_NULL, "The port for the RAD telemetry server");
REGISTER_CVAR2("radtm_MemoryCaptureEnabled", &s_memCaptureEnabled, 0, VF_NULL, "Toggle for telemetry memory capture");
const int defaultFrameAdvanceTypeCvarValue = (FrameAdvanceType::Default == FrameAdvanceType::Game) ? 0 : 1;
REGISTER_CVAR2_CB("radtm_FrameAdvanceType", &s_frameAdvanceType, defaultFrameAdvanceTypeCvarValue, VF_NULL, "Advance profile frames from either: =0 the main thread, or =1 render frame advance", FrameAdvancedTypeCvarChangedCallback);
// Get the default value from ProfileTelemetryComponent
MaskType defaultCaptureMaskValue = 0;
TelemetryRequestBus::BroadcastResult(defaultCaptureMaskValue, &TelemetryRequests::GetCaptureMask);
char defaultCaptureMaskStr[19];
azsnprintf(defaultCaptureMaskStr, AZ_ARRAY_SIZE(defaultCaptureMaskStr), "0x%" PRIx64, defaultCaptureMaskValue);
REGISTER_CVAR2_CB("radtm_CaptureMask", &s_telemetryCaptureMask, defaultCaptureMaskStr, VF_NULL, "A hex bitmask for the categories to be captured, 0x0 for all", MaskCvarChangedCallback);
#endif
}
};
}
// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
// The first parameter should be GemName_GemIdLower
// The second should be the fully qualified name of the class above
AZ_DECLARE_MODULE_CLASS(Gem_RADTelemetry, RADTelemetry::RADTelemetryModule)

@ -1,12 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
Source/ProfileTelemetryComponent.cpp
Source/ProfileTelemetryComponent.h
)

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(FILES
Source/RADTelemetryModule.cpp
)

@ -1,13 +0,0 @@
{
"gem_name": "RADTelemetry",
"display_name": "RAD Telemetry",
"license": "Apache-2.0 Or MIT",
"origin": "Open 3D Engine - o3de.org",
"type": "Tool",
"summary": "The RAD Telemetry Gem provides support for RAD Telemetry, a performance profiling and visualization middleware, in Open 3D Engine.",
"canonical_tags": ["Gem"],
"user_tags": ["Debug", "SDK"],
"icon_path": "preview.png",
"requirements": "",
"documentation_url": "https://o3de.org/docs/user-guide/gems/reference/debug/rad/rad-telemetry/"
}

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6d6204c6730e5675791765ca194e9b1cbec282208e280507de830afc2805e5fa
size 41127

@ -1,9 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(RADTELEMETRY_LIBS ${BASE_PATH}/Lib/librad_tm_android_arm64.a)

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(RADTELEMETRY_LIBS ${BASE_PATH}/Lib/librad_tm_mac_x64_link.a)
set(RADTELEMETRY_RUNTIME_DEPENDENCIES ${BASE_PATH}/Lib/librad_tm_mac_x64.dylib)

@ -1,11 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(RADTELEMETRY_LIBS ${BASE_PATH}/Lib/rad_tm_win64.lib)
set(RADTELEMETRY_RUNTIME_DEPENDENCIES ${BASE_PATH}/Dll/rad_tm_win64.dll)

@ -1,9 +0,0 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
#
set(RADTELEMETRY_LIBS ${BASE_PATH}/Lib/librad_tm_ios.a)

@ -62,7 +62,6 @@
"Gems/PrimitiveAssets",
"Gems/PythonAssetBuilder",
"Gems/QtForPython",
"Gems/RADTelemetry",
"Gems/SaveData",
"Gems/SceneLoggingExample",
"Gems/SceneProcessing",

Loading…
Cancel
Save