Determinističko ponavljanje

THotPDF.DeterministicReplayLog hvata eksterne odluke koje mogu da nateraju operaciju da se ponaša različito među pokretanjima, zatim zamenjuje snimljene rezultate tokom ponavljanja

Zabeležene odluke

Snimanje i ponavljanje

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;

Uređivanje i validacija

Svaki događaj nosi monotoni redni broj, vrstu događaja, ime, dva potpisana 64-bitna argumenta i tipizovan rezultat

Ponavljanje troši događaje po redu i validira njihov kompletan potpis pre vraćanja snimljenog rezultata; strogi režim podiže EHPDFDeterministicReplayMismatch na iscrpljenost ili divergenciju, dok nestrogi režim zadržava brojanje neusklađenosti i dijagnostiku te koristi uočeni rezultat

CompleteReplay uspeva samo nakon što je svaki zadržani događaj potrošen bez neusklađenosti ili ispuštenih događaja snimanja

Granice i performanse

EventLimit podrazumevano je 100 000 događaja, DroppedEventCount izveštava o prekoračenju, a skladištenje događaja raste geometrijski tako da cena dodavanja ostaje amortizovano konstantno vreme

JSON šema je hotpdf-deterministic-replay-v1; 64-bitni argumenti i celobrojni rezultati se kodiraju kao decimalni stringovi radi čuvanja tačnih vrednosti kroz JSON implementacije

Povezani API-ji