Deterministisk återspelning

THotPDF.DeterministicReplayLog fångar externa beslut som kan få en operation att bete sig olika mellan körningar och ersätter sedan de inspelade resultaten under återspelning

Infångade beslut

Inspelning och återspelning

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;

Ordning och validering

Varje händelse bär ett monotont sekvensnummer, händelsetyp, namn, två tecknade 64-bitarsargument och ett typat resultat

Återspelning konsumerar händelser i ordning och validerar deras fullständiga signatur före returnering av det inspelade resultatet; strikt läge utlöser EHPDFDeterministicReplayMismatch vid uttömning eller divergens, medan icke-strikt läge behåller ett mismatchantal och en diagnostik och använder det observerade resultatet

CompleteReplay lyckas endast efter att varje behållen händelse har konsumerats utan mismatchar eller tappade inspelningshändelser

Gränser och prestanda

EventLimit är som standard 100,000 händelser, DroppedEventCount rapporterar överflöde och händelselagring växer geometriskt så att tilläggskostnaden förblir amorterad konstant tid

JSON-schemat är hotpdf-deterministic-replay-v1; 64-bitarsargument och integerresultat kodas som decimalsträngar för att bevara exakta värden över JSON-implementationer

Relaterade API:er