Méthode THotPDF.RenderLoadedPagesParallelOrdered
Compile et rend les pages chargées en concurrence tout en livrant les bitmaps terminés dans l’ordre d’entrée via un callback borné sur le thread appelant
Déclaration
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 et propriété
Callback s’exécute en série sur le thread appelant avec la position d’entrée à partir de zéro, l’index de page demandé, le bitmap prêté et l’indicateur d’annulation
Le bitmap n’est valide que pendant la durée du callback et est libéré immédiatement après son retour, donc copiez-le ou encodez-le dans le callback si le résultat doit survivre à l’invocation
Positionnez Cancel pour arrêter la claim de nouvelles pages, réveiller les workers bloqués, joindre le travail en cours, libérer les résultats non publiés et renvoyer le nombre de callbacks terminés
L’annulation via le callback réveille aussi les workers en attente d’une réservation mémoire sans transformer ce réveil interne en erreur ; un token d’annulation externe ou une exception dans le callback signale toujours l’échec après nettoyage
Backpressure
OutputQueueDepth limite les bitmaps terminés, y compris le bitmap actif dans le callback ; les valeurs inférieures à un sélectionnent le nombre effectif de workers et les valeurs supérieures au nombre de pages sont bornées
L’ordonnanceur réserve une capacité de sortie pour la prochaine position d’entrée requise, ainsi les pages suivantes ne peuvent pas remplir la file et bloquer la progression ordonnée quand une page antérieure compile plus lentement
Avec PeakMemorySchedulerEnabled, le parallélisme demandé est réduit à partir de la plus grande estimation de page et du budget global actuellement disponible, et chaque réservation de page reste active depuis la claim du travail jusqu’à la sortie du bitmap prêté du callback
Les réservations mémoire sont demandées dans l’ordre d’entrée avant la compilation et le rendu parallèles, ainsi les pages suivantes ne peuvent pas consommer le budget dont le prochain callback a besoin
La sortie en file concourt donc équitablement avec la compilation active et la restitution pour le même budget à l’échelle du processus, tandis que l’annulation ou l’échec libère les réservations non publiées avant de joindre les workers
Le callback ne doit ni muter ni détruire le document tant que des workers sont actifs
THPDFParallelRenderPipelineInfo · Display Lists and Print Production