<!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";
            target.offsetLeft;
            style.display = "none";
        }

        PerfTestRunner.measureRunsPerSecond({ run: test });
    </script>
</body>
</html>
