File size: 2,848 Bytes
8f3f8db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * Copyright (c) 2013-2025 Vanessa Freudenberg
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

window.stopVM = false;

window.onload = function() {

    // Wrap the file close primitive to stop after the benchmark
    // output file has been written
    var origFileClose = Squeak.Primitives.prototype.fileClose
    Squeak.Primitives.prototype.fileClose = (function (file) {
        var contents = Squeak.bytesAsString(new Uint8Array(file.contents.buffer));
        var r = document.getElementById("results");
        r.innerHTML = "Your machine: " + navigator.userAgent + "<br>" +
            "Your results:<br>" + contents.replace(/\r/g, "<br>") + "<br>"
        saveToLively(contents);
        SqueakJS.quitSqueak();
        return origFileClose.apply(this, arguments);
    });

    if (!Date.now) {
        Date.now = function now() {
            return new Date().getTime();
        };
    }

    function saveToLively(contents) {
        var address = (window.google &&
            google.loader &&
            google.loader.ClientLocation &&
            google.loader.ClientLocation.address) || {city: "unknown city", country: "unknown country"};
        contents = navigator.userAgent + "\n" +
            address.city + "\n" +
            address.country + "\n" +
            Date.now() + "\n" +
            Squeak.vmVersion + "\n" +
            contents;
        var oReq = new XMLHttpRequest();
        oReq.open(
            "get",
            "http://www.lively-kernel.org/babelsberg/nodejs/SqueakJSServer/?benchmarkResults=" +
                encodeURIComponent(contents),
            true);
        oReq.send();
    };

    SqueakJS.runSqueak('benchmark.image', sqCanvas, {
        spinner: sqSpinner,
        onQuit: function() {
            sqCanvas.style.display = "none";
        },
    });
};