Index: tools/perf/page_sets/tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html |
diff --git a/tools/perf/page_sets/tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html b/tools/perf/page_sets/tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2949fa1362d97b537359c31153a6ad5107bdc426 |
--- /dev/null |
+++ b/tools/perf/page_sets/tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html |
@@ -0,0 +1,61 @@ |
+<!DOCTYPE html> |
+<meta name="viewport" content="width=device-width, user-scalable=no"> |
+<link rel="stylesheet" type="text/css" href="resources/tablet.css"> |
+<link rel="stylesheet" type="text/css" href="resources/transition.css"> |
+<script src="resources/perftesthelper.js"></script> |
+<style> |
+show + target { |
+ opacity: 1; |
+} |
+hide + target { |
+ opacity: 0; |
+} |
+show, hide { |
+ display: none; |
+} |
+</style> |
+ |
+<container id="container"></container> |
+ |
+<script> |
+var N = PerfTestHelper.getN(1000); |
+var duration = 1000; |
+var stash = {SHOW: [], HIDE: []}; |
+var targets = []; |
+ |
+for (var i = 0; i < N; i++) { |
+ stash.HIDE.push(document.createElement('hide')); |
+ var show = document.createElement('show'); |
+ container.appendChild(show); |
+ var target = document.createElement('target'); |
+ container.appendChild(target); |
+ targets.push(target); |
+} |
+ |
+function startTransition(target, fastForward) { |
+ var state = target.previousSibling; |
+ stash[state.tagName].push(state); |
+ state.remove(); |
+ var newState = state.tagName == 'SHOW' ? stash.HIDE.pop() : stash.SHOW.pop(); |
+ container.insertBefore(newState, target); |
+ target.style.transitionDelay = -fastForward + 'ms'; |
+} |
+ |
+requestAnimationFrame(function(time) { |
+ var startTime = time - duration; |
+ var step = 0; |
+ |
+ function staggeredStart(time) { |
+ var elapsed = time - startTime; |
+ var targetStep = Math.floor(N * elapsed / duration); |
+ step = Math.max(targetStep - N, step); |
+ for (; step < targetStep; step++) { |
+ startTransition(targets[step % N], elapsed - (step / N * duration)); |
+ } |
+ requestAnimationFrame(staggeredStart); |
+ } |
+ staggeredStart(time); |
+}); |
+ |
+PerfTestHelper.signalReady(); |
+</script> |