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