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