THotPDF.RenderLoadedPagesParallelOrdered Method
Compila e renderizza le pagine caricate in parallelo, consegnando le bitmap completate in ordine di input attraverso un callback con limiti eseguito sul thread chiamante
Dichiarazione
function RenderLoadedPagesParallelOrdered(
const PageIndices: array of Integer; DPI, MaxConcurrency,
OutputQueueDepth: Integer; Callback: THPDFParallelRenderPageEvent): Integer; overload;
function RenderLoadedPagesParallelOrdered(
const PageIndices: array of Integer; DPI, MaxConcurrency,
OutputQueueDepth: Integer; Callback: THPDFParallelRenderPageEvent;
out Info: THPDFParallelRenderPipelineInfo): Integer; overload;
Callback e ownership
Il Callback viene eseguito in modo seriale sul thread chiamante con la posizione di input zero-based, l'indice della pagina richiesta, la bitmap in prestito e il flag di cancellazione
La bitmap è valida solo per la durata del callback e viene rilasciata immediatamente dopo il suo ritorno, quindi copiarla o codificarla all'interno del callback quando il risultato deve sopravvivere a quella invocazione
Impostare Cancel per smettere di rivendicare nuove pagine, svegliare i worker bloccati, attendere il lavoro in corso, rilasciare i risultati non pubblicati e restituire il numero di callback completati
La cancellazione del callback sveglia anche i worker in attesa di una riservazione di memoria senza trasformare quella sveglia interna in un errore; un token di cancellazione esterno o un'eccezione del callback riportano comunque il fallimento dopo la pulizia
Backpressure
OutputQueueDepth limita le bitmap completate, inclusa la bitmap attiva nel callback; valori inferiori a uno selezionano il numero effettivo di worker e valori superiori al numero di pagine vengono troncati
Lo scheduler riserva capacità di output per la successiva posizione di input richiesta, così le pagine successive non possono riempire la coda e bloccare l'avanzamento ordinato quando una pagina precedente compila più lentamente
Con PeakMemorySchedulerEnabled, il parallelismo richiesto viene ridotto in base alla stima della pagina più grande e al budget globale attualmente disponibile, e ogni riservazione di pagina resta attiva dalla rivendicazione del lavoro fino a quando la sua bitmap in prestito non esce dal callback
Le riservazioni di memoria vengono richieste in ordine di input prima della compilazione e del rendering paralleli, così le pagine successive non possono prendersi il budget necessario al callback successivo
L'output in coda compete quindi in modo equo con compilazione e playback attivi per lo stesso budget a livello di processo, mentre la cancellazione o un fallimento rilasciano le riservazioni non pubblicate prima di attendere i worker
Il callback non deve mutare o distruggere il documento mentre i worker sono attivi
THPDFParallelRenderPipelineInfo · Display list e produzione di stampa