EM_Task/TraceInsights/.trae/documents/plan_20260212_073932.md

86 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

2026-02-13 16:18:33 +08:00
## MinimalTimerExporter 架构重构:类封装方案
### 目标
将散落在 namespace 中的结构体和函数封装为类,提升代码可读性、可测试性和可维护性。
---
### 变更清单
#### 1. FExportContext 移入头文件
```cpp
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
```cpp
class FTraceExportUtils
{
public:
static void DecodeMetadataToString(FString& Str, const TArrayView<const uint8>& 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 可独立测试 |
---
是否按此方案进行重构?