Діагностика рендерингу та телеметрія операцій

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;

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 розрізняє поставлене в чергу приймання та швидкий шлях без розподілу

Піки пам'яті та розподілу відбираються на межах операції, завершенні ланцюга фільтрів, зрізах поступального рендерингу та контрольних точках скасування, тому вони є низьконакладними оперативними сигналами, а не трасами профілювальника на рівні інструкцій

Пов'язані API