EM_Task/TraceInsights/.trae/documents/plan_20260212_073932.md
Boshuang Zhao 5144a49c9b add
2026-02-13 16:18:33 +08:00

2.0 KiB
Raw Permalink Blame History

MinimalTimerExporter 架构重构:类封装方案

目标

将散落在 namespace 中的结构体和函数封装为类,提升代码可读性、可测试性和可维护性。


变更清单

1. FExportContext 移入头文件

struct FExportContext
{
    const Trace::IAnalysisSession& Session;
    const Trace::ITimingProfilerProvider* Provider = nullptr;
    const Trace::ITimingProfilerTimerReader* TimerReader = nullptr;
    FExportFilter Filter;
    TMap<uint32, uint32> TimelineIndexToThreadId;

    FExportContext(const Trace::IAnalysisSession& InSession);
    void Initialize(const Trace::ITimingProfilerProvider* InProvider, const FExportFilter& InFilter);
    uint32 GetThreadId(uint32 TimelineIndex) const;
};

2. DecodeMetadataToString → FTraceExportUtils

class FTraceExportUtils
{
public:
    static void DecodeMetadataToString(FString& Str, const TArrayView<const uint8>& Metadata);
};

3. 创建 FTraceExportProcessor 类

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

class FMinimalTimerExporter
{
public:
    static bool ExportTimingEventsToCSV(...);
    static bool ExportTimingEventsToJSON(...);
    static void StreamEventsWithTreeBuilding(...);

private:
    static void SetupExport(...);
};

预期效果

指标 改进前 改进后
RunExport 参数 3个Context, Writer, ChunkWriter 0个成员变量
代码复用 各导出函数重复遍历逻辑 统一由 Processor 处理
可测试性 难以单元测试 Processor 可独立测试

是否按此方案进行重构?