Diagnósticos de renderização e telemetria de operação

O HotPDF distingue entradas de cache de página renderizada por todo estado visível ao chamador que pode alterar pixels de página e expõe diagnósticos limitados quando o conteúdo da página não pode ser renderizado completamente

Variantes de cache com reconhecimento de estado

THotPDF.RenderLoadedPageToBitmapCached chaveia entradas de memória por página, DPI, visibilidade efetiva de conteúdo opcional, THotPDF.RenderColourIntent e THotPDF.RenderFallbackPolicy

O cache persistente usa o mesmo digest de estado, enquanto modos de fallback que produzem diagnóstico permanecem somente em memória para que uma ocorrência de disco não possa perder relatórios de objetos pulados

Alterar um grupo de conteúdo opcional seleciona outra variante em vez de excluir o bitmap anterior, portanto alternar uma camada ou intent de cor de volta pode reutilizar trabalho anterior

Intent de cor

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

rciDocument honra cada operador ri de stream de conteúdo e permanece o padrão

Os quatro valores explícitos substituem a seleção de intent do stream de conteúdo e são aplicados a conversões subsequentes de preenchimento e traçado ICCBased

Política de fallback

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

THotPDF.GetLastRenderFallbackDiagnostics retorna o conjunto retido, enquanto THotPDF.ClearLastRenderFallbackDiagnostics o limpa; entradas em modo de relatório em cache retêm seu conjunto de diagnósticos, portanto uma ocorrência de cache de memória retorna a mesma informação de completude de renderização que a renderização original

Telemetria unificada de operação

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 retorna um registro THPDFOperationTelemetry contendo tempo de parede, tempo de CPU da thread atual, memória, alocação, E/S de processo, decodificação de filtro, cache, contagem de objetos, sucesso e métricas de cancelamento

Carregamento de documento, renderização de página síncrona e em cache, fatias de renderização progressiva, otimização seletiva de stream e otimização paralela de imagem publicam a mesma forma de registro

PeakMemoryBytes é uma estimativa portátil de operação de documento em vez do conjunto de trabalho do processo do sistema operacional, portanto permanece estável entre hosts e inclui bytes de origem carregados, entradas de bitmap renderizado, peso de cache de imagem decodificada e armazenamento de pico da cadeia de filtros

PeakProcessMemoryBytes é o maior conjunto de trabalho de processo amostrado, enquanto AllocationCount é o maior aumento amostrado em blocos de gerenciador de memória Delphi simultaneamente vivos em relação ao início da operação, em vez de um total de alocação vitalício

CPUTimeMicroseconds mede a thread chamadora, enquanto ReadIOBytes, WriteIOBytes e OtherIOBytes são deltas de contador em todo o processo e podem, portanto, incluir trabalho concorrente no mesmo processo

DecodeInputBytes é a entrada compactada, DecodeOutputBytes é a saída final da cadeia de filtros e DecodedBytes é o trabalho agregado em cada estágio de filtro; DecodeExpansionPermille divide a saída final pela entrada, com 1000 representando 1x

ScheduledMemoryBytes é a estimativa de admissão da operação, MemorySchedulerWaitMilliseconds registra o tempo de fila e MemorySchedulerDelayed distingue admissão enfileirada do caminho rápido sem alocação

Os picos de memória e alocação são amostrados em limites de operação, conclusão da cadeia de filtros, fatias progressivas e checkpoints de cancelamento, portanto são sinais operacionais de baixa sobrecarga em vez de rastros de profiler em nível de instrução

APIs relacionadas