| Index: tools/playback_benchmark/playback.js
|
| diff --git a/tools/playback_benchmark/playback.js b/tools/playback_benchmark/playback.js
|
| deleted file mode 100644
|
| index 49628512f0eab535738f4491476946499adc417a..0000000000000000000000000000000000000000
|
| --- a/tools/playback_benchmark/playback.js
|
| +++ /dev/null
|
| @@ -1,258 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -/**
|
| - * @fileoverview Playback agent.
|
| - */
|
| -
|
| -var Benchmark = Benchmark || {};
|
| -
|
| -/**
|
| - * Playback agent class.
|
| - * @param {Object} data Test data.
|
| - * @constructor
|
| - */
|
| -Benchmark.Agent = function(data) {
|
| - this.timeline = data.timeline;
|
| - this.timelinePosition = 0;
|
| - this.steps = data.steps;
|
| - this.stepsPosition = 0;
|
| - this.randoms = data.randoms;
|
| - this.randomsPosition = 0;
|
| - this.ticks = data.ticks;
|
| - this.ticksPosition = 0;
|
| - this.delayedScriptElements = {};
|
| - this.callStackDepth = 0;
|
| - document.cookie = data.cookie;
|
| - if (window.innerWidth != data.width || window.innerHeight != data.height) {
|
| - Benchmark.die('Wrong window size: ' +
|
| - window.innerWidth + 'x' + window.innerHeight +
|
| - ' instead of ' + data.width + 'x' + data.height);
|
| - }
|
| - this.startTime = Benchmark.originals.Date.now();
|
| -};
|
| -
|
| -/**
|
| - * Returns current timeline event.
|
| - * @return {Object} Event.
|
| - */
|
| -Benchmark.Agent.prototype.getCurrentEvent = function() {
|
| - return this.timeline[this.timelinePosition];
|
| -};
|
| -
|
| -/**
|
| - * Returns next recorded event in timeline. If event is the last event in
|
| - * timeline, posts test results to driver.
|
| - * @param {Object} event Event that actually happened, should correspond to
|
| - * the recorded one (used for debug only).
|
| - * @return {Object} Recorded event from timeline.
|
| - */
|
| -Benchmark.Agent.prototype.getNextEvent = function(event) {
|
| - var recordedEvent = this.getCurrentEvent();
|
| - this.ensureEqual(event, recordedEvent);
|
| - if (event.type == 'random' || event.type == 'ticks') {
|
| - recordedEvent.count -= 1;
|
| - if (recordedEvent.count == 0) {
|
| - this.timelinePosition += 1;
|
| - }
|
| - } else {
|
| - this.timelinePosition += 1;
|
| - }
|
| - if (this.timelinePosition == this.steps[this.stepsPosition][1]) {
|
| - var score = Benchmark.originals.Date.now() - this.startTime;
|
| - Benchmark.reportScore(score);
|
| - }
|
| - return recordedEvent;
|
| -};
|
| -
|
| -/**
|
| - * Checks if two events can be considered equal. Throws exception if events
|
| - * differ.
|
| - * @param {Object} event Event that actually happened.
|
| - * @param {Object} recordedEvent Event taken from timeline.
|
| - */
|
| -Benchmark.Agent.prototype.ensureEqual = function(event, recordedEvent) {
|
| - var equal = false;
|
| - if (event.type == recordedEvent.type &&
|
| - event.type in Benchmark.eventPropertiesMap) {
|
| - equal = true;
|
| - var properties = Benchmark.eventPropertiesMap[event.type];
|
| - for (var i = 0; i < properties.length && equal; ++i)
|
| - if (event[properties[i]] != recordedEvent[properties[i]])
|
| - equal = false;
|
| - }
|
| - if (!equal) {
|
| - Benchmark.die('unexpected event: ' + JSON.stringify(event) +
|
| - ' instead of ' + JSON.stringify(recordedEvent));
|
| - }
|
| -};
|
| -
|
| -/**
|
| - * Gets next event from timeline and returns its identifier.
|
| - * @param {Object} event Object with event information.
|
| - * @return {number} Event identifier.
|
| - */
|
| -Benchmark.Agent.prototype.createAsyncEvent = function(event) {
|
| - return this.getNextEvent(event).id;
|
| -};
|
| -
|
| -/**
|
| - * Stores callback to be invoked according to timeline order.
|
| - * @param {number} eventId 'Parent' event identifier.
|
| - * @param {function} callback Callback.
|
| - */
|
| -Benchmark.Agent.prototype.fireAsyncEvent = function(eventId, callback) {
|
| - var event = this.timeline[eventId];
|
| - if (!event.callbackReference) return;
|
| - this.timeline[event.callbackReference].callback = callback;
|
| - this.fireSome();
|
| -};
|
| -
|
| -/**
|
| - * Ensures that things are happening according to recorded timeline.
|
| - * @param {number} eventId Identifier of cancelled event.
|
| - */
|
| -Benchmark.Agent.prototype.cancelAsyncEvent = function(eventId) {
|
| - this.getNextEvent({type: 'cancel', reference: eventId});
|
| -};
|
| -
|
| -/**
|
| - * Checks if script isn't going to be executed too early and delays script
|
| - * execution if necessary.
|
| - * @param {number} scriptId Unique script identifier.
|
| - * @param {HTMLElement} doc Document element.
|
| - * @param {boolean} inlined Indicates whether script is a text block in the page
|
| - * or resides in a separate file.
|
| - * @param {string} src Script url (if script is not inlined).
|
| - */
|
| -Benchmark.Agent.prototype.readyToExecuteScript = function(scriptId, doc,
|
| - inlined, src) {
|
| - var event = this.getCurrentEvent();
|
| - if (event.type == 'willExecuteScript' && event.scriptId == scriptId) {
|
| - this.timelinePosition += 1;
|
| - return true;
|
| - }
|
| - var element;
|
| - var elements = doc.getElementsByTagName('script');
|
| - for (var i = 0, el; (el = elements[i]) && !element; ++i) {
|
| - if (inlined) {
|
| - if (el.src) continue;
|
| - var text = el.textContent;
|
| - if (scriptId == text.substring(2, text.indexOf("*/")))
|
| - element = elements[i];
|
| - } else {
|
| - if (!el.src) continue;
|
| - if (el.src.indexOf(src) != -1 || src.indexOf(el.src) != -1) {
|
| - element = el;
|
| - }
|
| - }
|
| - }
|
| - if (!element) {
|
| - Benchmark.die('script element not found', scriptId, src);
|
| - }
|
| - for (var el2 = element; el2; el2 = el2.parentElement) {
|
| - if (el2.onload) {
|
| - console.log('found', el2);
|
| - }
|
| - }
|
| - this.delayedScriptElements[scriptId] = element;
|
| - return false;
|
| -};
|
| -
|
| -/**
|
| - * Ensures that things are happening according to recorded timeline.
|
| - * @param {Object} event Object with event information.
|
| - */
|
| -Benchmark.Agent.prototype.didExecuteScript = function(scriptId ) {
|
| - this.getNextEvent({type: 'didExecuteScript', scriptId: scriptId});
|
| - this.fireSome();
|
| -};
|
| -
|
| -/**
|
| - * Invokes async events' callbacks according to timeline order.
|
| - */
|
| -Benchmark.Agent.prototype.fireSome = function() {
|
| - while (this.timelinePosition < this.timeline.length) {
|
| - var event = this.getCurrentEvent();
|
| - if (event.type == 'willFire') {
|
| - if(!event.callback) break;
|
| - this.timelinePosition += 1;
|
| - this.callStackDepth += 1;
|
| - event.callback();
|
| - this.callStackDepth -= 1;
|
| - this.getNextEvent({type: 'didFire', reference: event.reference});
|
| - } else if (event.type == 'willExecuteScript') {
|
| - if (event.scriptId in this.delayedScriptElements) {
|
| - var element = this.delayedScriptElements[event.scriptId];
|
| - var parent = element.parentElement;
|
| - var cloneElement = element.cloneNode();
|
| - delete this.delayedScriptElements[event.scriptId];
|
| - parent.replaceChild(cloneElement, element);
|
| - }
|
| - break;
|
| - } else if (this.callStackDepth > 0) {
|
| - break;
|
| - } else {
|
| - Benchmark.die('unexpected event in fireSome:' + JSON.stringify(event));
|
| - }
|
| - }
|
| -};
|
| -
|
| -/**
|
| - * Returns recorded random.
|
| - * @return {number} Recorded random.
|
| - */
|
| -Benchmark.Agent.prototype.random = function() {
|
| - this.getNextEvent({type: 'random'});
|
| - return this.randoms[this.randomsPosition++];
|
| -};
|
| -
|
| -/**
|
| - * Returns recorded ticks.
|
| - * @return {number} Recorded ticks.
|
| - */
|
| -Benchmark.Agent.prototype.dateNow = function(event) {
|
| - this.getNextEvent({type: 'ticks'});
|
| - return this.ticks[this.ticksPosition++];
|
| -};
|
| -
|
| -/**
|
| - * Event type -> property list mapping used for matching events.
|
| - * @const
|
| - */
|
| -Benchmark.eventPropertiesMap = {
|
| - 'timeout': ['timeout'],
|
| - 'request': ['url'],
|
| - 'addEventListener': ['eventType'],
|
| - 'script load': ['src'],
|
| - 'willExecuteScript': ['scriptId'],
|
| - 'didExecuteScript': ['scriptId'],
|
| - 'willFire': ['reference'],
|
| - 'didFire': ['reference'],
|
| - 'cancel': ['reference'],
|
| - 'random': [],
|
| - 'ticks': []
|
| -};
|
| -
|
| -/**
|
| - * Agent used by native window functions wrappers.
|
| - */
|
| -Benchmark.agent = new Benchmark.Agent(Benchmark.data);
|
| -
|
| -/**
|
| - * Playback flag.
|
| - * @const
|
| - */
|
| -Benchmark.playback = true;
|
| -
|
| -Benchmark.reportScore = function(score) {
|
| - Benchmark.score = score;
|
| -};
|
| -
|
| -Benchmark.originals.addEventListenerToWindow.call(
|
| - window, 'message', function(event) {
|
| - if (Benchmark.score) {
|
| - event.source.postMessage(Benchmark.score, event.origin);
|
| - }
|
| - }, false);
|
|
|