決定的再生
THotPDF.DeterministicReplayLog は、実行ごとに操作の動作を変える可能性のある外部決定を捕捉し、再生中に記録済み結果を代入します
捕捉される決定
- キャンセルチェックポイントは、操作名とキャンセルが要求されたかどうかを記録します
- プログレッシブランダムアクセスプローブは、正確なバイトオフセット、バイト数、利用可能性の結果を記録します
- 真偽値および 64 ビット整数コールバックヘルパーは、安定したコールバック名、2 つの呼び出し元定義コンテキスト値、返された結果を記録します
- 注釈フィルタリングとタイルレンダリングのキャンセルは、
THotPDFを通じて記録または再生するときに再生ログを自動的に使用します
記録と再生
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 進文字列としてエンコードされます