@@ -70,6 +70,7 @@ import {
7070 NodeFilterFactory ,
7171} from "display-node_utils" ;
7272import { CanvasGraphics } from "./canvas.js" ;
73+ import { CanvasTrackingGraphics } from "./canvas_tracking_graphics.js" ;
7374import { DOMBinaryDataFactory } from "display-binary_data_factory" ;
7475import { DOMCanvasFactory } from "./canvas_factory.js" ;
7576import { DOMFilterFactory } from "./filter_factory.js" ;
@@ -1502,11 +1503,12 @@ class PDFPageProxy {
15021503 intentState . renderTasks . delete ( internalRenderTask ) ;
15031504
15041505 if ( shouldRecordOperations ) {
1505- const recordedBBoxes = internalRenderTask . gfx ?. dependencyTracker . take ( ) ;
1506+ const tracker = internalRenderTask . _trackingGfx ?. dependencyTracker ;
1507+ const recordedBBoxes = tracker ?. take ( ) ;
15061508 if ( recordedBBoxes ) {
15071509 internalRenderTask . stepper ?. setOperatorBBoxes (
15081510 recordedBBoxes ,
1509- internalRenderTask . gfx . dependencyTracker . takeDebugMetadata ( )
1511+ tracker . takeDebugMetadata ( )
15101512 ) ;
15111513
15121514 if ( recordOperations ) {
@@ -1516,7 +1518,7 @@ class PDFPageProxy {
15161518 }
15171519
15181520 if ( shouldRecordImages && ! error ) {
1519- this . imageCoordinates = internalRenderTask . gfx ?. imagesTracker . take ( ) ;
1521+ this . imageCoordinates = internalRenderTask . _imagesTracker ? .take ( ) ;
15201522 }
15211523
15221524 // Attempt to reduce memory usage during *printing*, by always running
@@ -1568,10 +1570,6 @@ class PDFPageProxy {
15681570 params : {
15691571 canvas,
15701572 canvasContext,
1571- dependencyTracker : dependencyTracker ?? bboxTracker ,
1572- imagesTracker : shouldRecordImages
1573- ? new CanvasImagesTracker ( canvas )
1574- : null ,
15751573 viewport,
15761574 transform,
15771575 background,
@@ -1588,6 +1586,10 @@ class PDFPageProxy {
15881586 pageColors,
15891587 enableHWA : this . _transport . enableHWA ,
15901588 operationsFilter,
1589+ dependencyTracker : dependencyTracker ?? bboxTracker ,
1590+ imagesTracker : shouldRecordImages
1591+ ? new CanvasImagesTracker ( canvas )
1592+ : null ,
15911593 } ) ;
15921594
15931595 ( intentState . renderTasks ||= new Set ( ) ) . add ( internalRenderTask ) ;
@@ -3220,6 +3222,8 @@ class InternalRenderTask {
32203222 pageColors = null ,
32213223 enableHWA = false ,
32223224 operationsFilter = null ,
3225+ dependencyTracker = null ,
3226+ imagesTracker = null ,
32233227 } ) {
32243228 this . callback = callback ;
32253229 this . params = params ;
@@ -3250,8 +3254,8 @@ class InternalRenderTask {
32503254 this . _canvas = params . canvas ;
32513255 this . _canvasContext = params . canvas ? null : params . canvasContext ;
32523256 this . _enableHWA = enableHWA ;
3253- this . _dependencyTracker = params . dependencyTracker ;
3254- this . _imagesTracker = params . imagesTracker ;
3257+ this . _dependencyTracker = dependencyTracker ;
3258+ this . _imagesTracker = imagesTracker ;
32553259 this . _operationsFilter = operationsFilter ;
32563260 }
32573261
@@ -3282,13 +3286,7 @@ class InternalRenderTask {
32823286 this . stepper . init ( this . operatorList ) ;
32833287 this . stepper . nextBreakPoint = this . stepper . getNextBreakPoint ( ) ;
32843288 }
3285- const {
3286- viewport,
3287- transform,
3288- background,
3289- dependencyTracker,
3290- imagesTracker,
3291- } = this . params ;
3289+ const { viewport, transform, background } = this . params ;
32923290
32933291 // When printing in Firefox, we get a specific context in mozPrintCallback
32943292 // which cannot be created from the canvas itself.
@@ -3307,16 +3305,28 @@ class InternalRenderTask {
33073305 this . filterFactory ,
33083306 { optionalContentConfig } ,
33093307 this . annotationCanvasMap ,
3310- this . pageColors ,
3311- dependencyTracker ,
3312- imagesTracker
3308+ this . pageColors
33133309 ) ;
33143310 this . gfx . beginDrawing ( {
33153311 transform,
33163312 viewport,
33173313 transparency,
33183314 background,
33193315 } ) ;
3316+
3317+ if ( this . _dependencyTracker || this . _imagesTracker ) {
3318+ this . _trackingGfx = new CanvasTrackingGraphics (
3319+ this . commonObjs ,
3320+ this . objs ,
3321+ canvasContext . canvas . width ,
3322+ canvasContext . canvas . height ,
3323+ this . _dependencyTracker ,
3324+ { optionalContentConfig } ,
3325+ this . _imagesTracker
3326+ ) ;
3327+ this . _trackingGfx . beginDrawing ( { transform, viewport } ) ;
3328+ }
3329+
33203330 this . operatorListIdx = 0 ;
33213331 this . graphicsReady = true ;
33223332 this . graphicsReadyCallback ?. ( ) ;
@@ -3346,7 +3356,7 @@ class InternalRenderTask {
33463356 this . graphicsReadyCallback ||= this . _continueBound ;
33473357 return ;
33483358 }
3349- this . gfx . dependencyTracker ?. growOperationsCount (
3359+ this . _dependencyTracker ?. growOperationsCount (
33503360 this . operatorList . fnArray . length
33513361 ) ;
33523362 this . stepper ?. updateOperatorList ( this . operatorList ) ;
@@ -3395,6 +3405,9 @@ class InternalRenderTask {
33953405 this . running = false ;
33963406 if ( this . operatorList . lastChunk ) {
33973407 this . gfx . endDrawing ( ) ;
3408+ if ( this . _trackingGfx ) {
3409+ this . _trackingGfx . executeOperatorList ( this . operatorList ) ;
3410+ }
33983411 InternalRenderTask . #canvasInUse. delete ( this . _canvas ) ;
33993412 this . callback ( ) ;
34003413 }
0 commit comments