Diagnostiche di rendering e telemetria delle operazioni
HotPDF distingue le voci di cache delle pagine renderizzate per ogni stato visibile al chiamante che può cambiare i pixel della pagina ed espone diagnostiche limitate quando il contenuto della pagina non può essere renderizzato completamente
Varianti di cache consapevoli dello stato
THotPDF.RenderLoadedPageToBitmapCached costruisce la chiave delle voci in memoria da pagina, DPI, visibilità effettiva degli optional content, THotPDF.RenderColourIntent e THotPDF.RenderFallbackPolicy
La cache persistente usa lo stesso digest di stato, mentre le modalità fallback che producono diagnostiche restano memory-only così un hit su disco non può perdere i report degli oggetti saltati
Cambiare un gruppo di optional content seleziona un'altra variante invece di cancellare la bitmap precedente, quindi riattivare un layer o un colour intent può riusare il lavoro precedente
Colour intent
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument rispetta ogni operatore ri del content stream e resta il default
I quattro valori espliciti sovrascrivono la selezione di intent del content stream e si applicano alle conversioni successive di fill e stroke ICCBased
Politica di fallback
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnorepreserva il comportamento permissivo legacyrfpReportregistra operatori non supportati, risorse mancanti, oggetti non validi, fallimenti di decodifica, limiti di ricorsione e tipi di oggetto non supportatirfpStrictsolleva al primo fallback fuori da una sezione di compatibilitàBXeEXTHotPDF.RenderFallbackDiagnosticLimitlimita le diagnostiche conservateTHotPDF.LastRenderFallbackDroppedCountriporta le diagnostiche omesse dopo il limite configurato
THotPDF.GetLastRenderFallbackDiagnostics restituisce l'insieme conservato, mentre THotPDF.ClearLastRenderFallbackDiagnostics lo svuota; le voci di cache in modalità report conservano il loro set di diagnostiche, quindi un hit della cache in memoria restituisce le stesse informazioni di completezza del rendering del render originale
Telemetria unificata delle operazioni
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 restituisce un record THPDFOperationTelemetry contenente wall time, tempo CPU del thread corrente, memoria, allocazione, I/O del processo, decodifica dei filtri, cache, conteggi di oggetti, metriche di successo e cancellazione
Caricamento del documento, rendering di pagina sincrono e in cache, slice di rendering progressivo, ottimizzazione selettiva degli stream e ottimizzazione parallela delle immagini pubblicano la stessa forma di record
PeakMemoryBytes è una stima portabile dell'operazione sul documento e non il working set del processo del sistema operativo, quindi resta stabile tra gli host e include i byte della sorgente caricata, le voci bitmap renderizzate, il peso della cache delle immagini decodificate e l'archiviazione di picco della catena di filtri
PeakProcessMemoryBytes è il più grande working set di processo campionato, mentre AllocationCount è il più grande incremento campionato di blocchi Delphi vivi concorrenti rispetto all'avvio dell'operazione, non un totale di allocazioni sull'intera vita
CPUTimeMicroseconds misura il thread chiamante, mentre ReadIOBytes, WriteIOBytes e OtherIOBytes sono delta di contatori a livello di processo e possono quindi includere lavoro concorrente nello stesso processo
DecodeInputBytes è l'input compresso, DecodeOutputBytes è l'output finale della catena di filtri e DecodedBytes è il lavoro aggregato attraverso ogni stadio di filtro; DecodeExpansionPermille divide l'output finale per l'input, con 1000 che rappresenta 1x
ScheduledMemoryBytes è la stima di ammissione dell'operazione, MemorySchedulerWaitMilliseconds registra il tempo in coda e MemorySchedulerDelayed distingue l'ammissione in coda dal fast path senza allocazioni
I picchi di memoria e allocazione vengono campionati ai confini dell'operazione, al completamento della catena di filtri, alle slice progressive e ai checkpoint di cancellazione, quindi sono segnali operativi a basso overhead e non tracce di profiler a livello di istruzioni