결정적 재생

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;

정렬 및 검증

모든 이벤트는 단조 시퀀스 번호, 이벤트 종류, 이름, 서명된 64비트 인수 둘, 형식화된 결과를 담습니다

재생은 이벤트를 순서대로 소비하고 기록된 결과를 반환하기 전에 완전한 서명을 검증합니다. 엄격 모드는 소진 또는 불일치 시 EHPDFDeterministicReplayMismatch를 발생시키고, 비엄격 모드는 불일치 횟수와 진단을 유지하며 관찰된 결과를 사용합니다

CompleteReplay은 모든 유지된 이벤트가 불일치나 누락된 기록 이벤트 없이 소비된 후에만 성공합니다

경계 및 성능

EventLimit은 기본 100,000개 이벤트이고, DroppedEventCount는 오버플로를 보고하며, 이벤트 저장소는 기하급수적으로 커져 추가 비용이 분할 상환 상수 시간으로 유지됩니다

JSON 스키마는 hotpdf-deterministic-replay-v1입니다. 64비트 인수와 정수 결과는 JSON 구현 전반에 걸쳐 정확한 값을 보존하기 위해 십진 문자열로 인코딩됩니다

관련 API