From 88304c9b5b00d1bb7a71fa4190715356d0625736 Mon Sep 17 00:00:00 2001 From: Tony Jin Date: Tue, 11 Apr 2017 15:58:48 -0700 Subject: [PATCH] Update: Decrease mobile web max pdf.js canvas size to 3MP (#66) - This should help prevent memory issues on mobile web --- src/lib/viewers/doc/DocBaseViewer.js | 4 ++++ src/lib/viewers/doc/__tests__/DocBaseViewer-test.js | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/viewers/doc/DocBaseViewer.js b/src/lib/viewers/doc/DocBaseViewer.js index 911af7b01..a639dc72c 100644 --- a/src/lib/viewers/doc/DocBaseViewer.js +++ b/src/lib/viewers/doc/DocBaseViewer.js @@ -32,6 +32,7 @@ const MAX_SCALE = 10.0; const MIN_SCALE = 0.1; const DEFAULT_RANGE_REQUEST_CHUNK_SIZE = 393216; // 384KB const LARGE_RANGE_REQUEST_CHUNK_SIZE = 1048576; // 1MB +const MOBILE_MAX_CANVAS_SIZE = 2949120; // ~3MP 1920x1536 const SHOW_PAGE_NUM_INPUT_CLASS = 'show-page-number-input'; const IS_SAFARI_CLASS = 'is-safari'; const SCROLL_EVENT_THROTTLE_INTERVAL = 200; @@ -661,6 +662,9 @@ class DocBaseViewer extends BaseViewer { // Disable text layer if user doesn't have download permissions PDFJS.disableTextLayer = !checkPermission(file, PERMISSION_DOWNLOAD); + + // Decrease mobile canvas size to ~3MP (1920x1536) + PDFJS.maxCanvasPixels = Browser.isMobile() ? MOBILE_MAX_CANVAS_SIZE : PDFJS.maxCanvasPixels; } /** diff --git a/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js b/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js index 82249c735..56afee1e6 100644 --- a/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js +++ b/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js @@ -27,6 +27,7 @@ const DEFAULT_SCALE_DELTA = 1.1; const MAX_SCALE = 10.0; const MIN_SCALE = 0.1; const SCROLL_END_TIMEOUT = 500; +const MOBILE_MAX_CANVAS_SIZE = 2949120; // ~3MP 1920x1536 const sandbox = sinon.sandbox.create(); let docBase; @@ -1055,7 +1056,6 @@ describe('src/lib/viewers/doc/DocBaseViewer', () => { it('should enable range requests if the file and browser meet the conditions', () => { stubs.browser.returns('Chrome'); - docBase.setupPdfjs(); expect(PDFJS.disableRange).to.be.false; }); @@ -1069,6 +1069,12 @@ describe('src/lib/viewers/doc/DocBaseViewer', () => { docBase.setupPdfjs(); expect(PDFJS.disableTextLayer).to.be.true; }); + + it('should decrease max canvas size to 3MP if on mobile', () => { + sandbox.stub(Browser, 'isMobile').returns(true); + docBase.setupPdfjs(); + expect(PDFJS.maxCanvasPixels).to.equal(MOBILE_MAX_CANVAS_SIZE); + }); }); describe('initAnnotations()', () => {