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;
rfpIgnoreconserva el comportamiento permisivo heredadorfpReportregistra operadores no admitidos, recursos faltantes, objetos no válidos, fallos de decodificación, límites de recursión y tipos de objeto no admitidosrfpStrictgenera una excepción en el primer respaldo fuera de una sección de compatibilidadBXyEXTHotPDF.RenderFallbackDiagnosticLimitacota los diagnósticos retenidosTHotPDF.LastRenderFallbackDroppedCountinforma los diagnósticos omitidos después del límite acotado configurado
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