決定的再生

THotPDF.DeterministicReplayLog は、実行ごとに操作の動作を変える可能性のある外部決定を捕捉し、再生中に記録済み結果を代入します

捕捉される決定

記録と再生

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;

順序付けと検証

すべてのイベントは、単調なシーケンス番号、イベント種別、名前、2 つの符号付き 64 ビット引数、型付き結果を保持します

再生はイベントを順に消費し、記録済み結果を返す前に完全なシグネチャを検証します。厳格モードは、枯渇または分岐時に EHPDFDeterministicReplayMismatch を発生させます。非厳格モードは不一致の数と診断を保持し、観測された結果を使用します

CompleteReplay は、すべての保持イベントが不一致や脱落した記録イベントなしで消費された後にのみ成功します

境界とパフォーマンス

EventLimit はデフォルトで 100,000 イベントであり、DroppedEventCount はオーバーフローを報告し、イベントストレージは幾何学的に成長するため、追加コストは償却定数時間のままです

JSON スキーマは hotpdf-deterministic-replay-v1 です。64 ビット引数と整数結果は、JSON 実装間で正確な値を保持するために 10 進文字列としてエンコードされます

関連 API