Add a cache system to limit the amount of ram used
This commit is contained in:
parent
e28e0669f9
commit
26bf2735fd
@ -6,6 +6,19 @@
|
|||||||
var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf';
|
var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf';
|
||||||
var kDefaultScale = 150;
|
var kDefaultScale = 150;
|
||||||
|
|
||||||
|
var kCacheSize = 20;
|
||||||
|
|
||||||
|
var Cache = function(size) {
|
||||||
|
var data = [];
|
||||||
|
this.push = function(view) {
|
||||||
|
data.push(view);
|
||||||
|
if (data.length > size)
|
||||||
|
data.shift().update();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var cache = new Cache(kCacheSize);
|
||||||
|
|
||||||
var PDFView = {
|
var PDFView = {
|
||||||
pages: [],
|
pages: [],
|
||||||
thumbnails: [],
|
thumbnails: [],
|
||||||
@ -121,7 +134,7 @@ var PDFView = {
|
|||||||
var windowBottom = window.pageYOffset + window.innerHeight;
|
var windowBottom = window.pageYOffset + window.innerHeight;
|
||||||
for (; i <= pages.length && currentHeight < windowBottom; i++) {
|
for (; i <= pages.length && currentHeight < windowBottom; i++) {
|
||||||
var page = pages[i - 1];
|
var page = pages[i - 1];
|
||||||
visiblePages.push({ id: page.id, y: currentHeight });
|
visiblePages.push({ id: page.id, y: currentHeight, view: page });
|
||||||
currentHeight += page.height * page.scale + kBottomMargin;
|
currentHeight += page.height * page.scale + kBottomMargin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +159,7 @@ var PageView = function(container, content, id, width, height, stats) {
|
|||||||
container.appendChild(div);
|
container.appendChild(div);
|
||||||
|
|
||||||
this.update = function(scale) {
|
this.update = function(scale) {
|
||||||
this.scale = scale;
|
this.scale = scale || this.scale;
|
||||||
div.style.width = (this.width * this.scale)+ 'px';
|
div.style.width = (this.width * this.scale)+ 'px';
|
||||||
div.style.height = (this.height * this.scale) + 'px';
|
div.style.height = (this.height * this.scale) + 'px';
|
||||||
|
|
||||||
@ -157,7 +170,7 @@ var PageView = function(container, content, id, width, height, stats) {
|
|||||||
this.draw = function() {
|
this.draw = function() {
|
||||||
if (div.hasChildNodes()) {
|
if (div.hasChildNodes()) {
|
||||||
this.updateStats();
|
this.updateStats();
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var canvas = document.createElement('canvas');
|
var canvas = document.createElement('canvas');
|
||||||
@ -176,6 +189,8 @@ var PageView = function(container, content, id, width, height, stats) {
|
|||||||
|
|
||||||
stats.begin = Date.now();
|
stats.begin = Date.now();
|
||||||
this.content.startRendering(ctx, this.updateStats);
|
this.content.startRendering(ctx, this.updateStats);
|
||||||
|
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateStats = function() {
|
this.updateStats = function() {
|
||||||
@ -240,8 +255,11 @@ window.addEventListener('pdfloaded', function(evt) {
|
|||||||
|
|
||||||
window.addEventListener('scroll', function(evt) {
|
window.addEventListener('scroll', function(evt) {
|
||||||
var visiblePages = PDFView.getVisiblePages();
|
var visiblePages = PDFView.getVisiblePages();
|
||||||
for (var i = 0; i < visiblePages.length; i++)
|
for (var i = 0; i < visiblePages.length; i++) {
|
||||||
PDFView.pages[visiblePages[i].id - 1].draw();
|
var page = visiblePages[i];
|
||||||
|
if (PDFView.pages[page.id - 1].draw())
|
||||||
|
cache.push(page.view);
|
||||||
|
}
|
||||||
|
|
||||||
if (!visiblePages.length)
|
if (!visiblePages.length)
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user