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

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

Relaterede API'er