Revert "use a single pdfjs worker, rotated to avoid leaks"

This reverts commit f270ef54911acd800d2ffd577080b50ea2fe4aff.

Use a new worker on each reload to free up memory.
This commit is contained in:
Brian Gough 2017-06-07 13:29:10 +01:00
parent b277ee3254
commit aa8974dcd6

View file

@ -6,22 +6,6 @@ define [
App.factory 'PDFRenderer', ['$q', '$timeout', 'pdfAnnotations', 'pdfTextLayer', 'pdfSpinner', ($q, $timeout, pdfAnnotations, pdfTextLayer, pdfSpinner) -> App.factory 'PDFRenderer', ['$q', '$timeout', 'pdfAnnotations', 'pdfTextLayer', 'pdfSpinner', ($q, $timeout, pdfAnnotations, pdfTextLayer, pdfSpinner) ->
# Have a single worker used by all rendering, to avoid reloading
RenderThread = { worker: null, count: 0}
getRenderThread = () ->
if RenderThread.count > 16 # recycle the worker periodically to avoid leaks
RenderThread.readyToDestroy = true
RenderThread = { worker: null, count: 0 }
RenderThread.worker ||= new PDFJS.PDFWorker('pdfjsworker')
RenderThread.count++
return RenderThread
resetWorker = (thread) ->
thread.worker.destroy() if thread.readyToDestroy
# The PDF page renderer
class PDFRenderer class PDFRenderer
JOB_QUEUE_INTERVAL: 25 JOB_QUEUE_INTERVAL: 25
PAGE_LOAD_TIMEOUT: 60*1000 PAGE_LOAD_TIMEOUT: 60*1000
@ -43,8 +27,7 @@ define [
# PDFJS.disableStream # PDFJS.disableStream
# PDFJS.disableRange # PDFJS.disableRange
@scale = @options.scale || 1 @scale = @options.scale || 1
@thread = getRenderThread() @pdfjs = PDFJS.getDocument {url: @url, rangeChunkSize: 2*65536}
@pdfjs = PDFJS.getDocument {url: @url, rangeChunkSize: 2*65536, worker: @thread.worker}
@pdfjs.onProgress = @options.progressCallback @pdfjs.onProgress = @options.progressCallback
@document = $q.when(@pdfjs) @document = $q.when(@pdfjs)
@navigateFn = @options.navigateFn @navigateFn = @options.navigateFn
@ -353,9 +336,8 @@ define [
destroy: () -> destroy: () ->
@shuttingDown = true @shuttingDown = true
@resetState() @resetState()
@pdfjs.then (document) => @pdfjs.then (document) ->
document.cleanup() document.cleanup()
document.destroy() document.destroy()
resetWorker(@thread)
] ]