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

86 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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