diff --git a/demo/client/src/benchmark.ts b/demo/client/src/benchmark.ts index 0a5b7791..c5b3171e 100644 --- a/demo/client/src/benchmark.ts +++ b/demo/client/src/benchmark.ts @@ -159,20 +159,31 @@ class BenchmarkTestView extends PathfinderDemoView { protected pathTransformsForObject(objectIndex: number): Float32Array { const pathTransforms = new Float32Array(4 * (STRING.length + 1)); - let currentX = 0; + + let currentX = 0, currentY = 0; + const availableWidth = this.canvas.width / this.pixelsPerUnit; + const lineHeight = unwrapNull(this.appController.font).lineHeight(); for (let glyphIndex = 0; glyphIndex < STRING.length; glyphIndex++) { const glyph = unwrapNull(this.appController.textRun).glyphs[glyphIndex]; - pathTransforms.set([1, 1, currentX, 0], (glyphIndex + 1) * 4); + pathTransforms.set([1, 1, currentX, currentY], (glyphIndex + 1) * 4); + currentX += glyph.advanceWidth; + if (currentX > availableWidth) { + currentX = 0; + currentY += lineHeight; + } } return pathTransforms; } protected renderingFinished(): void { - if (this.renderingPromiseCallback != null) - this.renderingPromiseCallback(this.lastTimings.atlasRendering); + if (this.renderingPromiseCallback != null) { + const glyphCount = unwrapNull(this.appController.textRun).glyphs.length; + const usPerGlyph = this.lastTimings.atlasRendering * 1000.0 / glyphCount; + this.renderingPromiseCallback(usPerGlyph); + } } destFramebuffer: WebGLFramebuffer | null = null; @@ -195,18 +206,23 @@ class BenchmarkTestView extends PathfinderDemoView { glmatrix.mat4.fromTranslation(transform, [translation[0], translation[1], 0]); glmatrix.mat4.scale(transform, transform, [this.camera.scale, this.camera.scale, 1.0]); - const pixelsPerUnit = this._pixelsPerEm / unwrapNull(this.appController.font).unitsPerEm; + const pixelsPerUnit = this.pixelsPerUnit; glmatrix.mat4.scale(transform, transform, [pixelsPerUnit, pixelsPerUnit, 1.0]); return transform; } + private get pixelsPerUnit(): number { + return this._pixelsPerEm / unwrapNull(this.appController.font).unitsPerEm; + } + get pixelsPerEm(): number { return this._pixelsPerEm; } set pixelsPerEm(newPixelsPerEm: number) { this._pixelsPerEm = newPixelsPerEm; + this.uploadPathTransforms(1); this.setDirty(); }