Skip to content

Commit

Permalink
debug: log rendering time
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Dec 10, 2024
1 parent 3d9dc08 commit 074c515
Showing 1 changed file with 106 additions and 1 deletion.
107 changes: 106 additions & 1 deletion web/pdf_page_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,81 @@ import { XfaLayerBuilder } from "./xfa_layer_builder.js";
// enable the feature?
const ENABLE_ZOOM_DETAIL = true;

class Recorder {
constructor(kind) {
this.kind = kind;
this.accumulatedTime = 0;
this.startTime = 0;
this.currentStartTime = 0;
this.running = false;
}

start() {
if (this.running) {
console.warn(`Start ${this.kind} recorder while running`);
return;
}

console.log(`Start rendering ${this.kind}`);
this.currentStartTime = this.startTime = performance.now();
this.accumulatedTime = 0;
this.running = true;
}

pause() {
if (!this.running) {
console.warn(`Pause ${this.kind} recorder while not running`);
return;
}

console.log(`Pause rendering ${this.kind}`);
this.accumulatedTime += performance.now() - this.currentStartTime;
this.running = false;
}

resume() {
if (this.running) {
console.warn(`Resume ${this.kind} recorder while running`);
return;
}

console.log(`Resume rendering ${this.kind}`);
this.currentStartTime = performance.now();
this.running = true;
}

finish() {
if (!this.running) {
console.warn(`Finish ${this.kind} recorder while not running`);
return;
}

this.accumulatedTime += performance.now() - this.currentStartTime;
const totalTime = performance.now() - this.startTime;
this.running = false;

console.log(
`Finish renderig ${this.kind} (self: ${this.accumulatedTime}ms, total: ${totalTime}ms)`
);
}

cancel() {
if (this.running) {
this.accumulatedTime += performance.now() - this.currentStartTime;
this.running = false;
}

const totalTime = performance.now() - this.startTime;

console.log(
`Cancel renderig ${this.kind} (self: ${this.accumulatedTime}ms, total: ${totalTime}ms)`
);
}
}

const detailRecorder = new Recorder("foreground");
const backgroundRecorder = new Recorder("background");

/**
* @typedef {Object} PDFPageViewOptions
* @property {HTMLDivElement} [container] - The viewer element.
Expand Down Expand Up @@ -255,8 +330,10 @@ class PDFPageViewBase {
#renderContinueCallback = cont => {
this.#showCanvas?.(false);
if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) {
this.recorder.pause();
this.renderingState = RenderingStates.PAUSED;
this.resume = () => {
this.recorder.resume();
this.renderingState = RenderingStates.RUNNING;
cont();
};
Expand Down Expand Up @@ -329,6 +406,12 @@ class PDFPageViewBase {
}

cancelRendering({ cancelExtraDelay = 0 } = {}) {
if (
this.renderingState !== RenderingStates.INITIAL &&
this.renderingState !== RenderingStates.FINISHED
) {
this.recorder.cancel();
}
if (this.renderTask) {
this.renderTask.cancel(cancelExtraDelay);
this.renderTask = null;
Expand All @@ -351,6 +434,8 @@ class PDFPageViewBase {
* @implements {IRenderableView}
*/
class PDFPageView extends PDFPageViewBase {
recorder = backgroundRecorder;

#annotationMode = AnnotationMode.ENABLE_FORMS;

#hasRestrictedScaling = false;
Expand Down Expand Up @@ -1040,6 +1125,8 @@ class PDFPageView extends PDFPageViewBase {
}

async draw() {
this.recorder.start();

if (this.renderingState !== RenderingStates.INITIAL) {
console.error("Must be in new state before drawing");
this.reset(); // Ensure that we reset all state to prevent issues.
Expand Down Expand Up @@ -1140,6 +1227,15 @@ class PDFPageView extends PDFPageViewBase {
} else {
this.#hasRestrictedScaling = false;
}
console.log({
hasRestrictedScaling: this.#hasRestrictedScaling,
maxCanvasPixels: this.maxCanvasPixels.toLocaleString(),
pixelsInViewport: Math.round(pixelsInViewport).toLocaleString(),
outputScaleSx: outputScale.sx,
outputScaleSy: outputScale.sy,
maxScale,
ratio: window.devicePixelRatio,
});
}
const sfx = approximateFraction(outputScale.sx);
const sfy = approximateFraction(outputScale.sy);
Expand Down Expand Up @@ -1184,6 +1280,8 @@ class PDFPageView extends PDFPageViewBase {
renderContext,
prevCanvas,
renderTask => {
this.recorder.finish();

// Ensure that the thumbnails won't become partially (or fully) blank,
// for documents that contain interactive form elements.
this.#useThumbnailCanvas.regularAnnotations =
Expand Down Expand Up @@ -1291,6 +1389,8 @@ class PDFPageView extends PDFPageViewBase {
* @implements {IRenderableView}
*/
class PDFPageDetailView extends PDFPageViewBase {
recorder = detailRecorder;

constructor({ pageView }) {
super(pageView);

Expand Down Expand Up @@ -1427,6 +1527,8 @@ class PDFPageDetailView extends PDFPageViewBase {
}

async draw() {
this.recorder.start();

const initialRenderingState = this.renderingState;
if (initialRenderingState !== RenderingStates.INITIAL) {
console.error("Must be in new state before drawing");
Expand Down Expand Up @@ -1485,7 +1587,10 @@ class PDFPageDetailView extends PDFPageViewBase {
viewport,
pageColors: this.pageColors,
},
prevCanvas
prevCanvas,
() => {
this.recorder.finish();
}
);

div.setAttribute("data-loaded", true);
Expand Down

0 comments on commit 074c515

Please sign in to comment.