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;
rfpIgnorepreserva o comportamento permissivo legadorfpReportregistra operadores não suportados, recursos ausentes, objetos inválidos, falhas de decodificação, limites de recursão e tipos de objeto não suportadosrfpStrictlevanta no primeiro fallback fora de uma seção de compatibilidadeBXeEXTHotPDF.RenderFallbackDiagnosticLimitlimita os diagnósticos retidosTHotPDF.LastRenderFallbackDroppedCountrelata diagnósticos omitidos após o limite limitado configurado
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