<!doctype html>
<script src="../resources/runner.js"></script>
<script src="../layout/resources/line-layout-perf-test.js"></script>
<script src="resources/paint.js"></script>

<div id="container"></div>
<script>
const kNumberOfWords = 10000 * 30;
const container = document.getElementById('container');
const selection = window.getSelection();

container.textContent = (() => {
  const words = [];
  for (let i = 0; i < kNumberOfWords; ++i)
    words.push(TextGenerator.createWord(i % 12 + 3));
  return words.join(' ');
})();

const text = container.firstChild;
var count = 0;

measurePaint({
  iterationCount: 50,
  warmUpCount: 5,
  run: function() {
    if (count < 20) {
      // Select all.
      selection.collapse(container, 0);
      if (count % 2)
        selection.extend(container, 1);
    } else if (count < 35) {
      // Modify selection at beginning.
      selection.setBaseAndExtent(text, 4000 - count * 10, text, text.length);
    } else if (count == 35) {
      selection.setBaseAndExtent(text, 1000, text, 4000);
    } else {
      // Extend selection at end.
      selection.modify("extend", "forward", "word");
    }
    count++;
  },
});
</script>

