Rendering Diagnostics and Operation Telemetry
Aplikace HotPDF rozlišuje položky cache vykreslených stránek podle každého stavu viditelného volajícím, který může změnit pixely stránky, a vystavuje omezené diagnostiky, když obsah stránky nelze vykreslit úplně
State-aware cache variants
THotPDF.RenderLoadedPageToBitmapCached klíčuje paměťové položky podle stránky, DPI, efektivní viditelnosti volitelného obsahu, THotPDF.RenderColourIntent a THotPDF.RenderFallbackPolicy
Trvalá cache používá stejný stavový digest, zatímco režimy fallbacku vytvářející diagnostiky zůstávají pouze v paměti, takže zásah na disku nemůže ztratit zprávy o přeskočených objektech
Změna skupiny volitelného obsahu vybírá jinou variantu místo smazání předchozí bitmapy, takže přepnutí vrstvy nebo barevného záměru zpět může znovu použít dřívější práci
Colour intent
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument respektuje každý operátor ri streamu obsahu a zůstává výchozím
Čtyři explicitní hodnoty přepisují výběr záměru streamu obsahu a aplikují se na následné převody ICCBased výplní a tahů
Fallback policy
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnorezachovává starší permisivní chovánírfpReportzaznamenává nepodporované operátory, chybějící prostředky, neplatné objekty, selhání dekódování, limity rekurze a nepodporované typy objektůrfpStrictvyvolá chybu při prvním fallbacku mimo sekci kompatibilityBXaEXTHotPDF.RenderFallbackDiagnosticLimitomezuje zachované diagnostikyTHotPDF.LastRenderFallbackDroppedCounthlásí diagnostiky vynechané po nakonfigurovaném omezeném limitu
THotPDF.GetLastRenderFallbackDiagnostics vrací zachovanou sadu, zatímco THotPDF.ClearLastRenderFallbackDiagnostics ji vymaže; cacheované položky v režimu report si zachovávají svou sadu diagnostik, takže zásah do paměťové cache vrací stejné informace o úplnosti vykreslení jako původní vykreslení
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 vrací záznam THPDFOperationTelemetry obsahující stěnový čas, čas CPU aktuálního vlákna, paměť, alokace, I/O procesu, dekódování filtrů, cache, počet objektů, úspěch a metriky zrušení
Načítání dokumentu, synchronní a cacheované vykreslování stránek, progresivní řezy vykreslování, selektivní optimalizace streamů a paralelní optimalizace obrazu publikují stejný tvar záznamu
PeakMemoryBytes je přenosný odhad operace dokumentu spíše než pracovní sada procesu operačního systému, takže zůstává stabilní napříč hostiteli a zahrnuje načtené bajty zdroje, položky vykreslených bitmap, váhu cache dekódovaných obrazů a špičkové úložiště řetězce filtrů
PeakProcessMemoryBytes je největší vzorkovaná pracovní sada procesu, zatímco AllocationCount je největší vzorkovaný nárůst souběžně živých bloků správce paměti Delphi vzhledem k začátku operace spíše než celkový počet alokací za dobu života
CPUTimeMicroseconds měří volající vlákno, zatímco ReadIOBytes, WriteIOBytes a OtherIOBytes jsou celoprocesové rozdíly čítačů, a proto mohou zahrnovat souběžnou práci ve stejném procesu
DecodeInputBytes je komprimovaný vstup, DecodeOutputBytes je konečný výstup řetězce filtrů a DecodedBytes je agregovaná práce napříč každou fází filtru; DecodeExpansionPermille dělí konečný výstup vstupem, přičemž 1000 představuje 1x
ScheduledMemoryBytes je odhad připuštění operace, MemorySchedulerWaitMilliseconds zaznamenává dobu ve frontě a MemorySchedulerDelayed rozlišuje zařazené připuštění od rychlé cesty bez alokací
Špičky paměti a alokací se vzorkují na hranicích operací, při dokončení řetězce filtrů, progresivních řezech a kontrolních bodech zrušení, takže jsou nízko nákladnými provozními signály spíše než profily na úrovni instrukcí