Deterministisk genafspilning
THotPDF.DeterministicReplayLog indfanger eksterne afgørelser, der kan få en operation til at opføre sig forskelligt mellem kørsler, og erstatter derefter de registrerede resultater under genafspilning
Indfangede afgørelser
- Annulleringskontrolpunkter registrerer operationsnavnet, og om annullering blev anmodet
- Progressive random-access-prober registrerer den nøjagtige byteforskydning, byteantal og tilgængelighedsresultat
- Hjælpere til booleske og 64-bit heltalscallbacks registrerer et stabilt callbacknavn, to kalderdefinerede kontekstværdier og det returnerede resultat
- Annoteringsfiltrering og annullering af tile-gengivelse bruger automatisk genafspilningsloggen ved registrering eller genafspilning gennem
THotPDF
Registrer og genafspil
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;Rækkefølge og validering
Hver hændelse har et monotont sekvensnummer, hændelsestype, navn, to fortegnede 64-bit argumenter og et typet resultat
Genafspilning forbruger hændelser i rækkefølge og validerer deres komplette signatur, før det registrerede resultat returneres; streng tilstand rejser EHPDFDeterministicReplayMismatch ved udtømning eller afvigelse, mens ikke-streng tilstand bevarer et antal mismatch og diagnosticering og bruger det observerede resultat
CompleteReplay lykkes kun, efter hver bevaret hændelse er forbrugt uden mismatch eller droppede registreringshændelser
Grænser og ydeevne
EventLimit er som standard 100.000 hændelser, DroppedEventCount rapporterer overflow, og hændelseslager vokser geometrisk, så tilføjelsesomkostningen forbliver amortiseret konstant tid
JSON-skemaet er hotpdf-deterministic-replay-v1; 64-bit argumenter og heltalsresultater kodes som decimale strenge for at bevare nøjagtige værdier på tværs af JSON-implementeringer