Diagnósticos de renderizado y telemetría de operaciones

HotPDF distingue las entradas de caché de páginas renderizadas por cada estado visible para el llamador que puede cambiar los píxeles de la página y expone diagnósticos acotados cuando el contenido de la página no puede renderizarse por completo

Variantes de caché con reconocimiento de estado

THotPDF.RenderLoadedPageToBitmapCached indexa las entradas de memoria por página, DPI, visibilidad efectiva de contenido opcional, THotPDF.RenderColourIntent y THotPDF.RenderFallbackPolicy

La caché persistente usa el mismo resumen de estado, mientras que los modos de respaldo que producen diagnósticos permanecen solo en memoria para que un acierto de disco no pueda perder los informes de objetos omitidos

Cambiar un grupo de contenido opcional selecciona otra variante en lugar de eliminar el mapa de bits anterior, por lo que volver a cambiar una capa o una intención de color puede reutilizar el trabajo anterior

Intención de color

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

rciDocument respeta cada operador ri del flujo de contenido y sigue siendo el valor predeterminado

Los cuatro valores explícitos anulan la selección de intención del flujo de contenido y se aplican a las conversiones posteriores de relleno y trazo ICCBased

Política de respaldo

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

THotPDF.GetLastRenderFallbackDiagnostics devuelve el conjunto retenido, mientras que THotPDF.ClearLastRenderFallbackDiagnostics lo limpia; las entradas en modo de informe en caché conservan su conjunto de diagnósticos, por lo que un acierto de caché de memoria devuelve la misma información de integridad de renderizado que el renderizado original

Telemetría de operaciones unificada

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 devuelve un registro THPDFOperationTelemetry que contiene tiempo de pared, tiempo de CPU del subproceso actual, memoria, asignación, E/S de proceso, decodificación de filtro, caché, recuento de objetos, éxito y métricas de cancelación

La carga de documentos, el renderizado de páginas síncrono y en caché, los segmentos de renderizado progresivo, la optimización selectiva de flujos y la optimización de imágenes en paralelo publican la misma forma de registro

PeakMemoryBytes es una estimación de operación de documento portátil en lugar del conjunto de trabajo del proceso del sistema operativo, por lo que permanece estable entre hosts e incluye los bytes de origen cargados, las entradas de mapa de bits renderizadas, el peso de la caché de imágenes decodificadas y el almacenamiento máximo de la cadena de filtros

PeakProcessMemoryBytes es el conjunto de trabajo de proceso muestreado más grande, mientras que AllocationCount es el mayor aumento muestreado en los bloques del gestor de memoria Delphi vivos de forma concurrente en relación con el inicio de la operación, en lugar de un total de asignación de por vida

CPUTimeMicroseconds mide el subproceso llamador, mientras que ReadIOBytes, WriteIOBytes y OtherIOBytes son deltas de contador en todo el proceso y, por lo tanto, pueden incluir trabajo concurrente en el mismo proceso

DecodeInputBytes es la entrada comprimida, DecodeOutputBytes es la salida final de la cadena de filtros y DecodedBytes es el trabajo agregado en cada etapa de filtro; DecodeExpansionPermille divide la salida final por la entrada, con 1000 representando 1x

ScheduledMemoryBytes es la estimación de admisión de la operación, MemorySchedulerWaitMilliseconds registra el tiempo de cola y MemorySchedulerDelayed distingue la admisión en cola de la ruta rápida sin asignación

Los picos de memoria y asignación se muestrean en los límites de operación, la finalización de la cadena de filtros, los segmentos progresivos y los puntos de comprobación de cancelación, por lo que son señales operativas de bajo coste en lugar de trazas de perfilador a nivel de instrucción

APIs relacionadas