Skip to content

Commit

Permalink
Refactors Cache into PDFPageViewBuffer
Browse files Browse the repository at this point in the history
  • Loading branch information
yurydelendik committed Dec 19, 2014
1 parent 22c6268 commit b930228
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 33 deletions.
12 changes: 6 additions & 6 deletions web/pdf_page_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
* @property {number} scale - The page scale display.
* @property {PageViewport} defaultViewport - The page viewport.
* @property {PDFRenderingQueue} renderingQueue - The rendering queue object.
* @property {Cache} cache - The page cache.
* @property {IPDFTextLayerFactory} textLayerFactory
* @property {IPDFAnnotationsLayerFactory} annotationsLayerFactory
*/
Expand All @@ -45,7 +44,6 @@ var PDFPageView = (function PDFPageViewClosure() {
var scale = options.scale;
var defaultViewport = options.defaultViewport;
var renderingQueue = options.renderingQueue;
var cache = options.cache;
var textLayerFactory = options.textLayerFactory;
var annotationsLayerFactory = options.annotationsLayerFactory;

Expand All @@ -59,13 +57,15 @@ var PDFPageView = (function PDFPageViewClosure() {
this.hasRestrictedScaling = false;

this.renderingQueue = renderingQueue;
this.cache = cache;
this.textLayerFactory = textLayerFactory;
this.annotationsLayerFactory = annotationsLayerFactory;

this.renderingState = RenderingStates.INITIAL;
this.resume = null;

this.onBeforeDraw = null;
this.onAfterDraw = null;

this.textLayer = null;

this.zoomLayer = null;
Expand Down Expand Up @@ -447,9 +447,9 @@ var PDFPageView = (function PDFPageViewClosure() {
}
div.setAttribute('data-loaded', true);

// Add the page to the cache at the start of drawing. That way it can be
// evicted from the cache and destroyed even if we pause its rendering.
this.cache.push(this);
if (self.onBeforeDraw) {
self.onBeforeDraw();
}
},

beforePrint: function PDFPageView_beforePrint() {
Expand Down
38 changes: 32 additions & 6 deletions web/pdf_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*globals watchScroll, Cache, DEFAULT_CACHE_SIZE, PDFPageView, UNKNOWN_SCALE,
/*globals watchScroll, PDFPageView, UNKNOWN_SCALE,
SCROLLBAR_PADDING, VERTICAL_PADDING, MAX_AUTO_SCALE, CSS_UNITS,
DEFAULT_SCALE, scrollIntoView, getVisibleElements, RenderingStates,
PDFJS, Promise, TextLayerBuilder, PDFRenderingQueue,
Expand All @@ -30,6 +30,7 @@ var PresentationModeState = {
};

var IGNORE_CURRENT_POSITION_ON_ZOOM = false;
var DEFAULT_CACHE_SIZE = 10;

//#include pdf_rendering_queue.js
//#include pdf_page_view.js
Expand All @@ -52,6 +53,26 @@ var IGNORE_CURRENT_POSITION_ON_ZOOM = false;
* @implements {IRenderableView}
*/
var PDFViewer = (function pdfViewer() {
function PDFPageViewBuffer(size) {
var data = [];
this.push = function cachePush(view) {
var i = data.indexOf(view);
if (i >= 0) {
data.splice(i, 1);
}
data.push(view);
if (data.length > size) {
data.shift().destroy();
}
};
this.resize = function (newSize) {
size = newSize;
while (data.length > size) {
data.shift().destroy();
}
};
}

/**
* @constructs PDFViewer
* @param {PDFViewerOptions} options
Expand Down Expand Up @@ -212,7 +233,13 @@ var PDFViewer = (function pdfViewer() {
});
this.onePageRendered = onePageRendered;

var bindOnAfterDraw = function (pageView) {
var bindOnAfterAndBeforeDraw = function (pageView) {
pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() {
// Add the page to the buffer at the start of drawing. That way it can
// be evicted from the buffer and destroyed even if we pause its
// rendering.
self._buffer.push(this);
};
// when page is painted, using the image as thumbnail base
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
if (!isOnePageRenderedResolved) {
Expand Down Expand Up @@ -246,11 +273,10 @@ var PDFViewer = (function pdfViewer() {
scale: scale,
defaultViewport: viewport.clone(),
renderingQueue: this.renderingQueue,
cache: this.cache,
textLayerFactory: textLayerFactory,
annotationsLayerFactory: this
});
bindOnAfterDraw(pageView);
bindOnAfterAndBeforeDraw(pageView);
this.pages.push(pageView);
}

Expand Down Expand Up @@ -291,11 +317,11 @@ var PDFViewer = (function pdfViewer() {
},

_resetView: function () {
this.cache = new Cache(DEFAULT_CACHE_SIZE);
this.pages = [];
this._currentPageNumber = 1;
this._currentScale = UNKNOWN_SCALE;
this._currentScaleValue = null;
this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
this.location = null;
this._pagesRotation = 0;
this._pagesRequests = [];
Expand Down Expand Up @@ -538,7 +564,7 @@ var PDFViewer = (function pdfViewer() {

var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE,
2 * visiblePages.length + 1);
this.cache.resize(suggestedCacheSize);
this._buffer.resize(suggestedCacheSize);

this.renderingQueue.renderHighestPriority(visible);

Expand Down
21 changes: 0 additions & 21 deletions web/ui_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ var UNKNOWN_SCALE = 0;
var MAX_AUTO_SCALE = 1.25;
var SCROLLBAR_PADDING = 40;
var VERTICAL_PADDING = 5;
var DEFAULT_CACHE_SIZE = 10;

// optimised CSS custom property getter/setter
var CustomStyle = (function CustomStyleClosure() {
Expand Down Expand Up @@ -349,23 +348,3 @@ var ProgressBar = (function ProgressBarClosure() {

return ProgressBar;
})();

var Cache = function cacheCache(size) {
var data = [];
this.push = function cachePush(view) {
var i = data.indexOf(view);
if (i >= 0) {
data.splice(i, 1);
}
data.push(view);
if (data.length > size) {
data.shift().destroy();
}
};
this.resize = function (newSize) {
size = newSize;
while (data.length > size) {
data.shift().destroy();
}
};
};

0 comments on commit b930228

Please sign in to comment.