渲染诊断与操作遥测

HotPDF 按每个可改变页面像素的调用方可见状态区分渲染页面缓存条目,并在页面内容无法完整渲染时公开有界的诊断

状态感知缓存变体

THotPDF.RenderLoadedPageToBitmapCached 按页面、DPI、有效可选内容可见性、THotPDF.RenderColourIntent 和 THotPDF.RenderFallbackPolicy 为内存条目建键

持久缓存使用相同的状态摘要,而产生诊断的回退模式保持仅内存,因此磁盘命中不会丢失跳过的对象报告

更改可选内容组会选择另一个变体而不是删除先前的位图,因此切换图层或色彩意图可以复用早期的工作

色彩意图

PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);

rciDocument 遵循每个内容流的 ri 运算符并保持为默认值

四个显式值覆盖内容流意图选择,并应用于后续的 ICCBased 填充和描边转换

回退策略

PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;

THotPDF.GetLastRenderFallbackDiagnostics 返回保留的集合,而 THotPDF.ClearLastRenderFallbackDiagnostics 清除它;缓存的报告模式条目保留其诊断集,因此内存缓存命中返回与原始渲染相同的渲染完整性信息

统一操作遥测

if PDF.GetLastOperationTelemetry(Info) then
begin
  WriteLn(Info.OperationName);
  WriteLn(Info.ElapsedMilliseconds);
  WriteLn(Info.CPUTimeMicroseconds);
  WriteLn(Info.PeakProcessMemoryBytes);
  WriteLn(Info.MemorySchedulerWaitMilliseconds);
  WriteLn(Info.DecodeExpansionPermille);
end;

THotPDF.GetLastOperationTelemetry 返回包含墙钟时间、当前线程 CPU 时间、内存、分配、进程 I/O、过滤器解码、缓存、对象计数、成功和取消指标的 THPDFOperationTelemetry 记录

文档加载、同步和缓存页面渲染、渐进渲染切片、选择性流优化和并行图像优化发布相同的记录形状

PeakMemoryBytes 是可移植的文档操作估计,而不是操作系统进程工作集,因此它在主机之间保持稳定,并包括已加载源字节、渲染位图条目、解码图像缓存权重和峰值过滤器链存储

PeakProcessMemoryBytes 是采样的最大进程工作集,而 AllocationCount 是相对于操作开始并发存活的 Delphi 内存管理器块的最大采样增量,而不是生命周期分配总数

CPUTimeMicroseconds 测量调用线程,而 ReadIOBytes、WriteIOBytes 和 OtherIOBytes 是进程范围的计数器增量,因此可以包括同一进程中的并发工作

DecodeInputBytes 是压缩输入,DecodeOutputBytes 是最终过滤器链输出,DecodedBytes 是每个过滤器阶段的聚合工作;DecodeExpansionPermille 将最终输出除以输入,1000 表示 1x

ScheduledMemoryBytes 是操作准入估计,MemorySchedulerWaitMilliseconds 记录队列时间,MemorySchedulerDelayed 区分排队准入与无分配快速路径

内存和分配峰值在操作边界、过滤器链完成、渐进切片和取消检查点采样,因此它们是低开销的操作信号,而不是指令级分析器跟踪

相关 API