เมธอด THotPDF.RenderLoadedPagesParallel

ทำ pipeline การคอมไพล์และเล่น display-list ข้าม worker แบบมีขอบเขต โดยคงลำดับ input ไว้ใน array output

การประกาศ

function RenderLoadedPagesParallel(const PageIndices: array of Integer;
    DPI, MaxConcurrency: Integer; out Bitmaps: THPDFBitmapArray): Integer; overload;

function RenderLoadedPagesParallel(const PageIndices: array of Integer;
    DPI, MaxConcurrency: Integer; out Bitmaps: THPDFBitmapArray;
    out Info: THPDFParallelRenderPipelineInfo): Integer; overload;

พฤติกรรม

การคอมไพล์ทำงานนอก lock ของ display-list cache ดังนั้นหน้าที่ไม่เกี่ยวกันคอมไพล์พร้อมกันได้ และหน้าแรกที่พร้อมเริ่มเรนเดอร์ได้ก่อนชุด input ทั้งหมดจะคอมไพล์เสร็จ

scheduler กระจายงานคอมไพล์กับ playback แบบไดนามิก จำกัด worker ที่ MaxConcurrency แยกสถานะ renderer ต่อ worker และแชร์รายการ cache ผ่าน use count ที่ป้องกันไว้

เมื่อ PeakMemorySchedulerEnabled เป็น true จำนวน worker ที่ใช้จริงจะถูกลดจากคำขอที่ normalize แล้วด้วยประมาณการหน้าที่ใหญ่ที่สุดและงบประมาณรวมที่ว่างอยู่ จากนั้นทุกหน้าที่อ้างสิทธิ์แล้วจะถือการจองหน่วยความจำยุติธรรมของตัวเองตลอดการคอมไพล์และ playback

overload ที่มี Info รายงาน worker ที่ขอและที่ใช้จริง ลิมิต worker จากหน่วยความจำ ประมาณการจองหน้า พีค byte ของ render ที่จองไว้ การรับเข้าของ scheduler หน้าที่ถูกหน่วง เวลารอ จำนวนคอมไพล์และ cache hit output ที่เสร็จ concurrency พีคต่อ stage latency ของผลแรก เวลารวมที่ใช้ และจำนวนหน้าที่คอมไพล์แล้ว ณ ตอนที่ bitmap แรกเสร็จ

ผู้เรียกเป็นเจ้าของ bitmap ที่ไม่ใช่ nil ทุกชิ้นใน Bitmaps

ผลลัพธ์ใน array ที่เสร็จแล้วยังคงเป็นของผู้เรียกต่อหลังการจองที่ค้างอยู่ถูกปล่อย ดังนั้นถ้าชุด output ทั้งหมดต้องอยู่ในงบประมาณของ scheduler ให้ใช้ RenderLoadedPagesParallelOrdered

THPDFParallelRenderPipelineInfo · Display Lists and Print Production