## MinimalTimerExporter 架构重构:类封装方案 ### 目标 将散落在 namespace 中的结构体和函数封装为类,提升代码可读性、可测试性和可维护性。 --- ### 变更清单 #### 1. FExportContext 移入头文件 ```cpp struct FExportContext { const Trace::IAnalysisSession& Session; const Trace::ITimingProfilerProvider* Provider = nullptr; const Trace::ITimingProfilerTimerReader* TimerReader = nullptr; FExportFilter Filter; TMap TimelineIndexToThreadId; FExportContext(const Trace::IAnalysisSession& InSession); void Initialize(const Trace::ITimingProfilerProvider* InProvider, const FExportFilter& InFilter); uint32 GetThreadId(uint32 TimelineIndex) const; }; ``` #### 2. DecodeMetadataToString → FTraceExportUtils ```cpp class FTraceExportUtils { public: static void DecodeMetadataToString(FString& Str, const TArrayView& Metadata); }; ``` #### 3. 创建 FTraceExportProcessor 类 ```cpp class FTraceExportProcessor { public: FTraceExportProcessor(FExportContext& InContext, IEventWriter& InWriter, ChunkingFileWriter& InChunkWriter); void Run(); private: void ProcessSingleTimeline(uint32 TimelineIndex); void ProcessSingleEvent(...); void CheckAndRotateChunk(); FExportContext& Context; IEventWriter& Writer; ChunkingFileWriter& ChunkWriter; uint32 EventsPerChunk = 0; }; ``` #### 4. 简化 FMinimalTimerExporter ```cpp class FMinimalTimerExporter { public: static bool ExportTimingEventsToCSV(...); static bool ExportTimingEventsToJSON(...); static void StreamEventsWithTreeBuilding(...); private: static void SetupExport(...); }; ``` --- ### 预期效果 | 指标 | 改进前 | 改进后 | |-----|-------|-------| | RunExport 参数 | 3个(Context, Writer, ChunkWriter) | 0个(成员变量) | | 代码复用 | 各导出函数重复遍历逻辑 | 统一由 Processor 处理 | | 可测试性 | 难以单元测试 | Processor 可独立测试 | --- 是否按此方案进行重构?