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

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

İlgili API'ler