Deterministik Replay
THotPDF.DeterministicReplayLog, bir işlemin çalıştırmalar arasında farklı davranmasına yol açabilecek harici kararları yakalar ve replay sırasında kaydedilmiş sonuçları yerine koyar
Yakalanan kararlar
- Cancellation kontrol noktaları operasyon adını ve cancellation istenip istenmediğini kaydeder
- Progressive random-access sorguları tam bayt offset'ini, bayt sayısını ve kullanılabilirlik sonucunu kaydeder
- Boolean ve 64 bit tam sayı callback helper'ları; kararlı bir callback adını, iki çağıran tanımlı bağlam değerini ve döndürülen sonucu kaydeder
- Annotation filtreleme ve tile-render cancellation'ı,
THotPDFüzerinden kayıt veya replay yapılırken replay log'unu otomatik kullanır
Kayıt ve replay
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;
Sıralama ve doğrulama
Her olay; monotonik bir sıra numarası, olay türü, ad, iki işaretli 64 bit argüman ve tipli bir sonuç taşır
Replay, olayları sırayla tüketir ve kaydedilmiş sonucu döndürmeden önce eksiksuz imzalarını doğrular; strict mod, tükenme veya sapmada EHPDFDeterministicReplayMismatch fırlatır, non-strict mod ise uyuşmazlık sayısını ve teşhisi saklar ve gözlemlenen sonucu kullanır
CompleteReplay, ancak saklanan her olay uyuşmazlık olmadan ve kayıt olayları düşürülmeden tüketildikten sonra başarılı olur
Sınırlar ve performans
EventLimit varsayılan olarak 100.000 olaydır, DroppedEventCount taşmayı bildirir ve olay deposu geometrik büyüdüğü için ekleme maliyeti eşitlenmiş sabit zamanda kalır
JSON şeması hotpdf-deterministic-replay-v1'dir; 64 bit argümanlar ve tam sayı sonuçlar, JSON uygulamaları arasında tam değerleri korumak için ondalık string olarak kodlanır