Deterministyczne powtarzanie
THotPDF.DeterministicReplayLog przechwytuje zewnętrzne decyzje, które mogą sprawić, że operacja zachowa się inaczej między przebiegami, a następnie podstawia zarejestrowane wyniki podczas powtarzania
Przechwycone decyzje
- Punkty kontrolne anulowania rejestrują nazwę operacji i to, czy zażądano anulowania
- Sondy postępowego dostępu losowego rejestrują dokładne przesunięcie bajtu, liczbę bajtów i wynik dostępności
- Pomocnicze wywołania zwrotne o logicznej i 64-bitowej liczbie całkowitej rejestrują stabilną nazwę wywołania, dwie wartości kontekstu zdefiniowane przez wywołującego i zwrócony wynik
- Filtrowanie adnotacji i anulowanie renderowania kafli używają dziennika powtarzania automatycznie podczas nagrywania lub powtarzania przez
THotPDF
Nagrywaj i powtarzaj
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;
Porządkowanie i walidacja
Każde zdarzenie niesie monotoniczny numer sekwencji, rodzaj zdarzenia, nazwę, dwa argumenty ze znakiem 64-bitowym i typowany wynik
Powtarzanie zużywa zdarzenia w kolejności i sprawdza ich pełną sygnaturę przed zwróceniem zarejestrowanego wyniku; tryb ścisły zgłasza EHPDFDeterministicReplayMismatch przy wyczerpaniu lub rozbieżności, podczas gdy tryb nieścisły zachowuje licznik niezgodności i diagnostykę oraz używa obserwowanego wyniku
CompleteReplay kończy się sukcesem tylko po zużyciu każdego zachowanego zdarzenia bez niezgodności lub porzuconych zdarzeń nagrywania
Granice i wydajność
EventLimit domyślnie wynosi 100 000 zdarzeń, DroppedEventCount raportuje przepełnienie, a magazyn zdarzeń rośnie geometrycznie, więc koszt dołączania pozostaje amorftyzowanym czasem stałym
Schemat JSON to hotpdf-deterministic-replay-v1; argumenty 64-bitowe i wyniki całkowite są kodowane jako łańcuchy dziesiętne, aby zachować dokładne wartości w różnych implementacjach JSON