Deterministické přehrání

HotPDF zaznamenává vybrané události zpracování dokumentu a umožňuje je opakovat v deterministickém pořadí pro diagnostiku a reprodukci regresíTHotPDF.DeterministicReplayLog

Záznam

Nahrávání a 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;

Přehrání

Režim přehrání kontroluje pořadí a obsah událostí a vrací přesnou diagnostiku při první neshodě

Replay konzumuje události v pořadí a před vrácením zaznamenaného výsledku validuje jejich kompletní signaturu; přísný mód vyvolá EHPDFDeterministicReplayMismatch při vyčerpání nebo divergenci, zatímco nepřísný mód si uchová počet nesouhlasů a diagnostiku a použije pozorovaný výsledek

CompleteReplay uspěje jen poté, co byla spotřebována každá zachovaná událost bez nesouhlasů nebo zahozených nahrávaných událostí

Meze a výkonnost

EventLimit má default 100 000 událostí, DroppedEventCount hlásí přetečení a úložiště událostí roste geometricky, takže náklad přidávání zůstává amortizovaně konstantní

JSON schéma je hotpdf-deterministic-replay-v1; 64bitové argumenty a celočíselné výsledky se kódují jako desítkové řetězce, aby se zachovaly přesné hodnoty napříč implementacemi JSON

Související API