Skip to content

Commit

Permalink
Moves PDFWorkerStream to main side.
Browse files Browse the repository at this point in the history
  • Loading branch information
mukulmishra18 committed Jul 10, 2017
1 parent 9951972 commit 92b4dbd
Show file tree
Hide file tree
Showing 3 changed files with 222 additions and 227 deletions.
209 changes: 1 addition & 208 deletions src/core/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -316,209 +316,6 @@ PDFNetworkStreamRangeReader.prototype = {
},
};

/** @implements {IPDFStream} */
var PDFWorkerStream = (function PDFWorkerStreamClosure() {
function PDFWorkerStream(params, msgHandler) {
this._queuedChunks = [];
var initialData = params.initialData;
if (initialData && initialData.length > 0) {
this._queuedChunks.push(initialData);
}
this._msgHandler = msgHandler;

this._isRangeSupported = !(params.disableRange);
this._isStreamingSupported = !(params.disableStream);
this._contentLength = params.length;

this._fullRequestReader = null;
this._rangeReaders = [];

msgHandler.on('OnDataRange', this._onReceiveData.bind(this));
msgHandler.on('OnDataProgress', this._onProgress.bind(this));
}
PDFWorkerStream.prototype = {
_onReceiveData: function PDFWorkerStream_onReceiveData(args) {
if (args.begin === undefined) {
if (this._fullRequestReader) {
this._fullRequestReader._enqueue(args.chunk);
} else {
this._queuedChunks.push(args.chunk);
}
} else {
var found = this._rangeReaders.some(function (rangeReader) {
if (rangeReader._begin !== args.begin) {
return false;
}
rangeReader._enqueue(args.chunk);
return true;
});
assert(found);
}
},

_onProgress: function PDFWorkerStream_onProgress(evt) {
if (this._rangeReaders.length > 0) {
// Reporting to first range reader.
var firstReader = this._rangeReaders[0];
if (firstReader.onProgress) {
firstReader.onProgress({ loaded: evt.loaded, });
}
}
},

_removeRangeReader: function PDFWorkerStream_removeRangeReader(reader) {
var i = this._rangeReaders.indexOf(reader);
if (i >= 0) {
this._rangeReaders.splice(i, 1);
}
},

getFullReader: function PDFWorkerStream_getFullReader() {
assert(!this._fullRequestReader);
var queuedChunks = this._queuedChunks;
this._queuedChunks = null;
return new PDFWorkerStreamReader(this, queuedChunks);
},

getRangeReader: function PDFWorkerStream_getRangeReader(begin, end) {
var reader = new PDFWorkerStreamRangeReader(this, begin, end);
this._msgHandler.send('RequestDataRange', { begin, end, });
this._rangeReaders.push(reader);
return reader;
},

cancelAllRequests: function PDFWorkerStream_cancelAllRequests(reason) {
if (this._fullRequestReader) {
this._fullRequestReader.cancel(reason);
}
var readers = this._rangeReaders.slice(0);
readers.forEach(function (rangeReader) {
rangeReader.cancel(reason);
});
},
};

/** @implements {IPDFStreamReader} */
function PDFWorkerStreamReader(stream, queuedChunks) {
this._stream = stream;
this._done = false;
this._queuedChunks = queuedChunks || [];
this._requests = [];
this._headersReady = Promise.resolve();
stream._fullRequestReader = this;

this.onProgress = null; // not used
}
PDFWorkerStreamReader.prototype = {
_enqueue: function PDFWorkerStreamReader_enqueue(chunk) {
if (this._done) {
return; // ignore new data
}
if (this._requests.length > 0) {
var requestCapability = this._requests.shift();
requestCapability.resolve({ value: chunk, done: false, });
return;
}
this._queuedChunks.push(chunk);
},

get headersReady() {
return this._headersReady;
},

get isRangeSupported() {
return this._stream._isRangeSupported;
},

get isStreamingSupported() {
return this._stream._isStreamingSupported;
},

get contentLength() {
return this._stream._contentLength;
},

read: function PDFWorkerStreamReader_read() {
if (this._queuedChunks.length > 0) {
var chunk = this._queuedChunks.shift();
return Promise.resolve({ value: chunk, done: false, });
}
if (this._done) {
return Promise.resolve({ value: undefined, done: true, });
}
var requestCapability = createPromiseCapability();
this._requests.push(requestCapability);
return requestCapability.promise;
},

cancel: function PDFWorkerStreamReader_cancel(reason) {
this._done = true;
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({ value: undefined, done: true, });
});
this._requests = [];
},
};

