Deterministic Replay
THotPDF.DeterministicReplayLog captura decisiones externas que pueden hacer que una operación se comporte distinto entre ejecuciones, y luego sustituye los resultados grabados durante el replay
Decisiones capturadas
- Los checkpoints de cancelación graban el nombre de la operación y si se solicitó la cancelación
- Las sondas de random access progresivo graban el byte offset exacto, el conteo de bytes y el resultado de disponibilidad
- Los helpers de callback booleanos y de enteros de 64 bits graban un nombre de callback estable, dos valores de contexto definidos por el caller y el resultado devuelto
- El filtrado de annotations y la cancelación de tile render usan el replay log automáticamente cuando se graba o se reproduce a través de
THotPDF
Grabación y replay
var
ReplayJSON: AnsiString;
begin
PDF.DeterministicReplayLog.BeginRecording;
PDF.ReadProgressiveLinearizedFirstPageSection(Source, Output, Info);
ReplayJSON := PDF.DeterministicReplayLog.ExportJSON;
PDF.DeterministicReplayLog.ImportJSON(ReplayJSON);
PDF.ReadProgressiveLinearizedFirstPageSection(Source, Output, Info);
if not PDF.DeterministicReplayLog.CompleteReplay then
raise Exception.Create(PDF.DeterministicReplayLog.LastDiagnostic);
end;
Ordenamiento y validación
Cada evento lleva un número de secuencia monótono, un tipo de evento, un nombre, dos argumentos enteros con signo de 64 bits y un resultado tipado
El replay consume los eventos en orden y valida su firma completa antes de devolver el resultado grabado; el modo estricto lanza EHPDFDeterministicReplayMismatch ante agotamiento o divergencia, mientras que el modo no estricto retiene un conteo de mismatches y un diagnóstico, y usa el resultado observado
CompleteReplay solo tiene éxito después de que todos los eventos retenidos se hayan consumido sin mismatches ni eventos de grabación descartados
Límites y rendimiento
EventLimit es 100,000 eventos por defecto, DroppedEventCount reporta el overflow, y el almacenamiento de eventos crece geométricamente para que el costo de append se mantenga en tiempo constante amortizado
El schema JSON es hotpdf-deterministic-replay-v1; los argumentos de 64 bits y los resultados enteros se codifican como cadenas decimales para preservar los valores exactos entre implementaciones JSON