Rendering Diagnostics and Operation Telemetry

HotPDF ورودی‌های cache صفحهٔ رندرشده را بر اساس هر state قابل‌مشاهده برای فراخواننده که بتواند پیکسل‌های صفحه را تغییر دهد از هم متمایز می‌کند و وقتی محتوای صفحه به‌طور کامل قابل رندر نباشد diagnosticهای محدود ارائه می‌دهد

State-aware cache variants

THotPDF.RenderLoadedPageToBitmapCached keys memory entries by page, DPI, effective optional-content visibility, THotPDF.RenderColourIntent, and THotPDF.RenderFallbackPolicy

cache پایدار از همان digest مربوط به state استفاده می‌کند، در حالی که حالت‌های fallback که diagnostic تولید می‌کنند فقط در حافظه می‌مانند تا یک hit از دیسک گزارش شیءهای نادیده‌گرفته‌شده را از دست ندهد

تغییر یک گروه optional-content به‌جای حذف bitmap قبلی، نسخهٔ دیگری را انتخاب می‌کند، پس برگشتن به یک layer یا color intent قبلی می‌تواند از کار قبلی استفاده کند

Colour intent

PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);

rciDocument هر operator از نوع ri در content stream را رعایت می‌کند و مقدار پیش‌فرض است

چهار مقدار صریح، انتخاب intent در content stream را override می‌کنند و روی تبدیل‌های بعدی fill و stroke از نوع ICCBased اعمال می‌شوند

Fallback policy

PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;

THotPDF.GetLastRenderFallbackDiagnostics مجموعهٔ نگه‌داشته‌شده را برمی‌گرداند و THotPDF.ClearLastRenderFallbackDiagnostics آن را پاک می‌کند؛ ورودی‌های cache شدهٔ حالت report مجموعهٔ diagnostic خود را نگه می‌دارند، پس یک memory cache hit همان اطلاعات کامل‌بودن رندر را برمی‌گرداند که رندر اصلی داشت

Unified operation telemetry

if PDF.GetLastOperationTelemetry(Info) then
begin
  WriteLn(Info.OperationName);
  WriteLn(Info.ElapsedMilliseconds);
  WriteLn(Info.CPUTimeMicroseconds);
  WriteLn(Info.PeakProcessMemoryBytes);
  WriteLn(Info.MemorySchedulerWaitMilliseconds);
  WriteLn(Info.DecodeExpansionPermille);
end;

THotPDF.GetLastOperationTelemetry returns a THPDFOperationTelemetry record containing wall time, current-thread CPU time, memory, allocation, process I/O, filter decode, cache, object-count, success, and cancellation metrics

بارگذاری سند، رندر همزمان و cache شدهٔ صفحه، sliceهای رندر پیشرونده، بهینه‌سازی انتخابی stream و بهینه‌سازی موازی تصویر همگی رکوردی با همین شکل منتشر می‌کنند

PeakMemoryBytes یک برآورد قابل‌حمل از عملیات سند است، نه working set پردازه در سیستم‌عامل، پس بین میزبان‌ها پایدار می‌ماند و بایت‌های مبدأ بارگذاری‌شده، ورودی‌های bitmap رندرشده، وزن cache تصاویر decode‌شده و اوج storage زنجیرهٔ filter را شامل می‌شود

PeakProcessMemoryBytes بزرگ‌ترین working set نمونه‌برداری‌شدهٔ پردازه است، در حالی که AllocationCount بزرگ‌ترین افزایش نمونه‌برداری‌شده در بلوک‌های زندهٔ همزمان memory manager دلفی نسبت به شروع عملیات است، نه مجموع تخصیص‌ها در طول عمر

CPUTimeMicroseconds thread فراخواننده را اندازه می‌گیرد، در حالی که ReadIOBytes، WriteIOBytes و OtherIOBytes تفاضل شمارنده‌های سراسری پردازه هستند و بنابراین می‌توانند کار همزمان در همان پردازه را هم شامل شوند

DecodeInputBytes ورودی فشرده است، DecodeOutputBytes خروجی نهایی زنجیرهٔ filter است و DecodedBytes کار تجمعی در همهٔ مرحله‌های filter است؛ DecodeExpansionPermille خروجی نهایی را بر ورودی تقسیم می‌کند، که 1000 معادل 1x است

ScheduledMemoryBytes برآورد پذیرش عملیات است، MemorySchedulerWaitMilliseconds زمان صف را ثبت می‌کند و MemorySchedulerDelayed پذیرش در صف را از مسیر سریع بدون تخصیص متمایز می‌کند

اوج‌های حافظه و تخصیص در مرزهای عملیات، پایان زنجیرهٔ filter، sliceهای پیشرونده و نقطه‌های بررسی لغو نمونه‌برداری می‌شوند، پس سیگنال‌های عملیاتی کم‌سربار هستند، نه traceهای profiler در سطح دستورالعمل

APIهای مرتبط