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;
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 admitidosrfpStrictlanza en el primer respaldo fuera de una sección de compatibilidadBXyEXTHotPDF.RenderFallbackDiagnosticLimitacota los diagnósticos retenidosTHotPDF.LastRenderFallbackDroppedCountinforma de los diagnósticos omitidos después del límite acotado configurado
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