Renderingsdiagnostik och operationstelemetri
HotPDF skiljer cachelagrade posteringar i den renderade sidan åt genom varje anroparsynligt tillstånd som kan ändra sidpixlar och exponerar avgränsad diagnostik när sidinnehåll inte kan renderas fullständigt
Tillståndsmedvetna cachevarianter
THotPDF.RenderLoadedPageToBitmapCached nycklar minnesposter efter sida, DPI, effektiv synlighet för valfritt innehåll, THotPDF.RenderColourIntent och THotPDF.RenderFallbackPolicy
Den beständiga cachen använder samma tillståndsdigest, medan diagnostikproducerande reservlägen förblir enbart i minnet så att en diskträff inte kan förlora rapporter om överhoppade objekt
En ändring av en valfri innehållsgrupp väljer en annan variant i stället för att radera den tidigare bitmappen, så att växla tillbaka ett lager eller en färgintention kan återanvända tidigare arbete
Färgintention
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument respekterar varje innehållsströms ri-operator och förblir standard
De fyra explicita värdena åsidosätter innehållsströmmens val av intention och tillämpas på efterföljande ICCBased-fyllning och strokekonverteringar
Reservpolicy
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnorebevarar det äldre tillåtande beteendetrfpReportregistrerar operatorer som inte stöds, saknade resurser, ogiltiga objekt, avkodningsfel, rekursionsgränser och objekttyper som inte stödsrfpStrictgenererar ett undantag vid den första reserven utanför ettBX- ochEX-kompatibilitetsavsnittTHotPDF.RenderFallbackDiagnosticLimitbegränsar kvarhållen diagnostikTHotPDF.LastRenderFallbackDroppedCountrapporterar diagnostik som utelämnats efter den konfigurerade begränsade gränsen
THotPDF.GetLastRenderFallbackDiagnostics returnerar den kvarhållna uppsättningen, medan THotPDF.ClearLastRenderFallbackDiagnostics rensar den; cachelagrade rapportlägesposter behåller sin diagnostiskuppsättning, så en träff i minnescachen returnerar samma renderingsfullständighetsinformation som den ursprungliga renderingen
Enhetlig operationstelemetri
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 returnerar en THPDFOperationTelemetry-post som innehåller väggtid, CPU-tid för aktuell tråd, minne, allokering, process-I/O, filteravkodning, cache, objekträkning, framgång och avbrytningsmått
Dokumentinläsning, synkron och cachelagrad sidrendering, progressiva renderingsskivor, selektiv strömoptimering och parallell bildoptimering publicerar samma postform
PeakMemoryBytes är en bärbar uppskattning av dokumentoperationen snarare än operativsystemets processarbetsuppsättning, så den förblir stabil över värdar och inkluderar inlästa källbytes, renderade bitmappsposter, avkodad-bildcachevikt och topplagring i filterkedjan
PeakProcessMemoryBytes är den största avsamlade processarbetsuppsättningen, medan AllocationCount är den största avsamlade ökningen av samtidigt levande Delphi-minneshanteringsblock i förhållande till operationens start snarare än en total allokering under livslängden
CPUTimeMicroseconds mäter den anropande tråden, medan ReadIOBytes, WriteIOBytes och OtherIOBytes är processomfattande räknardeltor och kan därför inkludera samtidigt arbete i samma process
DecodeInputBytes är komprimerad indata, DecodeOutputBytes är slutlig filterkedjeutdata och DecodedBytes är aggregerat arbete över varje filtersteg; DecodeExpansionPermille dividerar slutlig utdata med indata, där 1000 representerar 1x
ScheduledMemoryBytes är uppskattningen för operationstillträde, MemorySchedulerWaitMilliseconds registrerar kötid och MemorySchedulerDelayed skiljer köat tillträde från den allokeringsfria snabbsökvägen
Minnes- och allokeringstoppar avsamlas vid operationsgränser, filterkedjeslutförande, progressiva skivor och avbrytningskontrollpunkter, så de är operationella signaler med låg overhead snarare än instrumenteringsspår på instruktionsnivå