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

HotPDF различава записите в кеша на рендирани страници по всяко видимо за извикващия състояние, което може да промени пикселите на страницата, и излага ограничена диагностика, когато съдържанието на страницата не може да се рендира докрай

Варианти на кеша според състоянието

THotPDF.RenderLoadedPageToBitmapCached ключува записите в паметта по страница, DPI, ефективна видимост на optional content, THotPDF.RenderColourIntent и THotPDF.RenderFallbackPolicy

Постоянният кеш използва същия digest на състоянието, докато fallback режимите, произвеждащи диагностика, остават само в паметта, така че попадение на диска да не може да изгуби докладите за пропуснати обекти

Промяна на група в optional content избира друг вариант, вместо да изтрие предишния битмап, така че връщането на слой или цветови intent може да преизползва по-ранна работа

Цветов intent

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

rciDocument почита всеки оператор ri в content stream-а и остава стойността по подразбиране

Четирите изрични стойности надмогват избора на intent от content stream-а и се прилагат за следващите конверсии при запълване и щрихиране на ICCBased

Политика за fallback

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 с реално време, CPU време на текущата нишка, памет, заделяне, процесно I/O, филтърно декодиране, кеш, брой обекти, успех и отмяна

Зареждане на документ, синхронно и кеширано рендиране на страници, прогресивни парчета рендиране, селективна оптимизация на потоци и паралелна оптимизация на изображения публикуват същата форма на записа

PeakMemoryBytes е преносима оценка за документна операция, а не working set на операционната система за процеса, така че остава стабилна между хостове и включва заредени изходни байтове, растерни записи от рендиране, тежестта на кеша за декодирани изображения и пикното хранилище на филтърната верига

PeakProcessMemoryBytes е най-големият отчитан working set на процеса, докато AllocationCount е най-големият отчитан ръст на едновременно живите блокове на Delphi memory manager спрямо старта на операцията, а не общо заделяне за целия живот

CPUTimeMicroseconds измерва извикващата нишка, докато ReadIOBytes, WriteIOBytes и OtherIOBytes са делти на целопроцесорни броячи и затова могат да включват конкурентна работа в същия процес

DecodeInputBytes е компресираният вход, DecodeOutputBytes е финалният изход на филтърната верига, а DecodedBytes е съвкупната работа през всички филтърни стъпки; DecodeExpansionPermille дели финалния изход на входа, като 1000 представя 1x

ScheduledMemoryBytes е оценката за допускане на операцията, MemorySchedulerWaitMilliseconds записва времето в опашка, а MemorySchedulerDelayed различава допускане през опашка от бързия път без заделяне

Пиковете на памет и заделяне се отчитат на граници на операции, завършване на филтърна верига, прогресивни парчета и контролни точки за отмяна, така че са оперативни сигнали с ниска накладка, а не instruction-level профилиращи записи

Свързани API