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;
rfpIgnorepreserves the legacy permissive behaviourrfpReportrecords unsupported operators, missing resources, invalid objects, decode failures, recursion limits, and unsupported object typesrfpStrictدر اولین fallback بیرون از بخش سازگاریBXوEXexception ایجاد میکندTHotPDF.RenderFallbackDiagnosticLimitbounds retained diagnosticsTHotPDF.LastRenderFallbackDroppedCountreports diagnostics omitted after the configured bounded limit
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 در سطح دستورالعمل