Deterministische Wiedergabe
THotPDF.DeterministicReplayLog erfasst externe Entscheidungen, durch die sich ein Vorgang zwischen Durchläufen unterschiedlich verhalten kann, und ersetzt sie bei der Wiedergabe durch die aufgezeichneten Ergebnisse
Erfasste Entscheidungen
- Abbruchprüfpunkte erfassen den Vorgangsnamen und ob ein Abbruch angefordert wurde
- Progressive Direktzugriffsabfragen erfassen den genauen Byte-Offset, die Byteanzahl und das Verfügbarkeitsergebnis
- Callback-Hilfen für boolesche und 64-Bit-Ganzzahlwerte erfassen einen stabilen Callback-Namen, zwei anwendungsdefinierte Kontextwerte und das zurückgegebene Ergebnis
- Annotationenfilterung und der Abbruch der Kachelwiedergabe verwenden das Wiedergabeprotokoll bei Aufzeichnung oder Wiedergabe über
THotPDFautomatisch
Aufzeichnen und wiedergeben
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;
Reihenfolge und Validierung
Jedes Ereignis enthält eine monotone Sequenznummer, Ereignisart, Namen, zwei vorzeichenbehaftete 64-Bit-Argumente und ein typisiertes Ergebnis
Die Wiedergabe verarbeitet Ereignisse der Reihe nach und prüft ihre vollständige Signatur vor Rückgabe des aufgezeichneten Ergebnisses; der strenge Modus löst bei Erschöpfung oder Abweichung EHPDFDeterministicReplayMismatch aus, während der nicht strenge Modus eine Abweichungszahl und Diagnose behält und das beobachtete Ergebnis verwendet
CompleteReplay ist nur erfolgreich, wenn alle behaltenen Ereignisse ohne Abweichungen oder verworfene Aufzeichnungsereignisse verarbeitet wurden
Grenzen und Leistung
EventLimit beträgt standardmäßig 100.000 Ereignisse, DroppedEventCount meldet Überläufe, und der Ereignisspeicher wächst geometrisch, sodass das Anhängen amortisiert konstante Zeit benötigt
Das JSON-Schema lautet hotpdf-deterministic-replay-v1; 64-Bit-Argumente und Ganzzahlergebnisse werden als Dezimalzeichenfolgen kodiert, um exakte Werte über JSON-Implementierungen hinweg zu erhalten