Skip to content

Commit f20d1eb

Browse files
wip extract tracking
1 parent 702a12c commit f20d1eb

4 files changed

Lines changed: 1295 additions & 373 deletions

File tree

src/display/api.js

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import {
7070
NodeFilterFactory,
7171
} from "display-node_utils";
7272
import { CanvasGraphics } from "./canvas.js";
73+
import { CanvasTrackingGraphics } from "./canvas_tracking_graphics.js";
7374
import { DOMBinaryDataFactory } from "display-binary_data_factory";
7475
import { DOMCanvasFactory } from "./canvas_factory.js";
7576
import { 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

Comments
 (0)