אבחון עיבוד וטלמטריה של פעולות

HotPDF ‏מבדיל רשומות מטמון של עמוד מעובד לפי כל מצב הנראה לקורא שיכול לשנות פיקסלי עמוד, וחושף אבחון מוגבל כאשר לא ניתן לעבד את תוכן העמוד במלואו

וריאנטים של מטמון מודעי-מצב

THotPDF.RenderLoadedPageToBitmapCached ממפתח רשומות זיכרון לפי עמוד, DPI, ‏נראות תוכן אופציונלי אפקטיבית, THotPDF.RenderColourIntent ‏ו-THotPDF.RenderFallbackPolicy

המטמון הקבוע משתמש באותו דייג'סט מצב, בעוד מצבי fallback ‏מייצרי-אבחון נשארים בזיכרון בלבד כך שפגיעה בדיסק אינה יכולה לאבד דוחות אובייקטים שדולגו

שינוי קבוצת תוכן אופציונלי בוחר וריאנט אחר במקום למחוק את מפת הסיביות הקודמת, כך שהחזרת שכבה או כוונת צבע לאחור יכולה לעשות שימוש חוזר בעבודה מוקדמת יותר

כוונת צבע

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

rciDocument מכבד כל אופרטור ri ‏בזרם התוכן ונשאר ברירת המחדל

ארבעת הערכים המפורשים עוקפים את בחירת הכוונה בזרם התוכן ומוחלים על המרות 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 ‏של השרשור הנוכחי, זיכרון, הקצאה, קלט/פלט של תהליך, פענוח מסנן, מטמון, ספירת אובייקטים, הצלחה וביטול

טעינת מסמך, עיבוד עמוד סינכרוני ומאוחסן, פרוסות עיבוד פרוגרסיבי, אופטימיזציית זרמים סלקטיבית ואופטימיזציית תמונות מקבילה מפרסמות את אותו מבנה רשומה

PeakMemoryBytes הוא אומדן נייד של פעולת מסמך במקום קבוצת העבודה של תהליך מערכת ההפעלה, כך שהוא נשאר יציב בין מארחים וכולל בתי מקור טעונים, רשומות מפת סיביות מעובדות, משקל מטמון תמונות מפוענחות ואחסון שיא של שרשרת מסננים

PeakProcessMemoryBytes הוא קבוצת העבודה הגדולה ביותר שנדגמה של התהליך, בעוד AllocationCount הוא הגידול הגדול ביותר שנדגם בבלוקים חיים בו-זמנית של מנהל הזיכרון של Delphi ‏יחסית לתחילת הפעולה ולא סך הקצאות לכל החיים

CPUTimeMicroseconds מודד את השרשור הקורא, בעוד ReadIOBytes, WriteIOBytes ‏ו-OtherIOBytes הם דלתות מונה כלל-תהליכיות ולכן יכולים לכלול עבודה מקבילה באותו תהליך

DecodeInputBytes הוא קלט דחוס, DecodeOutputBytes הוא פלט סופי של שרשרת המסננים, ‏ו-DecodedBytes הוא עבודה מצטברת על פני כל שלב מסנן; DecodeExpansionPermille מחלק את הפלט הסופי בקלט, כאשר 1000 מייצג 1x

ScheduledMemoryBytes הוא אומדן הקבלה של הפעולה, MemorySchedulerWaitMilliseconds מתעד את זמן התור, ‏ו-MemorySchedulerDelayed מבדיל בין קבלה בתור לנתיב המהיר נטול-ההקצאות

שיאי זיכרון והקצאה נדגמים בגבולות פעולה, בהשלמת שרשרת מסננים, בפרוסות פרוגרסיביות ובנקודות ביטול, ולכן הם אותות תפעוליים בעלי תקורה נמוכה ולא עקבות profiler ‏ברמת הוראה

ממשקי API קשורים