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
- Checkpointy zrušení zaznamenávají název operace a to, zda bylo zrušení vyžádáno
- Progresivní random-access sondy zaznamenávají přesný bajtový offset, počet bajtů a výsledek dostupnosti
- Pomocníci boolean a 64bitových integer callbacků zaznamenávají stabilní název callbacku, dvě kontextové hodnoty definované volajícím a vrácený výsledek
- Filtrování anotací a zrušení tile renderu používají replay log automaticky při nahrávání nebo replay přes
THotPDF
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