Діагностика рендерингу та телеметрія операцій
HotPDF розрізняє записи кешу відрендерованих сторінок за кожним видимим викликальнику станом, який може змінити пікселі сторінки, і надає обмежену діагностику, коли вміст сторінки не можна відрендерити повністю
Кеш-варіанти з урахуванням стану
THotPDF.RenderLoadedPageToBitmapCached ключує записи пам'яті за сторінкою, DPI, ефективною видимістю необов'язкового вмісту, THotPDF.RenderColourIntent і THotPDF.RenderFallbackPolicy
Постійний кеш використовує той самий дайджест стану, тоді як режими резервного варіанта, що створюють діагнози, залишаються лише в пам'яті, щоб попадання з диска не могло втратити звіти про пропущені об'єкти
Зміна групи необов'язкового вмісту вибирає інший варіант замість видалення попереднього бітмапа, тому повернення шару чи інтенту кольору назад може повторно використати ранішу роботу
Інтент кольору
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument вшановує кожен оператор ri потоку вмісту та залишається значенням за замовчуванням
Чотири явні значення перевизначають вибір інтенту потоку вмісту та застосовуються до подальших перетворень заливки та обведення ICCBased
Політика резервного варіанта
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnoreзберігає застарілу дозвільну поведінкуrfpReportзаписує непідтримувані оператори, відсутні ресурси, недійсні об'єкти, помилки декодування, обмеження рекурсії та непідтримувані типи об'єктівrfpStrictвикликає виняток на першому резервному варіанті поза секцією сумісностіBXіEXTHotPDF.RenderFallbackDiagnosticLimitобмежує збережену діагностикуTHotPDF.LastRenderFallbackDroppedCountзвітує про діагнози, пропущені після налаштованого обмеження
THotPDF.GetLastRenderFallbackDiagnostics повертає збережений набір, тоді як THotPDF.ClearLastRenderFallbackDiagnostics очищає його; кешовані записи режиму звіту зберігають свій набір діагнозів, тому попадання в кеш пам'яті повертає ту саму інформацію про повноту рендерингу, що й оригінальний рендеринг
Уніфікована телеметрія операцій
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 повертає запис THPDFOperationTelemetry, що містить час стіни, час ЦП поточного потоку, пам'ять, розподіл, введення-вивід процесів, декодування фільтрів, кеш, кількість об'єктів, успіх і метрики скасування
Завантаження документа, синхронний і кешований рендеринг сторінок, зрізи поступального рендерингу, вибіркова оптимізація потоків і паралельна оптимізація зображень публікують ту саму форму запису
PeakMemoryBytes є портативною оцінкою операції документа, а не робочим набором процесу операційної системи, тому вона залишається стабільною між хостами та включає байти завантаженого джерела, записи відрендерених бітмапів, вагу кешу декодованих зображень і пікове сховище ланцюга фільтрів
PeakProcessMemoryBytes — це найбільший відібраний робочий набір процесу, тоді як AllocationCount — це найбільша відібрана прибавка одночасно живих блоків менеджера пам'яті Delphi відносно початку операції, а не сукупний розподіл за час життя
CPUTimeMicroseconds вимірює викликальний потік, тоді як ReadIOBytes, WriteIOBytes і OtherIOBytes є різницями лічильників у масштабі процесу і тому можуть включати конкурентну роботу в тому самому процесі
DecodeInputBytes — це стиснутий вхід, DecodeOutputBytes — остаточний вихід ланцюга фільтрів, а DecodedBytes — сукупна робота на кожному етапі фільтра; DecodeExpansionPermille ділить остаточний вихід на вхід, причому 1000 позначає 1x
ScheduledMemoryBytes — це оцінка приймання операції, MemorySchedulerWaitMilliseconds записує час черги, а MemorySchedulerDelayed розрізняє поставлене в чергу приймання та швидкий шлях без розподілу
Піки пам'яті та розподілу відбираються на межах операції, завершенні ланцюга фільтрів, зрізах поступального рендерингу та контрольних точках скасування, тому вони є низьконакладними оперативними сигналами, а не трасами профілювальника на рівні інструкцій