مرجع HotPDF

يلتقط THotPDF.DeterministicReplayLog القرارات الخارجية التي قد تجعل عملية ما تتصرّف بشكل مختلف عبر عمليات التشغيل، ثم يستبدل النتائج المُسجَّلة أثناء إعادة التشغيل (replay)

القرارات المُلتقَطة

التسجيل وإعادة التشغيل

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;

التسجيل وإعادة التشغيل

يحمل كل حدث رقم تسلسل أحادي الاتجاه (monotonic)، ونوع الحدث، واسمه، ووسيطَين موقَّعَين من 64 بت، ونتيجة ذات نوع محدَّد

تستهلك إعادة التشغيل الأحداث بالترتيب وتتحقق من توقيعها الكامل قبل إعادة النتيجة المُسجَّلة؛ يثير الوضع الصارم EHPDFDeterministicReplayMismatch عند الاستنفاد أو الاختلاف، بينما يحتفظ الوضع غير الصارم بعدد حالات عدم التطابق وتشخيص ويستخدم النتيجة المُلاحَظة

تنجح CompleteReplay فقط بعد استهلاك كل حدث محتفَظ به دون حالات عدم تطابق أو أحداث تسجيل مُسقَطة

التسجيل وإعادة التشغيل

قيمة EventLimit الافتراضية 100,000 حدث، وتُبلغ DroppedEventCount عن الفيض، وينمو تخزين الأحداث هندسيًا بحيث تبقى تكلفة الإلحاق زمنًا ثابتًا مطفَأً (amortised)

مخطط JSON هو hotpdf-deterministic-replay-v1؛ تُرمَّز الوسيطات من 64 بت والنتائج الصحيحة كسلاسل عشرية للحفاظ على القيم الدقيقة عبر تطبيقات JSON المختلفة

التسجيل وإعادة التشغيل