Reduce background canvas resolution

The size of the canvas has significant impact on the rendering
performance. If we are going to render a high-res detail
view on top of the full-page canvas, we can further
reduce the full-page canvas resolution to improve
rendering time without affecting the resolution seen by
the user.

Users will se the lower resolution when quickly scrolling around the
page, but it will then be replaced with the high-res
detail view.
This commit is contained in:
Nicolò Ribaudo 2025-09-09 13:43:01 +02:00
parent 5b7f9ca8b9
commit 4c7bbd0fef
No known key found for this signature in database
GPG Key ID: AAFDA9101C58F338
2 changed files with 16 additions and 6 deletions

View File

@ -363,12 +363,16 @@ describe("PDF viewer", () => {
.toBeLessThan(originalCanvasSize * factor ** 2); .toBeLessThan(originalCanvasSize * factor ** 2);
expect(canvasSize) expect(canvasSize)
.withContext(`In ${browserName}, <= MAX_CANVAS_PIXELS`) .withContext(`In ${browserName}, <= MAX_CANVAS_PIXELS / 100`)
.toBeLessThanOrEqual(MAX_CANVAS_PIXELS.get(browserName)); .toBeLessThanOrEqual(MAX_CANVAS_PIXELS.get(browserName) / 100);
expect(canvasSize) expect(canvasSize)
.withContext(`In ${browserName}, > MAX_CANVAS_PIXELS * 0.99`) .withContext(
.toBeGreaterThan(MAX_CANVAS_PIXELS.get(browserName) * 0.99); `In ${browserName}, > MAX_CANVAS_PIXELS / 100 * 0.95`
)
.toBeGreaterThan(
(MAX_CANVAS_PIXELS.get(browserName) / 100) * 0.95
);
}) })
); );
}); });
@ -565,10 +569,10 @@ describe("PDF viewer", () => {
.toBe(2); .toBe(2);
expect(after[0].width) expect(after[0].width)
.withContext(`In ${browserName}`) .withContext(`In ${browserName}`)
.toBe(582 * pixelRatio); .toBe(Math.floor(58.2 * pixelRatio));
expect(after[0].height) expect(after[0].height)
.withContext(`In ${browserName}`) .withContext(`In ${browserName}`)
.toBe(823 * pixelRatio); .toBe(Math.floor(82.3 * pixelRatio));
// The dimensions of the detail canvas are capped to 800x600 but // The dimensions of the detail canvas are capped to 800x600 but
// it depends on the visible area which depends itself of the // it depends on the visible area which depends itself of the

View File

@ -798,6 +798,12 @@ class PDFPageView extends BasePDFPageView {
this.maxCanvasDim, this.maxCanvasDim,
this.capCanvasAreaFactor this.capCanvasAreaFactor
); );
if (this.#needsRestrictedScaling && this.enableDetailCanvas) {
// If we are going to have a high-res detail view, further reduce
// the canvas resolution to improve rendering performance.
outputScale.sx /= 10;
outputScale.sy /= 10;
}
} }
} }