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