THotPDF.RenderLoadedPagesParallel Method

在有界的 worker 上以流水线方式执行显示列表编译和回放,同时保证输出数组保持输入顺序

声明

function RenderLoadedPagesParallel(const PageIndices: array of Integer;
    DPI, MaxConcurrency: Integer; out Bitmaps: THPDFBitmapArray): Integer; overload;

function RenderLoadedPagesParallel(const PageIndices: array of Integer;
    DPI, MaxConcurrency: Integer; out Bitmaps: THPDFBitmapArray;
    out Info: THPDFParallelRenderPipelineInfo): Integer; overload;

行为

编译在显示列表缓存锁之外运行,因此互不相关的页面可以并发编译,第一个就绪的页面无需等到全部输入编译完成即可开始渲染

The scheduler dynamically balances compile and playback work, caps workers at MaxConcurrency, isolates renderer state per worker, and shares cache entries through protected use counts

当 PeakMemorySchedulerEnabled 为 true 时,会根据最大的页面估算值和当前可用的全局预算,把有效 worker 数从规范化后的请求值降下来,随后每个被认领的页面在编译和回放期间都持有自己公平分配的内存预留

带 Info 的重载会报告请求的和实际的 worker 数、由内存推导出的 worker 上限、页面预留估算值、渲染预留字节的峰值、调度器准入次数、被延迟的页面数、等待时间、编译与缓存命中次数、已完成的输出、各阶段并发峰值、首个结果的延迟、总耗时,以及首个位图完成时已编译的页面数

The caller owns every non-nil bitmap in Bitmaps

数组中已完成的结果在其进行中的预留被释放之后,仍归调用方所有;因此当整个输出集也必须控制在调度器预算之内时,请使用 RenderLoadedPagesParallelOrdered

THPDFParallelRenderPipelineInfo · 显示列表与印刷生产