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
- Kontrolne tačke otkazivanja beleže ime operacije i da li je otkazivanje zatraženo
- Progresivne sonde nasumičnog pristupa beleže tačan pomak bajta, broj bajtova i rezultat dostupnosti
- Boolov i 64-bitni celobrojni callback pomocnici beleže stabilno ime callback-a, dve kontekstne vrednosti definisane od strane pozivaoca i vraćeni rezultat
- Filtriranje anotacija i otkazivanje renderovanja pločica koriste dnevnik ponavljanja automatski pri snimanju ili ponavljanju kroz
THotPDF
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