Rendering Diagnostics and Operation Telemetry
O HotPDF distingue as entradas da cache de páginas renderizadas por todos os estados visíveis ao chamador que possam alterar os píxeis da página e expõe diagnósticos limitados quando o conteúdo da página não pode ser renderizado por completo
State-aware cache variants
THotPDF.RenderLoadedPageToBitmapCached keys memory entries by page, DPI, effective optional-content visibility, THotPDF.RenderColourIntent, and THotPDF.RenderFallbackPolicy
A cache persistente usa o mesmo digest de estado, enquanto os modos de fallback que produzem diagnósticos ficam apenas em memória, para que um acerto em disco não possa perder os relatórios de objetos ignorados
Alterar um grupo de conteúdo opcional seleciona outra variante em vez de eliminar o bitmap anterior, pelo que voltar a alternar uma camada ou um rendering intent permite reutilizar trabalho anterior
Colour intent
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument respeita cada operador ri do content stream e continua a ser o valor predefinido
Os quatro valores explícitos sobrepõem-se à seleção de intent do content stream e são aplicados às conversões ICCBased de preenchimento e de traço subsequentes
Fallback policy
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnorepreserves the legacy permissive behaviourrfpReportrecords unsupported operators, missing resources, invalid objects, decode failures, recursion limits, and unsupported object typesrfpStrictgera uma exceção no primeiro fallback fora de uma secção de compatibilidadeBXeEXTHotPDF.RenderFallbackDiagnosticLimitbounds retained diagnosticsTHotPDF.LastRenderFallbackDroppedCountreports diagnostics omitted after the configured bounded limit
THotPDF.GetLastRenderFallbackDiagnostics devolve o conjunto retido, enquanto THotPDF.ClearLastRenderFallbackDiagnostics o limpa; as entradas da cache em modo relatório mantêm o respetivo conjunto de diagnósticos, pelo que um acerto na cache de memória devolve a mesma informação de completude da renderização que a renderização original
Unified operation telemetry
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 devolve um THPDFOperationTelemetry record containing wall time, current-thread CPU time, memory, allocation, process I/O, filter decode, cache, object-count, success, and cancellation metrics
O carregamento de documentos, a renderização de páginas síncrona e em cache, as fatias de renderização progressiva, a otimização seletiva de streams e a otimização paralela de imagens publicam o mesmo formato de registo
PeakMemoryBytes é uma estimativa portátil por operação sobre o documento, e não o working set do processo no sistema operativo, pelo que se mantém estável entre máquinas e inclui os bytes de origem carregados, as entradas de bitmap renderizadas, o peso da cache de imagens descodificadas e o pico de armazenamento da cadeia de filtros
PeakProcessMemoryBytes é o maior working set do processo amostrado, enquanto AllocationCount é o maior aumento amostrado de blocos ativos em simultâneo no gestor de memória do Delphi, relativamente ao início da operação, e não um total de alocações ao longo da vida
CPUTimeMicroseconds mede a thread chamadora, enquanto ReadIOBytes, WriteIOBytes e OtherIOBytes são deltas de contadores do processo inteiro e podem, por isso, incluir trabalho concorrente no mesmo processo
DecodeInputBytes é a entrada comprimida, DecodeOutputBytes é a saída final da cadeia de filtros e DecodedBytes é o trabalho agregado de todas as etapas de filtro; DecodeExpansionPermille divide a saída final pela entrada, com 1000 a representar 1x
ScheduledMemoryBytes é a estimativa de admissão da operação, MemorySchedulerWaitMilliseconds regista o tempo em fila e MemorySchedulerDelayed distingue a admissão em fila do caminho rápido sem alocações
Os picos de memória e de alocações são amostrados nas fronteiras das operações, na conclusão da cadeia de filtros, nas fatias progressivas e nos pontos de verificação de cancelamento, pelo que são sinais operacionais de baixo custo e não traços de um profiler ao nível da instrução