Talks And Demos: Extending Unreal Insights: Example Plugin

This is the example content for the Talk “Extending Unreal Insights for Developers” at UnrealFest 2023.
It consists of a Engine plugin that contains a minimal setup of all the code discussed in the talk including necessary boilerplate code.
It can be used as a reference alongside the talk or as a starting point for implementing your own Insights Customizations.

https://dev.epicgames.com/community/learning/talks-and-demos/vv8R/unreal-engine-extending-unreal-insights-example-plugin

Hi,

Thanks for this great example!

I noticed, on the tutorial page, in the header, it’s mentioning application: U5.2 but in the Overview section it’s written Unreal 5.3.

I’m using Unreal 5.3.1 from source and when I follow the instructions I’m getting and LNK 2019 error as follow:

[6/8] Link [x64] UnrealEditor-TimingRegionsAnalysis.dll
   Creating library ..\Plugins\TimingRegions\Intermediate\Build\Win64\x64\UnrealEditor\Development\TimingRegionsAnalysis\UnrealEditor-TimingRegionsAnalysis.sup.lib and object ..\Plugins\TimingRegions\Intermediate\Build\Win64\x64\UnrealEditor\Development\TimingRegionsAnalysis\UnrealEditor-TimingRegionsAnalysis.sup.exp
10>Module.TimingRegionsAnalysis.cpp.obj: Error LNK2019 : unresolved external symbol "public: void __cdecl TraceServices::FProviderLock::ReadAccessCheck(struct TraceServices::FProviderLock::FThreadLocalState &)const " (?ReadAccessCheck@FProviderLock@TraceServices@@QEBAXAEAUFThreadLocalState@12@@Z) referenced in function "public: virtual void __cdecl TimingRegionsAnalysis::FTimingRegionProvider::ReadAccessCheck(void)const " (?ReadAccessCheck@FTimingRegionProvider@TimingRegionsAnalysis@@UEBAXXZ)
10>Module.TimingRegionsAnalysis.cpp.obj: Error LNK2019 : unresolved external symbol "public: void __cdecl TraceServices::FProviderLock::WriteAccessCheck(struct TraceServices::FProviderLock::FThreadLocalState &)const " (?WriteAccessCheck@FProviderLock@TraceServices@@QEBAXAEAUFThreadLocalState@12@@Z) referenced in function "public: virtual void __cdecl TimingRegionsAnalysis::FTimingRegionProvider::EditAccessCheck(void)const " (?EditAccessCheck@FTimingRegionProvider@TimingRegionsAnalysis@@UEBAXXZ)
10>Module.TimingRegionsAnalysis.cpp.obj: Error LNK2019 : unresolved external symbol "public: void __cdecl TraceServices::FProviderLock::BeginRead(struct TraceServices::FProviderLock::FThreadLocalState &)" (?BeginRead@FProviderLock@TraceServices@@QEAAXAEAUFThreadLocalState@12@@Z) referenced in function "public: virtual void __cdecl TimingRegionsAnalysis::FTimingRegionProvider::BeginRead(void)const " (?BeginRead@FTimingRegionProvider@TimingRegionsAnalysis@@UEBAXXZ)
10>Module.TimingRegionsAnalysis.cpp.obj: Error LNK2019 : unresolved external symbol "public: void __cdecl TraceServices::FProviderLock::EndRead(struct TraceServices::FProviderLock::FThreadLocalState &)" (?EndRead@FProviderLock@TraceServices@@QEAAXAEAUFThreadLocalState@12@@Z) referenced in function "public: virtual void __cdecl TimingRegionsAnalysis::FTimingRegionProvider::EndRead(void)const " (?EndRead@FTimingRegionProvider@TimingRegionsAnalysis@@UEBAXXZ)
10>Module.TimingRegionsAnalysis.cpp.obj: Error LNK2019 : unresolved external symbol "public: void __cdecl TraceServices::FProviderLock::BeginWrite(struct TraceServices::FProviderLock::FThreadLocalState &)" (?BeginWrite@FProviderLock@TraceServices@@QEAAXAEAUFThreadLocalState@12@@Z) referenced in function "public: virtual void __cdecl TimingRegionsAnalysis::FTimingRegionProvider::BeginEdit(void)const " (?BeginEdit@FTimingRegionProvider@TimingRegionsAnalysis@@UEBAXXZ)
10>Module.TimingRegionsAnalysis.cpp.obj: Error LNK2019 : unresolved external symbol "public: void __cdecl TraceServices::FProviderLock::EndWrite(struct TraceServices::FProviderLock::FThreadLocalState &)" (?EndWrite@FProviderLock@TraceServices@@QEAAXAEAUFThreadLocalState@12@@Z) referenced in function "public: virtual void __cdecl TimingRegionsAnalysis::FTimingRegionProvider::EndEdit(void)const " (?EndEdit@FTimingRegionProvider@TimingRegionsAnalysis@@UEBAXXZ)
10>UnrealEditor-TimingRegionsAnalysis.dll: Error LNK1120 : 6 unresolved externals

Would you know what’s the issue? I suspect a missing dependency in build.cs. I’m sure it’s a detail.

Thanks for helping

Thanks for the report!
The plugin was actually developed in Main while that was still 5.3 and I had fixed this issue locally but forgot to add the information here.
We’re actually missing a dllexport for the FProviderLock class so that those functions are properly exported.
We’re trying to fix it in 5.4.
To be able to compile the plugin locally you will have to change the following line in Engine/Source/Developer/TraceServices/Public/Common/ProviderLock.h from:

class FProviderLock

to

class TRACESERVICES_API FProviderLock

Let me know if that works, I’ll also add it to the install notes.

1 Like

I confirm it fixes the issue. Thank you so much!