Rendering Diagnostics and Operation Telemetry

HotPDF는 페이지 픽셀을 바꿀 수 있는 호출자 가시 상태 전부로 렌더링 페이지 캐시 항목을 구분하고, 페이지 콘텐츠를 온전히 렌더링하지 못할 때 상한 진단을 노출합니다

상태 인식 캐시 변형

THotPDF.RenderLoadedPageToBitmapCached는 메모리 항목을 페이지, DPI, 실효 optional-content 표시, THotPDF.RenderColourIntent, THotPDF.RenderFallbackPolicy로 키 정합니다

영속 캐시는 같은 상태 다이제스트를 쓰고, 진단을 만드는 폴백 모드는 메모리 전용으로 남아 디스크 히트가 skipped-object 보고를 잃지 않게 합니다

optional-content group을 바꾸면 이전 bitmap을 지우는 대신 다른 변형을 선택하므로, layer나 컬러 intent를 되돌리면 이전 작업을 재사용합니다

Colour intent

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

rciDocument는 content-stream ri 연산자마다 존중하며 기본값으로 남습니다

네 명시 값은 content-stream intent 선택을 덮어쓰고 이후 ICCBased 채움/선 변환에 적용됩니다

Fallback policy

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

THotPDF.GetLastRenderFallbackDiagnostics는 보유 세트를 반환하고, THotPDF.ClearLastRenderFallbackDiagnostics는 이를 지웁니다. 캐시된 report-mode 항목은 자기 진단 세트를 유지해 메모리 캐시 히트가 원본 렌더와 같은 렌더 완전성 정보를 반환합니다

통합 operation 텔레메트리

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는 wall time, 현재 스레드 CPU 시간, 메모리, 할당, 프로세스 I/O, filter 디코딩, 캐시, 객체 수, 성공, 취소 메트릭이 담긴 THPDFOperationTelemetry 레코드를 반환합니다

문서 로딩, 동기/캐시 페이지 렌더링, progressive 렌더 슬라이스, 선택적 stream 최적화, 병렬 이미지 최적화가 같은 레코드 형태를 공개합니다

PeakMemoryBytes는 OS 프로세스 working set이 아니라 이식 가능한 문서 operation 추정치라 호스트에 걸쳐 안정적이며, 로드 소스 바이트, 렌더링 bitmap 항목, decoded-image 캐시 가중치, filter-chain 저장소 피크를 포함합니다

PeakProcessMemoryBytes는 가장 크게 샘플링된 프로세스 working set이고, AllocationCount는 수명 전체 할당 총량이 아니라 operation 시작 대비 동시 live Delphi 메모리 관리자 블록의 가장 크게 샘플링된 증가분입니다

CPUTimeMicroseconds는 호출 스레드를 측정하고, ReadIOBytes, WriteIOBytes, OtherIOBytes는 프로세스 전역 카운터 증감이라 같은 프로세스의 동시 작업도 포함할 수 있습니다

DecodeInputBytes는 압축 입력, DecodeOutputBytes는 최종 filter-chain 출력, DecodedBytes는 모든 filter 단계에 걸친 누적 작업입니다. DecodeExpansionPermille는 최종 출력을 입력으로 나누며 1000이 1x를 뜻합니다

ScheduledMemoryBytes는 operation 승인 추정치, MemorySchedulerWaitMilliseconds는 큐 시간을 기록하고, MemorySchedulerDelayed는 대기 승인을 할당 없는 fast path와 구분합니다

메모리/할당 피크는 operation 경계, filter-chain 완료, progressive 슬라이스, 취소 체크포인트에서 샘플링되므로 명령어 수준 profiler 추적이 아니라 저오버헤드 운영 신호입니다

관련 API