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
- Annulleringskontrollpunkter registrerar operationen och om annullering begärdes
- Progressiva slumpåtkomst-prober registrerar exakt byteoffset, byteantal och tillgänglighetsresultat
- Booleska och 64-bitars-integer-callbackhjälpare registrerar ett stabilt callbacknamn, två anropare-definierade kontextvärden och det returnerade resultatet
- Annotationsfiltrering och tile-render-annullering använder återspelningsloggen automatiskt när inspelning eller återspelning sker genom
THotPDF
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