/** @implements {IPDFStreamRangeReader} */
function PDFWorkerStreamRangeReader(stream, begin, end) {
this._stream = stream;
this._begin = begin;
this._end = end;
this._queuedChunk = null;
this._requests = [];
this._done = false;

this.onProgress = null;
}
PDFWorkerStreamRangeReader.prototype = {
_enqueue: function PDFWorkerStreamRangeReader_enqueue(chunk) {
if (this._done) {
return; // ignore new data
}
if (this._requests.length === 0) {
this._queuedChunk = chunk;
} else {
var requestsCapability = this._requests.shift();
requestsCapability.resolve({ value: chunk, done: false, });
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({ value: undefined, done: true, });
});
this._requests = [];
}
this._done = true;
this._stream._removeRangeReader(this);
},

get isStreamingSupported() {
return false;
},

read: function PDFWorkerStreamRangeReader_read() {
if (this._queuedChunk) {
return Promise.resolve({ value: this._queuedChunk, done: false, });
}
if (this._done) {
return Promise.resolve({ value: undefined, done: true, });
}
var requestCapability = createPromiseCapability();
this._requests.push(requestCapability);
return requestCapability.promise;
},

cancel: function PDFWorkerStreamRangeReader_cancel(reason) {
this._done = true;
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({ value: undefined, done: true, });
});
this._requests = [];
this._stream._removeRangeReader(this);
},
};

return PDFWorkerStream;
})();

var WorkerMessageHandler = {
setup(handler, port) {
var testMessageProcessed = false;
Expand Down Expand Up @@ -648,11 +445,7 @@ var WorkerMessageHandler = {

var pdfStream;
try {
if (source.chunkedViewerLoading) {
pdfStream = new PDFWorkerStream(source, handler);
} else {
pdfStream = new PDFNetworkStream(data, handler);
}
pdfStream = new PDFNetworkStream(data, handler);
} catch (ex) {
pdfManagerCapability.reject(ex);
return pdfManagerCapability.promise;
Expand Down
37 changes: 19 additions & 18 deletions src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import {
RenderingCancelledException
} from './dom_utils';
import { FontFaceObject, FontLoader } from './font_loader';
import { PDFNetworkStream, PDFWorkerStream } from './network';
import { CanvasGraphics } from './canvas';
import { Metadata } from './metadata';
import { PDFNetworkStream } from './network';

var DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536

Expand Down Expand Up @@ -1520,12 +1520,13 @@ var WorkerTransport = (function WorkerTransportClosure() {
this.destroyCapability = null;
this._passwordCapability = null;

this._PDFNetworkStream = null;
this._networkStream = null;
this._fullReader = null;

this.pageCache = [];
this.pagePromises = [];
this.downloadInfoCapability = createPromiseCapability();
this.networkStreamCapability = createPromiseCapability();

this.setupMessageHandler();
}
Expand Down Expand Up @@ -1578,35 +1579,35 @@ var WorkerTransport = (function WorkerTransportClosure() {
var pdfDataRangeTransport = this.pdfDataRangeTransport;
if (pdfDataRangeTransport) {
pdfDataRangeTransport.addRangeListener(function(begin, chunk) {
messageHandler.send('OnDataRange', {
begin,
chunk,
});
this._networkStream.onReceivedData({ begin, chunk, });
});

pdfDataRangeTransport.addProgressListener(function(loaded) {
messageHandler.send('OnDataProgress', {
loaded,
});
this._networkStream.onDataProgress({ loaded, });
});

pdfDataRangeTransport.addProgressiveReadListener(function(chunk) {
messageHandler.send('OnDataRange', {
chunk,
});
this._networkStream.onReceivedData({ chunk, });
});

messageHandler.on('RequestDataRange',
function transportDataRange(data) {
this.networkStreamCapability.promise.then(() => {
this._networkStream.requestDataRangeCapability.promise.
then(function(data) {
pdfDataRangeTransport.requestDataRange(data.begin, data.end);
}, this);
});
});
}

messageHandler.on('GetReader', function(data, sink) {
data.disableRange = true;
data.disableStream = true;
this._PDFNetworkStream = new PDFNetworkStream(data);
this._fullReader = this._PDFNetworkStream.getFullReader();
if (data.chunkedViewerLoading) {
this._networkStream = new PDFWorkerStream(data.source);
} else {
this._networkStream = new PDFNetworkStream(data);
}
this.networkStreamCapability.resolve();
this._fullReader = this._networkStream.getFullReader();

sink.onPull = () => {
this._fullReader.read().then(function({ value, done, }) {
Expand Down Expand Up @@ -1652,7 +1653,7 @@ var WorkerTransport = (function WorkerTransportClosure() {

messageHandler.on('GetRangeReader', function(data, sink) {
let _rangeReader =
this._PDFNetworkStream.getRangeReader(data.begin, data.end);
this._networkStream.getRangeReader(data.begin, data.end);

sink.onPull = () => {
_rangeReader.read().then(function({ value, done, }) {
Expand Down
Loading

0 comments on commit 92b4dbd

Please sign in to comment.