渲染诊断与操作遥测
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;
rfpIgnore保留旧式宽容行为rfpReport记录不受支持的运算符、缺失资源、无效对象、解码失败、递归限制和不受支持的对象类型rfpStrict在BX和EX兼容性节之外的第一个回退处抛出THotPDF.RenderFallbackDiagnosticLimit约束保留的诊断THotPDF.LastRenderFallbackDroppedCount报告在配置的有界限制之后省略的诊断
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 区分排队准入与无分配快速路径
内存和分配峰值在操作边界、过滤器链完成、渐进切片和取消检查点采样,因此它们是低开销的操作信号,而不是指令级分析器跟踪