مرجع HotPDF
يلتقط THotPDF.DeterministicReplayLog القرارات الخارجية التي قد تجعل عملية ما تتصرّف بشكل مختلف عبر عمليات التشغيل، ثم يستبدل النتائج المُسجَّلة أثناء إعادة التشغيل (replay)
القرارات المُلتقَطة
- تسجّل نقاط تفتيش الإلغاء اسم العملية وما إذا كان الإلغاء قد طُلب
- تسجّل فحوص الوصول العشوائي التدريجية إزاحة البايت الدقيقة وعدد البايتات ونتيجة التوفّر
- تسجّل فحوص الوصول العشوائي التدريجية إزاحة البايت الدقيقة وعدد البايتات ونتيجة التوفّر
- يستخدم تصفية التعليقات التوضيحية وإلغاء رسم البلاطات (tile) سجلّ إعادة التشغيل تلقائيًا عند التسجيل أو إعادة التشغيل عبر
THotPDF
التسجيل وإعادة التشغيل
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 المختلفة