// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "callstack_formatter.h" #include "timeline_query.h" #include "trace_model.h" #include #include #include #include namespace zen { // HttpService that serves an interactive flame-graph viewer for a parsed // TraceModel. Mounts at the server root; URIs beginning with "api/" return // JSON describing the model, everything else is resolved to a static asset // (first from the optional dev-mode directory, then from the embedded zip). class TraceViewerService final : public HttpService { public: TraceViewerService(const trace_detail::TraceModel& Model, std::unique_ptr Symbols = {}, std::filesystem::path DevHtmlDir = {}); ~TraceViewerService() override; [[nodiscard]] const char* BaseUri() const override; void HandleRequest(HttpServerRequest& Request) override; private: void HandleStaticAsset(HttpServerRequest& Request, std::string_view Uri); void HandleApiRequest(HttpServerRequest& Request, std::string_view Path); void HandleSessionApi(HttpServerRequest& Request); void HandleThreadsApi(HttpServerRequest& Request); void HandleChannelsApi(HttpServerRequest& Request); void HandleScopeStatsApi(HttpServerRequest& Request); void HandleScopeNamesApi(HttpServerRequest& Request); void HandleTimelineApi(HttpServerRequest& Request); void HandleTimelineBatchApi(HttpServerRequest& Request); void HandleLogCategoriesApi(HttpServerRequest& Request); void HandleLogsApi(HttpServerRequest& Request); void HandleBookmarksApi(HttpServerRequest& Request); void HandleRegionsApi(HttpServerRequest& Request); void HandleCsvCategoriesApi(HttpServerRequest& Request); void HandleCsvStatsApi(HttpServerRequest& Request); void HandleCsvSeriesApi(HttpServerRequest& Request); void HandleCsvEventsApi(HttpServerRequest& Request); void HandleCsvMetadataApi(HttpServerRequest& Request); void HandleCountersApi(HttpServerRequest& Request); void HandleCounterSeriesApi(HttpServerRequest& Request); void HandleAllocSummaryApi(HttpServerRequest& Request); void HandleHeapsApi(HttpServerRequest& Request); void HandleAllocTagsApi(HttpServerRequest& Request); void HandleMemoryTimelineApi(HttpServerRequest& Request); void HandleHeapStatsApi(HttpServerRequest& Request); void HandleCallstacksApi(HttpServerRequest& Request); void HandleCallstackStatsApi(HttpServerRequest& Request); void HandleChurnStatsApi(HttpServerRequest& Request); void HandleAllocSizeHistogramApi(HttpServerRequest& Request); const trace_detail::TraceModel& m_Model; std::filesystem::path m_DevHtmlDir; std::unique_ptr m_ZipFs; std::unique_ptr m_TimelineQuery; std::unique_ptr m_Symbols; trace_detail::CallstackFilterOptions m_CallstackFilterOptions; trace_detail::CallstackFormatter m_CallstackFormatter; }; } // namespace zen