mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Add an option to enable/disable hardware acceleration (bug 1902012)
This commit is contained in:
parent
341ff40e74
commit
ff6180a4c9
13 changed files with 62 additions and 12 deletions
|
@ -242,7 +242,7 @@ class FakeUnicodeFont {
|
|||
this.fontFamily = fontFamily;
|
||||
|
||||
const canvas = new OffscreenCanvas(1, 1);
|
||||
this.ctxMeasure = canvas.getContext("2d");
|
||||
this.ctxMeasure = canvas.getContext("2d", { willReadFrequently: true });
|
||||
|
||||
if (!FakeUnicodeFont._fontNameId) {
|
||||
FakeUnicodeFont._fontNameId = 1;
|
||||
|
|
|
@ -213,6 +213,8 @@ const DefaultStandardFontDataFactory =
|
|||
* when creating canvases. The default value is {new DOMCanvasFactory()}.
|
||||
* @property {Object} [filterFactory] - A factory instance that will be used
|
||||
* to create SVG filters when rendering some images on the main canvas.
|
||||
* @property {boolean} [enableHWA] - Enables hardware acceleration for
|
||||
* rendering. The default value is `false`.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -297,6 +299,7 @@ function getDocument(src) {
|
|||
const disableStream = src.disableStream === true;
|
||||
const disableAutoFetch = src.disableAutoFetch === true;
|
||||
const pdfBug = src.pdfBug === true;
|
||||
const enableHWA = src.enableHWA === true;
|
||||
|
||||
// Parameters whose default values depend on other parameters.
|
||||
const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;
|
||||
|
@ -315,7 +318,7 @@ function getDocument(src) {
|
|||
isValidFetchUrl(cMapUrl, document.baseURI) &&
|
||||
isValidFetchUrl(standardFontDataUrl, document.baseURI));
|
||||
const canvasFactory =
|
||||
src.canvasFactory || new DefaultCanvasFactory({ ownerDocument });
|
||||
src.canvasFactory || new DefaultCanvasFactory({ ownerDocument, enableHWA });
|
||||
const filterFactory =
|
||||
src.filterFactory || new DefaultFilterFactory({ docId, ownerDocument });
|
||||
|
||||
|
|
|
@ -46,10 +46,13 @@ class BaseFilterFactory {
|
|||
}
|
||||
|
||||
class BaseCanvasFactory {
|
||||
constructor() {
|
||||
#enableHWA = false;
|
||||
|
||||
constructor({ enableHWA = false } = {}) {
|
||||
if (this.constructor === BaseCanvasFactory) {
|
||||
unreachable("Cannot initialize BaseCanvasFactory.");
|
||||
}
|
||||
this.#enableHWA = enableHWA;
|
||||
}
|
||||
|
||||
create(width, height) {
|
||||
|
@ -59,7 +62,9 @@ class BaseCanvasFactory {
|
|||
const canvas = this._createCanvas(width, height);
|
||||
return {
|
||||
canvas,
|
||||
context: canvas.getContext("2d"),
|
||||
context: canvas.getContext("2d", {
|
||||
willReadFrequently: !this.#enableHWA,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -477,8 +477,8 @@ class DOMFilterFactory extends BaseFilterFactory {
|
|||
}
|
||||
|
||||
class DOMCanvasFactory extends BaseCanvasFactory {
|
||||
constructor({ ownerDocument = globalThis.document } = {}) {
|
||||
super();
|
||||
constructor({ ownerDocument = globalThis.document, enableHWA = false } = {}) {
|
||||
super({ enableHWA });
|
||||
this._document = ownerDocument;
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ class ImageManager {
|
|||
// behavior in Safari.
|
||||
const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>`;
|
||||
const canvas = new OffscreenCanvas(1, 3);
|
||||
const ctx = canvas.getContext("2d");
|
||||
const ctx = canvas.getContext("2d", { willReadFrequently: true });
|
||||
const image = new Image();
|
||||
image.src = svg;
|
||||
const promise = image.decode().then(() => {
|
||||
|
|
|
@ -447,7 +447,10 @@ class TextLayer {
|
|||
canvas.className = "hiddenCanvasElement";
|
||||
canvas.lang = lang;
|
||||
document.body.append(canvas);
|
||||
canvasContext = canvas.getContext("2d", { alpha: false });
|
||||
canvasContext = canvas.getContext("2d", {
|
||||
alpha: false,
|
||||
willReadFrequently: true,
|
||||
});
|
||||
this.#canvasContexts.set(lang, canvasContext);
|
||||
}
|
||||
return canvasContext;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue