Rendering Diagnostics and Operation Telemetry
HotPDF rozlišuje položky vyrovnávacej pamäte vykreslených stránok podľa každého stavu viditeľného pre volajúceho, ktorý môže zmeniť pixely stránky, a vystavuje ohraničenú diagnostiku, keď sa obsah stránky nedá vykresliť úplne
Varianty vyrovnávacej pamäte s ohľadom na stav
THotPDF.RenderLoadedPageToBitmapCached kľúčuje pamäťové položky podľa stránky, DPI, efektívnej viditeľnosti voliteľného obsahu, THotPDF.RenderColourIntent a THotPDF.RenderFallbackPolicy
Trvalá vyrovnávacia pamäť používa rovnaký digest stavu, zatiaľ čo režimy fallbacku produkujúce diagnostiku zostávajú iba v pamäti, takže zásah na disku nemôže stratiť reporty preskočených objektov
Zmena skupiny voliteľného obsahu vyberie iný variant namiesto vymazania predchádzajúcej bitmapy, takže prepnutie vrstvy alebo farebného zámeru späť môže znovu použiť skoršiu prácu
Farebný zámer
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument rešpektuje každý operátor ri prúdu obsahu a zostáva predvolený
Štyri explicitné hodnoty prepisujú výber zámeru prúdu obsahu a aplikujú sa na následné konverzie výplne a ťahu ICCBased
Politika fallbacku
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnorezachováva staršie permisívne správanierfpReportzaznamenáva nepodporované operátory, chýbajúce zdroje, neplatné objekty, zlyhania dekódovania, limity rekurzie a nepodporované typy objektovrfpStrictvyvoláva chybu pri prvom fallbacku mimo sekcie kompatibilityBXaEXTHotPDF.RenderFallbackDiagnosticLimitohraničuje uchované diagnostické záznamyTHotPDF.LastRenderFallbackDroppedCounthlási diagnostické záznamy vynechané po nakonfigurovanom ohraničenom limite
THotPDF.GetLastRenderFallbackDiagnostics vracia uchovanú množinu, zatiaľ čo THotPDF.ClearLastRenderFallbackDiagnostics ju vymaže; položky režimu reportu vo vyrovnávacej pamäti si zachovávajú svoju diagnostickú množinu, takže zásah do pamäťovej vyrovnávacej pamäte vracia rovnaké informácie o úplnosti vykreslenia ako pôvodné vykreslenie
Jednotná telemetria operácií
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 vracia záznam THPDFOperationTelemetry obsahujúci stenný čas, čas CPU aktuálneho vlákna, pamäť, alokácie, I/O procesu, dekódovanie filtrov, vyrovnávacie pamäte, počty objektov, úspech a metriky zrušenia
Načítanie dokumentu, synchronné a vyrovnávané vykresľovanie stránok, plátky progresívneho vykresľovania, selektívna optimalizácia prúdov a paralelná optimalizácia obrázkov publikujú rovnaký tvar záznamu
PeakMemoryBytes je prenosný odhad operácie dokumentu, nie pracovná sada procesu operačného systému, takže zostáva stabilný naprieč hostiteľmi a zahŕňa načítané zdrojové bajty, položky vykreslených bitmap, váhu vyrovnávacej pamäte dekódovaných obrázkov a špičkové úložisko reťazcov filtrov
PeakProcessMemoryBytes je najväčšia vzorkovaná pracovná sada procesu, zatiaľ čo AllocationCount je najväčší vzorkovaný nárast súbežne živých blokov správcu pamäte Delphi vzhľadom na začiatok operácie, nie celoživotný súčet alokácií
CPUTimeMicroseconds meria volajúce vlákno, zatiaľ čo ReadIOBytes, WriteIOBytes a OtherIOBytes sú delty počítadiel v rámci procesu, a preto môžu zahŕňať súbežnú prácu v tom istom procese
DecodeInputBytes je komprimovaný vstup, DecodeOutputBytes je konečný výstup reťazca filtrov a DecodedBytes je agregovaná práca naprieč každou fázou filtrov; DecodeExpansionPermille delí konečný výstup vstupom, pričom 1000 predstavuje 1x
ScheduledMemoryBytes je odhad prijatia operácie, MemorySchedulerWaitMilliseconds zaznamenáva čas vo fronte a MemorySchedulerDelayed rozlišuje zaradené prijatie od rýchlej cesty bez alokácií
Špičky pamäte a alokácií sa vzorkujú na hraniciach operácií, dokončení reťazcov filtrov, progresívnych plátkoch a kontrolných bodoch zrušenia, takže sú to prevádzkové signály s nízkou réžiou, nie stopy profileru na úrovni inštrukcií