mirror of
https://github.com/google/pebble.git
synced 2025-03-16 01:01:20 +00:00
40 lines
11 KiB
HTML
40 lines
11 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
<head>
|
||
|
<!--
|
||
|
This file acts as a simple benchmark to be executed in (phone) browsers.
|
||
|
It compiles tictoc.js (embedded) below using the generated compiler.
|
||
|
Just share this folder and point your browser to this file.
|
||
|
-->
|
||
|
<meta charset="UTF-8">
|
||
|
<title>js_tooling Benchmark page</title>
|
||
|
<script src="js_tooling.js"></script>
|
||
|
<script>
|
||
|
// enable logging
|
||
|
JS_TOOLING_LOGGING = true;
|
||
|
</script>
|
||
|
<script>
|
||
|
var tictoc = "\r\n\/*global Rocky:true *\/\r\n\/*eslint max-len: [2, 100, 4]*\/\r\n\r\nif (typeof (Rocky) === \'undefined\') {\r\n Rocky = {};\r\n}\r\n\r\n(function() {\r\n Rocky.WebAPIBinding = function(canvasElement) {\r\n var _private = {};\r\n this._private = _private;\r\n\r\n _private.subscriptions = {\r\n emit: function(name, event) {\r\n var f = this[name];\r\n if (typeof f === \'function\') {\r\n f(event);\r\n }\r\n }\r\n };\r\n\r\n \/\/ -----------------\r\n if (typeof Rocky.bindCanvas === \'function\') {\r\n _private.binding = Rocky.bindCanvas(canvasElement);\r\n } else if (typeof Rocky.bindNative === \'function\') {\r\n _private.binding = Rocky.bindNative(canvasElement);\r\n } else {\r\n throw new Error(\'cannot create a binding\');\r\n }\r\n _private.binding.update_proc = function(ctx, bounds) {\r\n var ctx2D = new Rocky.CanvasRenderingContext2D(_private.binding, ctx, bounds);\r\n _private.subscriptions.emit(\'draw\', {context: ctx2D});\r\n };\r\n this.requestDraw = function() {\r\n _private.binding.mark_dirty();\r\n };\r\n \/\/ -----------------\r\n };\r\n\r\n Rocky.WebAPIBinding.prototype.on = function(event, callback) {\r\n \/\/ workaround for speed reasons: this is a poor shadow of a real event emitter\u2026\r\n if ([\'draw\', \'minutechange\'].indexOf(event) < 0) {\r\n throw new Error(\'unknown event \' + event);\r\n }\r\n if (typeof this._private.subscriptions[event] !== \'undefined\') {\r\n throw new Error(\'event can only be bound once \' + event);\r\n }\r\n\r\n this._private.subscriptions[event] = callback.bind(this);\r\n\r\n if (event === \'minutechange\') {\r\n var tickService = new Rocky.TickService(callback);\r\n tickService.schedule();\r\n }\r\n };\r\n\r\n})();\r\n\r\n\/*global Rocky:true *\/\r\n\r\nif (typeof (Rocky) === \'undefined\') {\r\n Rocky = {};\r\n}\r\n\r\n(function() {\r\n\r\n Rocky.CanvasRenderingContext2D = function(rockyBinding, ctx, bounds) {\r\n this.binding = rockyBinding;\r\n this.cPtr = ctx;\r\n this.canvas = {\r\n clientWidth: bounds.w,\r\n clientHeight: bounds.h\r\n };\r\n this.beginPath();\r\n };\r\n\r\n Rocky.CanvasRenderingContext2D.prototype.fillRect = function(x, y, width, height) {\r\n this.binding.graphics_fill_rect(this.cPtr, [x, y, width, height], 0, 0);\r\n };\r\n\r\n Object.defineProperties(Rocky.CanvasRenderingContext2D.prototype, {\r\n \'fillStyle\': {\r\n get: function() {\r\n return \'not implement, yet\';\r\n },\r\n set: function(value) {\r\n var color = Rocky.GColorFromStyle(value);\r\n this.binding.graphics_context_set_fill_color(this.cPtr, color);\r\n }\r\n },\r\n \'strokeStyle\': {\r\n get: function() {\r\n return \'not implement, yet\';\r\n },\r\n set: function(value) {\r\n var color = Rocky.GColorFromStyle(value);\r\n this.binding.graphics_context_set_stroke_color(this.cPtr, color);\r\n }\r\n },\r\n \'lineWidth\': {\r\n get: function() {\r\n return \'not implement, yet\';\r\n },\r\n set: function(value) {\r\n this.binding.graphics_context_set_stroke_width(this.cPtr, value);\r\n }\r\n }\r\n });\r\n\r\n Rocky.CanvasRenderingContext2D.prototype.beginPath = function() {\r\n this.currentPath = new Rocky.Path2D();\r\n };\r\n\r\n Rocky.CanvasRenderingContext2D.prototype.stroke = function(path) {\r\n path = path || this.currentPath;\r\n \/\/ TODO: implement this fully\r\n this.binding.graphics_draw_line(this.cPtr, path.p0, path.p1);\r\n };\r\n\r\n \/\/ forward path calls to current Path2D instance\r\n [\'moveTo\', \'lineTo\'].forEach(function(s) {\r\n Rocky.CanvasRenderingContext2D.prototype[s] = function() {\r\n var f = this.currentPath[s];\r\n f.apply(this.currentPath, arguments);\r\n };\r\n });\r\n})();\r\n\r\n\/*global Rocky:true *\/\r\n\r\nif (typeof (Rocky) === \'undefined\') {\r\n Rocky
|
||
|
function testGenerator(remainingCalls) {
|
||
|
var logLines = [];
|
||
|
var logOriginal = console.log;
|
||
|
console.log = function(s) {logLines.push(s);};
|
||
|
var result = createSnapshot(tictoc);
|
||
|
console.log = logOriginal;
|
||
|
document.writeln('<pre>');
|
||
|
logLines.forEach(function(s) {
|
||
|
document.writeln(s);
|
||
|
});
|
||
|
document.write(JSON.stringify(result));
|
||
|
document.writeln('</pre>');
|
||
|
if (remainingCalls > 0) {
|
||
|
setTimeout(function(){testGenerator(remainingCalls - 1);}, 200);
|
||
|
}
|
||
|
}
|
||
|
setTimeout(function(){testGenerator(3);}, 200);
|
||
|
</script>
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
</body>
|
||
|
</html>
|