Renderelési diagnosztika és művelet-telemetria

A HotPDF a renderelt oldal gyorsítótár-bejegyzéseit minden hívó által látható, az oldalpixeleket megváltoztatható állapot szerint különbözteti meg, és korlátos diagnosztikát tesz elérhetővé, ha az oldaltartalom nem renderelhető teljesen

Állapot-tudatos gyorsítótár-változatok

A THotPDF.RenderLoadedPageToBitmapCached a memóriabejegyzéseket oldal, DPI, effektív opcionális tartalom-láthatóság, THotPDF.RenderColourIntent és THotPDF.RenderFallbackPolicy szerint kulcsolja

Az állandó gyorsítótár ugyanazt az állapot-üzenetkivonatot használja, míg a diagnosztikát előállító visszaesési módok memória-önállóak maradnak, így egy lemez-találat nem veszítheti el a kihagyott objektum-jelentéseket

Egy opcionális tartalom-csoport megváltoztatása másik változatot választ a korábbi bitkép törlése helyett, így egy réteg vagy színintenció visszakapcsolása újrahasználhatja a korábbi munkát

Színintenció

PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);

Az rciDocument tiszteletben tartja minden tartalomfolyam ri operátorát, és alapértelmezés marad

A négy kifejezett érték felülírja a tartalomfolyam-intenció-kiválasztást, és a későbbi ICCBased kitöltő és körvonalazó átalakításokra alkalmazzák

Visszaesési politika

PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;

A THotPDF.GetLastRenderFallbackDiagnostics visszaadja a megtartott készletet, míg a THotPDF.ClearLastRenderFallbackDiagnostics törli azt; a gyorsítótárazott jelentés-mód bejegyzések megtartják diagnosztikai készletüket, így egy memória-gyorsítótár-találat ugyanazt a renderelés-teljességi információt adja vissza, mint az eredeti renderelés

Egységes művelet-telemetria

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;

A THotPDF.GetLastOperationTelemetry egy THPDFOperationTelemetry rekordot ad vissza, amely fali időt, aktuális szál CPU-időt, memóriát, foglalást, folyamat-I/O-t, szűrő-dekódolást, gyorsítótárat, objektumszámot, sikert és megszakítást mérő metrikákat tartalmaz

A dokumentumbetöltés, a szinkron és gyorsítótárazott oldalrenderelés, a progresszív renderelés-szeletek, a szelektív folyam-optimalizálás és a párhuzamos képoptimalizálás ugyanazt a rekordalakot teszi közzé

A PeakMemoryBytes hordozható dokumentumművelet-becslés, nem az operációs rendszer folyamat-munkahalmaza, így gazdagépek között stabil marad, és tartalmazza a betöltött forrásbájtokat, a renderelt bitkép-bejegyzéseket, a dekódolt kép-gyorsítótár súlyát és a csúcs szűrőlánc-tárolást

A PeakProcessMemoryBytes a legnagyobb mintavételezett folyamat-munkahalmaz, míg az AllocationCount az egyidejűleg élő Delphi memóriakezelő-blokkok legnagyobb mintavételezett növekedése a művelet kezdetéhez képest, nem pedig élettartam-foglalási összeg

A CPUTimeMicroseconds a hívó szálat méri, míg a ReadIOBytes, WriteIOBytes és OtherIOBytes folyamatszintű számláló-különbségek, ezért tartalmazhatnak egyidejű munkát ugyanabban a folyamatban

A DecodeInputBytes a tömörített bemenet, a DecodeOutputBytes a végső szűrőlánc-kimenet, a DecodedBytes pedig az összesített munka minden szűrőfokozaton; a DecodeExpansionPermille a végső kimenetet osztja a bemenettel, a 1000 a 1x értéket jelenti

A ScheduledMemoryBytes a művelet-beengedési becslés, a MemorySchedulerWaitMilliseconds a sorban állási időt rögzíti, a MemorySchedulerDelayed pedig megkülönbözteti a sorba állított beengedést a foglalásmentes gyors útvonaltól

A memória- és foglalási csúcsokat művelethatárokon, szűrőlánc-befejezéskor, progresszív szeleteknél és megszakítás-ellenőrzőpontoknál mintavételezik, így alacsony többletköltségű működési jelek, nem pedig utasításszintű profilozó nyomvonalak

Kapcsolódó API-k