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;

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í

Související API