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

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

Verwandte APIs