Files
stf-DeviceFarmer/res/app/components/stf/screen/fast-image-render/test/results.md
Gunther Brunner d381d90446 - Added benchmark comparing JPEG, PNG, WEBP, DDS DXT1, and CRN DXT1 formats.
- Pixi Canvas and WebGL render was added for quick benchmarking but it's going away soon, because WebGL is even slower than Canvas for big textures. The browsers nowadays use OpenGL in the backend for rendering Canvas.
- There is 3 different WebGL Renders but they need adjusting so they work with Non Power Of Two textures.
- For now the winner is JPEG+Canvas, however CRN+WebGL will be better almost for sure if server side supports it.
2014-02-28 16:41:49 +09:00

3.1 KiB

Benchmark results (internal data)


Versions

  • Canary 35
  • Safari 7
  • Firefox 27

Time to load and draw 5000 frames

Hardware Browser Render Time ms
iMac Canary pixi-canvas 54s
iMac Canary pixi-webgl 58s
iMac Canary canvas 54s 5.8ms
iMac Firefox pixi-canvas 75s 8.3ms
iMac Firefox pixi-webgl 82s 11.3ms
iMac Firefox canvas 76s 8.1ms
MacBook Canary pixi-canvas 68s
MacBook Canary pixi-webgl 83s
MacBook Canary canvas 76s

Time to just draw 5000 frames

Hardware Browser Format Render Time ms
iMac Canary DDS DXT1 webgl 55s

Time to render 1 frame

Hardware Browser Format Size Function ms
iMac Canary DDS DXT1 2.1MB load 20-100ms
iMac Canary DDS DXT1 2.1MB draw 0.04ms
iMac Canary DDS GZIP 271KB load
iMac Canary DDS GZIP 271KB draw
iMac Canary WEBP 70KB load 9ms
iMac Canary WEBP 70KB draw 24ms
iMac Canary DDS CRN 70KB load 30ms
iMac Canary DDS CRN 70KB draw 0.04ms
iMac Canary JPEG 94KB load 25ms
iMac Canary JPEG 94KB draw 6ms
iMac Canary PNG 590KB load 6ms
iMac Canary PNG 590KB draw 30ms

About ST3C DXT1 DDS CRN

ST3C (S3 Texture Compression)

Group of related lossy texture compression algorithms, supported by most GPUs in Mac/PCs

DXT1 (Block Compression 1)

Smallest ST3C algorithm, 1-bit Alpha, compression ratio 6:1

DDS (DirectDraw Surface)

Container file format for storing ST3C textures

CRN (DXTn Real-time Transcoding)

Container file format for transcoding crunched ST3C textures

DDS vs JPEG

  • Drawing a DXT1 texture is over 100 times faster than JPEG
  • The DXT1 texture is transferred directly to the GPU, unlike JPEG
  • The DXT1 uses 6 times less GPU memory
  • File size is big, but when gzipped it's smaller than PNG

CRN vs JPEG

  • It transcodes to DXT1 so has all DXT1 benefits
  • File size is very small, even smaller than JPEG (!)
  • Requires to transcode on client side, so there is a CPU penalty
  • However transcoding CRN->DXT1 is faster than decoding and tranfering JPEG->GPU
  • JPEG->GPU texture uploading blocks the main thread and is slow
  • Transcoding a CRN can be done async, and even offloaded to a WebWorker
  • Currently the Crunch library is compiled to JS with Emscripten, so enabling asm.js would make the transcoding even faster
  • Compressing CRN vs libjpeg-turbo benchmarks still need to be done

Links

ECT1 texture format works on all Android devices http://developer.android.com/tools/help/etc1tool.html

WebGL also http://blog.tojicode.com/2011/12/compressed-textures-in-webgl.html

Crunch https://code.google.com/p/crunch/

Fast compression http://www.fastcompression.com/

DXT1 crunch WebGL http://www-cs-students.stanford.edu/~eparker/files/crunch/decode_test.html

WebGL Texture Utils https://github.com/gunta/webgl-texture-utils#webgl-texture-utils