| (function() { |
| |
| var TextStage = Utilities.createSubclass(Stage, |
| function() |
| { |
| Stage.call(this); |
| |
| this.testElements = []; |
| this._offsetIndex = 0; |
| }, { |
| |
| shadowFalloff: new UnitBezier(new Point(0.015, 0.750), new Point(0.755, 0.235)), |
| shimmerAverage: 0, |
| shimmerMax: 0.5, |
| millisecondsPerRotation: 1000 / (.26 * Math.PI * 2), |
| particleDistanceX: 1.5, |
| particleDistanceY: .5, |
| lightnessMin: 13, |
| lightnessMax: 94, |
| gradients: [ |
| [10, 176, 176, 209, 148, 140], |
| [171, 120, 154, 245, 196, 154], |
| [224, 99, 99, 71, 134, 148], |
| [101, 100, 117, 80, 230, 175], |
| [232, 165, 30, 69, 186, 172] |
| ], |
| |
| initialize: function(benchmark) |
| { |
| Stage.prototype.initialize.call(this, benchmark); |
| |
| this._template = document.getElementById("template"); |
| this._offset = this.size.subtract(Point.elementClientSize(this._template)).multiply(.5); |
| this._template.style.left = this._offset.width + "px"; |
| this._template.style.top = this._offset.height + "px"; |
| |
| this._stepProgress = 0; |
| }, |
| |
| tune: function(count) |
| { |
| if (count == 0) |
| return; |
| |
| if (count < 0) { |
| this._offsetIndex = Math.max(this._offsetIndex + count, 0); |
| for (var i = this._offsetIndex; i < this.testElements.length; ++i) |
| this.testElements[i].style.visibility = "hidden"; |
| |
| this._stepProgress = 1 / this._offsetIndex; |
| return; |
| } |
| |
| this._offsetIndex = this._offsetIndex + count; |
| this._stepProgress = 1 / this._offsetIndex; |
| |
| var index = Math.min(this._offsetIndex, this.testElements.length); |
| for (var i = 0; i < index; ++i) |
| this.testElements[i].style.visibility = "visible"; |
| |
| if (this._offsetIndex <= this.testElements.length) |
| return; |
| |
| for (var i = this.testElements.length; i < this._offsetIndex; ++i) { |
| var clone = this._template.cloneNode(true); |
| this.testElements.push(clone); |
| this.element.insertBefore(clone, this.element.firstChild); |
| } |
| }, |
| |
| animate: function(timeDelta) { |
| var angle = Stage.dateCounterValue(this.millisecondsPerRotation); |
| |
| var progress = 0; |
| var stepX = Math.sin(angle) * this.particleDistanceX; |
| var stepY = Math.cos(angle) * this.particleDistanceY; |
| var x = -stepX * 3; |
| var y = -stepY * 3; |
| var gradient = this.gradients[Math.floor(angle/(Math.PI * 2)) % this.gradients.length]; |
| var offset = Stage.dateCounterValue(200); |
| this._template.style.transform = "translate(" + Math.floor(x) + "px," + Math.floor(y) + "px)"; |
| for (var i = 0; i < this._offsetIndex; ++i) { |
| var element = this.testElements[i]; |
| |
| var colorProgress = this.shadowFalloff.solve(progress); |
| var shimmer = Math.sin(offset - colorProgress); |
| colorProgress = Math.max(Math.min(colorProgress + Utilities.lerp(shimmer, this.shimmerAverage, this.shimmerMax), 1), 0); |
| var r = Math.round(Utilities.lerp(colorProgress, gradient[0], gradient[3])); |
| var g = Math.round(Utilities.lerp(colorProgress, gradient[1], gradient[4])); |
| var b = Math.round(Utilities.lerp(colorProgress, gradient[2], gradient[5])); |
| element.style.color = "rgb(" + r + "," + g + "," + b + ")"; |
| |
| x += stepX; |
| y += stepY; |
| element.style.transform = "translate(" + Math.floor(x) + "px," + Math.floor(y) + "px)"; |
| |
| progress += this._stepProgress; |
| } |
| }, |
| |
| complexity: function() |
| { |
| return 1 + this._offsetIndex; |
| } |
| }); |
| |
| var TextBenchmark = Utilities.createSubclass(Benchmark, |
| function(options) |
| { |
| Benchmark.call(this, new TextStage(), options); |
| } |
| ); |
| |
| window.benchmarkClass = TextBenchmark; |
| |
| }()); |