2.0 KiB
2.0 KiB
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 可独立测试 |
是否按此方案进行重构?