<!DOCTYPE html>
<html>
<head>
    <title>Chapter reflow performance test: random text</title>
    <script src="../resources/runner.js"></script>
</head>
<body>
    <pre id="log"></pre>
    <div id="target" style="width: 300px; display: none;">

    </div>
    <script>
        var RandomTextGenerator = function() {
            this.letters = [
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode),
                String.fromCharCode(RandomTextGenerator.firstCharCode)
            ]
        }

        RandomTextGenerator.firstCharCode = 65; // 'A'

        RandomTextGenerator.lastCharCode = 123; // 'z'

        RandomTextGenerator.prototype.advance = function(index) {
            var charCode = this.letters[index].charCodeAt(0);
            var newCharCode = charCode + 1;
            if (newCharCode > RandomTextGenerator.lastCharCode)
                newCharCode = RandomTextGenerator.firstCharCode;
            this.letters[index] = String.fromCharCode(newCharCode);
            return charCode;
        }

        RandomTextGenerator.prototype.generate = function() {
            var result = this.letters.join("");

            var index = 0;
            while (1) {
                var charCode = this.advance(index);
                if (charCode != RandomTextGenerator.lastCharCode)
                    break;
                ++index;
            }

            return result;
        }

        var target = document.getElementById("target");
        var style = target.style;
        var randomTextGenerator = new RandomTextGenerator;

        function test() {
            var target = document.getElementById("target");
            var style = target.style;

            var innerHTML = "<p>";
            for (var i = 0; i < 5000; ++i)
                innerHTML += randomTextGenerator.generate() + " ";
            innerHTML += "</p>";
            target.innerHTML = innerHTML;

            style.display = "block";
            style.width = "280px";
            PerfTestRunner.forceLayout();
            style.display = "none";
        }

        PerfTestRunner.measureRunsPerSecond({
            description: "Measures performance of 3 layouts (using 2 different font-sizes) on a page containing random text.",
            run: test
        });
    </script>
</body>
</html>
