Diagnostics de rendu et télémétrie d'opération
HotPDF distingue les entrées de cache de pages rendues par chaque état visible par l'appelant susceptible de changer les pixels de page et expose des diagnostics bornés lorsque le contenu de page ne peut pas être rendu complètement
Variantes de cache sensibles à l'état
THotPDF.RenderLoadedPageToBitmapCached indexe les entrées mémoire par page, DPI, visibilité effective du contenu optionnel, THotPDF.RenderColourIntent et THotPDF.RenderFallbackPolicy
Le cache persistant utilise le même condensé d'état, tandis que les modes de repli produisant des diagnostics restent uniquement en mémoire afin qu'un hit disque ne puisse pas perdre les rapports d'objets ignorés
Changer un groupe de contenu optionnel sélectionne une autre variante au lieu de supprimer le bitmap précédent, de sorte que basculer une couche ou une intention de couleur peut réutiliser un travail antérieur
Intention de couleur
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument respecte chaque opérateur ri de flux de contenu et reste la valeur par défaut
Les quatre valeurs explicites remplacent la sélection d'intention du flux de contenu et sont appliquées aux conversions ultérieures de remplissage et de trait ICCBased
Politique de repli
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnorepréserve le comportement permissif héritérfpReportenregistre les opérateurs non pris en charge, les ressources manquantes, les objets invalides, les échecs de décodage, les limites de récursion et les types d'objets non pris en chargerfpStrictdéclenche au premier repli hors d'une section de compatibilitéBXetEXTHotPDF.RenderFallbackDiagnosticLimitborne les diagnostics conservésTHotPDF.LastRenderFallbackDroppedCountsignale les diagnostics omis après la limite bornée configurée
THotPDF.GetLastRenderFallbackDiagnostics retourne l'ensemble conservé, tandis que THotPDF.ClearLastRenderFallbackDiagnostics l'efface ; les entrées en mode rapport mises en cache conservent leur ensemble de diagnostics, de sorte qu'un hit de cache mémoire retourne les mêmes informations de complétude de rendu que le rendu d'origine
Télémétrie d'opération unifiée
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 retourne un enregistrement THPDFOperationTelemetry contenant le temps mural, le temps CPU du thread courant, la mémoire, l'allocation, les E/S de processus, le décodage de filtres, le cache, le nombre d'objets, la réussite et les métriques d'annulation
Le chargement de document, le rendu de page synchrone et mis en cache, les tranches de rendu progressif, l'optimisation sélective de flux et l'optimisation d'images parallèle publient la même forme d'enregistrement
PeakMemoryBytes est une estimation portable d'opération de document plutôt que l'espace de travail de processus du système d'exploitation, de sorte qu'il reste stable entre les hôtes et comprend les octets sources chargés, les entrées bitmap rendues, le poids de cache d'images décodées et le stockage de pointe de la chaîne de filtres
PeakProcessMemoryBytes est le plus grand espace de travail de processus échantillonné, tandis que AllocationCount est la plus grande augmentation échantillonnée de blocs de gestionnaire de mémoire Delphi simultanément vivants par rapport au début de l'opération, plutôt qu'un total d'allocation sur la durée de vie
CPUTimeMicroseconds mesure le thread appelant, tandis que ReadIOBytes, WriteIOBytes et OtherIOBytes sont des deltas de compteurs à l'échelle du processus et peuvent donc inclure un travail concurrent dans le même processus
DecodeInputBytes est l'entrée compressée, DecodeOutputBytes est la sortie finale de la chaîne de filtres et DecodedBytes est le travail agrégé sur chaque étape de filtre ; DecodeExpansionPermille divise la sortie finale par l'entrée, 1000 représentant 1x
ScheduledMemoryBytes est l'estimation d'admission de l'opération, MemorySchedulerWaitMilliseconds enregistre le temps de file et MemorySchedulerDelayed distingue l'admission en file du chemin rapide sans allocation
Les pics de mémoire et d'allocation sont échantillonnés aux frontières d'opération, à la fin de la chaîne de filtres, aux tranches progressives et aux points de contrôle d'annulation, de sorte qu'il s'agit de signaux opérationnels à faible surcoût plutôt que de traces de profileur au niveau de l'instruction