// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "symbol_resolver.h" #include "trace_model.h" #include #include ZEN_THIRD_PARTY_INCLUDES_START #include #include ZEN_THIRD_PARTY_INCLUDES_END namespace zen::trace_detail { struct CallstackFilterOptions { bool EnableHeuristic = true; std::vector SkipPatterns; }; struct FilteredCallstackFrame { size_t OriginalIndex = 0; const ResolvedFrame* Frame = nullptr; std::string Display; }; struct FilteredCallstackView { eastl::vector Frames; uint32_t HiddenPrefixCount = 0; bool IncludedThirdPartyBoundary = false; }; class CallstackFormatter { public: CallstackFormatter(const TraceModel& InModel, const SymbolResolver* InSymbols); const eastl::hash_map& GetResolvedCache() const { return m_Cache; } const CallstackEntry* FindCallstackEntry(uint32_t CallstackId) const; const std::string& Describe(const ResolvedFrame& Frame); FilteredCallstackView BuildView(const CallstackEntry& Entry, const CallstackFilterOptions& Options); private: const TraceModel& m_Model; const SymbolResolver* m_Symbols = nullptr; eastl::hash_map m_Cache; }; } // namespace zen::trace_detail