결정적 재생
THotPDF.DeterministicReplayLog은 연산이 실행마다 다르게 동작하게 만들 수 있는 외부 결정을 포착한 다음 재생 중에 기록된 결과를 대체합니다
포착된 결정
- 취소 체크포인트는 연산 이름과 취소가 요청되었는지 여부를 기록합니다
- 프로그레시브 임의 접근 프로브는 정확한 바이트 오프셋, 바이트 수, 가용성 결과를 기록합니다
- 부울 및 64비트 정수 콜백 헬퍼는 안정적인 콜백 이름, 호출자 정의 컨텍스트 값 둘, 반환된 결과를 기록합니다
- 주석 필터링 및 타일 렌더 취소는
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;
정렬 및 검증
모든 이벤트는 단조 시퀀스 번호, 이벤트 종류, 이름, 서명된 64비트 인수 둘, 형식화된 결과를 담습니다
재생은 이벤트를 순서대로 소비하고 기록된 결과를 반환하기 전에 완전한 서명을 검증합니다. 엄격 모드는 소진 또는 불일치 시 EHPDFDeterministicReplayMismatch를 발생시키고, 비엄격 모드는 불일치 횟수와 진단을 유지하며 관찰된 결과를 사용합니다
CompleteReplay은 모든 유지된 이벤트가 불일치나 누락된 기록 이벤트 없이 소비된 후에만 성공합니다
경계 및 성능
EventLimit은 기본 100,000개 이벤트이고, DroppedEventCount는 오버플로를 보고하며, 이벤트 저장소는 기하급수적으로 커져 추가 비용이 분할 상환 상수 시간으로 유지됩니다
JSON 스키마는 hotpdf-deterministic-replay-v1입니다. 64비트 인수와 정수 결과는 JSON 구현 전반에 걸쳐 정확한 값을 보존하기 위해 십진 문자열로 인코딩됩니다