Diagnósticos y telemetría de operaciones de renderización

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

Variantes de caché conscientes del estado

THotPDF.RenderLoadedPageToBitmapCached asigna claves a las entradas de memoria por página, DPI, visibilidad de contenido opcional efectiva, 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, de modo que volver a un color o intento de color anterior pueda reutilizar el trabajo anterior

Intento de color

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

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

Los cuatro valores explícitos reemplazan la selección de intento 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 borra; las entradas en modo de informe almacenado en caché conservan su conjunto de diagnósticos, de modo que un acierto de caché de memoria devuelve la misma información de completitud de renderización que la renderización 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 real, tiempo de CPU del hilo actual, memoria, asignación, E/S del proceso, decodificación de filtros, caché, recuento de objetos, éxito y métricas de cancelación

La carga de documentos, la renderización de páginas sincrónica y almacenada en caché, los fragmentos de renderización progresiva, la optimización selectiva de flujos y la optimización paralela de imágenes publican la misma forma de registro

PeakMemoryBytes es una estimación portable de la operación de documento y no el 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 aumento muestreado más grande en los bloques de memoria administrada de Delphi vivos al mismo tiempo en relación con el inicio de la operación, en lugar de un total de asignación de por vida

CPUTimeMicroseconds mide el hilo que llama, mientras que ReadIOBytes, WriteIOBytes y OtherIOBytes son deltas de contadores de 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 entre la entrada, con 1000 que representa 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 fragmentos progresivos y los puntos de control de cancelación, por lo que son señales operativas de bajo costo en lugar de rastros de perfilado a nivel de instrucción

API relacionadas