レンダリング診断と操作テレメトリ
HotPDF は、ページピクセルを変更できるすべての呼び出し側可視状態でレンダリング済みページキャッシュエントリを区別し、ページコンテンツを完全にレンダリングできない場合に境界付き診断を公開します
状態認識のキャッシュバリアント
THotPDF.RenderLoadedPageToBitmapCached は、ページ、DPI、有効なオプションコンテンツ可視性、THotPDF.RenderColourIntent、THotPDF.RenderFallbackPolicy でメモリエントリをキー付けします
永続キャッシュは同じ状態ダイジェストを使用し、診断生成フォールバックモードはメモリ専用のままであるため、ディスクヒットがスキップされたオブジェクトレポートを失うことはありません
オプションコンテンツグループの変更は、以前のビットマップを削除する代わりに別のバリアントを選択するため、レイヤーまたはカラーインテントを元に戻すと以前の作業を再利用できます
カラーインテント
PDF.RenderColourIntent := rciRelativeColorimetric;
Bitmap := PDF.RenderLoadedPageToBitmapCached(0, 144);
rciDocument は各コンテンツストリームの ri 演算子を尊重し、デフォルトのままです
4 つの明示的な値はコンテンツストリームインテント選択をオーバーライドし、後続の ICCBased 塗りとストローク変換に適用されます
フォールバックポリシー
PDF.RenderFallbackPolicy := rfpReport;
PDF.RenderFallbackDiagnosticLimit := 256;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
Diagnostics := PDF.GetLastRenderFallbackDiagnostics;
rfpIgnoreはレガシーの寛容な動作を保持しますrfpReportは、サポートされていない演算子、欠落したリソース、無効なオブジェクト、デコード失敗、再帰制限、サポートされていないオブジェクト型を記録しますrfpStrictは、BXとEX互換性セクション外の最初のフォールバックで例外を発生させますTHotPDF.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 は、ウォールタイム、現在のスレッド CPU 時間、メモリ、割り当て、プロセス I/O、フィルターデコード、キャッシュ、オブジェクト数、成功、キャンセルメトリックを含む THPDFOperationTelemetry レコードを返します
ドキュメントロード、同期およびキャッシュ済みページレンダリング、プログレッシブレンダースライス、選択的ストリーム最適化、並列画像最適化は、同じレコード形状を公開します
PeakMemoryBytes は、オペレーティングシステムのプロセスワーキングセットではなく、ポータブルなドキュメント操作見積もりです。そのためホスト間で安定し、ロードされたソースバイト、レンダリング済みビットマップエントリ、デコード済み画像キャッシュ重み、ピークフィルターチェーンストレージを含みます
PeakProcessMemoryBytes はサンプリングされたプロセスワーキングセットの最大値であり、AllocationCount は操作開始に対する同時ライブ Delphi メモリマネージャブロックの最大サンプル増加であり、ライフタイム割り当て合計ではありません
CPUTimeMicroseconds は呼び出しスレッドを測定しますが、ReadIOBytes、WriteIOBytes、OtherIOBytes はプロセス全体のカウンターデルタであるため、同じプロセス内の並行作業を含めることができます
DecodeInputBytes は圧縮入力、DecodeOutputBytes は最終フィルターチェーン出力、DecodedBytes はすべてのフィルターステージにわたる集約作業です。DecodeExpansionPermille は最終出力を入力で割り、1000 は 1x を表します
ScheduledMemoryBytes は操作受付見積もり、MemorySchedulerWaitMilliseconds は待機時間を記録し、MemorySchedulerDelayed はキュー受付を割り当てのない高速パスと区別します
メモリと割り当てのピークは、操作境界、フィルターチェーン完了、プログレッシブスライス、キャンセルチェックポイントでサンプリングされるため、命令レベルのプロファイラートレースではなく、低オーバーヘッドの操作シグナルです