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