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;

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

API associées