| Index: chrome/test/data/third_party/spaceport/js/tests/text.js
|
| diff --git a/chrome/test/data/third_party/spaceport/js/tests/text.js b/chrome/test/data/third_party/spaceport/js/tests/text.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c5f542522b82c0f2128d8aa1708ae65572b30054
|
| --- /dev/null
|
| +++ b/chrome/test/data/third_party/spaceport/js/tests/text.js
|
| @@ -0,0 +1,93 @@
|
| +define([ 'util/ensureCallback', 'util/bench' ], function (ensureCallback, bench) {
|
| + var texts = [ 'hello world', 'other text' ];
|
| + var CANVAS_WIDTH = 640;
|
| + var CANVAS_HEIGHT = 640;
|
| +
|
| + var fontFamilies = {
|
| + sans: 'sans-serif',
|
| + serif: 'serif',
|
| + monospace: 'monospace'
|
| + };
|
| +
|
| + var fontSizes = [ 8, 10, 12, 14, 16, 24 ];
|
| +
|
| + var stylePreparers = {
|
| + outline: function (context) {
|
| + context.strokeStyle = 'red';
|
| + },
|
| +
|
| + fill: function (context) {
|
| + context.fillStyle = 'green';
|
| + },
|
| +
|
| + fillOutline: function (context) {
|
| + context.strokeStyle = 'red';
|
| + context.fillStyle = 'green';
|
| + }
|
| + };
|
| +
|
| + var styleExecutors = {
|
| + outline: function (context, text) {
|
| + context.strokeText(text, 0, 0);
|
| + },
|
| +
|
| + fill: function (context, text) {
|
| + context.fillText(text, 0, 0);
|
| + },
|
| +
|
| + fillOutline: function (context, text) {
|
| + context.fillText(text, 0, 0);
|
| + context.strokeText(text, 0, 0);
|
| + }
|
| + };
|
| +
|
| + var styles = Object.keys(styleExecutors);
|
| +
|
| + function runTest(fontFamily, fontSize, style, callback) {
|
| + callback = ensureCallback(callback);
|
| +
|
| + var canvas = document.createElement('canvas');
|
| + canvas.width = CANVAS_WIDTH;
|
| + canvas.height = CANVAS_HEIGHT;
|
| +
|
| + var context = canvas.getContext('2d');
|
| + context.font = fontSize + 'pt ' + fontFamily;
|
| + context.textBaseline = 'top';
|
| + context.textAlign = 'left';
|
| + stylePreparers[style](context);
|
| +
|
| + var execute = styleExecutors[style];
|
| + var score = bench(100, function (i) {
|
| + execute(context, texts[i % texts.length]);
|
| +
|
| + // FIXME I'd like to be able to verify that the drawing operation
|
| + // actually executed (and didn't defer), but getImageData (below)
|
| + // is too slow to run in a loop like this.
|
| + //context.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT)[0];
|
| + });
|
| +
|
| + callback(null, {
|
| + score: score.toFixed(2)
|
| + });
|
| + }
|
| +
|
| + // family => size => style => test
|
| + var tests = { };
|
| + Object.keys(fontFamilies).forEach(function (fontFamilyKey) {
|
| + var fontFamily = fontFamilies[fontFamilyKey];
|
| +
|
| + var subTests = { };
|
| + tests[fontFamilyKey] = subTests;
|
| + fontSizes.forEach(function (fontSize) {
|
| + var subSubTests = { };
|
| + subTests[fontSize] = subSubTests;
|
| + styles.forEach(function (style) {
|
| + subSubTests[style] = function (callback) {
|
| + runTest(fontFamily, fontSize, style, callback);
|
| + };
|
| + });
|
| + });
|
| + });
|
| +
|
| + return tests;
|
| +});
|
|
|