2016-06-07  Filip Pizlo  <fpizlo@apple.com>

        Implement Air::allocateStack() in ES6 to see how much of a bad idea that is
        https://bugs.webkit.org/show_bug.cgi?id=158318

        Reviewed by Saam Barati.
        
        This adds a new benchmark for us to play with called JSAir. It's a complete ES6
        implementation of Air's allocateStack() phase along with all of Air needed to run that
        phase. This includes things like stack slots, registers, temporaries, basic blocks,
        instructions, and all of the code for iterating over, inspecting, and modifying those
        things.
        
        To make this work, JSC can now dump Air just before allocateStack() in the form of JS code
        that creates a Code object that matches exactly what C++ Air saw. This benchmark comprises
        four Air IRs:
        
        - Octane/gbemu's largest function, executeIteration.
        - Kraken/imaging-gaussian-blur's largest function in OSR entry mode, gaussuanBlur.
        - Octane/typescript's largest function that is actually hot, scanIdentifier.
        - JSAir's largest hot function, which is anonymous, so we call it by its hash (ACLj8C).
        
        This runs in about 2 seconds on my machine in JSC trunk. It includes both a commandline
        harness and a web harness. JSAir is almost exactly 100x slower in ES6 in WebKit than the
        C++ Air::allocateStack() phase on which it is based.
        
        JSAir uses the following ES6 features:
        
        - Symbol.
        - for-of.
        - arrow functions.
        - Map/Set.
        - let/const.
        - classes.
        
        All of these things are used in anger and should end up on the hot path. There is also code
        that uses Proxies, but it ends up being dead.
        
        We can improve this even more:
        I still need to add result validation: https://bugs.webkit.org/show_bug.cgi?id=158493
        I want to make it use more ES6 features: https://bugs.webkit.org/show_bug.cgi?id=158497
        
        * JSAir: Added.
        * JSAir/all.js: Added.
        * JSAir/allocate_stack.js: Added.
        (allocateStack.attemptAssignment):
        (allocateStack.assign):
        (allocateStack.interfere):
        (allocateStack.):
        (allocateStack):
        * JSAir/arg.js: Added.
        (Arg):
        (Arg.isAnyUse):
        (Arg.isColdUse):
        (Arg.isWarmUse):
        (Arg.cooled):
        (Arg.isEarlyUse):
        (Arg.isLateUse):
        (Arg.isAnyDef):
        (Arg.isEarlyDef):
        (Arg.isLateDef):
        (Arg.isZDef):
        (Arg.typeForB3Type):
        (Arg.widthForB3Type):
        (Arg.conservativeWidth):
        (Arg.minimumWidth):
        (Arg.bytes):
        (Arg.widthForBytes):
        (Arg.createTmp):
        (Arg.fromReg):
        (Arg.createImm):
        (Arg.createBigImm):
        (Arg.createBitImm):
        (Arg.createBitImm64):
        (Arg.createAddr):
        (Arg.createStack):
        (Arg.createCallArg):
        (Arg.createStackAddr):
        (Arg.isValidScale):
        (Arg.logScale):
        (Arg.createIndex):
        (Arg.createRelCond):
        (Arg.createResCond):
        (Arg.createDoubleCond):
        (Arg.createWidth):
        (Arg.prototype.get kind):
        (Arg.prototype.get isTmp):
        (Arg.prototype.get isImm):
        (Arg.prototype.get isBigImm):
        (Arg.prototype.get isBitImm):
        (Arg.prototype.get isBitImm64):
        (Arg.prototype.get isSomeImm):
        (Arg.prototype.get isAddr):
        (Arg.prototype.get isStack):
        (Arg.prototype.get isCallArg):
        (Arg.prototype.get isIndex):
        (Arg.prototype.get isMemory):
        (Arg.prototype.get isStackMemory):
        (Arg.prototype.get isRelCond):
        (Arg.prototype.get isResCond):
        (Arg.prototype.get isDoubleCond):
        (Arg.prototype.get isCondition):
        (Arg.prototype.get isWidth):
        (Arg.prototype.get isAlive):
        (Arg.prototype.get tmp):
        (Arg.prototype.get value):
        (Arg.prototype.get base):
        (Arg.prototype.get hasOffset):
        (Arg.prototype.get offset):
        (Arg.prototype.get stackSlot):
        (Arg.prototype.get index):
        (Arg.prototype.get scale):
        (Arg.prototype.get logScale):
        (Arg.prototype.get width):
        (Arg.prototype.get isGPTmp):
        (Arg.prototype.get isFPTmp):
        (Arg.prototype.get isGP):
        (Arg.prototype.get isFP):
        (Arg.prototype.get hasType):
        (Arg.prototype.get type):
        (Arg.prototype.isType):
        (Arg.prototype.isCompatibleType):
        (Arg.prototype.get isGPR):
        (Arg.prototype.get gpr):
        (Arg.prototype.get isFPR):
        (Arg.prototype.get fpr):
        (Arg.prototype.get isReg):
        (Arg.prototype.get reg):
        (Arg.isValidImmForm):
        (Arg.isValidBitImmForm):
        (Arg.isValidBitImm64Form):
        (Arg.isValidAddrForm):
        (Arg.isValidIndexForm):
        (Arg.prototype.isValidForm):
        (Arg.prototype.forEachTmpFast):
        (Arg.prototype.usesTmp):
        (Arg.prototype.forEachTmp):
        (Arg.prototype.is):
        (Arg.prototype.as):
        (Arg.prototype.forEachFast):
        (Arg.prototype.forEach):
        (Arg.extract):
        (Arg.forEachFast):
        (Arg.forEach):
        (Arg.prototype.get condition):
        (Arg.prototype.get isInvertible):
        (Arg.prototype.toString):
        * JSAir/basic_block.js: Added.
        (BasicBlock):
        (BasicBlock.prototype.get index):
        (BasicBlock.prototype.get size):
        (BasicBlock.prototype.Symbol.iterator):
        (BasicBlock.prototype.at):
        (BasicBlock.get last):
        (BasicBlock.get insts):
        (BasicBlock.get numSuccessors):
        (BasicBlock.get successors):
        (BasicBlock.get successorBlocks.):
        (BasicBlock.get successorBlocks):
        (BasicBlock.set get numPredecessors):
        (BasicBlock.get predecessors):
        (BasicBlock.get frequency):
        (BasicBlock.get headerString):
        (BasicBlock.get footerString):
        * JSAir/benchmark.js: Added.
        (benchmark):
        * JSAir/code.js: Added.
        (Code):
        (Code.prototype.addBlock):
        (Code.prototype.addStackSlot):
        (Code.prototype.newTmp):
        (Code.prototype.get size):
        (Code.prototype.at):
        (Code.prototype.Symbol.iterator):
        (Code.prototype.get blocks):
        (Code.prototype.get stackSlots):
        (Code.prototype.tmps):
        (Code.prototype.get callArgAreaSize):
        (Code.prototype.requestCallArgAreaSize):
        (Code.prototype.get frameSize):
        (Code.prototype.setFrameSize):
        (Code.prototype.toString):
        * JSAir/custom.js: Added.
        (const.ShuffleCustom.forEachArg):
        (const.ShuffleCustom.hasNonArgNonControlEffects):
        (const.PatchCustom.forEachArg):
        (const.PatchCustom.hasNonArgNonControlEffects):
        (const.CCallCustom.forEachArg):
        (const.CCallCustom.hasNonArgNonControlEffects):
        (const.ColdCCallCustom.forEachArg):
        (const.ColdCCallCustom.hasNonArgNonControlEffects):
        * JSAir/frequented_block.js: Added.
        (FrequentedBlock):
        (FrequentedBlock.prototype.toString):
        * JSAir/insertion_set.js: Added.
        (Insertion):
        (Insertion.prototype.get index):
        (Insertion.prototype.get element):
        (Insertion.prototype.lessThan):
        (InsertionSet):
        (InsertionSet.prototype.appendInsertion):
        (InsertionSet.prototype.append):
        (InsertionSet.prototype.execute):
        * JSAir/inst.js: Added.
        (Inst):
        (Inst.prototype.append):
        (Inst.prototype.clear):
        (Inst.prototype.get opcode):
        (Inst.prototype.get args):
        (Inst.prototype.visitArg):
        (Inst.prototype.forEachTmpFast):
        (Inst.prototype.forEachArg):
        (Inst.prototype.forEachTmp):
        (Inst.prototype.forEach):
        (Inst.forEachDef):
        (Inst.forEachDefWithExtraClobberedRegs):
        (Inst.prototype.get hasNonArgEffects):
        (Inst.prototype.toString):
        * JSAir/liveness.js: Added.
        (Liveness):
        (Liveness.prototype.get thing):
        (Liveness.prototype.get code):
        (Liveness.prototype.get liveAtHead):
        (Liveness.prototype.get liveAtTail):
        (Liveness.prototype.localCalc.LocalCalc):
        (Liveness.prototype.localCalc.LocalCalc.prototype.get liveSet):
        (Liveness.prototype.localCalc.LocalCalc.prototype.execute):
        (Liveness.prototype.localCalc):
        * JSAir/opcode.js: Added.
        (Inst_forEachArg):
        (Inst_hasNonArgEffects):
        * JSAir/payload-gbemu-executeIteration.js: Added.
        (createPayloadGbemuExecuteIteration):
        * JSAir/payload-imaging-gaussian-blur-gaussianBlur.js: Added.
        (createPayloadImagingGaussianBlurGaussianBlur):
        * JSAir/payload-jsair-ACLj8C.js: Added.
        (createPayloadJSAirACLj8C):
        * JSAir/payload-typescript-scanIdentifier.js: Added.
        (createPayloadTypescriptScanIdentifier):
        * JSAir/reg.js: Added.
        (Reg):
        (Reg.fromReg):
        (Reg.prototype.get index):
        (Reg.prototype.get type):
        (Reg.prototype.get name):
        (Reg.prototype.get isCalleeSave):
        (Reg.prototype.get isReg):
        (Reg.prototype.toString):
        (Reg.extract):
        (Reg.forEachFast):
        (Reg.forEach):
        (newGPR):
        (Reg.gprs.Reg.fprs.Reg.calleeSaveGPRs.Reg.calleeSaveFPRs.Reg.calleeSaves):
        * JSAir/stack_slot.js: Added.
        (StackSlot):
        (StackSlot.prototype.get byteSize):
        (StackSlot.prototype.get kind):
        (StackSlot.prototype.get isLocked):
        (StackSlot.prototype.get isSpill):
        (StackSlot.prototype.get index):
        (StackSlot.prototype.ensureSize):
        (StackSlot.prototype.get alignment):
        (StackSlot.prototype.get offsetFromFP):
        (StackSlot.prototype.setOffsetFromFP):
        (StackSlot.prototype.toString):
        (StackSlot.extract):
        (StackSlot.forEachFast):
        (StackSlot.forEach):
        * JSAir/symbols.js: Added.
        * JSAir/test.html: Added.
        * JSAir/test.js: Added.
        * JSAir/tmp.js: Added.
        (Tmp):
        (Tmp.fromReg):
        (Tmp.prototype.get index):
        (Tmp.prototype.get type):
        (Tmp.prototype.get isReg):
        (Tmp.prototype.toString):
        (Tmp.extract):
        (Tmp.forEachFast):
        (Tmp.forEach):
        * JSAir/tmp_base.js: Added.
        (TmpBase.prototype.get isGP):
        (TmpBase.prototype.get isFP):
        (TmpBase.prototype.get isGPR):
        (TmpBase.prototype.get isFPR):
        (TmpBase.prototype.get reg):
        (TmpBase.prototype.get gpr):
        (TmpBase.prototype.get fpr):
        (TmpBase):
        * JSAir/util.js: Added.
        (isRepresentableAsInt32):
        (addIndexed):
        (roundUpToMultipleOf):
        (symbolName):
        (mergeIntoSet):
        (nonEmptyRangesOverlap):
        (rangesOverlap):
        (removeAllMatching):
        (swap):
        (bubble):
        (bubbleSort):
        (currentTime):
        (else.currentTime):

2016-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Allow JSBench to use precise time
        https://bugs.webkit.org/show_bug.cgi?id=158050

        Reviewed by Geoffrey Garen.

        * JSBench/amazon-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-firefox-win/urm.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-firefox/urm.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-firefox/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-firefox/uem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/harness.js:
        (runBenchmark.window.currentTimeInMS):
        (runBenchmark.else.window.currentTimeInMS):
        * JSBench/twitter-chrome-win/rem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-firefox/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-firefox/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):

2016-05-25  Geoffrey Garen  <ggaren@apple.com>

        replaceable own properties seem to ignore replacement after property caching
        https://bugs.webkit.org/show_bug.cgi?id=158091

        Reviewed by Darin Adler.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::doMallocOp):
        * MallocBench/MallocBench/Interpreter.h:
        * MallocBench/MallocBench/fastMallocLog.63316.ops: Added.
        * MallocBench/MallocBench/jetstream.cpp: Added.
        (benchmark_jetstream):
        * MallocBench/MallocBench/jetstream.h: Added.

2016-05-25  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add JSBench to the skipped list for now since it doesn't
        work currently.

        * Skipped:

2016-05-17  Keith Miller  <keith_miller@apple.com>
        We should have JSBench in PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=157952

        Rubber-stamped by Saam Barati.

        There are some slight changes to the layout of the test directory
        to make it work nicely with run-jsc-benchmarks. Before JSBench
        had each of the browser specific sub-tests in a sub-directory.
        These have been flattened e.g. amazon/safari/ has become
        amazon-safari/.

        * JSBench/amazon-chrome-win/urem.html: Added.
        * JSBench/amazon-chrome-win/urem.js: Added.
        * JSBench/amazon-chrome/urem.html: Added.
        * JSBench/amazon-chrome/urem.js: Added.
        * JSBench/amazon-firefox-win/urm.html: Added.
        * JSBench/amazon-firefox-win/urm.js: Added.
        * JSBench/amazon-firefox/urm.html: Added.
        * JSBench/amazon-firefox/urm.js: Added.
        * JSBench/amazon-safari/urem.html: Added.
        * JSBench/amazon-safari/urem.js: Added.
        * JSBench/browsercheck.js: Added.
        * JSBench/facebook-chrome-win/urem.html: Added.
        * JSBench/facebook-chrome-win/urem.js: Added.
        * JSBench/facebook-chrome/urem.html: Added.
        * JSBench/facebook-chrome/urem.js: Added.
        * JSBench/facebook-firefox-win/urem.html: Added.
        * JSBench/facebook-firefox-win/urem.js: Added.
        * JSBench/facebook-firefox/urem.html: Added.
        * JSBench/facebook-firefox/urem.js: Added.
        * JSBench/facebook-safari/urem.html: Added.
        * JSBench/facebook-safari/urem.js: Added.
        * JSBench/google-chrome-win/urem.html: Added.
        * JSBench/google-chrome-win/urem.js: Added.
        * JSBench/google-chrome/urem.html: Added.
        * JSBench/google-chrome/urem.js: Added.
        * JSBench/google-firefox-win/urem.html: Added.
        * JSBench/google-firefox-win/urem.js: Added.
        * JSBench/google-firefox/uem.html: Added.
        * JSBench/google-firefox/uem.js: Added.
        * JSBench/google-safari/urem.html: Added.
        * JSBench/google-safari/urem.js: Added.
        * JSBench/harness.html: Added.
        * JSBench/harness.js: Added.
        * JSBench/harness.py: Added.
        * JSBench/index.html: Added.
        * JSBench/reload.html: Added.
        * JSBench/twitter-chrome-win/rem.html: Added.
        * JSBench/twitter-chrome-win/rem.js: Added.
        * JSBench/twitter-chrome/urem.html: Added.
        * JSBench/twitter-chrome/urem.js: Added.
        * JSBench/twitter-firefox-win/urem.html: Added.
        * JSBench/twitter-firefox-win/urem.js: Added.
        * JSBench/twitter-firefox/urem.html: Added.
        * JSBench/twitter-firefox/urem.js: Added.
        * JSBench/twitter-safari/urem.html: Added.
        * JSBench/twitter-safari/urem.js: Added.
        * JSBench/yahoo-chrome-win/urem.html: Added.
        * JSBench/yahoo-chrome-win/urem.js: Added.
        * JSBench/yahoo-chrome/urem.html: Added.
        * JSBench/yahoo-chrome/urem.js: Added.
        * JSBench/yahoo-firefox-win/urem.html: Added.
        * JSBench/yahoo-firefox-win/urem.js: Added.
        * JSBench/yahoo-firefox/urem.html: Added.
        * JSBench/yahoo-firefox/urem.js: Added.
        * JSBench/yahoo-safari/urem.html: Added.
        * JSBench/yahoo-safari/urem.js: Added.

2016-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark's results should contain Animometer's debug output
        https://bugs.webkit.org/show_bug.cgi?id=157941

        Reviewed by Stephanie Lewis.

        Made developer.html support the JSON generated by run-benchmark which stores everything under debugOutput.

        * Animometer/resources/debug-runner/animometer.js:
        (Utilities.initialize): Unwrap debugOutput in the case run-benchmark's result JSON is used.

2016-05-18  Timothy Hatcher  <timothy@apple.com>

        Make Animometer work in all browsers
        https://bugs.webkit.org/show_bug.cgi?id=157855
        rdar://problem/26338521

        Reviewed by Jon Lee.

        * Animometer/resources/runner/logo.svg: Use a symbol instead
        of putting the id on the root svg. This works in all browsers.

2016-05-07  Timothy Hatcher  <timothy@apple.com>

        Update Animometer design
        https://bugs.webkit.org/show_bug.cgi?id=157449

        Reviewed by Darin Adler.

        * Animometer/developer.html: Stop including runner/animometer.css.
        * Animometer/index.html: Udpated elements to fit new styles.

        * Animometer/resources/debug-runner/animometer.css:
        Copy the old runner/animometer.css to here so the debug runner is unaffected.

        * Animometer/resources/runner/animometer.css:
        New styles for the design. Drop flex box for broad browser support.

        * Animometer/resources/runner/animometer.js:
        (ResultsTable.clear): Use textContent.
        (window.sectionsManager.showSection): Add class to the body.
        (window.sectionsManager.setSectionScore): Use textContent, not innerHTML.

        * Animometer/resources/runner/crystal.svg: Added.
        * Animometer/resources/runner/lines.svg: Added.
        * Animometer/resources/runner/logo.svg: Added.

        * Animometer/resources/runner/tests.js: Shorten test name and title case them.

2016-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Unprefix CSS Grid Layout properties
        https://bugs.webkit.org/show_bug.cgi?id=157137

        Reviewed by Simon Fraser.

        Remove "-webkit" prefix from all the grid layout properties,
        including the display value.
        Update the source code to remove the prefix where it was used too.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-stretched-data.html:

2016-04-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Misc improvements to MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=157004

        Reviewed by Darin Adler.

        * MallocBench/run-malloc-benchmarks: Added --memory and --memory_warning
        modes for focused memory testing.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::printReport): Clarified output.

        (Benchmark::currentMemoryBytes): Added compressed memory because top
        does the same. (It always happens to zero in the benchmarks we run. But
        this is good for sanity.)

        * MallocBench/MallocBench/CommandLine.cpp: Moved up to 8 runs to reduce
        variance.

        * MallocBench/MallocBench/alloc_free.cpp:
        (benchmark_alloc_free): Cycle a single allocation in order to stress
        the effect of merging on calls to madvise.

        * MallocBench/MallocBench/big.cpp:
        (benchmark_big): Graduated to 8kB-128kB because medium tests up to 8 and
        our large allocator doesn't kick in until 64kB.

        * MallocBench/MallocBench/medium.cpp:
        (benchmark_medium): Test all the way down to 1kB because our large
        allocator used to service 1kB allocations and 1kB is an interesting
        middle size where memory is unusually large but allocation throughput
        still matters.

        * MallocBench/MallocBench/stress.cpp:
        (benchmark_stress): Reduced the churn count to match stress_aligned
        because this test was taking too long to complete.

        * MallocBench/MallocBench/stress_aligned.cpp:
        (benchmark_stress_aligned): Our new large allocator can handle even
        more absurdly large values.

2016-04-25  Simon Fraser  <simon.fraser@apple.com>

        Add a content animation test that uses SVG animation.
        https://bugs.webkit.org/show_bug.cgi?id=156827

        * Animation/svg-animation.html: Added.
        * Skipped:

2016-04-22  Simon Fraser  <simon.fraser@apple.com>

        Skip two content animation tests which are only meant for iOS testing.

        * Animation/css-animation.html: Added.
        * Animation/raf-animation.html: Added.

        * Skipped:

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827

        Add two files missing from the previous commit.

        * Animation/css-animation.html: Added.
        * Animation/raf-animation.html: Added.

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827

        Reviewed by Stephanie Lewis.

        Two new files for the content-animation suite.

        After patching for use in the benchmark, these tests are a little different to other benchmarks.
        The test content itself does not collect performance data; the tests spit out a boilerplate JSON
        result with a placeholder for framerate, which is collected in native code.

        When run as a benchmark, test completion involves a couple of bounces between the test and MobileSafari.
        Test completion is initiated by a setTimeout() in the test, at which point location.hash is set to "#done".
        MobileSafari detects that, and asynchronously dumps performance data. Once this is complete, MobileSafari
        changes the URL has to "#submit", which triggers the XHR to the test relay that indicates the test is
        complete.

        * Animation/css-animation.html: Added.
        * Animation/raf-animation.html: Added.

2016-04-15  Jon Lee  <jonlee@apple.com>

        Animometer test could report a NaN
        https://bugs.webkit.org/show_bug.cgi?id=156646

        Reviewed by Darin Adler.
        Provisionally reviewed by Said Abou-Hallawa.

        * Animometer/tests/resources/main.js:
        (didFinishInterval): The ramp controller has a first phase where it ramps up the complexity and
        reacts based on how well the system handles the load. The assumption was that it would handle at least
        1 particle easily. That is not always the case. As a result, an interpolation calculation could
        end up setting an upper bound of NaN.

        This occurs because we never get out of the first tier, so this._lastTierComplexity is undefined.
        Now that we guarantee a minimum complexity of 1, modify the conditional to check for this._lastTierComplexity
        before interpolating the upper bound of the first ramp. In the case where the system struggles with
        1 particle, set it to currentComplexity.

2016-04-09  Jon Lee  <jonlee@apple.com>

        Update Animometer to accommodate different screens
        https://bugs.webkit.org/show_bug.cgi?id=156449

        Reviewed by Darin Adler.
        Provisionally reviewed by Said Abou-Hallawa.

        * Animometer/index.html: Wrap button in a container to add padding at the bottom.
        * Animometer/resources/debug-runner/animometer.css:
        (@media screen and (min-device-width: 1800px)): Deleted.
        (@media screen and (min-width: 1800px)): Cannot use min-device-width since it may match incorrectly.
        (screen and (max-device-height: 414px) and (orientation: landscape)): Some devices swap device width
        and height with orientation change.
        * Animometer/resources/runner/animometer.css: Similar.
        (screen and (min-device-width: 1024px) and (orientation: landscape)):
        (screen and (max-device-height: 414px) and (orientation: landscape)):
        (.frame-container): On smaller iPhones, adding 1px prevents the navigation bars from appearing.
        (@media screen and (min-device-width: 768px) and (max-device-width: 1024px)): Deleted.
        (@media (min-device-height: 768px) and (max-device-height: 1024px)): Target iPad Airs and similar.
        (@media screen and (min-device-width: 1024px) and (max-device-width: 1366px)): Deleted.
        (@media screen and (max-device-width: 1024px) and (min-device-height: 1366px)): Target iPad Pro.
        (#results footer): Add padding below the button for testing again.
        * Animometer/tests/master/multiply.html: Remove the center text.
        * Animometer/tests/master/resources/text.js: Update the test so that in every frame the text moves.
        * Animometer/tests/master/text.html: Update the text sizing depending on the size of the device.

2016-04-08  Jon Lee  <jonlee@apple.com>

        Have Animometer benchmark always start with complexity of 1
        https://bugs.webkit.org/show_bug.cgi?id=156432

        Reviewed by Ryosuke Niwa.

        * Animometer/tests/resources/main.js: Update the default Controller and RampController to
        set its minimum complexities to 1 instead of 0.

2016-04-08  Jon Lee  <jonlee@apple.com>

        Fix SVG benchmark test
        https://bugs.webkit.org/show_bug.cgi?id=156410

        Reviewed by Dean Jackson.

        * Animometer/resources/extensions.js: Update Point.zero to be a static Point.
        * Animometer/tests/simple/resources/tiled-canvas-image.js:
        (Stage.call._setupTiles): Refactor.
        * Animometer/tests/master/resources/particles.js:
        (Particle.prototype.reset): Use Point.center.
        (complexity): We are not using a gradient background anymore, so remove the +1.
        * Animometer/tests/master/resources/svg-particles.js: Update to use SVG transform
        instead of CSS transform.

2016-04-06  Jon Lee  <jonlee@apple.com>

        Update master benchmark with SVG test
        https://bugs.webkit.org/show_bug.cgi?id=156273

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        Switch masks tests for SVG path test.

        * Animometer/resources/debug-runner/tests.js: Move mask test here.
        * Animometer/resources/runner/tests.js: Add SVG test here.
        * Animometer/tests/dom/particles.html: Renamed from PerformanceTests/Animometer/tests/master/particles.html.
        * Animometer/tests/dom/resources/dom-particles.js: Renamed from PerformanceTests/Animometer/tests/master/resources/dom-particles.js.

        * Animometer/tests/master/resources/particles.js: Add minPosition for bounds checking. Prevents particle from being
        partially obscured.
        * Animometer/tests/master/resources/svg-particles.js: Added.
        (Particle): The particle is either a path object or a rect using a path as a clip. The
        same path is used either way. For each particle create a linear gradient with a random
        rotation.
        (SVGParticlesStage): Look in #shapes to see how many different kinds of paths are available.
        This makes the test more generic in case other shapes need to be tested.
        * Animometer/tests/master/svg-particles.html: Added. Have two defs, one that houses each
        particle's gradient, and one that holds the shape templates.

2016-03-27  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] REGRESSION(r188793): It made 200 layout tests and Bindings/event-target-wrapper.html performance test fail
        https://bugs.webkit.org/show_bug.cgi?id=148470 

        Reviewed by Darin Adler.

        * Skipped: Unskip the Bindings/event-target-wrapper test.

2016-03-23  Jon Lee  <jonlee@apple.com>

        Update focus and leaves tests
        https://bugs.webkit.org/show_bug.cgi?id=155825

        Reviewed by Simon Fraser.

        Particles would improperly disappear, before they were fully off stage. Update the calculation.
        * Animometer/tests/dom/resources/leaves.js:
        * Animometer/tests/master/resources/leaves.js:

        * Animometer/tests/master/focus.html: Update the center element styling.
        * Animometer/tests/master/resources/focus.js:
        (FocusElement.Utilities.createClass): Give enough space in the container for each particle for the blur
        to spread. It should be about 3x more space than the blur radius on each side.
        (Stage.call.initialize): Ditto for the center element.

2016-03-23  Jon Lee  <jonlee@apple.com>

        Update support for other platforms
        https://bugs.webkit.org/show_bug.cgi?id=155824

        Reviewed by Simon Fraser.

        * Animometer/resources/debug-runner/animometer.css: Remove extraneous media query. All of it should
        be handled in the release stylesheet.
        * Animometer/resources/debug-runner/animometer.js: Add support for browsers that return an HTMLCollection
        when retrieving radio elements with a name, instead of the selected value.
        * Animometer/resources/runner/animometer.css: Adjust the queries for devices of varying widths.
        (.frame-container): Move overflow:hidden to #stage.
        * Animometer/tests/master/resources/stage.css: Consolidate into tests/resources/stage.css.
        * Animometer/tests/resources/stage.css:
        (body): Remove overflow:hidden.
        (#stage): Set overflow:hidden here.
        (#center-text): Moved from master/resources/stage.css.

        Update stylesheet hrefs.
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/master/focus.html:
        * Animometer/tests/master/leaves.html:
        * Animometer/tests/master/multiply.html:
        * Animometer/tests/master/particles.html:
        * Animometer/tests/master/text.html: Adjust text size to fit in the device screen.

2016-03-23  Jon Lee  <jonlee@apple.com>

        Make the benchmark require device to be in landscape orientation
        https://bugs.webkit.org/show_bug.cgi?id=155822
        rdar://problem/25258650

        Reviewed by Ryosuke Niwa.

        Check that the device is in landscape orientation. If not, disable the button to start it,
        and show a warning message.

        * Animometer/developer.html: Add a message about how the browser should be set up. Include a
        warning message that appears if the orientation is incorrect on mobile devices.
        * Animometer/index.html: Ditto.

        * Animometer/resources/debug-runner/animometer.css: Migrate the .hidden rule into the release
        stylesheet. Update the style to accommodate the new UI.
        * Animometer/resources/runner/animometer.css:

        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.initialize): Add the orientation listener is needed.
        (window.benchmarkController.addOrientationListenerIfNecessary): Only mobile devices need this. Check
        to see for support of window.orientation.
        (window.benchmarkController._orientationChanged): Toggle the warning based on whether we match the
        landscape query. Set a state variable, which is needed for the debug harness. Call updateStartButtonState.
        (window.benchmarkController.updateStartButtonState):
        * Animometer/resources/debug-runner/animometer.js: Change _updateStartButtonState to return
        a boolean about whether at least one test is selected. That will be used in
        benchmarkController.updateStartButtonState(). Move the load event listener to the release version.
        (window.benchmarkController.updateStartButtonState): Override the release version, and also check
        that at least one test is selected.

2016-03-22  Geoffrey Garen  <ggaren@apple.com>

        MallocBench: consolidate regression testing for aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=155762

        Reviewed by Michael Saboff.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/memalign.cpp: Removed.
        * MallocBench/MallocBench/memalign.h: Removed. The stress_aligned test
        covers this and much more.

        * MallocBench/MallocBench/stress_aligned.cpp:
        (benchmark_stress_aligned): Include specific tests for extreme sizes
        and alignments.

2016-03-21  Jon Lee  <jonlee@apple.com>

        Update benchmark tests
        https://bugs.webkit.org/show_bug.cgi?id=155723

        Reviewed by Darin Adler.
        Provisionally reviewed by Said Abou-Hallawa.

        Add quadratic and bezier segments to the canvas path test.

        * Animometer/resources/runner/tests.js: Some of the query strings are unnecessary.
        Rename the test.
        * Animometer/tests/master/resources/canvas-stage.js:
        (tune): Update to be able to take an array of possible constructors. Choose one randomly.
        * Animometer/tests/master/resources/canvas-tests.js:
        (CanvasLinePoint.Utilities.createClass): Move the point selection out to a separate
        function called randomPoint() for reuse. Move X_LOOPS, Y_LOOPS, and offsets into the
        class definition.
        (randomPoint): Scale the grid down a little bit so that the lines along the edge of the
        canvas are not cut off when the stroke size is thick.
        (CanvasQuadraticSegment): Added.
        (CanvasBezierSegment): Added.
        (SimpleCanvasStage): Pass in an array of the different segment types. Since line segments
        are short compared to the curved ones, make it twice as likely to render a line segment.
        (SimpleCanvasStage.animate): Update the drawing code so that we render all line segments.

        Add a helper method that selects a random element from an array.

        * Animometer/tests/resources/main.js:
        (Stage.randomElementInArray): Select a random element from the provided array.

        * Animometer/tests/bouncing-particles/resources/bouncing-tagged-images.js: Refactor.
        * Animometer/tests/dom/resources/leaves.js: Ditto.
        * Animometer/tests/master/resources/dom-particles.js: Ditto.
        * Animometer/tests/master/resources/image-data.js: Ditto.
        * Animometer/tests/master/resources/leaves.js: Ditto.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Ditto.

        Add canvas tests that includes all stroke and fill paths. This makes it possible to avoid having to
        include the full simple canvas suite for perf testing.

        * Animometer/resources/debug-runner/tests.js: Add new tests. Move the canvas test into the Canvas
        suite.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Add a CanvasStroke and CanvasFill particle
        that random selects an object to render.

        * Animometer/resources/debug-runner/tests.js: Move 3D suite before basic canvas suite.
        When updating the perf bot script, we will include the suites up to this one, but exclude
        the basic canvas suite.

        Move compositing transforms test to HTML suite and remove the empty Miscellaneous suite.

        * Animometer/resources/debug-runner/tests.js:
        * Animometer/tests/dom/compositing-transforms.html: Renamed from PerformanceTests/Animometer/tests/misc/compositing-transforms.html.
        * Animometer/tests/dom/resources/compositing-transforms.js: Renamed from PerformanceTests/Animometer/tests/misc/resources/compositing-transforms.js.

        Clean up miscellaneous test suite. Add a canvas ellipse test, and remove the other
        canvas tests.

        * Animometer/resources/debug-runner/tests.js: Add ellipse tests to the simple suite.
        * Animometer/tests/misc/canvas-electrons.html: Removed.
        * Animometer/tests/misc/canvas-stars.html: Removed.
        * Animometer/tests/misc/resources/canvas-electrons.js: Removed.
        * Animometer/tests/misc/resources/canvas-stars.js: Removed.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Add ellipse primitives.

        Merge text tests together into one.

        * Animometer/resources/runner/tests.js: Remove international.html.
        * Animometer/tests/master/international.html: Removed.
        * Animometer/tests/master/resources/text.js:
        (animate): Update styling. Manually calculate gradients for the shadow particles.
        Reduce the step size for y direction to avoid cutting text off at the margins. Increase
        step for x since there will be a little more room.
        * Animometer/tests/master/text.html: Add more translations and lay it out in a table.

2016-03-20  Jon Lee  <jonlee@apple.com>

        Add a link to show debug data
        https://bugs.webkit.org/show_bug.cgi?id=155724

        Reviewed by Simon Fraser.

        * Animometer/developer.html: Attach the onclick handler to the score.
        * Animometer/index.html: Ditto.

2016-03-18  Dean Jackson  <dino@apple.com>

        Add a basic WebGL test to Animometer
        https://bugs.webkit.org/show_bug.cgi?id=155475
        <rdar://problem/25156860>

        Reviewed by Simon Fraser and Jon Lee.

        Add a pretty simple WebGL test to Animometer
        which tries to draw a number of animated triangles.
        The result still needs a bit of tuning.

        * Animometer/resources/debug-runner/tests.js: Add a new
        Suite for "3D" tests.
        * Animometer/tests/3d/resources/webgl.js: Added.
        * Animometer/tests/3d/webgl.html: Added.

2016-03-18  Jon Lee  <jonlee@apple.com>

        Add support for statically linking to a specific test
        https://bugs.webkit.org/show_bug.cgi?id=155631

        Rubber-stamped by Darin Adler.

        * Animometer/developer.html: Update to call restartBenchmark instead so that it works for
        both the preset and the manually set test sessions.
        * Animometer/resources/debug-runner/animometer.css:
        (.tree .link): Style the "link" UI.
        * Animometer/resources/debug-runner/animometer.js: Move updateDisplay from suitesManager
        to optionsManager since this is a visual option and has nothing to do with the suites
        settings. Update the construction of the test UI by including a "link" after each test.
        Clicking on that link brings up a JS prompt with a URL and a query string with the current
        parameters of the controller, and selected test. Pasting this URL into the location bar will
        automatically start running the selected test.
        (suitesManager.suitesFromQueryString): Iterate through the Suites and tests and find the one
        that matches the provided parameters. Returns an object similar to the form in
        suitesManager.updateLocalStorageFromUI.
        (benchmarkController.initialize): After settings up the events and options, try parsing the
        query string and running the benchmark immediately. Otherwise, fall back to the form.
        (benchmarkController.startBenchmark): Store the options and suites into member variables for
        reuse in restartBenchmark.
        (benchmarkController.startBenchmarkImmediatelyIfEncoded): Convert the query string to an object.
        If that's successful, find the suite and test referenced in the query string. Start the benchmark if
        the search for the test succeeded.
        * Animometer/resources/extensions.js:
        (Utilities.stripNonASCIICharacters): Helper method to convert the name of the suite and test
        into a query-string-friendly version.
        (Utilities.convertObjectToQueryString): Helper method to convert an object to query string
        format.
        (Utilities.convertQueryStringToObject): Helper method to convert query string into an object
        with properties and values.

2016-03-16  Jon Lee  <jonlee@apple.com>

        Add a new benchmark test
        https://bugs.webkit.org/show_bug.cgi?id=155570

        Reviewed by Simon Fraser.

        New Leaves test includes various image sizes and opacity.

        * Animometer/resources/debug-runner/tests.js: Add it to the HTML test suite.
        * Animometer/tests/dom/leaves.html: Added.
        * Animometer/tests/dom/resources/leaves.js: Added. Override the
        (Particle.call.reset): Uses a range of sizes, and opacity.
        (Particle.call.animate): Opacity goes up then down. When it hits 0, reset the particle.
        (Particle.call.move): Set transform and opacity.
        * Animometer/tests/master/resources/leaves.js: Get rid of the closure so that it
        can be used in this test. Update the relative path so that it works in both the master
        and dom test suite.

2016-03-15  Simon Fraser  <simon.fraser@apple.com>

        Add developer Animometer test that bounces P3-tagged images
        https://bugs.webkit.org/show_bug.cgi?id=155511

        Reviewed by Tim Horton.
        
        Add a test for rendering performance of tagged images. The 5 images are tagged
        with the Display P3 colorspace.

        * Animometer/resources/debug-runner/tests.js:
        * Animometer/tests/bouncing-particles/bouncing-tagged-images.html: Added.
        * Animometer/tests/bouncing-particles/resources/bouncing-tagged-images.js: Added.
        * Animometer/tests/bouncing-particles/resources/image1.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image2.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image3.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image4.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image5.jpg: Added.

2016-03-09  Jon Lee  <jonlee@apple.com>

        Enhance existing Animometer tests
        https://bugs.webkit.org/show_bug.cgi?id=155261

        Reviewed by Simon Fraser.

        * Animometer/tests/master/resources/canvas-tests.js: Add a gradient to
        the filled circles. To expose more of the gradient, add another circle.
        (SimpleCanvasStage.call.animate): For each frame, create a gradient with
        undulating stop points and colors. Fill the circles twice; once with
        the solid color, and once with the gradient.

        * Animometer/tests/master/resources/dom-particles.js: Refactor the
        emission variables into a separate stage for this test. Add a colorOffset
        variable to make the colors of each particle slightly different, since
        the ramp controller can add large numbers of particles all at once, which
        would otherwise get all the same color.
        * Animometer/tests/master/resources/particles.js:
        (initialize): Remove the code specific to the SVG mask test.

        * Animometer/tests/master/resources/image-data.js:
        (initialize): Remove unused local variable.
        * Animometer/tests/master/resources/multiply.js:
        (initialize): Make the test harder by adding more total particles.

2016-03-09  Jon Lee  <jonlee@apple.com>

        Add text tests
        https://bugs.webkit.org/show_bug.cgi?id=155257

        Reviewed by Simon Fraser.

        * Animometer/resources/extensions.js:
        (UnitBezier.Utilities.createClass): Add a class that computes Bezier points
        assuming that two of the control points are at (0,0) and (1,1). Taken from
        WebCore/platform/graphics/UnitBezier.h
        * Animometer/resources/runner/tests.js: Add a test for English text and one
        for international text.
        * Animometer/tests/master/international.html: Added.
        * Animometer/tests/master/resources/text.js: Added. The test assumes there is
        #template div which it will copy. The copies are placed behind the template, and
        are set with different colors each frame. They are moved around with CSS transform.
        * Animometer/tests/master/text.html: Added.

        Remove the other text tests, since these ones cover the same techniques.
        * Animometer/tests/text/layering-text.html: Removed.
        * Animometer/tests/text/resources/layering-text.js: Removed.
        * Animometer/tests/text/resources/text-boxes.js: Removed.
        * Animometer/tests/text/text-boxes.html: Removed.
        * Animometer/resources/debug-runner/tests.js:

2016-03-09  Jon Lee  <jonlee@apple.com>

        Add a new image test
        https://bugs.webkit.org/show_bug.cgi?id=155232

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        The image test renders PNGs and moves them with translate and rotate
        transforms. Each particle has a lifetime, and when the lifetime ends or
        the particle goes offscreen, it resets itself somewhere on the stage.

        * Animometer/resources/debug-runner/tests.js: Remove the CSS bouncing PNG
        images test, because this one tests the same technique.
        * Animometer/resources/runner/tests.js: Added here as "Leaves".
        * Animometer/tests/master/leaves.html: Added.
        * Animometer/tests/master/resources/particles.js: Refactor out the parts
        specific to the DOM particles test. Consequently make velocity a public
        member.
        (initialize): The options parameter is never used, so remove it.
        (animate): Remove unused local variable.
        * Animometer/tests/master/resources/leaves.js: Maintains a focal point that
        moves back and forth across the canvas. That point affects the velocity
        of the particles. When the focal point is on the leftmost side, it is
        between [-6, -2], and set in reset(). When the focal point is on the rightmost
        side, it will be from [2, 6].
        * Animometer/tests/master/resources/dom-particles.js: Move JS specific to
        this test here from particles.js.

        New images.
        * Animometer/tests/master/resources/compass100.png: Added.
        * Animometer/tests/master/resources/console100.png: Added.
        * Animometer/tests/master/resources/contribute100.png: Added.
        * Animometer/tests/master/resources/debugger100.png: Added.
        * Animometer/tests/master/resources/inspector100.png: Added.
        * Animometer/tests/master/resources/layout100.png: Added.
        * Animometer/tests/master/resources/performance100.png: Added.
        * Animometer/tests/master/resources/script100.png: Added.
        * Animometer/tests/master/resources/shortcuts100.png: Added.
        * Animometer/tests/master/resources/standards100.png: Added.
        * Animometer/tests/master/resources/storage100.png: Added.
        * Animometer/tests/master/resources/styles100.png: Added.
        * Animometer/tests/master/resources/timeline100.png: Added.

2016-03-03  Jon Lee  <jonlee@apple.com>

        Add ability to retrieve raw data from release harness
        https://bugs.webkit.org/show_bug.cgi?id=155026

        Reviewed by Simon Fraser.

        * Animometer/developer.html: Remove the special UI in the debug
        harness.
        * Animometer/resources/runner/animometer.css: Add styles for the
        overlay.
        * Animometer/resources/runner/animometer.js: Let 'j' show the JSON
        results, but only if the overlay doesn't exist. Add 'esc' key to dismiss
        the overlay.
        (window.benchmarkController.selectResults): Cycle the cases around
        so that the first 's' press selects both the benchmark score and
        the individual test scores.
        * Animometer/resources/debug-runner/animometer.css: Remove
        unneeded rules.
        * Animometer/resources/debug-runner/animometer.js: Make the same
        call to handleKeyPress.

2016-03-03  Jon Lee  <jonlee@apple.com>

        Make sure multiply test particles have at least some opacity
        https://bugs.webkit.org/show_bug.cgi?id=155027

        Reviewed by Simon Fraser.

        * Animometer/tests/master/resources/multiply.js:
        (initialize): Have the elements spin a little faster to make it
        more obvious when the system is being stressed.
        (_addTile):
        (animate): Make sure each element being animated has at least 1%
        opacity.

2016-03-03  Jon Lee  <jonlee@apple.com>

        Update image test
        https://bugs.webkit.org/show_bug.cgi?id=154962

        Rubber-stamped by Darin Adler.

        * Animometer/tests/master/image-data.html: Make each canvas have a compositing layer.
        * Animometer/tests/master/resources/image-data.js:
        (initialize): Update to load multiple images serially.
        (_loadImage):
        (tune): Use display instead of visibility. When showing an element anew, move it somewhere else.
        (_createTestElement): Set up the element, refactor out placement of element to _refreshElement.
        (_refreshElement): Place element in a tile grid.
        (animate):
        (_getRandomNeighboringPixelIndex): Use a more conservative distribution to make the effect last a little longer.
        * Animometer/tests/master/resources/compass.svg: Added.
        * Animometer/tests/master/resources/console.svg: Added.
        * Animometer/tests/master/resources/contribute.svg: Added.
        * Animometer/tests/master/resources/debugger.svg: Added.
        * Animometer/tests/master/resources/inspector.svg: Added.
        * Animometer/tests/master/resources/layout.svg: Added.
        * Animometer/tests/master/resources/performance.svg: Added.
        * Animometer/tests/master/resources/script.svg: Added.
        * Animometer/tests/master/resources/shortcuts.svg: Added.
        * Animometer/tests/master/resources/standards.svg: Added.
        * Animometer/tests/master/resources/storage.svg: Added.
        * Animometer/tests/master/resources/styles.svg: Added.
        * Animometer/tests/master/resources/timeline.svg: Added.

2016-03-02  Jon Lee  <jonlee@apple.com>

        Add some new controllers, and refine tests
        https://bugs.webkit.org/show_bug.cgi?id=154914

        Reviewed by Simon Fraser.

        Improve tests.

        * Animometer/tests/master/focus.html: Move each particle into a layer. Put the particle
        in a container element. Expand the container element by the max blur radius, and clip
        overflow. This way, when the blur is applied, it avoids causing layer resizes.
        * Animometer/tests/master/resources/focus.js:
        (FocusElement.Utilities.createClass): Create a container element, and put the particle
        inside.
        (hide): Set display:none.
        (show): Set display:block.
        (animate): Apply filters to the container element.
        (FocusStage.call.initialize): Instead of inserting and removing elements from the DOM,
        keep them in the stage, but set the display style instead. Use this._offsetIndex to
        keep track of which elements are displayed.
        (FocusStage.call.animate): Move some calculations around to avoid doing unneeded math.
        (FocusStage.call.getBlurValue): Make sure elements are always blurred.
        (FocusStage.call.getOpacityValue): Make sure elements have some opacity.
        * Animometer/tests/master/resources/multiply.js: Have the particles on the edge of the
        stage appear less black when the complexity gets large enough.
        (tune): Have this._distanceFactor calculate the factor. Avoid calculating square root each
        frame.

2016-03-02  Jon Lee  <jonlee@apple.com>

        Add some new controllers, and refine tests
        https://bugs.webkit.org/show_bug.cgi?id=154914

        Reviewed by Simon Fraser.

        Add a controller that centers around 30 fps instead of 60 fps.

        * Animometer/developer.html: Add a new option.
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/runner/animometer.js:
        (this._processData.findRegression): When calculating the complexity-frameLength regression,
        check the controller, and use a 30 fps baseline if needed.
        * Animometer/resources/statistics.js:
        (Regression.Utilities.createClass): Update to allow clients to specify the baseline
        frame length.
        * Animometer/tests/resources/main.js:
        (tune): Override some of the constants in RampController. Move those constants out for
        easier reading.

        Add a fixed controller, with no step.

        * Animometer/developer.html: Add a controller that takes no step.
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/tests/resources/main.js:
        (Rotater.Utilities.createClass):

        Switch to ramp controller as default.

        * Animometer/developer.html: Increase the test length to 20 seconds.
        * Animometer/resources/debug-runner/animometer.js: Rename the "adjustment" field to "controller"
        since that is a more accurate description.
        * Animometer/resources/debug-runner/graph.js:
        * Animometer/resources/runner/animometer.js: Update preferences for release suite.

2016-02-26  Jon Lee  <jonlee@apple.com>

        Address Dean's comments in 154673.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/debug-runner/graph.js:

2016-02-25  Jon Lee  <jonlee@apple.com>

        Update animation benchmark and tests
        https://bugs.webkit.org/show_bug.cgi?id=154673

        Reviewed by Dean Jackson.

        Update test visuals.

        * Animometer/tests/master/resources/canvas-tests.js:
        (CanvasLineSegment.Utilities.createClass): Line segments near the edge of the stage get clipped.
        Update circle position and radius to minimize impact.
        * Animometer/tests/master/resources/particles.js: Get rid of rotating gradient background, and
        have 3 locations for emitting particles.
        * Animometer/tests/master/resources/multiply.js: Update distance metric so that fringe tiles get
        more color.
        (initialize): Fix some of the math for laying out the tiles.
        (animate): When a tile isn't used, set visibility: hidden.

2016-02-24  Jon Lee  <jonlee@apple.com>

        Update animation benchmark and tests
        https://bugs.webkit.org/show_bug.cgi?id=154673

        Reviewed by Dean Jackson.

        Update the ramp controller.

        The controller refines the complexity interval to test across.

        * Animometer/resources/statistics.js: Add functions that estimate cumulative distribution function.
        (Regression): For the flat regression, force the first segment to be at 60 fps.
        (valueAt): Add convenience function to return interpolated value based on the regression used.
        (_calculateRegression): Include the number of points included for both segments, and the piecewise
        errors.
        * Animometer/tests/resources/math.js: Make the Kalman estimator subclass Experiment, and allow it
        to be reset.

        * Animometer/tests/resources/main.js: Initialize the tier such that it starts at 10^0 = 1.
        Increase the number of ramps. Maintain three FPS thresholds-- the frame rate of interest, a limit
        on the lowest FPS we care to go for later interpolation, and a minimum FPS threshold we want to
        aim for each ramp. Also keep three estimators: a running average of the change point, a minimum
        boundary for each ramp, and an estimator for all the frames within an interval. The first two
        are used to determine the parameters of the next ramp, and the latter allows us to refine the
        parameters.
        (update): During the tier phase, it is possible that the highest complexity possible for a test
        won't stress the system enough to trigger stopping the tier phase and transitioning to the ramps.
        If the complexity doesn't change when going to the next tier, we've maxed the test out, and move
        on. When the tier phase completed, turn off Controller.frameLengthEstimator, which estimates the
        FPS at each tier.
        (tune): At each interval, look at the confidence distribution of being on the 60 FPS side or the
        slow side. If the slowest FPS we achieve at the ramp's maximum complexity is not at least
        _fpsRampSlowThreshold, then increase the maximum complexity. If we ever achieve 60 FPS, increase
        the ramp's minimum complexity to that level. If, at an even lower complexity, a glitch causes the
        FPS to drop, we reset the minimum complexity.

        Have the bootstrap calculation occur between tests. Clean up harness.

        * Animometer/resources/debug-runner/animometer.js: Run bootstrap after a test has
        completed to avoid doing all of it at the end before showing the results. Clean up
        parameters being passed around.
        * Animometer/resources/debug-runner/tests.js:
        (text):
        * Animometer/resources/runner/animometer.js:
        (this._processData.calculateScore): Save the results to the same object holding the data.
        (this._processData._processData): In the case where a file is dragged, calculate the score
        serially. Grab the results object and move it to the results variable and remove it from
        the data object. This avoids serializing the results into the JSON.
        (this._processData.findRegression): Include the samples used for bootstrapping. Reduce the
        resample size to shorten the wait.
        * Animometer/resources/runner/benchmark-runner.js:
        * Animometer/resources/statistics.js:
        (bootstrap): Update how bootstrapData is sorted. In some regression results the mix of
        floats and integers causes an alphabetical sort to occur.
        * Animometer/resources/strings.js:

        Add meta charset so that encodings between harness and test match.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/master/focus.html:
        * Animometer/tests/master/image-data.html:
        * Animometer/tests/master/multiply.html:
        * Animometer/tests/master/particles.html:
        * Animometer/tests/misc/canvas-electrons.html:
        * Animometer/tests/misc/canvas-stars.html:
        * Animometer/tests/misc/compositing-transforms.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/simple/tiled-canvas-image.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

        Update test harness reporting.

        * Animometer/developer.html: Add missing meta charset.
        * Animometer/index.html: Remove unnecessary utf-8 declaration.
        * Animometer/resources/debug-runner/animometer.css: Add convenience classes for
        formatting the results table.
        * Animometer/resources/debug-runner/animometer.js: Adjust which stats are shown.
        * Animometer/resources/debug-runner/tests.js: Display bootstrapping statistics.
        * Animometer/resources/strings.js: Move strings not used by the release harness.

        Switch to a pseudo-random number generator.

        * Animometer/resources/statistics.js: Add a Pseudo class, with a simple
        pseudo-random number generator.
        (_calculateRegression): Reset the generator before running bootstrap.
        (bootstrap): Deleted.

        Replace Math.random with Pseudo.random.
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/master/resources/focus.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/resources/main.js:

        Use bootstrapping to get confidence interval in the breakpoint.

        For the ramp controller, calculate the piecewise regression, and then use
        bootstrapping in order to find the 95% confidence interval. Use the raw data.

        * Animometer/developer.html: Default to the complexity graph. Add a legend
        checkbox to toggle visibility of the bootstrap score and histogram.
        * Animometer/resources/debug-runner/animometer.css: Make some more space to show
        the old raw and average scores in the legend. Add new styles for the data.
        * Animometer/resources/debug-runner/graph.js:
        (_addRegressionLine): Allow passing an array for the variance bar tied to the
        regression line. Now |stdev| is |range|.
        (createComplexityGraph): Add bootstrap median, and overlay a histogram of
        the bootstrap samples. Switch raw samples from circles to X's.
        (onComplexityGraphOptionsChanged): Allow toggling of the bootstrap data.
        (onGraphTypeChanged): Move the regressions for the raw and average samples to the
        legend. In the subtitle use the bootstrap median, and include the 95% confidence
        interval.
        * Animometer/resources/runner/animometer.js:
        (this._processData.findRegression): Factor out the code that determines which
        samples to include when calculating the piecewise regression. For series that have
        many samples, or a wider range of recorded complexities, throw away the 2.5%
        lowest and highest samples before calculating the regression. Keep all samples
        if the number of samples to regress is small or the range of complexities is
        narrow.
        (this._processData._calculateScore): Factor out regression calculation to
        findRegression(). Bootstrap the change point of the regression. The score is the
        median.
        * Animometer/resources/statistics.js:
        (_calculateRegression): Correct an issue in the calculation of the regression, where
        the denominator can be 0.
        (bootstrap): Template for bootstrapping. Create a bootstrap sample array, Create
        re-samples by random selection with replacement. Return the 95% confidence samples,
        the bootstrap median, mean, and the data itself.
        * Animometer/resources/strings.js: Add bootstrap.
        * Animometer/tests/resources/main.js:
        (processSamples): Don't prematurely cut the sample data.

        Fix graph drawing.

        * Animometer/resources/debug-runner/animometer.js: Add spacing in the JSON output.
        Multiple tests output a lot of JSON and can hang when selecting JSON with no whitespace.
        * Animometer/resources/debug-runner/animometer.css:
        (#complexity-graph .series.raw circle): Update the color.
        * Animometer/resources/debug-runner/graph.js: Use the FPS axis instead of the
        complexity axis, which can vary in domain. For determining the complexity domain,
        only use samples after samplingTimeOffset.

        Allow dropping results JSON.

        * Animometer/developer.html: Add a button.
        * Animometer/resources/debug-runner/animometer.css:
        * Animometer/resources/debug-runner/animometer.js: Read the data and go straight
        to the dashboard. With JSON output, write out only the options and the raw data.

        Teach the harness to evaluate the samples and determine the test score.

        This will allow us to update how the score is calculated separately from the samples recorded.
        This also prepares the harness to be able to accept JSON of prior runs.

        * Animometer/resources/strings.js: Clean up and remove unneeded strings and reduce some of the
        hierarchy.
        * Animometer/resources/debug-runner/tests.js: Update to use the new strings.

        * Animometer/tests/resources/main.js: Allow all controllers to show a complexity-FPS graph.
        (_processComplexitySamples): Factor out some of the sample processing done in the ramp
        controller for the benefit of the other controllers. |complexitySamples| contains a list of
        samples. Sort the samples by complexity. Optionally remove the top x% of samples.
        Group them, and calculate distribution of samples within the same complexity, and add those as
        new entries into |complexityAverageSamples|.
        (Controller.processSamples): Move the code responsible for determining the complexity and FPS
        scores out to ResultsDashboard. The structure of the data returned by the controller is:

        {
            controller: [time-regression, time-regression, ...], // optional, data specific to controller
            marks: [...],
            samples: {                    // all of the sample data
                controller: [...],
                complexity: [...],        // processed from controller samples
                complexityAverage: [...], // processed from complexity samples
            }
        }

        (AdaptiveController.processSamples): Adding the target frame length is no longer necessary; we
        now pass the test options to the graph.
        (Regression): Move to statistics.js.
        * Animometer/resources/statistics.js: Move Regression to here. Add a check if the sampling range
        only contains one sample, since we cannot calculate a regression from one sample point.

        Teach the test harness to evaluate the data.
        * Animometer/resources/runner/animometer.js:
        (ResultsDashboard): Store the options used to run the test and the computed results/score separately
        from the data. The results are stored as:

        {
            score: /* geomean of iteration score */,
            iterationsResults: [
                {
                    score: /* geomean of tests */,
                    testsResults: {
                        suiteName: {
                            testName: {
                                controller: {
                                    average:
                                    concern:
                                    stdev:
                                    percent:
                                },
                                frameLength: { ... },
                                complexity: {
                                    complexity:
                                    stdev:
                                    segment1:
                                    segment2:
                                },
                                complexityAverage: { ... }
                            },
                            testName: { ... },
                        },
                        ... next suite ...
                    }
                },
                { ...next iteration... }
            ]
        }

        * Animometer/resources/debug-runner/animometer.js: Pass options around instead of relying
        on what was selected in the form. This will later allow for dropping previous results, and
        using those runs' options when calculating scores.
        (ResultsTable._addGraphButton): Simplify button action by using attached test data.
        * Animometer/resources/debug-runner/graph.js: Refactor to use the data.

        Consolidate JS files, and move statistics out to a separate JS.

        Preparation for having the Controller only handle recording and storage of the samples,
        and leave the evaluation of the test score out to the harness. Move Experiment to
        a new statistics.js, where Regression will also eventually go. Get rid of algorithm.js
        and move it to utilities.js since the Heap is used only for Experiments.

        * Animometer/tests/resources/algorithm.js: Removed. Heap is in utilities.js.
        * Animometer/tests/resources/sampler.js: Removed. Experiment is in statistics.js,
        Sampler in main.js.
        * Animometer/tests/resources/main.js: Move Sampler here.
        * Animometer/resources/statistics.js: Added. Move Statistics and Experiment here.
        * Animometer/resources/extensions.js: Move Heap here. Attach static method to create
        a max or min heap to Heap, instead of a new Algorithm object.

        Update JS files.
        * Animometer/developer.html:
        * Animometer/index.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/master/focus.html:
        * Animometer/tests/master/image-data.html:
        * Animometer/tests/master/multiply.html:
        * Animometer/tests/master/particles.html:
        * Animometer/tests/misc/canvas-electrons.html:
        * Animometer/tests/misc/canvas-stars.html:
        * Animometer/tests/misc/compositing-transforms.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/simple/tiled-canvas-image.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

        Fix the cursor in the graph analysis when the min
        complexity is not 0.

        * Animometer/resources/debug-runner/graph.js:
        (_addRegression):
        (createComplexityGraph):

2016-02-23  Geoffrey Garen  <ggaren@apple.com>

        Fix some issues in MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=154600

        Reviewed by Oliver Hunt.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Make nimlang.ops
        a part of the build so that it copies to the right place for execution.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::Interpreter): Don't try to open .ops files for writing
        because we're only going to read and we might need extra permissions to
        write.

        (Interpreter::~Interpreter): Give more context when opening a file fails
        to help with debugging.

        * MallocBench/MallocBench/stress.cpp:
        (benchmark_stress): Reduce iterations to complete in less than 10 seconds.

2016-02-23  Michael Saboff  <msaboff@apple.com>

        Unreviewed change to revert extraneous changes made part of change set 196955.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::doMallocOp):
        (Interpreter::Thread::switchTo):
        (writeData): Deleted.

2016-02-19  Michael Saboff  <msaboff@apple.com>

        MallocBench: Added recording for nimlang website, new recording details and added new options
        https://bugs.webkit.org/show_bug.cgi?id=154485

        Reviewed by Geoff Garen.

        Added new capabilities to MallocBench.  These include:
            Added a recording of http://nim-lang.org/docs/lib.html.
            Added thread id to the recording and the ability to playback switching threads in MallocBench
            Added aligned allocations to recordings and the ability to playback
            Added --use-thread-id option to honor recorded thread ids
            Added --detailed-report to output remaining allocations by size after playback
            Added --no-warmup to not run the warm up iteration

        Changed the way that options are passed down to the benchmarks.  Instead of passing individual
        boolean or numeric option values, just pass a reference the CommandLine itself.  Each benchmark
        can access the options that are appropriate.  The Benchmark class also uses the options for
        is parallel, run counts and warm up.

        Added thread id and aligned malloc to the Op by noticing that structure padding and Opcode allowed
        for another 32 bits of data.  Breaking that unused 32 bits into a 16 bit thread id value and a
        16 bit log base 2 of the alignment for aligned malloc allowed for existing recordings to playback
        without any incompatibilities.

        Threaded operation is simulated by creating threads as needed.  As long as the next Op's thread id
        is the same as the last, operation continues as normal.  When the next Op has a different thread id,
        we switch to that thread using the shared Op stream to continue playing back.  There is a mutex to
        assure that only one thread is really running at a time and a condition variable used to wait
        that the current thread id matches each block thread's thread id.  This doesn't simulate true
        concurrent threading, but is instead plays back Ops recorded for multiple thread faithfully.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        (deallocateHeap):
        (Benchmark::Benchmark):
        (Benchmark::runOnce):
        (Benchmark::run):
        * MallocBench/MallocBench/Benchmark.h:
        (Benchmark::isValid):
        * MallocBench/MallocBench/CommandLine.cpp:
        (CommandLine::printUsage):
        * MallocBench/MallocBench/CommandLine.h:
        (CommandLine::isValid):
        (CommandLine::benchmarkName):
        (CommandLine::isParallel):
        (CommandLine::useThreadID):
        (CommandLine::detailedReport):
        (CommandLine::warmUp):
        (CommandLine::heapSize):
        (CommandLine::runs):
        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::Interpreter):
        (Interpreter::run):
        (Interpreter::readOps):
        (Interpreter::doOnSameThread):
        (Interpreter::switchToThread):
        (Interpreter::detailedReport):
        (compute2toPower):
        (writeData):
        (Interpreter::doMallocOp):
        (Interpreter::Thread::Thread):
        (Interpreter::Thread::stop):
        (Interpreter::Thread::~Thread):
        (Interpreter::Thread::runThread):
        (Interpreter::Thread::waitToRun):
        (Interpreter::Thread::switchTo):
        * MallocBench/MallocBench/Interpreter.h:
        (Interpreter::Thread::isMainThread):
        * MallocBench/MallocBench/alloc_free.cpp: Added.
        (benchmark_alloc_free):
        * MallocBench/MallocBench/alloc_free.h: Added.
        * MallocBench/MallocBench/balloon.cpp:
        (benchmark_balloon):
        * MallocBench/MallocBench/balloon.h:
        * MallocBench/MallocBench/big.cpp:
        (benchmark_big):
        * MallocBench/MallocBench/big.h:
        * MallocBench/MallocBench/churn.cpp:
        (benchmark_churn):
        * MallocBench/MallocBench/churn.h:
        * MallocBench/MallocBench/facebook.cpp:
        (benchmark_facebook):
        * MallocBench/MallocBench/facebook.h:
        * MallocBench/MallocBench/flickr.cpp:
        (benchmark_flickr):
        (benchmark_flickr_memory_warning):
        * MallocBench/MallocBench/flickr.h:
        * MallocBench/MallocBench/fragment.cpp:
        (validate):
        (benchmark_fragment):
        (benchmark_fragment_iterate):
        * MallocBench/MallocBench/fragment.h:
        * MallocBench/MallocBench/list.cpp:
        (benchmark_list_allocate):
        (benchmark_list_traverse):
        * MallocBench/MallocBench/list.h:
        * MallocBench/MallocBench/main.cpp:
        (main):
        * MallocBench/MallocBench/medium.cpp:
        (benchmark_medium):
        * MallocBench/MallocBench/medium.h:
        * MallocBench/MallocBench/memalign.cpp:
        (test):
        (benchmark_memalign):
        * MallocBench/MallocBench/memalign.h:
        * MallocBench/MallocBench/message.cpp:
        (benchmark_message_one):
        (benchmark_message_many):
        * MallocBench/MallocBench/message.h:
        * MallocBench/MallocBench/nimlang.cpp: Added.
        (benchmark_nimlang):
        * MallocBench/MallocBench/nimlang.h: Added.
        * MallocBench/MallocBench/nimlang.ops: Added.
        * MallocBench/MallocBench/realloc.cpp:
        (benchmark_realloc):
        * MallocBench/MallocBench/realloc.h:
        * MallocBench/MallocBench/reddit.cpp:
        (benchmark_reddit):
        (benchmark_reddit_memory_warning):
        * MallocBench/MallocBench/reddit.h:
        * MallocBench/MallocBench/stress.cpp:
        (deallocate):
        (benchmark_stress):
        * MallocBench/MallocBench/stress.h:
        * MallocBench/MallocBench/stress_aligned.cpp:
        (benchmark_stress_aligned):
        * MallocBench/MallocBench/stress_aligned.h:
        * MallocBench/MallocBench/theverge.cpp:
        (benchmark_theverge):
        (benchmark_theverge_memory_warning):
        * MallocBench/MallocBench/theverge.h:
        * MallocBench/MallocBench/tree.cpp:
        (benchmark_tree_allocate):
        (benchmark_tree_traverse):
        (benchmark_tree_churn):
        * MallocBench/MallocBench/tree.h:
        * MallocBench/run-malloc-benchmarks:

2016-02-11  Jon Lee  <jonlee@apple.com>

        Fix a missing refactoring.

        * Animometer/tests/master/resources/multiply.js:
        (animate): Move to Utilities.lerp.
        (_lerp): Deleted.

2016-02-10  Jon Lee  <jonlee@apple.com>

        Add new benchmark tests.
        https://bugs.webkit.org/show_bug.cgi?id=154063

        Provisionally reviewed by Said Abou-Hallawa.

        Add tests for get/put image data, filters, opacity, and css transforms.

        * Animometer/resources/runner/benchmark-runner.js:
        (_runBenchmarkAndRecordResults): Update the body background color to match that of
        the stage.
        (this._runNextIteration): Clear the background color style for the results page.
        * Animometer/resources/runner/tests.js:
        * Animometer/tests/master/focus.html: Added.
        * Animometer/tests/master/image-data.html: Added.
        * Animometer/tests/master/multiply.html: Added.
        * Animometer/tests/master/resources/focus.js: Added.
        * Animometer/tests/master/resources/image-data.js: Added.
        * Animometer/tests/master/resources/multiply.js: Added.
        * Animometer/tests/master/resources/stage.css: Move common styles out.
        * Animometer/tests/resources/main.js: Update Stage.randomBool to use Math.random.
        Add Stage.randomSign for randomly setting a direction. Add the notion of the
        current timestamp of the test to Benchmark, since some animations cycle through
        colors and rely on an incremental counter like the time.

2016-02-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add internal benchmark tests for CSS mix-blend-modes and filters
        https://bugs.webkit.org/show_bug.cgi?id=154058

        Provisionally reviewed by Jon Lee.

        * Animometer/resources/debug-runner/tests.js: Include the new tests in the
        "HTML suite" of the debug runner.

        * Animometer/resources/extensions.js:
        (Utilities.browserPrefix):
        (Utilities.setElementPrefixedProperty): Utility functions to allow setting
        prefixed style properties.

        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        Set the mix-blend-mode and the filter to some random values if the options
        of the test requested that.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (parseShapeParameters): Parse the url options "blend" and "filter" and set
        the corresponding flags.

        * Animometer/tests/resources/main.js:
        (randomStyleMixBlendMode):
        (randomStyleFilter): Return random mix-blend-mode and filter.

2016-02-08  Jon Lee  <jonlee@apple.com>

        Add a ramp controller
        https://bugs.webkit.org/show_bug.cgi?id=154028

        Provisionally reviewed by Said Abou-Hallawa.

        Enhance the graph to include a complexity-fps graph, in addition
        to the time graph.

        * Animometer/developer.html: Add a ramp option.
        * Animometer/resources/debug-runner/animometer.css: Update the style.
        * Animometer/resources/strings.js: Flatten the Strings.text constants.
        * Animometer/resources/debug-runner/animometer.js:
        (ResultsTable.call._addGraphButton): Refactor.
        (ResultsTable.call._addTest): Add regression data.
        (benchmarkController): Add a form that allows the user to switch between the two forms,
        Add a form that allows the user to toggle different data. Hide certain header columns
        depending on the selected controller.
        * Animometer/resources/debug-runner/graph.js: Add the complexity regressions.
        * Animometer/resources/debug-runner/tests.js: Add headers for the ramp results.
        * Animometer/resources/runner/animometer.js:
        (ResultsTable): If a header is disabled don't include them in _flattenedHeaders.
        * Animometer/tests/resources/main.js:
        (Controller): Allow options to specify the capacity for sample arrays.
        (Regression): A piecewise regression that tries to fit a slope and a flat profile.
        (_calculateRegression): Options can fix the slope and bias when calculating the minimal
        error. Sweep across the samples in time (which could be backward depending on the controller)
        and calculate the intersection point.
        (RampController): This controller assumes that the target frame rate is below
        58 FPS. It runs in two stages. The first stage quickly determines the order of
        magnitude of objects needed to stress the system by the setting the complexity
        to increasingly difficult tiers. Perform a series of ramps descending from a
        high-water mark of complexity. The complexity needed to reach the target frame
        length is done by performing a piecewise regression on each ramp, and track a
        running average of these values. For the next ramp, make that running average
        the center of the ramp. With a minimum complexity of 0, the high-water mark is
        twice that average. The score is based on the highest complexity that can
        reach 60 fps.

2016-02-08  Jon Lee  <jonlee@apple.com>

        Address Said's comments on the benchmark, and do some clean up.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.css: Add styles for averages.
        * Animometer/resources/debug-runner/animometer.js: Use the right
        Strings constants.
        * Animometer/resources/debug-runner/graph.js:
        (_addRegressionLine): Add missing code to draw the line and standard
        deviation highlight.
        (onGraphTypeChanged): Remove unneeded variables
        (onTimeGraphOptionsChanged):
        * Animometer/resources/runner/benchmark-runner.js:
        (_runBenchmarkAndRecordResults): Rename samplers to suiteResults and
        _suitesSamplers to _suitesResults.
        * Animometer/tests/resources/main.js:
        (results): Call processSamples().
        (update): Change sampling timestamp comparison.
        (_animateLoop): Move shouldStop call to before the update.
        * Animometer/tests/resources/sampler.js:
        (process): Rename to processSamples().

2016-02-07  Jon Lee  <jonlee@apple.com>

        Teach Controller to measure intervals, and turn off the frame length estimator.

        * Animometer/tests/resources/main.js: Default interval length is 100 ms.
        (start): Set the first interval.
        (_measureAndResetInterval): Reports the average frame length of the interval that just
        completed, and sets up the next interval.
        (update): If there is no length, then just use the estimator per frame, otherwise the
        estimator measures per interval. Add a didFinishInterval for subclasses to process
        prior to recording the sample. Update tune() to include whether an interval had
        finished.
        (StepController): Step controllers don't measure on an interval basis.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Minor refactoring. Rename Controller._estimator to Controller._frameLengthEstimator
        and switch the parameters for start(), update(), and tune(), so that the timestamp
        is first and stage is second.

        * Animometer/tests/resources/main.js:

2016-02-07  Jon Lee  <jonlee@apple.com>

        Move ResultsTable functionality not needed for release tests out.
        Move reporting of score and mean to selection of the time-based graph.

        * Animometer/developer.html: Rename graph-options to time-graph-options.
        * Animometer/resources/debug-runner/animometer.js:
        (DeveloperResultsTable): Moved from runner/animometer.js. Switch from mean
        values to "average" objects which can hold stdev. Move graph button and
        calculation of noisy measurements here. Sophisticated header processing
        is not needed in release suite.
        (populateTable): Use DeveloperResultsTable.
        * Animometer/resources/debug-runner/graph.js: Pull time graph creation to
        its own function, and add a new onGraphTypeChanged handler in preparation
        of a complexity graph to be added later.
        * Animometer/resources/runner/animometer.js:
        (ResultsTable): Simplify to just handle test names and scores.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Tests: reuse objects already made.

        Avoid thrash of object creation and removal by maintaining an index that
        moves along the array as the adjust values change. If the tune value
        requires more objects than the maximum size of the object array, then create
        new objects. This means that the object array size never decreases.

        * Animometer/tests/master/resources/canvas-stage.js: Maintain a separate
        offsetIndex. For these tests, we want to avoid drawing the oldest objects,
        so the scene will draw the object at offsetIndex to the end of the array.
        (tune): Reverse the logic since "removal" of objects is much simpler and
        involves simply changing the offsetIndex.
        (animate): Update the for loop to draw from offsetIndex to the end.
        (complexity): Update the definition.
        * Animometer/tests/master/resources/canvas-tests.js: Maintain a separate
        offsetIndex. For these tests, we want to avoid drawing the newest objects,
        so the scene will draw the object at index 0 to the object at offsetIndex.
        (SimpleCanvasStage.animate): Fly-by removal of local stage variable,
        which is unneeded. Update the for loop to draw from offsetIndex to the end.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (SimpleCanvasStage.animate): Update the for loop to draw from 0 to
        offsetIndex.
        * Animometer/tests/simple/resources/simple-canvas.js:
        (tune): Update logic. Here, offsetIndex represents the boundary of the last
        index to render.
        (animate): Update the for loop to draw from 0 to offsetIndex.
        (complexity): Update the definition.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Tests: refactor and update styles.

        * Animometer/tests/resources/main.js: Add helper methods that return
        a color that hue rotates based on the date, and a counter value that
        increases based on the date. Fix randomInt() to not bias against the min and
        max values.

        * Animometer/tests/master/resources/canvas-tests.js: Use new helper methods.
        * Animometer/tests/master/resources/dom-particles.js: Ditto.
        * Animometer/tests/master/resources/particles.js: Ditto.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Refactor to
        use a rotating color instead of a random color. The fast switching of color
        is too vivid to watch.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        (BouncingSvgParticlesStage.call.createGradient): Fix the gradient so
        that the last stop is located at the end.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Refactor tune() to not return the complexity of the scene.

        We have stage.complexity() now, so returning the complexity through tune
        is unnecessary.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/master/resources/canvas-stage.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/simple/resources/simple-canvas.js:
        * Animometer/tests/simple/resources/tiled-canvas-image.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:

2016-02-07  Jon Lee  <jonlee@apple.com>

        Make the fixed controller a step controller instead. Halfway through the test
        it will bump up the complexity 4-fold. Calculate the step timestamp using options
        instead of a separate parameter to the Controller constructor.

        * Animometer/developer.html: Change value to "step"
        * Animometer/resources/debug-runner/animometer.js:
        (window.suitesManager.updateEditsElementsState): Show number inputs when set to "step".
        * Animometer/tests/resources/main.js:
        (update): Provide a hook for subclasses to tune.
        (StepController): Maintain a flag determining whether we've stepped, and the time
        we should step.
        (Benchmark): Use the new StepController.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Adjust the FPS graph scale.

        Instead of making the FPS graph linearly scale, scale it based on the frame length,
        but show the data in terms of FPS. Because it is inversely proportional, and most
        of the data never gets below 20, concentrate the axis from 20-60 FPS, since otherwise
        over half of the available graph space ends up blank.

        This means we should convert all of the FPS data to frame length data.

        * Animometer/resources/debug-runner/graph.js: Update the domain to be based on
        frame length in milliseconds instead of FPS. Update the cursor to consider all of the
        values being shown, and then pick the min and max values to represent the length of the
        cursor.
        * Animometer/resources/runner/animometer.js:
        * Animometer/resources/strings.js:
        * Animometer/tests/resources/main.js:
        (processSamples): Add the ability to only sample a range of the data instead of everything
        after an offset index. Update sampler to record the frame lengths instead of the frame
        rate.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Add option to use different methods for retrieving a timestamp.

        * Animometer/developer.html: Add performance.now and Date.now options.
        * Animometer/resources/runner/animometer.js: Default to performance.now.
        (window.benchmarkController.startBenchmark):
        * Animometer/tests/resources/main.js: Tie the desired method to _getTimestamp.
        (run): Use _getTimestamp.
        (_animateLoop): Ditto.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Allow adding any number of markers to the graph. The markers can be labeled
        and contain timestamp and sample index data. Make it a part of the controller
        rather than keeping it in the sampler.

        * Animometer/resources/debug-runner/animometer.css: Add styles for markers
        * Animometer/resources/debug-runner/graph.js: Create the markers and add
        text labels.
        * Animometer/resources/runner/animometer.js: Assume the samplingTimeOffset
        is just one of the marks provided.
        * Animometer/resources/strings.js: Add Strings.json.marks.
        * Animometer/tests/resources/main.js:
        (Controller): Keep marks here. They are keyed by the marker name, so no two
        markers should have the same name.
        (recordFirstSample): Refactor to use mark.
        (mark): Allows for arbitrary data if needed later. The timestamp maintained
        is relative to the absolute start timestamp.
        (containsMark): Checks whether a mark with a specific comment exists.
        (processSamples): Removes the _startTimestamp offset from the marks before
        setting it in results.
        * Animometer/tests/resources/sampler.js: Remove marks.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Get rid of options member variable in Benchmark.

        Options are only needed when initializing the stage or benchmark, so there's no
        need to also keep a reference to it.

        * Animometer/tests/resources/main.js: Get rid of options variable in Benchmark.
        Pass options to Controllers and Stages.
        (Controller.Utilities.createClass):
        (Benchmark.Utilities.createClass):
        (get options): Deleted.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/master/resources/canvas-stage.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/resources/tiled-canvas-image.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:

2016-02-07  Jon Lee  <jonlee@apple.com>

        Update how the benchmark is run
        https://bugs.webkit.org/show_bug.cgi?id=153960

        Provisionally reviewed by Said Abou-Hallawa.

        Introduce the notion of a Controller. It is responsible for recording, updating,
        and processing the statistics and complexity of the benchmark. This allows
        plugging in different Controllers.

        This strips most of the functionality from Animator and BenchmarkState, so fold
        what's left into Benchmark. Now, Benchmarks only own a stage and a controller, but
        are responsible for driving the animation loop.

        Rewrite Animator._shouldRequestAnotherFrame into two different Controllers. One
        maintains a fixed complexity, and the other adapts the complexity to meet a
        fixed FPS.

        Fix the Kalman estimator to be modeled on a scalar variable with no model.

        * Animometer/tests/resources/main.js: Remove BenchmarkState and Animator, and
        replace it with a Controller. Add a FixedController and refactor the previous controller
        to an AdaptiveController.

        (Controller): Controllers own the estimator and the sampler. When a new frame is
        displayed, the animation loop calls update(). The estimator and sampler record
        stats, then tune. Samplers can track multiple series of data. The basic controller
        tracks timestamp, complexity, and estimated frame rate.
                The Kalman estimation is based on the frame length rather than the frame
        rate. Because FPS is inverse proportional to frame length, in the case where the measured
        frame length is very small, the FPS ends up being a wildly large number (in the order of
        600-1000 "FPS"), and it pulls the estimator up drastically enough that it takes a while
        for it to settle back down. Using frame length reduces the impact of these spikes.
                Converging the estimation takes enough time to avoid initializing it immediately
        when the benchmark starts. Instead, the benchmark runs for a brief period of time (100ms)
        before running it in earnest. Allow controllers an opportunity to set the complexity
        before starting recording.
                When the benchmark is complete, the controller has an opportunity to process
        the samples. The default implementation calculates the raw FPS based on the time
        difference of the samples, and calculates the complexity score. This is moved from
        Benchmark.processSamples.

        (Controller): Initialize timestamps. These are at first relative to the start of the
        benchmark, but are offset by the absolute start time during start(). By default maintain
        3 data series, but subclasses can override.
        (start): Calls recordFirstSample() for subclasses to override if needed.
        (recordFirstSample): For basic controller, start sampling at the beginning.
        (update): Update the frame length estimator and sample.
        (shouldStop): Checks that the time is before _endTimestamp.
        (results): Returns the processed samples.
        (processSamples): Iterate through the sample data and collate them. Include scores.

        (FixedComplexityController): Controller that tunes the stage to the desired complexity
        prior to starting, and keeps it at that complexity.

        (AdaptiveController): Have the estimator estimate the interval frame rate instead of the
        raw frame rate.
                The previous version of this controller ignored the frame that came after the
        adjustment. The raw FPS show that whatever noise the scene change adds is negligible
        compared to the noise of the system overall. Stop ignoring that frame and include all
        frames in the measurements.

        (Benchmark): Remove dependency on animator, and instantiate a runner based on what is
        selected. Most of the loop's functionality is in Controller, so remove here.
        (Benchmark.run): Remove start() since it is only called from run(), and fold it in here.
        (Benchmark._animateLoop): Fold in from Animator.animateLoop. Let the benchmark run for
        a brief period before calling Controller.start().

        * Animometer/tests/resources/math.js: Fix the Kalman estimator. The filter estimates
        a scalar variable, and makes basic assumptions regarding the model. As a result
        none of the linear algebra classes are needed, so remove Matrix, Vector3, and Matrix3.
        (SimpleKalmanEstimator): Calculate the gain based on the provided process and
        measurement errors.
        (KalmanEstimator): Deleted.
        (IdentityEstimator): Deleted.
        (PIDController): Refactor to use the Utilities.createClass() helper.

        The Kalman filter algorithm is explained here http://greg.czerniak.info/guides/kalman1/.
        The state, represented by a scalar, is the estimated frame length. There is no user
        transition of the state, and the state is the same as the measurement. With this model,
        the estimation error converges, so calculate the gain ahead of time.

        * Animometer/developer.html: Remove fixed-after-warmup since it is not useful.
        Replace the option to toggle the estimator, and make it possible to customize the
        estimator's error parameters. Show raw FPS by default, and remove interval FPS,
        which will be shown instead of the filtered raw FPS.
        * Animometer/resources/debug-runner/animometer.css: Put the header behind the graph.
        Remove #intervalFPS rules; move the color to #filteredFPS.
        * Animometer/resources/debug-runner/graph.js:
        (updateGraphData): Update the hr style to force the layout to be calculated
        correctly. Change the tick format to be in terms of seconds, since the timestamps
        are in milliseconds. Remove interval data.
        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.startBenchmark): Set Kalman parameters.
        * Animometer/resources/runner/benchmark-runner.js:
        (_runBenchmarkAndRecordResults): When a benchmark completes, expect it to return
        the final data, rather than passing a sampler from the controller. This avoids
        needing to expose the sampler variable in the benchmark.
        * Animometer/tests/resources/sampler.js:
        (process): Move the setting of the target frame rate to AdaptiveController.

2016-02-06  Jon Lee  <jonlee@apple.com>

        Code clean up: Move Rotater function closer to Stage static methods.
        The Rotater is used together with those methods; keep them close.

        * Animometer/tests/resources/main.js:

2016-02-06  Jon Lee  <jonlee@apple.com>

        Update the JS includes due to ResultsTable move.

        * Animometer/developer.html:
        * Animometer/index.html:

2016-02-06  Jon Lee  <jonlee@apple.com>

        Move createElement and createSVGElement to Utilities.

        * Animometer/resources/extensions.js:
        (Utilities.createElement): Added.
        (Utilities.createSVGElement): Added.
        (DocumentExtension.createElement): Deleted.
        (DocumentExtension.createSvgElement): Deleted.

        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/runner/animometer.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:

2016-02-06  Jon Lee  <jonlee@apple.com>

        Add a convenience function for creating a class.

        The pattern for creating a class is common enough to add as a Utilities
        helper function. It also makes it easy to collapse class definitions when
        editing.

        * Animometer/resources/debug-runner/animometer.js: Move ProgressBar definition,
        since it is only used here.
        * Animometer/resources/runner/animometer.js: Move ResultsDashboard and
        ResultsTable definition, since it is only used here.
        * Animometer/resources/extensions.js: Move Utilities definition to the top. Convert
        Point, Insets, SimplePromise.
        (ProgressBar): Moved to animometer.js.
        (ResultsDashboard): Moved to animometer.js.
        (ResultsTable): Moved to animometer.js.
        * Animometer/resources/runner/benchmark-runner.js: Convert BenchmarkRunnerState,
        BenchmarkRunner.
        * Animometer/tests/resources/main.js: Convert Rotater, Stage, Animator, Benchmark.
        * Animometer/tests/resources/sampler.js: Convert Experiment, Sampler.

        Convert test primitives.
        * Animometer/tests/master/resources/canvas-tests.js: Convert CanvasLineSegment,
        CanvasArc, CanvasLinePoint.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Convert CanvasLineSegment,
        CanvasLinePoint, CanvasQuadraticSegment, CanvasQuadraticPoint, CanvasBezierSegment,
        CanvasBezierPoint, CanvasArcToSegment, CanvasArcToSegmentFill, CanvasArcSegment,
        CanvasArcSegmentFill, CanvasRect, CanvasRectFill.
        * Animometer/tests/simple/resources/tiled-canvas-image.js: Convert CanvasImageTile.

2016-02-06  Jon Lee  <jonlee@apple.com>

        Minor improvements to debug harness.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.css:
        (#suites): Put the complexity text boxes closer to the test names.
        (#options):
        (#rawFPS circle): Make the interval FPS appear as a separate data series, with a line.
        (#intervalFPS path):
        (#intervalFPS circle):
        * Animometer/resources/debug-runner/animometer.js:
        (window.optionsManager.updateLocalStorageFromUI): Convert number inputs from text.
        (window.suitesManager._onChangeTestCheckbox): Refactor to take a checkbox.
        (window.suitesManager._createTestElement): Enhance such that typing into the complexity
        input will automatically select that test for running.
        (window.suitesManager.updateLocalStorageFromJSON): Make the harness work for private
        browsing.
        * Animometer/resources/debug-runner/graph.js: Separate the intervalFPS data, and show
        more accuracy in timestamps.

2016-02-06  Jon Lee  <jonlee@apple.com>

        Refactor helper methods for getting random values for a stage.

        Instead of requiring a Stage instance, just attach it to the Stage object.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:

2016-02-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a new graphics test for CanvasRenderingContext2D functions: getImageData and putImageData
        https://bugs.webkit.org/show_bug.cgi?id=151716

        Reviewed by Darin Adler.

        The purpose of this test is to measure the performance of getImageData
        and putImageData functions. This test draws a background on the canvas
        and then gets some random tiles from this background and draw them in
        destinations different from their original sources.

        * Animometer/resources/debug-runner/tests.js: Adding the new test to the canvas simple tests suite.

        * Animometer/resources/extensions.js:
        (Array.prototype.shuffle): Shuffles the elements of an array.

        (Point.zero): Returns a new Point object whose x and y are equal zero.
        (Point.prototype.str): Used for debugging the Point object.

        * Animometer/tests/simple/resources/tiled-canvas-image.js: Added.
        (CanvasImageTile):
        (CanvasImageTile.prototype.getImageData):
        (CanvasImageTile.prototype.putImageData):
        (Stage.call.initialize):
        (Stage.call._createTiles):
        (Stage.call._nextTilePosition):
        (Stage.call.tune):
        (Stage.call._drawBackground):
        (Stage.call.animate):
        (Stage.call.complexity):
        (Stage.call):
        * Animometer/tests/simple/tiled-canvas-image.html: Added.

2016-01-07  Jon Lee  <jonlee@apple.com>

        Fix new test.

        * Animometer/resources/runner/tests.js: Wrong URL from an
        old patch.
        * Animometer/tests/master/particles.html:
        * Animometer/tests/master/resources/dom-particles.js:
        (Particle.call.reset): Figured out a simpler way to set up
        the particles.
        (this.move.reset): Deleted.
        (this.move._applyAttributes): Deleted.
        * Animometer/tests/master/resources/particles.js:
        (Particle): Call move() after reset().

2016-01-07  Jon Lee  <jonlee@apple.com>

        Update benchmark test suite
        https://bugs.webkit.org/show_bug.cgi?id=152679

        Reviewed by Simon Fraser.

        Add a new test. The test has a rotating background
        gradient, and does a better job physically simulating
        particles.

        * Animometer/resources/extensions.js: Teach Point to take constants as well as other Points.
        (Point.prototype.length): Added.
        (Point.prototype.normalize): Added.
        * Animometer/resources/runner/tests.js: Add the test to the master suite.
        * Animometer/tests/master/particles.html: Added.
        * Animometer/tests/master/resources/particles.js: Added. Parent class for different kinds of particles.
        (Particle):
        (Particle.prototype.reset): If the particle starts slowing down in terms of its animation,
        reset it.
        (Particle.prototype.animate): Bounce off the walls elastically, and include gravity.
        (Particle.prototype.move): Subclasses should override.
        (ParticlesStage): Stage includes a rotating gradient background.
        * Animometer/tests/master/resources/dom-particles.js: Added. Creates a <div> and adds it to
        the stage.
        * Animometer/tests/resources/star.svg: Added.

2016-01-03  Jon Lee  <jonlee@apple.com>

        Update benchmark test suite
        https://bugs.webkit.org/show_bug.cgi?id=152679

        Reviewed by Simon Fraser.

        Move algorithm.js and sampler.js to tests/ and benchmark-runner.js to runner/.

        Needed by both harnesses.
        * Animometer/resources/runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/resources/debug-runner/benchmark-runner.js.
        * Animometer/developer.html:
        * Animometer/index.html:

        Needed only by the tests. Move to tests/. Statistics, in sampler.js, is used by ResultsDashboard, so move that
        into extensions.js.
        * Animometer/resources/extensions.js:
        * Animometer/tests/resources/algorithm.js: Renamed from PerformanceTests/Animometer/resources/algorithm.js.
        * Animometer/tests/resources/sampler.js: Renamed from PerformanceTests/Animometer/resources/sampler.js.
        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/misc/canvas-electrons.html:
        * Animometer/tests/misc/canvas-stars.html:
        * Animometer/tests/misc/compositing-transforms.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

2016-01-07  Jon Lee  <jonlee@apple.com>

        Update benchmark test suite
        https://bugs.webkit.org/show_bug.cgi?id=152679

        Reviewed by Simon Fraser.

        Fix tests for other browsers.

        * Animometer/resources/extensions.js:
        (Point.elementClientSize): Some browsers return 0 for SVG clientWidth and clientHeight.
        Use getBoundingClientRect() instead.
        * Animometer/tests/misc/resources/canvas-electrons.js:
        (CanvasElectron.prototype._draw): Some browsers don't support ellipse.

2016-01-07  Jon Lee  <jonlee@apple.com>

        Add a waitUntilReady() step
        https://bugs.webkit.org/show_bug.cgi?id=152862

        Reviewed by Simon Fraser.

        Add a waitUntilReady() callback that lets the benchmark complete
        its setup before running the benchmark.

        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.run): First call waitUntilReady, which returns
        a promise. When the promise resolves, run everything that was in this
        function.
        (Benchmark.prototype.waitUntilReady): Default implementation returns
        a resolved promise.
        (Benchmark.prototype.resolveWhenFinished): Deleted.
        * Animometer/tests/template/resources/template-canvas.js:
        (new.TemplateCanvasStage.waitUntilReady): Example on how to override.

2016-01-03  Jon Lee  <jonlee@apple.com>

        Update data reporting and analysis
        https://bugs.webkit.org/show_bug.cgi?id=152670

        Reviewed by Simon Fraser.

        Show new graph data. Provide controls to show different series data. Provide an
        interactive cursor that shows the data at a given sample.

        * Animometer/developer.html: Add a nav section in #results. Each part of the graph
        has a checkbox for visual toggling, as well as companion spans to contain the data.
                The numbers will always be shown even if the SVG isn't.
        * Animometer/resources/debug-runner/animometer.css:
        (#suites): Adjust spacing when doing fixed complexity.
        (#test-graph nav): Place the nav in the upper right corner.
        (#test-graph-data > svg): Fix the FPS scale from 0-60. It makes the raw FPS goes past
        that scale. Allow it to show.
        (.target-fps): Add a dotted line for where the benchmark is supposed to settle for FPS.
        (#cursor line): The cursor contains a line and highlight circles for the data being shown.
        (#cursor circle):
        (#complexity path): This and rules afterward are named by series type.
        (#complexity circle):
        (#filteredFPS path):
        (#filteredFPS circle):
        (#rawFPS path):
        (#intervalFPS circle):
        (.left-samples): Deleted.
        (.right-samples): Deleted.
        * Animometer/resources/debug-runner/animometer.js:
        (initialize): Add a "changed" listener when the checkboxes change in the nav.
        (onBenchmarkOptionsChanged): Renamed.
        (showTestGraph): All graph data is passed in as graphData instead of as arguments.
        * Animometer/resources/debug-runner/graph.js: Extend BenchmarkController. When showing
        a new graph, call updateGraphData(). It creates all of the d3 graphs. onGraphOptionsChanged()
        toggles the data on and off.
        (updateGraphData): Add the axes. Add the average lines and markers for sample time and
        target FPS. Add the cursor group. Use helper function addData() to add the data. On top of
        everything add a transparent area which will catch all of the mouse events. When the mouse
        moves in the graph, find the closest data point, show the data in the nav area, and highlight
        the data points.
        (addData): Adds a line and circle for each data point. Also adds a highlight cursor with a
        size a little larger than the circle radius for the data points.
        (onGraphOptionsChanged): Called when data is visually toggled.
        (showOrHideNodes): Helper function to toggle the .hidden class.
        * Animometer/resources/extensions.js:
        (ResultsDashboard.prototype.get data): Get rid of the arguments for _processData.
        (ResultsTable.prototype._addGraphButton): Shove all of the graph data into a singular object.

        Producing the JSON can take a while with all of the data. Make it on-demand with a
        button.

        * Animometer/resources/debug-runner/animometer.js:
        (showResults): When showing the results, don't serialize the JSON data. Move that to...
        (showJSONResults): ...here. Remove the button.

        * Animometer/developer.html: Add a button. The button will remove itself and populate
        the textarea with the JSON data.
        * Animometer/resources/debug-runner/animometer.css:
        (.hidden): Add a universal hidden class.
        (#results button.small-button): Promote the small-button styles to the whole results
        section for use in the JSON button.
        (#results button.small-button:active):
        (#results-data button.small-button): Deleted.
        (#results-data button.small-button:active): Deleted.

        Refactor how Animator does its recording.

        * Animometer/tests/resources/math.js: Create a new, simple estimator that just returns
        the same interval frame rate for adjustment.
        * Animometer/tests/resources/main.js:
        (Animator): Remove _dropFrameCount, and make variables more accurate described.
        (Animator.prototype.initialize): Use the identity estimator instead of using a bool.
        (Animator.prototype._intervalTimeDelta): Rename, only used internally.
        (Animator.prototype._shouldRequestAnotherFrame): Assume we drop one frame for adjustment
        of the scene. If we are within the number of frames to measure for the interval, just
        record the timestamp. Otherwise we are ready to evaluate and adjust the scene. Record
        the interval frame rate and the estimator's frame rate.

        Avoid processing the data through the Experiment while the test is running. Reconfigure
        the sampler to just record the raw samples. After the test is done, run the samples through
        the Experiment to get the score.

        * Animometer/resources/sampler.js:
        (Experiment): Fold _init() into the constructor since nobody else will call it. This is not
        needed until the test concludes, so remove startSampling(). Clients should just call sample().
        (Sampler): Pre-allocate arrays given the number of data points being recorded, and a capacity
        of how many samples will be used. The processor is a called when it's time to process the data
        since that is the client also telling the Sampler what to record.
                Introduce the notion of marks as well, which allows the client to mark when an
        event occurs. When we mark sample start, we can attach the timestamp there, instead of storing
        it separately.
        (Sampler.prototype.startSampling): Deleted. Clients should just call record().
        (Sampler.prototype.record): The data to record is passed in as variable arguments.
        (Sampler.prototype.mark): When adding a mark, a client needs to provide a unique string, and
        can provide extra data object for later retrieval.
        (Sampler.prototype.process): Renamed from toJSON. Trim the sampling arrays to what was used.
        Call the processor to process the samples.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runBenchmarkAndRecordResults): Call process().

        * Animometer/resources/strings.js: Add some new strings, remove the graph ones since they are
        not used.
        * Animometer/tests/resources/main.js:
        (Benchmark): Create a sampler with 4 series. The maximum number of points expected is the
        number of seconds multiplied by 60 fps. Benchmark, as a client of the Sampler, knows about all
        of the data being added to the Sampler. It is added through record(), and processed through
        processSamples().
        (Benchmark.prototype.update): Mark when we've passed warmup and are starting to sample. Include
        the timestamp in the custom data for the mark. This avoids the need to store is separately in
        the Sampler. Fold what was in record() here, since nothing else needs this functionality.
        record() now just relays the information to the sampler.
        (Benchmark.prototype.record): Called by Animator, which provides the data to the sampler.
        Animator's calls to this is part of a later patch. Requires each stage to return its complexity.
        (Benchmark.prototype.processSamples): If the sampling mark exists, add it to the results.
                Go through all of the samples. All samples contain a timestamp and complexity. We
        calculate "raw FPS" which is the time differential from the previous sample. At regular intervals
        the Kalman-filtered FPS and the interval average FPS are also recorded. We also create two
        experiments, to get the scores for the complexity and smoothed FPS, and add those samples to
        the experiments. Grab those scores and add them into results also.

        Add complexity() to the tests for Benchmark.record().
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/text/resources/layering-text.js:

2015-12-27  Jon Lee  <jonlee@apple.com>

        Simplify the test harness
        https://bugs.webkit.org/show_bug.cgi?id=152562

        Reviewed by Simon Fraser.

        Update the simple canvas tests. For the paths, start from the center instead of the
        top-left corner. Instead of using a coordinate limit, use a canonized factor, and
        use that along both the x and y axes, so that more capable tests use more of the
        canvas.

        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLinePoint): Rewrite to use the coordinate maximum factor.
        (CanvasQuadraticPoint): Ditto.
        (CanvasBezierPoint): Ditto.
        * Animometer/tests/simple/resources/simple-canvas.js:
        (tune): Calculate a factor instead of a maximum coordinate.

2015-12-27  Jon Lee  <jonlee@apple.com>

        Simplify the test harness
        https://bugs.webkit.org/show_bug.cgi?id=152562

        Reviewed by Simon Fraser.

        All of the benchmarks use the default Animator(). Don't require new tests
        to pass a new instance, and instead just make one in the Benchmark constructor.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:
        * Animometer/tests/text/resources/text-boxes.js:

        Refactor the template.

        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:

        Refactor the SVG suite.

        * Animometer/tests/bouncing-particles/bouncing-svg-images.html: Move scripts to the end.
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.

        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Remove extraneous includes
        to stage.js.
        * Animometer/tests/text/text-boxes.html: Ditto.

        BouncingCanvasParticlesBenchmark is not necessary. Use Benchmark directly when subclassing.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js: Remove
        BouncingCanvasParticlesBenchmark.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js: Use Benchmark.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js: Ditto.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js: Require the shape
        in the constructor instead of having subclasses set the private variable.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js: Refactor.
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:

        Refactor the HTML suite.

        Move scripts to the end.
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

        Refactor to use the new variables.
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/text/resources/layering-text.js:
        * Animometer/tests/text/resources/text-boxes.js:

        Refactor the bouncing canvas tests.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Move scripts to the end.
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Move scripts to the end.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js: Promote a few
        properties to "public" since they are used by subclasses.
        (BouncingParticlesStage): Fix the constructor, which was missing "this". Make particles
        "public" for subclasses.
        (BouncingParticlesStage.initialize): Fix the max velocity, which was accidentally changed.
        * Animometer/tests/misc/resources/compositing-transforms.js: Refactor.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        BouncingCanvasParticlesAnimator is no longer needed.
        (BouncingCanvasParticle): Change constructor to take a shape as a parameter instead of
        having subclasses set the variable.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js: Refactor.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js: Refactor.

        Move example/ files into misc/.

        * Animometer/tests/misc/canvas-electrons.html: Renamed from PerformanceTests/Animometer/tests/examples/canvas-electrons.html.
        * Animometer/tests/misc/canvas-stars.html: Renamed from PerformanceTests/Animometer/tests/examples/canvas-stars.html.
        * Animometer/tests/misc/resources/canvas-electrons.js: Renamed from PerformanceTests/Animometer/tests/examples/resources/canvas-electrons.js.
        * Animometer/tests/misc/resources/canvas-stars.js: Renamed from PerformanceTests/Animometer/tests/examples/resources/canvas-stars.js.

        * Animometer/resources/debug-runner/tests.js: Update test URLs.

        Refactor miscellaneous suite.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        Remove BouncingParticlesAnimator and BouncingParticleBenchmark, which are
        not needed.
        (tune): Remove console assert.
        * Animometer/tests/resources/main.js: Add Rotater back in from stage.js.

        * Animometer/tests/examples/resources/canvas-electrons.js: Remove CanvasElectronsAnimator.
        * Animometer/tests/examples/resources/canvas-stars.js: Remove CanvasStarsAnimator.
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/examples/canvas-electrons.html: Move scripts to the end.
        * Animometer/tests/examples/canvas-stars.html: Ditto.
        * Animometer/tests/misc/compositing-transforms.html: Ditto.

        Refactor the simple suite.

        * Animometer/tests/master/resources/canvas-stage.js:
        (tune): Remove coordinateMaximum since it is not needed in any
        of the master tests.
        * Animometer/tests/simple/resources/simple-canvas.js:
        SimpleCanvasAnimator and SimpleCanvasBenchmark are no longer
        needed.
        (tune): Manage the objects differently, but instead of duplicating
        all of SimpleCanvasStage here, just replace tune(). Include
        coordinateMaximum, and remove items from the end of the list
        instead of the beginning.
        (StageBenchmark.call.createAnimator): Deleted.
        (StageBenchmark.call): Deleted.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/simple-canvas-paths.html: Move
        scripts to the end.

        Get rid of stage.js, StageAnimator, and StageBenchmark. Don't have the progress bar update during the test.

        * Animometer/resources/debug-runner/animometer.js:
        (initialize): Move the setting of testsCount to the debug runner.
        (didRunTest): Nicer name.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runBenchmarkAndRecordResults): Don't pass in the progress bar to benchmarks.
        * Animometer/resources/extensions.js:
        (ProgressBar): Refactor. Make variables "private". Resetting the progress when instantiating.
        (ProgressBar.prototype.incrementRange): This is called every time a benchmark completes.
        * Animometer/resources/runner/animometer.js:
        (window.benchmarkRunnerClient.initialize): Remove unneeded setting of testsCount.
        * Animometer/resources/strings.js: These are no longer needed.
        * Animometer/tests/master/canvas-stage.html: Remove script inclusion. Other tests will follow.
        * Animometer/tests/master/resources/canvas-tests.js: Use Benchmark instead of StageBenchmark.
        * Animometer/tests/resources/main.js: Messages are no longer needed
        (Animator.prototype._shouldRequestAnotherFrame): Rename from animate(), since this method returns a boolean
        indicating whether another frame should be requested. Collapse the logic from StageAnimator into animateLoop.
        (BenchmarkState.prototype.currentStage): Deleted.
        (BenchmarkState.prototype.currentMessage): Deleted.
        (BenchmarkState.prototype.currentProgress): Deleted.
        (Animator.prototype.animate): Deleted.
        (Animator.prototype.animateLoop): The stage is animated only when we have another frame to draw.
        (Benchmark.prototype.record): No need to update the progress bar.
        * Animometer/tests/resources/stage.js: Removed. Rotater will appear in a later patch, in main.js.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runBenchmarkAndRecordResults): Each test is run as a benchmark.
        Remove the call to runBenchmark by merging the options here, and calling benchmark.run()
        directly.

        Make the class relationships more easily understandable. The benchmark owns the stage,
        animator, and options. Make the stage and animator no longer have their own references to
        the options. Make Stage a first-class citizen by promoting it to main.js. Later patches
        will try to get rid of stage.js altogether.
        * Animometer/tests/resources/main.js:
        (Stage): Moved from stage.js.
        (Animator): Don't pass in benchmark and options in its constructor. It will get initialized
        by benchmark-related parameters in initialize().
        (Animator.prototype.initialize): Add a back-reference to benchmark and cache an option.
        (Animator.prototype.get benchmark):
        (Animator.prototype.animate): Refactor to use the cached option, to remove its dependency on
        the options dictionary.
        (Benchmark): Require all benchmarks to have a stage and animator. The instance will initialize
        them.
        (Benchmark.prototype.get options):
        (Benchmark.prototype.get stage): BenchmarkStates.stages will need to be renamed to avoid confusion.
        (Benchmark.prototype.get animator):
        (Benchmark.prototype.start):
        (Benchmark.prototype.update): Ask the stage directly to tune or clear instead of adding another
        level of indirection.
        (window.runBenchmark): Deleted. Remove the need for a benchmarkClient. Also remove the standalone
        path, since tests can be individually selected, and remove the need for runBenchmark since that is
        handled in BenchmarkRunner._runBenchmarkAndRecordResults.
        * Animometer/tests/resources/stage.js:
        (Stage): Deleted. Moved to main.js.
        (StageBenchmark): What's left is updating the progress bar; to be removed.
        (StageAnimator): What's left can be folded in Animator.

        Refactor master suite.
        * Animometer/tests/master/resources/canvas-stage.js: This now only has SimpleCanvasStage.
        (animate): Push the clearRect() into each stage.
        (complexity):
        (StageBenchmark.call.createAnimator): Deleted.
        (StageBenchmark.call): Deleted.
        * Animometer/tests/master/resources/canvas-tests.js: SimpleCanvasPathStrokeStage is no longer needed.
        (CanvasLineSegment.prototype.draw):
        (CanvasArc):
        (CanvasLinePoint): Remove the draw call because depending on its index it either needs to be moveTo
        or lineTo, and it is otherwise a very small draw operation that doesn't need the overhead of the
        function call. Do all of the drawing through the stage.

        Refactor the subclass pattern. Introduce Utilities.createSubclass().

        * Animometer/resources/debug-runner/benchmark-runner.js:
        * Animometer/resources/extensions.js:
        (window.Utilities.createSubclass): Takes the super class, a function representing
        the class's constructor, and additional methods to attach to the new class's
        prototype object.
        * Animometer/tests/text/text-boxes.html: Remove unneeded reference to utilities.js.

        Refactor tests.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/examples/resources/canvas-electrons.js:
        * Animometer/tests/examples/resources/canvas-stars.js:
        * Animometer/tests/master/resources/canvas-stage.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/stage.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/resources/simple-canvas.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js: Reorder some of the methods
        and properties since they rely on each other.
        * Animometer/tests/text/resources/text-boxes.js:

        * Animometer/resources/debug-runner/animometer.js: Arrange calls
        in the order they are evoked.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunnerState.prototype.next): Get rid of return value since
        no caller to next() uses it.
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Refactor the
        promise to resolve simply when onload() is called instead of
        looking for #stage.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Suite.run
        simply calls runBenchmark(). Call it directly rather than through
        the Suite.
        (BenchmarkRunner.prototype.step): Remove unused parameter in
        resolve callback.
        (BenchmarkRunner.prototype.runMultipleIterations): Use this instead
        of self since it is outside of the closure which needed the self
        variable.
        (resolveIfReady): Deleted.
        (BenchmarkRunner.prototype.waitForElement): Deleted.
        * Animometer/resources/runner/tests.js: prepare() and run() are
        no longer needed.
        (Suite.prototype.prepare): Deleted.
        (Suite.prototype.run): Deleted.
        * Animometer/tests/master/canvas-stage.html: Move all scripts to
        the end of the page.

2015-12-23  Simon Fraser  <simon.fraser@apple.com>

        Add an Animometer developer test which animates text-rich boxes
        https://bugs.webkit.org/show_bug.cgi?id=152544

        Reviewed by Zalan Bujtas.

        Add a test that draws lots of international text. This is a particle test,
        moving the boxes around with absolution positioning.

        * Animometer/resources/debug-runner/tests.js:
        * Animometer/tests/text/resources/text-boxes.js: Added.
        (BouncingTextBox):
        (BouncingTextBox.prototype._move):
        (BouncingTextBox.prototype.animate):
        (BouncingTextBoxStage):
        (BouncingTextBoxStage.prototype.createParticle):
        (BouncingTextBoxStage.prototype.particleWillBeRemoved):
        (BouncingTextBoxsBenchmark):
        (BouncingTextBoxsBenchmark.prototype.createStage):
        (window.benchmarkClient.create):
        * Animometer/tests/text/text-boxes.html: Added.

2015-12-23  Jon Lee  <jonlee@apple.com>

        Split benchmark into two different pages
        https://bugs.webkit.org/show_bug.cgi?id=152458

        Reviewed by Simon Fraser.

        Add tests to 'animometer' suite.

        * Animometer/resources/runner/tests.js:
        * Animometer/tests/master/canvas-stage.html: Added.
        * Animometer/tests/master/resources/canvas-stage.js: Added.
        * Animometer/tests/master/resources/canvas-tests.js: Added.
        * Animometer/tests/master/resources/stage.css: Added.

2015-12-23  Jon Lee  <jonlee@apple.com>

        Split benchmark into two different pages
        https://bugs.webkit.org/show_bug.cgi?id=152458

        Reviewed by Simon Fraser.

        Address comments.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
        sampler goes away, and a later call to get the JSON data is no longer available. Process the data
        right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
        * Animometer/resources/extensions.js:
        (Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
        (Array.prototype.find.Array.prototype.find): Update the null check.
        (ResultsDashboard.prototype._processData): Use the already-processed data.
        * Animometer/resources/runner/animometer.css:
        (.frame-container > iframe): Remove calc().

        Move Array functions to extensions.js since that is included by the harness.
        Add ES6 Array polyfills.

        * Animometer/resources/algorithm.js:
        (Array.prototype.swap): Moved to extensions.js.
        * Animometer/resources/extensions.js:
        (Array.prototype.swap):
        (Array.prototype.fill): Added.
        (Array.prototype.find): Added.

        Adjust styles for iPad.

        * Animometer/resources/runner/animometer.css:
        (@media screen and (min-device-width: 768px)): Apply to iPad as well.
        (@media screen and (max-device-width: 1024px)): Update width for iPads.

        Adjustment styles for iOS.

        * Animometer/developer.html: Different divs contain the iframe, so use a class instead and
        update the style rules.
        * Animometer/index.html:
        * Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
        (@media screen and (min-device-width: 1800px)): Move this up.
        * Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.

        Get rid of prefixed flex properties for now.

        * Animometer/resources/debug-runner/animometer.css:
        * Animometer/resources/runner/animometer.css:

        Update the structure of the harness. Remove the JSON-per-test but keep
        the JSON of the whole test run. Use the full page in order to display
        the graph.

        * Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
        average, and worst 5% statistics.
        * Animometer/index.html: Make structure similar to developer.html.
        * Animometer/resources/debug-runner/animometer.css: Remove most of the
        button rules since they are superfluous. Move the progress bar to the
        top, fixed. Update the results page rules.
        * Animometer/resources/debug-runner/animometer.js: Remove most of the
        additions to sectionsManager since they are no longer needed.
        (setSectionHeader): Updates header of the section.
        (window.suitesManager._updateStartButtonState): Update selector.
        (showResults): Add keypress event for selecting different data for
        copy/paste. Update how the results are populated. Include full test
        JSON in a textarea, rather than requiring a button press.
        (showTestGraph):
        * Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
        title, and the text used as the cell contents, including class name.
        * Animometer/resources/extensions.js:
        (ResultsTable): Update to include a flattened version of the headers,
        used while populating table contents. Remove unneeded helper functions
        for creating the table. Rename "show" to "add".
        * Animometer/resources/runner/animometer.css: Update rules to
        accommodate the new structure.
        * Animometer/resources/runner/animometer.js:
        (window.sectionsManager.setSectionScore): Helper function to set the
        score and mean for a section.
        (window.sectionsManager.populateTable): Helper function to set the table.
        (window.benchmarkController.showResults): Refactor.
        (window.benchmarkController.selectResults): Update selectors.
        * Animometer/resources/runner/tests.js: Set Headers. Debug harness
        extends it.

        Update debug runner to have similar names to the basic runner. Include
        that page's CSS and remove extraneous CSS rules.

        Get rid of the statistics table #record.

        * Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
        * Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
        * Animometer/resources/debug-runner/animometer.js: Remove recordTable.
        (window.suitesManager._updateStartButtonState): Update selector to #intro.
        (setupRunningSectionStyle): Deleted.

        * Animometer/resources/runner/animometer.css:
        (#test-container.selected): Change to flex-box only when visible.

        Remove recordTable.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runTestAndRecordResults):
        * Animometer/resources/runner/tests.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/examples/resources/canvas-electrons.js:
        * Animometer/tests/examples/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/resources/stage.js:
        (StageBenchmark): Remove _recordTable.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/resources/simple-canvas.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:

        * Animometer/resources/debug-runner/animometer.js:
        (willStartFirstIteration): Fix selector, since results-table is used
        in multiple places, so it cannot be an id.

        Make it possible to select the scores, or the whole table data,
        by cycling through different selections through key press of 's'.

        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.showResults): Attach a keypress handler
        if it hasn't been added already.
        (window.benchmarkController.selectResults):
        * Animometer/resources/runner/tests.js: Cycle through different
        ranges.

        Fix a few fly-by errors.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
        since the files are now in the top directory instead of inside runner/.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
        (BenchmarkRunner.prototype.step): Member variable is never used.

        A little stylistic cleanup.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        * Animometer/resources/extensions.js:
        (window.DocumentExtension.createElement):
        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.record):
        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults): Reverse progress and message.
        The message appears less frequently than the progress.
        * Animometer/tests/simple/resources/simple-canvas.js:
        (SimpleCanvasBenchmark): Remove unused options.

        Add newer version of harness in a new page. Consolidate differences between the two
        pages.

        * Animometer/developer.html: Include runner/animometer.js. Rename the JS function
        to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
        #test-container.
        * Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
        * Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
        instead of 4:3.

        Split out benchmarkRunnerClient and benchmarkController.

        * Animometer/resources/debug-runner/animometer.js: Move needed functions out of
        benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
        and move populating the results table into benchmarkController. Rename _resultsDashboard
        to results and make it accessible for other objects to use.
        (willAddTestFrame): This is unnecessary. Remove.

        (window.sectionsManager.showScore): Grab it from the results object instead of
        benchmarkRunnerClient.
        (window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.

        (window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
        (window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
        (window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
        here.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
        * Animometer/resources/extensions.js:
        (ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
        for later referencing.
        (ResultsDashboard.prototype.toJSON): Deleted.
        (ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
        outputting JSON. Store the processed data into a member variable that can be referenced later.
        (ResultsDashboard.prototype.get data): Process the data if it hasn't already.
        (ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
        aggregate score.
        (ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
        need for an empty children array. This was to allow for a header row in the table that spanned
        multiple columns. In the simpler harness, this is not needed.
        (ResultsTable.prototype._showEmptyCells):
        (ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
        which is the bare minimum needed for the simpler harness, key off of the header name provided.
        * Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
        split into the data and the headers, and are also displayed RTL so that a later patch allows a
        user to copy-paste the data easily.
        * Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
        The debug harness will extend these classes.
        (window.benchmarkController._startBenchmark): Used by both harnesses.
        (window.benchmarkController.startBenchmark): Set hard-coded options.
        (window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
        here.

        Get rid of utilities.js. Move it all into extensions.js.

        * Animometer/resources/extensions.js:
        * Animometer/tests/resources/utilities.js: Removed.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
        * Animometer/tests/examples/canvas-electrons.html: Ditto.
        * Animometer/tests/examples/canvas-stars.html: Ditto.
        * Animometer/tests/misc/compositing-transforms.html: Ditto.
        * Animometer/tests/simple/simple-canvas-paths.html: Ditto.
        * Animometer/tests/template/template-canvas.html: Ditto.
        * Animometer/tests/template/template-css.html: Ditto.
        * Animometer/tests/template/template-svg.html: Ditto.
        * Animometer/tests/text/layering-text.html: Ditto.

        Split tests.js into two. Add a new suite to runner/tests.js.

        * Animometer/developer.html: Update the script order. Scripts from
        debug-runner/ will always build on those from runner/, and have the
        same name.
        * Animometer/resources/debug-runner/tests.js: Move "complex examples"
        suite into "miscellaneous tests".
        (Suite): Deleted.
        (Suite.prototype.prepare): Deleted.
        (Suite.prototype.run): Deleted.
        (suiteFromName): Deleted.
        * Animometer/resources/runner/tests.js: Added. Take definitions and
        functions needed by the test harness. Leave the test suites behind.
        (Suite): Moved from debug script.
        (Suite.prototype.prepare): Ditto.
        (Suite.prototype.run): Ditto.
        (suiteFromName): Ditto.
        (testFromName): Ditto.

        Move benchmark resources out into resources/debug-runner, and update URLs.

        * Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
        * Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
        * Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
        * Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
        * Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
        * Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
        * Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.

2015-12-11  Jon Lee  <jonlee@apple.com>

        Improve Animometer on iOS
        https://bugs.webkit.org/show_bug.cgi?id=152180

        Reviewed by Simon Fraser.

        Improve experience on phones. Make the canvas take
        up the whole screen.

        * Animometer/runner/animometer.html: Add meta viewport.
        Remove the container div.
        * Animometer/runner/resources/animometer.css: Have buttons lay
        out vertically. Update detail arrow glyph. Make the suites and
        options section lay out vertically. Remove the top spacers since
        we want the canvas to take over the whole screen. Minimal display
        is recommended for use.

2015-12-07  Jon Lee  <jonlee@apple.com>

        Update suites for benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151957

        Reviewed by Simon Fraser.

        * Animometer/runner/animometer.html: Use spacers instead of relying on
        justify-content center to center the content. That allows the opening screen
        to grow downward when expanding the list of choices, otherwise it expands
        from the center, and off the top edge of the screen.
        * Animometer/runner/resources/animometer.css:
        (.tree): Don't overflow scroll.
        (.tree > li > label.tree-label:before): Use better glyphs.
        (.tree > li > :checked ~ label.tree-label:before):
        (main): Using flex-start for justify-content so that if the section grows too
        big it gets pinned to the top edge of the document instead of growing past it.
        (.spacer): Make the spacers have a minimum 20px and grow evenly.
        (section#home): Add a min-height so that the border will expand if the suite
        tests shown make the section grow past the height.
        * Animometer/runner/resources/animometer.js: Update the selectors.
        (window.suitesManager._treeElement):
        (window.suitesManager._suitesElements):
        (window.suitesManager._editsElements):

2015-12-07  Jon Lee  <jonlee@apple.com>

        Update options for benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151956

        Reviewed by Simon Fraser.

        Move "Fix test complexity" and "Adaptive" checkboxes into a radio group.

        Move "Show running results" into a radio group, and add options to remove the HUD.

        * Animometer/runner/animometer.html: Get rid of the preamble. Wrap the options
        in a form for easier referencing in JS.
        * Animometer/runner/resources/animometer.css: Show the surrounding border if the
        body's display-minimal class name is set.
        * Animometer/runner/resources/animometer.js:

        Update the way optionsManager gets and sets default values. Include support for
        radio groups.
        (window.optionsManager.valueForOption):
        (window.optionsManager.updateUIFromLocalStorage):
        (window.optionsManager.updateLocalStorageFromUI):

        (window.benchmarkRunnerClient.willStartFirstIteration):
        (window.sectionsManager.setupRunningSectionStyle):
        (window.suitesManager._treeElement): Fly-by whitespace fix.
        (window.suitesManager._suitesElements): Ditto.
        (window.suitesManager.updateEditsElementsState): Update options check.
        (window.suitesManager.updateDisplay): Add a new update function for the HUD.
        Attach a class to the body depending on the user's choice.
        (window.benchmarkController.initialize): Add an event listener when the form
        radio buttons update.
        (window.benchmarkController.onFormChanged):
        (window.optionsManager._optionsElements): Deleted.
        (window.optionsManager._adaptiveTestElement): Deleted.
        (window.benchmarkController.onChangeAdaptiveTestCheckbox): Deleted.
        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.update): Update options checks.
        * Animometer/tests/resources/stage.js: Update option check.
        (StageBenchmark.prototype.showResults):

2015-12-01  Simon Fraser  <simon.fraser@apple.com>

        Add a basic compositing Animometer test
        https://bugs.webkit.org/show_bug.cgi?id=151724

        Reviewed by Dean Jackson.

        Add a "bouncing particles" test that moves composited layers around, optionally with a filter.

        This is added under a new "Miscellaneous" category.

        Remove the test templates category from the UI.

        * Animometer/runner/resources/tests.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        (BouncingCssShape.prototype.animate):
        * Animometer/tests/misc/compositing-transforms.html: Added.
        * Animometer/tests/misc/resources/compositing-transforms.js: Added.
        (BouncingCompositedImage):
        (BouncingCompositedImage.prototype._move):
        (BouncingCompositedImage.prototype.animate):
        (CompositingTransformsStage):
        (CompositingTransformsStage.prototype.createParticle):
        (CompositingTransformsStage.prototype.particleWillBeRemoved):
        (CompositedTransformsBenchmark):
        (CompositedTransformsBenchmark.prototype.createStage):
        (window.benchmarkClient.create):

2015-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Fix the graphics benchmark complexity bounds adjustment
        https://bugs.webkit.org/show_bug.cgi?id=151670

        Reviewed by Simon Fraser.

        Make sure the graphics benchmark complexity bounds adjustment is applied
        to the absolute lower bound.

        * Animometer/tests/resources/math.js:
        (PIDController.prototype._saturate):

2015-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an option to select the results form the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151666

        Reviewed by Ryosuke Niwa.

        We need an easy way to select the graphics benchmark results table such
        that when it is copied to the clipboard, rich text format is set to the
        clipboard.

        * Animometer/runner/animometer.html: Add a new button to select the results table or JSON.

        * Animometer/runner/resources/animometer.js:
        (window.sectionsManager._sectionDataElement): Selects the container <data> element.
        (window.sectionsManager._sectionDataDivElement): Replace a literal string with a string table entry.
        (window.sectionsManager.showTestName): Replace a literal string with a string table entry.
        (window.sectionsManager.selectData): Selects the container <data> element in a selection.
        (window.sectionsManager.selectDataContents): Select the contents of container <data> element in a selection.
        (window.benchmarkController.selectResults): Selects the results table.
        (window.benchmarkController.showJSON): Function rename.
        (window.benchmarkController.selectJSON): Selects the contents of the results JSON.
        (window.benchmarkController.showJson): Deleted.

2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        Animometer: graphs should not do interpolation
        https://bugs.webkit.org/show_bug.cgi?id=151526

        Reviewed by Simon Fraser.

        Having the graphs do interpolation is misleading, because you can't see the actual data.

        Also remove "shape-rendering: crispEdges;" so the lines get antialiased.

        * Animometer/runner/resources/animometer.css:
        (section#test-graph > data > svg): Deleted.
        * Animometer/runner/resources/graph.js:
        (graph): Deleted.

2015-11-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Calculate the graphics benchmark test gain adaptively
        https://bugs.webkit.org/show_bug.cgi?id=151208

        Reviewed by Darin Adler.

        We need to calculate the gain of the graphics benchmark tests adaptively
        and get rid of the gain and limits parameters we have to choose manually
        for every test. We are going to use the classic Ziegler–Nichols method for
        calculating the gain and integral and derivative times. We are going to
        try moving on a cubic curve during the manual stage from y0 to reach ysp.
        We also going to use a saturation actuator to ensure the system does not
        fluctuate.

        * Animometer/resources/extensions.js:
        (ResultsTable.prototype._isNoisyMeasurement): Fix a parameter name.
        (ResultsTable.prototype._isNoisyTest): Since score is a member of testResults, we need to limit our search to frame rate and complexity.
        (ResultsTable.prototype._showTest): Pass the correct parameter to _isNoisyMeasurement().

        * Animometer/resources/strings.js: Fix the indentation and name and value of a string.

        * Animometer/runner/resources/tests.js: Remove all the manual gains and limits parameters which had to be passed to every test.

        * Animometer/tests/resources/main.js:
        (BenchmarkState.prototype.currentStage): Fix an enum name.
        (Benchmark): Get rid of manual gain and limits.
        (Benchmark.prototype.update): Simplify the calculation by having all the times in ms.

        * Animometer/tests/resources/math.js:
        (PIDController): Get rid of the manual gain and limits and the magic numbers for Ti and Td.
        (PIDController.prototype._yPosition): Tells whether the test current output is moving towards the set-point or away from it.
        (PIDController.prototype._distanceUltimate): Calculates the ultimate distance from y0 after time t using a cubic formula.
        (PIDController.prototype._distance): Calculates the distance of y relative to y0.
        (PIDController.prototype._gainIncrement): Decides how much the proportional gain should be increased during the manual gain stage.
        (PIDController.prototype._updateStage): Updates the stage of the controller based on its current stage and the system output.
        (PIDController.prototype._tuneP): Tunes the system before calculating the PID controller gains.
        (PIDController.prototype._tunePID): PID tuning function.
        (PIDController.prototype._tune):
        (PIDController.prototype._saturate):
        (PIDController.prototype.tune): Manages calculating the controller parameters. It then returns a PID tuning value.
        (PIDController.prototype._sat): Deleted. We may need to return it back but the limits have to be calculated adaptively not manually.

2015-11-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Reorganize the graphics benchmark string table
        https://bugs.webkit.org/show_bug.cgi?id=151334

        Reviewed by Simon Fraser.

        Make the graphics benchmark string table be an object of sub-objects. Each
        sub-object represents an associative array, the key is the string name and
        the value is the string data.

        * Animometer/resources/extensions.js:
        (ResultsDashboard.prototype.toJSON):
        (ResultsTable.prototype._showGraph):
        (ResultsTable.prototype._showJSON):
        (ResultsTable.prototype._isNoisyMeasurement):
        (ResultsTable.prototype._isNoisyTest):
        (ResultsTable.prototype._showTest):
        (ResultsTable.prototype._showSuite):
        (ResultsTable.prototype._showIteration):
        * Animometer/resources/sampler.js:
        (Sampler.prototype.toJSON):
        * Animometer/resources/strings.js:
        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.didFinishLastIteration):
        (window.suitesManager.updateLocalStorageFromJSON):
        (window.benchmarkController.showResults):
        (window.benchmarkController.showJson):
        (window.benchmarkController.showTestGraph):
        (window.benchmarkController.showTestJSON):
        * Animometer/runner/resources/tests.js:
        * Animometer/tests/resources/main.js:

2015-11-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Disable flattening the stage iframe of the graphics benchmark when running on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151361

        Reviewed by Simon Fraser.

        Use fixed size for stage iframe of the graphics benchmark to disable
        flattening the iframe while animating the particles. Also ensure the
        bouncing particles do not go outside the iframe's boundaries.

        * Animometer/runner/resources/animometer.css:
        (section#running > #running-test > iframe):
        (@media screen and (min-device-width: 1800px)):
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticle.prototype.animate):

2015-11-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Use the media queries to dynamically set the stage for the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151327

        Reviewed by Simon Fraser.

        Clean setting the benchmark css rules by using the media queries. Accessing
        document.stylesheets.cssRules seems to be unreliable. Fix the test harness
        load event listener invocation. And also remove the options for normalizing
        the stage resolution for retina display.

        * Animometer/resources/extensions.js:
        (window.DocumentExtension.insertCssRuleAfter): Deleted.
        * Animometer/runner/animometer.html:
        * Animometer/runner/resources/animometer.css:
        (@media screen and (min-device-width: 1800px)):
        * Animometer/runner/resources/animometer.js:
        (window.sectionsManager.setupRunningSectionStyle):
        (window.benchmarkController.initialize):
        (window.sectionsManager.setupSectionStyle): Deleted.
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticlesStage):
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/resources/layering-text.js:
        (LayeringTextStage):
        (LayeringTextStage.prototype._setFontSize): Deleted.

2015-11-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the option for animating using setInterval from the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151283

        Reviewed by Darin Adler.

        Get rid of the option to run animation using setInterval().

        * Animometer/tests/resources/main.js:
        (Animator.prototype.animate):
        (Benchmark):
        (Benchmark.prototype.start):
        (Animator.prototype.start): Deleted.

2015-11-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Highlight the alarming test results in the graphics benchmark results page
        https://bugs.webkit.org/show_bug.cgi?id=151286

        Reviewed by Simon Fraser.

        When showing the results of a test in the graphics benchmark the following
        criteria is going to be applied:

        1. If the standard deviation of the test complexity or the frame rate is
           equal to or more than 10%, the standard deviation and the test name
           will be displayed in red.
        2. If the average frame rate is not in the range = [(desired_frame_rate - 2)
           .. (desired_frame_rate + 2)], the average frame rate and the test name will
           be displayed in red.

        * Animometer/resources/extensions.js:
        (ResultsTable.prototype._showHeaderRow):
        (ResultsTable.prototype._showHeader):
        (ResultsTable.prototype._showEmptyCell):
        (ResultsTable.prototype._showText):
        (ResultsTable.prototype._showFixedNumber):
        (ResultsTable.prototype.):
        (ResultsTable.prototype._showGraph):
        (ResultsTable.prototype._showJSON):
        (ResultsTable.prototype._isAlarmingMeasurement):
        (ResultsTable.prototype._isAlarmingTestResults):
        (ResultsTable.prototype._showEmptyCells):
        (ResultsTable.prototype._showEmptyRow):
        (ResultsTable.prototype._showTest):
        (ResultsTable.prototype._showSuite):
        (ResultsTable.prototype._showIteration):
        (ResultsTable.prototype.showRecord):
        (ResultsTable.prototype.showIterations):
        (ResultsTable.prototype._showEmpty): Deleted.
        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.didFinishLastIteration):
        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults):

2015-11-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Clean referencing the options object in the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151284

        Reviewed by Simon Fraser.

        Get rid of the Benchmark.options member and rely only on the private member
        Benchmark._options. The animator need to have its own options member instead
        of accessing it from its reference to Benchmark object.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        (BouncingCanvasParticlesAnimator):
        (BouncingCanvasParticlesBenchmark.prototype.createAnimator):
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticle.prototype.animate):
        (BouncingParticlesAnimator):
        (BouncingParticlesBenchmark.prototype.createAnimator):
        * Animometer/tests/examples/resources/canvas-electrons.js:
        (CanvasElectronsStage.prototype.animate):
        (CanvasElectronsAnimator):
        (CanvasElectronsBenchmark.prototype.createAnimator):
        (window.benchmarkClient.create):
        * Animometer/tests/examples/resources/canvas-stars.js:
        (CanvasStarsStage.prototype.animate):
        (CanvasStarsAnimator):
        (CanvasStarsBenchmark.prototype.createAnimator):
        (window.benchmarkClient.create):
        * Animometer/tests/resources/main.js:
        (BenchmarkState.prototype.currentProgress):
        (Animator):
        (Animator.prototype.animate):
        (Benchmark):
        (Benchmark.prototype.update):
        * Animometer/tests/resources/stage.js:
        (Stage.prototype.clear):
        (StageAnimator):
        (StageBenchmark.prototype.createAnimator):
        (StageBenchmark.prototype.tune):
        (StageBenchmark.prototype.showResults):
        * Animometer/tests/simple/resources/simple-canvas.js:
        (SimpleCanvasStage.prototype.animate):
        (SimpleCanvasAnimator):
        (SimpleCanvasAnimator.prototype.animate):
        (SimpleCanvasBenchmark.prototype.createAnimator):
        * Animometer/tests/template/resources/template-canvas.js:
        (TemplateCanvasStage.prototype.animate):
        (TemplateCanvasBenchmark.prototype.createAnimator):
        (window.benchmarkClient.create):

2015-11-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Eliminate a request for layout every time an item is added to the stage of the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151289

        Reviewed by Simon Fraser.

        Cache the stage size when it is created instead of requesting every time
        an object is added via clientWidth and clientHeight.

        * Animometer/resources/extensions.js:
        (Insets.elementPadding):
        * Animometer/tests/resources/stage.js:
        (Stage):
        (Stage.prototype.get size):

2015-11-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Initialize the graphics benchmark's Kalman filter with estimated 60 FPS
        https://bugs.webkit.org/show_bug.cgi?id=150965

        Reviewed by Darin Adler.

        This should give the benchmark more accurate reading at warmup time. And
        hence we can safely reduce the test running time to be 10 seconds.

        * Animometer/runner/animometer.html:
        Add "defer" back when loading resources/animometer.js since this script
        depends on many other scripts and we need to wait till the page is parsed.
        Also change the default test interval to be 10 seconds.

        * Animometer/runner/resources/graph.js:
        (graph): Make the test results curves smoother.

        * Animometer/tests/resources/main.js:
        (Animator): Initialize the Kalman filter with 60 FPS which should be true
        if the test page is empty.

        (Animator.prototype.animate):
        * Animometer/tests/resources/math.js:
        (KalmanEstimator): Fix the initial value of _vecX_est.
            _vecX_est[0] = current FPS (= 60FPS when the test page is empty)
            _vecX_est[1] = first time derivative of FPS (=0; FPS has been constant).
            _vecX_est[2] = second time derivative of FPS (=0; since _vecX_est[1]=0).
        (KalmanEstimator.prototype.estimate): Add some comments.

2015-11-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove "defer" from the scripts' references in the graphics benchmark home page
        https://bugs.webkit.org/show_bug.cgi?id=150915

        Reviewed by Simon Fraser.

        It causes the benchmark to be very flakey.

        * Animometer/runner/animometer.html:

2015-11-01  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Add an option to make the graphics benchmark runs a specific test with fixed complexity
        https://bugs.webkit.org/show_bug.cgi?id=150529

        Reviewed by Darin Adler.

        Beside each test in the suites tree, we are going to show the complexity
        arithmetic mean of the of the last run in an edit control. Based on a
        new option these edit controls will all be visible or hidden. If they are
        visible their values can be changed. The benchmark runner if it run in
        the non-adaptive mode will set the complexity of the test to the passed
        value and will not change it ever. The animator will animate the test and
        frame rate will also be measured.

        * Animometer/runner/animometer.html: Add a new option for the non-adaptive mode.

        * Animometer/runner/resources/animometer.css:
        (section#home input[type="number"]): Define the width of all the edit control in the <home> section.
        (section#home > suites input[type="number"]): The edit controls in the <suites> box will be right aligned and hidden by default.
        (section#home > suites input[type="number"].selected): When the class "selected" is added, the edit controls will be visible.
        (section#home > options > label > input[type="number"]): Deleted.

        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.didFinishLastIteration): Update the local storage with the results of each test.
        (window.optionsManager._adaptiveTestElement): Returns the checkbox for setting the adaptive test option.
        (window.suitesManager._editElement):  Returns the edit element associated with each test element in the suites tree.
        (window.suitesManager._editsElements): Returns a list of all the elements in the <suites> box.
        (window.suitesManager._localStorageNameForTest): Change this function to take strings.
        (window.suitesManager._createTestElement): Adds an edit control beside each test.
        (window.suitesManager.updateEditsElementsState): Adds/Removes the 'selected' class to/from all the tests edit elements.
        (window.suitesManager.updateUIFromLocalStorage): Reads the edit control value from the local storage.
        (window.suitesManager.updateLocalStorageFromUI): Saves the edit control value to the local storage.
        (window.suitesManager.updateLocalStorageFromJSON): Saves the last run results to the local storage.
        (window.benchmarkController.initialize): Shows/Hides the test edit controls based on the adaptive test option.
        (window.benchmarkController.onChangeAdaptiveTestCheckbox): An onchange event handler for the adaptive test checkbox.

        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.update): Fix the complexity of the test if the running mode is non-adaptive test and desired complexity is not zero.
        (window.runBenchmark): Add the test complexity as a new benchmark option.

2015-11-01  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Make the size of the benchmark canvas adaptive to the screen size and screen resolution
        https://bugs.webkit.org/show_bug.cgi?id=150530

        Reviewed by Darin Adler.

        We want to set the size of the benchmark stage dynamically such that it
        depends on the screen resolution and the device scale factor. This patch
        does more than that because the home page css was not done properly. To
        use the flex box layout, the animometer.css has to be rewritten almost from
        scratch. The suites tree has to be rewritten also because it was not collapsing
        and with the flex box layout it was going outside of the window area. The
        options handling and the local storage handling had to be rewritten to
        allow more flexibility with this patch and the future patches. The code
        in animometer.js was reorganized into objects to allow distributing the code
        nicely among separate entities.

        * Animometer/resources/extensions.js:
        (Point.elementClientSize): Returns the client size of an HTMLElement as a Point object.
        (Insets.prototype.get width): Follow the function opening brace style guidelines.
        (Insets.prototype.get height):
        (Insets.prototype.get size): Returns the size of an Insets as a Point object.

        (window.DocumentExtension): Provides document helper functions. It should be assailable from the runner and the tests.
        (window.DocumentExtension.createElement): Creates an HTMLElement given its name, attributes and parentElement.
        (window.DocumentExtension.createSvgElement): Creates an SVGElement given its name, attributes and parentElement (moved from utilities.js).
        (window.DocumentExtension.insertCssRuleAfter): Inserts a CSS rule after an exiting rule given its text.

        (ResultsTable.prototype._showHeader): Use DocumentExtension functions.
        (ResultsTable.prototype._showGraph): Use DocumentExtension functions and create a real button for "Graph..." option.
        (ResultsTable.prototype._showJSON): Use DocumentExtension functions and create a real button for "JSON..." option.
        (Options): Deleted.

        * Animometer/runner/animometer.html: Restructure the page to use the flex box layout.

        * Animometer/runner/resources/animometer.css:
        (html,body):
        (button):

        (button.large-button):The large button appears in the animometer.html.
        (button.large-button:active):
        (button.large-button:disabled):

        (button.small-button): The small button appears in the results table.
        (button.small-button:active):

        (.tree): The tree class is used to list the suites and their tests.
        (.tree .expand-button): This button expands a tree element.
        (.tree .expand-button ~ ul): Hide the children (<ul>...</ul>) of a parent node by default.
        (.tree .expand-button:checked ~ ul): Show the children of a parent node only when checked.
        (.tree ul): Hide the list bullets.
        (.tree li): Indent every node in the tree relative to its parent.
        (.tree ul li): Indent all the non top level nodes only (the tests nodes in our case).
        (.tree > li:last-child): Do not indent the bottom of the last child node.
        (.tree-label): Style for all the labels in the tree.
        (label.tree-label): Style for the labels in the top level only (the suites nodes in our case).
        (label.tree-label:before): Style the unchecked case of the expand-button.
        (:checked ~ label.tree-label:before): Style the checked case of the expand-button.

        (table.results-table): The results table appears while running the test and at the end.
        (.results-table td):
        (.results-table th):

        (div.results-json): The JSON div appears per test or for the whole run.

        (main): This is the flex box container.

        (section): A section is displayed exclusively inside the <main>. It is hidden by default.
        (section.selected): When it is selected, its layout is flex layout.
        (section > footer): The header or the footer of a section should not take more than 15% of the container.

        (section#home): The home section has <suites> and <options> parts to be laid out in the middle.
        (section#home > options):
        (section#home > suites): The <suites> should not take more than 40% of the width.
        (section#home > options > label): The benchmark title.
        (section#home > header > h2): The benchmark title.
        (section#home > options > label > input[type="number"]): Sets the width of the option edit control.

        (section#running): The running section contain the runner <iframe> which takes the whole area of the <main>.
        (section#running > #running-test): This is the <iframe> container.
        (section#running > #running-test > iframe): The <iframe> is created by the runner for each test.
        (section#running > #progress): This is the progress bar.
        (section#running > #progress > #progress-completed): This is another element which grows while the runner is progressing.
        (section#running > #record): This the container of the record results table which is shown while running a test.

        (section#results):
        (section#json):
        (section#test-json):
        (section#test-graph): All these sections have the same layout. A <data> element is laid out between <header> and <footer>.

        (section#results > data):
        (section#json > data):
        (section#test-json > data):
        (section#test-graph > data): The <data> element should take 70% of the <section>.

        (section#test-graph > data > svg):
        (.axis line):
        (.left-samples): These styles are for the d3 graph.

        (section#test-json > data): This is the style of the JSON <data> element.

        (iframe): Deleted.
        (label, p): Deleted.
        (section > p): Deleted.
        (section#home > p): Deleted.
        (section#home > p:first-child): Deleted.
        (#testContainer): Deleted.
        (section#running #progress-completed): Deleted.
        (section#results > table): Deleted.
        (section#results > table td, th): Deleted.
        (section#results > table tr.alt, td): Deleted.
        (section#results > table th): Deleted.
        (section#json > textarea): Deleted.
        (.options): Deleted.
        (.options p): Deleted.
        (#suites ul): Deleted.
        (#suites ul ul): Deleted.
        (#suites ul ul input, #suites ul ul label): Deleted.
        (#suites.showTests ul ul): Deleted.
        (.column): Deleted.
        (input[type="number"]): Deleted.
        (.buttons): Deleted.
        (.small-button): Deleted.
        (#graphContainer): Deleted.
        (.right-samples): Deleted.
        (.sample-time): Deleted.
        (.left-mean): Deleted.
        (.right-mean): Deleted.

        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.initialize): Initialize the client object with the options and the suites.
        (window.benchmarkRunnerClient.willStartFirstIteration): Use new css selectors for results and the record table.
        (window.benchmarkRunnerClient.didFinishLastIteration): Move the code which sets the JSON text to sectionsManager.showJSON().

        (window.sectionsManager): Responsible of managing the <section>s elements inside animometer.html.
        (window.sectionsManager._sectionHeaderH1Element): Return the <h1> inside the <header> of a given section.
        (window.sectionsManager._sectionDataDivElement): Return the <div> inside the <data> of a given section.
        (window.sectionsManager.showScore): Show the score of the last benchmark run.
        (window.sectionsManager.showTestName): Show the test name for detailed results <section>.
        (window.sectionsManager.showJSON): Shows the JSON text of the last benchmark or for a specific test.
        (window.sectionsManager.showSection): Shows a specific <section> in the <main> container.
        (window.sectionsManager.setupSectionStyle): Sets css attributes for all the <section>s.
        (window.sectionsManager.setupRunningSectionStyle): Sets the css attributes for the running <section> only.

        (window.optionsManager): Responsible of managing the user options and streaming them to/form the localStorage.
        (window.optionsManager._optionsElements): Returns the children <input> elements of the <options>.
        (window.optionsManager.updateUIFromLocalStorage): Restore the values of the <options> UI elements from the local storage.
        (window.optionsManager.updateLocalStorageFromUI): Saves the values of the <options> UI elements to the local storage.

        (window.suitesManager): Responsible of managing the user suites and streaming them to/form the localStorage.
        (window.suitesManager._treeElement): Returns the suites tree container element.
        (window.suitesManager._suitesElements): Returns a list of the suites elements.
        (window.suitesManager._checkboxElement): Returns the checkbox element of a given suite.
        (window.suitesManager._localStorageNameForTest): Generates a string for the tuple <suite, test> to be saved in the localStorage.
        (window.suitesManager._updateSuiteCheckboxState): Updates the state of a suite checkbox from the state of its tests' checkboxes.
        (window.suitesManager._updateStartButtonState): Updates the state of the start button from the state of the suites' checkboxes.
        (window.suitesManager._onChangeSuiteCheckbox): Called when a suite checkbox is clicked.
        (window.suitesManager._onChangeTestCheckbox): Called when a test checkbox is clicked.
        (window.suitesManager._createSuiteElement): Creates suite node in the suites tree.
        (window.suitesManager._createTestElement): Creates test node in the suites tree.
        (window.suitesManager.createElements): Creates the suites tree dynamically from the array Suites.
        (window.suitesManager.updateUIFromLocalStorage): Restore the values of the <suites> UI elements from the local storage.
        (window.suitesManager.updateLocalStorageFromUI): aves the values of the <suites> UI elements to the local storage.

        (window.benchmarkController): This is the UI controller of the animometer.html page.
        (window.benchmarkController.initialize): Called when the animometer.html page is loaded.
        (window.benchmarkController._runBenchmark): Starts a benchmark run.
        (window.benchmarkController.startTest): Called when the "Start Test" button is clicked.
        (window.benchmarkController.showResults): Called at the end of the test to show the final results.
        (window.benchmarkController.showJson): Called from the results page to show the JSON of the last benchmark run.
        (window.benchmarkController.showTestGraph): Called from the results the table to show a graph for the samples of a specific test.
        (window.benchmarkController.showTestJSON): Called from the results the table to show a JSON for the samples of a specific test.

        (showSection): Deleted.
        (startTest): Deleted.
        (showResults): Deleted.
        (showJson): Deleted.
        (showTestGraph): Deleted.
        (showTestJSON): Deleted.
        (initialize.toggleTestsCheckbox.onchange): Deleted.
        (initialize): Deleted.
        (updateSuiteSelection): Deleted.
        (updateTestSelection): Deleted.
        (updateSuiteCheckbox): Deleted.
        (localStorageNameForTest): Deleted.
        (populateSettings.): Deleted.
        (populateSettings): Deleted.

        * Animometer/runner/resources/benchmark-runner.js:
        (BenchmarkRunner): Pass the frameContainer element to the BenchmarkRunner.
        (BenchmarkRunner.prototype._appendFrame): Remove unused parameter unwanted styling code.
        (BenchmarkRunner.prototype.runMultipleIterations):  Use the this._client.iterationCount instead of passing it as a parameter also.

        * Animometer/runner/resources/graph.js:
        (graph): Calculate the size of the chart from the container element.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        (BouncingSvgImage):
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js:
        (BouncingSvgParticlesStage.prototype._createDefs):
        (BouncingSvgParticlesStage.prototype._createClipStar):
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        (BouncingSvgShape.prototype._createShape):
        (BouncingSvgShapesStage.prototype.createGradient):
        Call DocumentExtension.createSvgElement() instead of calling Utilities.createSvgElement().

        * Animometer/tests/resources/main.js:
        (Animator.prototype.animate):
        (Benchmark):
        (Benchmark.prototype.update):
        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults):
        Rename the options to match the <input> ids in animometer.html.

        * Animometer/tests/resources/utilities.js:
        (window.Utilities.createSvgElement): Deleted.

        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/resources/layering-text.js:
        (LayeringTextStage):
        (LayeringTextStage.prototype._setFontSize): Sets the size of the text dynamically such that they all fit in one stage.

2015-10-29  Simon Fraser  <simon.fraser@apple.com>

        Animometer computes frame rate incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=150698

        Reviewed by Tim Horton.

        The existing code incremented this._frameCount after checking against this._dropFrameCount.
        This has the effect of setting this._measureTimeOffset one frame too late, so
        we were measuring only two frames, not three, and thus computing an incorrect fps.

        * Animometer/tests/resources/main.js:
        (Animator.prototype.animate):

2015-10-27  Jon Lee  <jonlee@apple.com>

        Add an option to make the graphics benchmark runs a specific test
        https://bugs.webkit.org/show_bug.cgi?id=150528
        rdar://problem/23246614

        Reviewed by Zalan Bujtas.

        Add a checkbox that lets the user list all of the available tests, and select
        the ones to run repeatedly. The test checkboxes will update the state of the suite
        checkbox. The selected tests are stored in localStorage to make it easy to do
        repeated runs.

        * Animometer/runner/animometer.html: Add a checkbox to show individual tests.
        Update other markup.
        * Animometer/runner/resources/animometer.css: Make the settings area a little wider
        to accommodate the longer names of the tests
        * Animometer/runner/resources/animometer.js:
        (startBenchmark): Change the way that the suites are fed into the benchmark
        runner. Go through each of the suites and their tests, and create a new Suite
        with just the enabled tests. While enumerating store the enabled tests into
        localStorage.
        (initialize): Initialization routine (taking over populateSettings). When the
        checkbox for showing tests is toggled, add or remove a class on #suites to show
        the individual tests.
        (updateSuiteSelection): Called whenever the user toggles the checkbox for a suite.
        Either select all or none of the tests.
        (updateTestSelection): Called whenever the user toggles the checkbox for a test.
        (updateSuiteCheckbox): Update the state of the test's suite's checkbox to
        indeterminate if there is at least one enabled test, unchecked if none are selected,
        and checked if all are selected.
        (localStorageNameForTest): Helper function to get the name of the test to use as
        a key to localStorage.
        (populateSettings): Add the tests for each suite into an inner list.

2015-10-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an option to output the results of the graphics benchmark in JSON format
        https://bugs.webkit.org/show_bug.cgi?id=150484
        <rdar://problem/23243721>

        Reviewed by Darin Adler.

        * Animometer/resources/extensions.js:
        (ResultsDashboard): A new class to hold the iterations results.
        (ResultsDashboard.prototype.push): Appends an iteration results;
        (ResultsDashboard.prototype.toJSON): Converts the iterations results to JSON format.

        (RecordTable.prototype.clear): Clears the results table.
        (RecordTable.prototype._showTitles): Shows the header titles and appends the sub-titles to a queue.
        (RecordTable.prototype._showHeader): Shows the table header titles.
        (RecordTable.prototype._showEmpty): Shows an empty table cell.
        (RecordTable.prototype._showValue): Shows a number value in the results table.
        (RecordTable.prototype._showSamples): Shows a button for the sampled data graph.
        (RecordTable.prototype._showTest): Shows the results of a single test.
        (RecordTable.prototype._showSuite): Shows the results of a single suite.
        (RecordTable.prototype.showRecord): Shows a single iteration for a single test.
        (RecordTable.prototype.showIterations): Shows the results of all the suites of the iterations.

        (ResultsTable): RecordTable was renamed to ResultsTable.
        (ResultsTable.prototype.clear): Clears the table element.
        (ResultsTable.prototype._showHeaderRow): Shows a row in the results table header.
        (ResultsTable.prototype._showHeader): Shows the results table header.
        (ResultsTable.prototype._showEmpty): Shows an empty table cell.
        (ResultsTable.prototype._showText): Shows a string in a new table cell.
        (ResultsTable.prototype._showFixedNumber): Shows a number in a new table cell.
        (ResultsTable.prototype._showGraph): Shows a button for the sampled data graph.
        (ResultsTable.prototype._showJSON): Shows a button for the sampled data JSON.
        (ResultsTable.prototype._showTest): Shows the results of a single test.
        (ResultsTable.prototype._showSuite): Shows the results of a single suite.
        (ResultsTable.prototype._showIteration): Shows the results of a single iteration.
        (ResultsTable.prototype.showRecord): Shows a single iteration for a single test.
        (ResultsTable.prototype.showIterations): Shows all the results.
        (RecordTable): Deleted.
        (RecordTable.prototype.clear): Deleted.
        (RecordTable.prototype._showTitles): Deleted.
        (RecordTable.prototype._showHeader): Deleted.
        (RecordTable.prototype._showEmpty): Deleted.
        (RecordTable.prototype._showValue): Deleted.
        (RecordTable.prototype._showSamples): Deleted.
        (RecordTable.prototype._showTest): Deleted.
        (RecordTable.prototype._showSuite): Deleted.
        (RecordTable.prototype.showRecord): Deleted.
        (RecordTable.prototype.showIterations): Deleted.

        * Animometer/resources/sampler.js:
        (Sampler.prototype.startSampling): Use forEach.
        (Sampler.prototype.sample): Use forEach.
        (Sampler.prototype.toJSON): Converts the sampler data to JSON format.

        * Animometer/resources/strings.js: Added.
        This new file will be used to associate the strings used by the benchmark
        with IDs. A string can be changed in one place without having to change
        all the instances of this string in multiple files. There two groups of
        strings in this file. The first one is used by the UI elements and the second
        group is used when constructing the results JSON.

        * Animometer/runner/animometer.html:
        * Animometer/runner/resources/animometer.css:

        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.willAddTestFrame):
        (window.benchmarkRunnerClient.willStartFirstIteration):
        (window.benchmarkRunnerClient.didRunSuites):
        (window.benchmarkRunnerClient.didFinishLastIteration):
        Make benchmarkRunnerClient uses ResultsDashboard instead of _iterationsSamplers
        Get the JSON from ResultsDashboard.toJSON() and pass it to ResultsTable.showIterations().
        Also set the textContent of the "#json" textarea with the results JSON.

        (showResults): Delete unneeded code.
        (showJson): Shows the "json" section.
        (showTestGraph): Rename showGraph() to be showTestGraph().
        (showTestJSON): Shows the JSON of a single testResults.
        (showGraph): Deleted.

        * Animometer/runner/resources/tests.js:
        Use the string table instead of putting literal strings.

        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults):
        Fix the parameters which are passed to RecordTable.showRecord().

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/examples/canvas-electrons.html:
        * Animometer/tests/examples/canvas-stars.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        Include the new strings.js file in all the test files.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas line dash test
        https://bugs.webkit.org/show_bug.cgi?id=150078
        <rdar://problem/23082347>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add line dash test.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLineDashStage): Create a new stage with a default dash pattern and stroke style.
        Maintain a step which will animate the dash.
        (CanvasLineDashStage.prototype.animate): Render the line path with the dash. Increment
        the dash offset to animate.
        (CanvasPathBenchmark.prototype.createStage): Add the test.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas line path tests
        https://bugs.webkit.org/show_bug.cgi?id=150076
        <rdar://problem/23082285>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add new line path tests, with different
        line joins.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLinePathStage): The stage is the same as the SimpleCanvasPathStrokeStage
        but sets the lineJoin on the context.
        (CanvasPathBenchmark.prototype.createStage): Add the tests.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add missing paint objects for arc and arcTo fills
        https://bugs.webkit.org/show_bug.cgi?id=150075
        <rdar://problem/23082233>

        Reviewed by Dean Jackson.

        * Animometer/tests/simple/resources/simple-canvas-paths.js: Add missing paint objects
        for arcTo and arc segment fills.
        (CanvasArcToSegmentFill):
        (CanvasArcToSegmentFill.prototype.draw):
        (CanvasArcSegmentFill):
        (CanvasArcSegmentFill.prototype.draw):

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas line segment tests
        https://bugs.webkit.org/show_bug.cgi?id=150073
        <rdar://problem/23082138>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add new line segment tests, with different
        line caps.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLineSegment): Add new line segment paint object.
        (CanvasLineSegmentStage): Create a new stage that sets the lineCap.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas path fill tests
        https://bugs.webkit.org/show_bug.cgi?id=150071
        <rdar://problem/23082001>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add new pathTypes for path fills.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLinePoint): Add basic point for a line, and call lineTo.
        (SimpleCanvasPathFillStage): Add a new stage similar to SimpleCanvasPathStrokeStage.
        (CanvasPathBenchmark.prototype.createStage): Add the tests.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas path tests
        https://bugs.webkit.org/show_bug.cgi?id=150067
        rdar://problem/23081463

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add a quadratic and bezier path test.

        * Animometer/tests/simple/resources/simple-canvas.js:
        (SimpleCanvasStage.prototype.tune): This kind of test joins all of the segments
        into one long path, and tries to render that one path. Random points make it
        difficult to tell what is going on, so add a parameter to the constructor to
        confine the area where the random coordinates can land. The more complicated the
        case is, the larger an area the path will cover. Add an artificial minimum so
        that the first 200 points aren't confined to a space that is too small.

        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (SimpleCanvasPathStrokeStage): Add a new kind of stage that inherits from
        SimpleCanvasStage. Each time the frame animates a random line width and stroke
        color are chosen. The path setup is done outside of each paint object.
        (CanvasQuadraticPoint): This point just calls quadraticCurveTo.
        (CanvasPathBenchmark.prototype.createStage): Add the tests.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add basic canvas tests
        https://bugs.webkit.org/show_bug.cgi?id=150066
        rdar://problem/23081143

        Reviewed by Dean Jackson.

        This adds a new test suite that will cover all of the path-based canvas calls.
        The patch will be divided up to cover tests with similar techniques.

        The simplest version uses a SimpleCanvasStage.

        * Animometer/runner/resources/tests.js: Add tests for quadratic, bezier, arcTo,
        arc, and rect segments. Also include arcTo, arc, and rect fills.
        * Animometer/tests/resources/stage.js:
        (Stage.prototype.randomBool): Added for counterclockwise property for arc segments.
        (Stage.prototype.randomInt): Fix how values are rounded, used by randomBool. It should
        round instead of flooring everything.
        * Animometer/tests/simple/resources/simple-canvas.js: Added. Defines common classes
        used by all simple canvas tests. The page reads best bottom to top.
        (SimpleCanvasStage): Basic stage. Pass a canvasObject which will be used to create new
        objects as needed in tune().
        (SimpleCanvasStage.prototype.tune): Modeled on other tests. Adds and removed objects
        as specified by the provided |count|.
        (SimpleCanvasStage.prototype.animate): Iterate over all the objects and ask them to draw.
        There is no "animating" of the objects; they will just paint statically on the canvas.
        (SimpleCanvasAnimator): Basic animator clears the canvas prior to painting.
        (SimpleCanvasBenchmark): Hard-code the feedback loop parameters instead of including
        them in the query parameters to the test URLs.
        (SimpleCanvasBenchmark.prototype.createAnimator):
        * Animometer/tests/simple/simple-canvas-paths.html: Added.

        * Animometer/tests/simple/resources/simple-canvas-paths.js: Added. There is no "animating"
        of these objects--they just paint statically on the canvas.
        (CanvasQuadraticSegment): Paint a quadratic segment stroke.
        (CanvasBezierSegment): Paint a bezier segment stroke.
        (CanvasArcToSegment): Paint an arcTo stroke.
        (CanvasArcSegment): Paint an arc stroke.
        (CanvasRect): Paint a rect.
        (CanvasRectFill): Paint a filled rect.

        (CanvasPathBenchmark):
        (CanvasPathBenchmark.prototype.createStage): Look for the pathType and create the
        stage using the right paint object.
        (window.benchmarkClient.create):

2015-10-12  Jon Lee  <jonlee@apple.com>

        Refactor tune() to pass in an integer-based count
        https://bugs.webkit.org/show_bug.cgi?id=150060
        <rdar://problem/23079425>

        Reviewed by Dean Jackson.

        All of the tune functions do an initial step of flooring the
        # of painting objects to add or remove. Factor that out since
        the complexity of all of these tests is always expressed in terms
        of countable items.

        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.update): Update the tuneValue.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticlesStage.prototype.tune): Remove the count adjustment.
        * Animometer/tests/examples/resources/canvas-electrons.js:
        (CanvasElectronsStage.prototype.tune): Ditto.
        * Animometer/tests/examples/resources/canvas-stars.js:
        (CanvasStarsStage.prototype.tune): Ditto.
        * Animometer/tests/text/resources/layering-text.js:
        (LayeringTextStage.prototype.tune): Ditto.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Store test-interval in localStorage
        https://bugs.webkit.org/show_bug.cgi?id=150055
        <rdar://problem/23078879>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/animometer.js:
        (populateSettings): Keep track of the specified test interval in localStorage
        to make it easy to repeat a test suite.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Remove "../tests/" from the URLs of all tests
        https://bugs.webkit.org/show_bug.cgi?id=150054
        <rdar://problem/23078784>

        Reviewed by Dean Jackson.

        Presumably all tests will be running from the tests/ directory,
        so we don't have to specify it in all of the test URLs.

        * Animometer/runner/resources/benchmark-runner.js:
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Prepend
        "../tests/" to all tests.
        * Animometer/runner/resources/tests.js: Remove "../tests/" from
        all URLs.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Refactor test suites to a separate class.
        https://bugs.webkit.org/show_bug.cgi?id=150053
        <rdar://problem/23078645>

        Reviewed by Dean Jackson.

        Create a Suite class to refactor out prepare() and run().
        Generate the checkboxes representing the suites using Suites
        instead of maintaining a separate list. Also, save the
        selections out to localStorage.

        * Animometer/runner/animometer.html: Remove the explicitly listed
        suites. These will be generated from Suites instead.
        * Animometer/runner/resources/animometer.js:
        (populateSettings): Iterate through Suites, and create the
        label and checkbox. Attach the Suite object to the checkbox so
        when the benchmark is started, we get direct access. Initialize
        the checkmark based on its value in localStorage. Set this to
        run when DOMContentLoaded is dispatched.
        (startBenchmark): Grab all of the checkboxes, inspect their
        values, add it to enabledSuites if selected. Remember whether
        the suite was enabled in localStorage, so that it's easy to do
        repeated runs.
        * Animometer/runner/resources/tests.js:
        (Suite): Create a new Suite class. Refactor out prepare() and
        run(), since all of them have the same implementation. Populate
        Suites with Suite instances instead of generic objects.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Update graph styles for legibility.
        https://bugs.webkit.org/show_bug.cgi?id=150052
        <rdar://problem/23078503>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/animometer.css: Update colors and
        stroke thicknesses to make the graphs easier to read.
        (.smaple-time): Correct to .sample-time
        * Animometer/runner/resources/graph.js:
        (graph): Ditto.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Update graph styles for legibility.
        https://bugs.webkit.org/show_bug.cgi?id=150052
        <rdar://problem/23078503>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/animometer.css: Update colors and
        stroke thicknesses to make the graphs easier to read.
        (.smaple-time): Correct to .sample-time
        * Animometer/runner/resources/graph.js:
        (graph): Ditto.

2015-10-12  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert an unintended commit.

        * JetStream/Octane2/crypto.js:
        (montRevert):
        (montReduce):

2015-10-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=149053
        <rdar://problem/18984169>

        Reviewed by Dean Jackson.

        Instead of measuring the FPS of the animation, this benchmark measures the
        test complexity when rendering at a set-point FPS which should be lower
        than 60 FPS. This benchmark tries to stay at the set-point FPS by using
        a closed loop control system PID function. The gain of the system is passed
        as a parameter when running the test. Measuring the FPS faithfully results
        very fluctuating values. A Kalman filter is used to give a better estimate
        for the current FPS.

        The animation of the tests is done manually. requestAnimationFrame() is
        called with a callback. Inside this callback, the test is animating by
        changing the positions of the elements inside the page. The test complexity
        may change also if the current FPS is not equal to the desired FPS.

        In this patch, the benchmark and the tests are included. The shared code
        and the tests runner are included in separate patches.

        * Animometer/runner/animometer.html:
        * Animometer/runner/resources/animometer.js:
        Add two new examples for more complex animation techniques.
        Add an option to show/hide the test running results which is off by default.

        * Animometer/runner/resources/tests.js: Added.
        (suiteFromName): Returns a suite given its name.
        (testFromName): Returns a test given its suite and name.

        * Animometer/tests: Added.
        This directory includes all the test suites to be run by the benchmark.
        runner. All the tests should try to run on three stages: CSS, canvas and
        SVG.

        * Animometer/tests/bouncing-particles: Added.
        * Animometer/tests/bouncing-particles/resources: Added.
        The bouncing particles test is an example of a simple animation technique.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-css-images.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Added.
        Bouncing particles test pages.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js: Added.
        (BouncingParticle): Base class for a bouncing particle.
        (BouncingParticle.prototype.center): Returns the center point or the particle.
        (BouncingParticle.prototype.animate): Moves the particle based on its current position, angle and velocity.

        (BouncingParticlesAnimator): A sub class of Animator.

        (BouncingParticlesStage): Represents the container of all the bouncing particles.
        (BouncingParticlesStage.prototype.parseShapeParamters): Gets the shape parameters for shape animating tests.
        (BouncingParticlesStage.prototype.randomRotater): Creates a rotater for the particles.
        (BouncingParticlesStage.prototype.animate): Animates all the particles.
        (BouncingParticlesStage.prototype.tune): Changes the test by adding or removing particles.

        (BouncingParticlesBenchmark): Runs the benchmark for bouncing particles test.
        (BouncingParticlesBenchmark.prototype.createAnimator): Creates an animator of type BouncingParticlesAnimator.

        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js: Added.
        (BouncingCssShape): A sub class of BouncingParticle for animating CSS shapes.
        (BouncingCssShape.prototype._createSpan): Creates a <span> element and takes the shape and clipping classes into consideration.
        (BouncingCssShape.prototype._move): Moves the particle to a new location. Apply transform since it does not require layout.
        (BouncingCssShape.prototype.animate): Rotates and moves the shape to a new location.

        (BouncingCssShapesStage): A sub class of BouncingParticlesStage for animating CSS shapes.
        (BouncingCssShapesStage.prototype.createParticle): Creates a particle of type BouncingCssShape.
        (BouncingCssShapesStage.prototype.particleWillBeRemoved): Removes the corresponding element form the parent children list.

        (BouncingCssShapesBenchmark): A sub class of BouncingParticlesBenchmark for animating CSS shapes.
        (BouncingCssShapesBenchmark.prototype.createStage): Creates a stage of type BouncingCssShapesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCssShapesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js: Added.
        (BouncingCssImage): A sub class of BouncingParticle for animating CSS images.
        (BouncingCssImage.prototype._move): Move the particle to a new location. Apply transform since it does not require layout.
        (BouncingCssImage.prototype.animate): Rotates and moves the shape to a new location.

        (BouncingCssImagesStage): A sub class of BouncingParticlesStage for animating CSS images.
        (BouncingCssImagesStage.prototype.createParticle): Creates a particle of type BouncingCssImage.
        (BouncingCssImagesStage.prototype.particleWillBeRemoved): Removes the corresponding element form the parent children list.

        (BouncingCssImagesBenchmark): A sub class of BouncingParticlesBenchmark for animating CSS images.
        (BouncingCssImagesBenchmark.prototype.createStage): Creates a stage of type BouncingCssImagesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCssImagesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js: Added.
        (BouncingCanvasParticle): A base sub-class of BouncingParticle for animating canvas particles.
        (BouncingCanvasParticle.prototype._applyRotation): Apply the particle rotation-around-center transform to the canvas context.
        (BouncingCanvasParticle.prototype._applyClipping): Apply the particle clipping to the canvas context.
        (BouncingCanvasParticle.prototype._draw): A non-implemented version of the drawing function.
        (BouncingCanvasParticle.prototype.animate): Carries out all the steps to redraw the canvas particle.

        (BouncingCanvasParticlesStage): A base sub-class of BouncingParticlesStage for animating canvas particles.

        (BouncingCanvasParticlesAnimator): A concrete sub-class of BouncingParticlesAnimator for animating canvas particles.
        (BouncingCanvasParticlesAnimator.prototype.animate): Overrides the base class method to clear the canvas before redrawing the stage.

        (BouncingCanvasParticlesBenchmark): A base sub-class of StageBenchmark for animating canvas particles.
        (BouncingCanvasParticlesBenchmark.prototype.createAnimator): Creates the canvas particles animator.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js: Added.
        (BouncingCanvasShape): A concrete sub-class of BouncingCanvasParticle for animating canvas shapes.
        (BouncingCanvasShape.prototype._applyFill): Sets the fillStyle in the canvas context.
        (BouncingCanvasShape.prototype._drawShape): Carries out the actual drawing.
        (BouncingCanvasShape.prototype._draw): Carries out all the steps to draw the shape.

        (BouncingCanvasShapesStage): A concrete sub-class of BouncingCanvasParticle for animating canvas shapes.
        (BouncingCanvasShapesStage.prototype.createParticle): Creates a particle of type BouncingCanvasShape.

        (BouncingCanvasShapesBenchmark): A concrete sub-class of BouncingCanvasParticlesBenchmark for animating canvas shapes.
        (BouncingCanvasShapesBenchmark.prototype.createStage): Creates a stage of type BouncingCanvasShapesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCanvasShapesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js: Added.
        (BouncingCanvasImage): A concrete sub-class of BouncingCanvasParticle for animating canvas images.
        (BouncingCanvasImage.prototype._draw): Draws an image on the context of a canvas.

        (BouncingCanvasImagesStage): A concrete sub-class of BouncingCanvasParticlesBenchmark for animating canvas images.
        (BouncingCanvasImagesStage.prototype.createParticle): Creates a particle of type BouncingCanvasImage.

        (BouncingCanvasImagesBenchmark): A concrete sub-class of BouncingCanvasParticlesBenchmark for animating canvas images.
        (BouncingCanvasImagesBenchmark.prototype.createStage): Creates a stage of type BouncingCanvasImagesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCanvasImagesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js: Added.
        (BouncingSvgParticle): A base sub-class of BouncingParticle for animating SVG particles.
        (BouncingSvgParticle.prototype._applyClipping): Apply the particle clipping by setting the 'clip-path' attribute of the SVGElement.
        (BouncingSvgParticle.prototype._move): Moves the particle to a new location. Apply transform since it does not require layout.
        (BouncingSvgParticle.prototype.animate): Rotates and moves the shape to a new location.
        (BouncingSvgParticlesStage): A sub class of BouncingParticlesStage for animating SVGElements.
        (BouncingSvgParticlesStage.prototype._createDefs): Creates an SVGDefsElement.
        (BouncingSvgParticlesStage.prototype._ensureDefsIsCreated): Ensures there is only one SVGDefsElement is created.
        (BouncingSvgParticlesStage.prototype._createClipStar): Creates an SVGClipPathElement and sets its 'd' attribute to a star like shape.
        (BouncingSvgParticlesStage.prototype.ensureClipStarIsCreated): Ensure there is only one star SVGClipPathElement is created.
        (BouncingSvgParticlesStage.prototype.particleWillBeRemoved): Remove the corresponding element form the parent children list.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js: Added.
        (BouncingSvgShape): A concrete sub-class of BouncingSVGParticle for animating SVG shapes.
        (BouncingSvgShape.prototype._createShape): Creates an SVG shape.
        (BouncingSvgShape.prototype._applyFill): Applies the selected fill style to the SVG shape.

        (BouncingSvgShapesStage): A concrete sub-class of BouncingSvgParticlesStage for animating SVG shapes.
        (BouncingSvgShapesStage.prototype.createGradient): Creates an SVGLinearGradientElement.
        (BouncingSvgShapesStage.prototype.createParticle): Creates a particle of type BouncingSvgShape.
        (BouncingSvgShapesStage.prototype.particleWillBeRemoved): Ensures the attached SVGLinearGradientElement is removed from the SVGDefsElement.

        (BouncingSvgShapesBenchmark): A concrete sub-class of BouncingParticlesBenchmark for animating SVG images.
        (BouncingSvgShapesBenchmark.prototype.createStage): Creates a stage of type BouncingSvgShapesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingSvgShapesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js: Added.
        (BouncingSvgImage): A concrete sub-class of BouncingSVGParticle for animating SVG images.

        (BouncingSvgImagesStage): A concrete sub-class of BouncingSVGParticlesBenchmark for animating SVG images.
        (BouncingSvgImagesStage.prototype.createParticle): Creates a particle of type BouncingSvgImage.

        (BouncingSvgImagesBenchmark): A concrete sub-class of BouncingParticlesBenchmark for animating SVG images.
        (BouncingSvgImagesBenchmark.prototype.createStage): Creates a stage of type BouncingSvgImagesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingSvgImagesBenchmark.

        * Animometer/tests/examples: Added.
        * Animometer/tests/examples/canvas-electrons.html: Added.
        * Animometer/tests/examples/canvas-stars.html: Added.
        Examples test pages.

        * Animometer/tests/examples/resources: Added.
        * Animometer/tests/examples/resources/canvas-electrons.js: Added.
        (CanvasElectron): An object which draws and animate a electron object on a canvas stage.
        (CanvasElectron.prototype._draw): Draws the electron object.
        (CanvasElectron.prototype.animate): Animates the electron object.

        (CanvasElectronsStage): A concrete sub-class of Stage for animating electrons.
        (CanvasElectronsStage.prototype.tune): Changes the test by adding or removing elements.
        (CanvasElectronsStage.prototype.animate): Animates the test elements.

        (CanvasElectronsAnimator): A concrete sub-class of StageAnimator for animating canvas electrons.
        (CanvasElectronsAnimator.prototype.animate): Overrides the base class method to clear the canvas before redrawing the stage.

        (CanvasElectronsBenchmark): A concrete sub-class of StageBenchmark for animating electrons.
        (CanvasElectronsBenchmark.prototype.createStage): Creates a stage of CanvasElectronsStage.
        (CanvasElectronsBenchmark.prototype.createAnimator): Creates an animator of type CanvasElectronsAnimator.
        (window.benchmarkClient.create): Creates a benchmark of type CanvasElectronsBenchmark.

        * Animometer/tests/examples/resources/canvas-stars.js: Added.
        (CanvasStar): An object which draws and animate a star object on a canvas stage.
        (CanvasStar.prototype._draw): Draws the star object.
        (CanvasStar.prototype.animate): Animates the star object.

        (CanvasStarsStage): A concrete sub-class of Stage for animating stars.
        (CanvasStarsStage.prototype.tune): Changes the test by adding or removing elements.
        (CanvasStarsStage.prototype.animate): Animates the test elements.

        (CanvasStarsAnimator): A concrete sub-class of StageAnimator for animating canvas stars.
        (CanvasStarsAnimator.prototype.animate): Overrides the base class method to clear the canvas before redrawing the stage.

        (CanvasStarsBenchmark): A concrete sub-class of Benchmark for animating stars.
        (CanvasStarsBenchmark.prototype.createStage): Creates a stage of CanvasStarsStage.
        (CanvasStarsBenchmark.prototype.createAnimator): Creates an animator of type CanvasStarsAnimator.
        (window.benchmarkClient.create): Creates a benchmark of type CanvasStarsBenchmark.

        * Animometer/tests/resources: Added.
        This directory includes the script which is required to run an adaptive
        graphics benchmark. From an empty test page, the set of classes in this
        directory are responsible for measuring the current frame rate and
        changing the test to reach a desired FPS. It keeps asking the test page
        to tune itself by a certain value to increase or decrease the frame rate.
        It's also responsible for sampling the test state and the corresponding
        frame rate.

        * Animometer/tests/resources/main.js: Added.
        (BenchmarkState): Tracks the state of the benchmark test.
        (BenchmarkState.prototype._timeOffset): Returns the timeOffset of a stage.
        (BenchmarkState.prototype._message): Returns the message of a stage.
        (BenchmarkState.prototype.update): Sets the currentTimeOffset to a new value.
        (BenchmarkState.prototype.samplingTimeOffset): Returns the timeOffset of the sampling stage.
        (BenchmarkState.prototype.currentStage): Returns the current stage of the benchmark.
        (BenchmarkState.prototype.currentMessage): Returns the message of the current stage and timeOffset.
        (BenchmarkState.prototype.currentProgress): Returns a percentage of how much the benchmark is running.

        (Animator): Manages animating the test.
        (Animator.prototype.start): Called if animating using setInterval is requested.
        (Animator.prototype.timeDelta): Returns the current timeDelta
        (Animator.prototype.animate): Manages the test animation.
        (Animator.prototype.animateLoop): Called if animating using requestAnimationFrame is requested.

        (Benchmark): Manages running the test benchmark and recording the sampled data.
        (Benchmark.prototype.start): Starts the benchmark.
        (Benchmark.prototype.update): Called from the animator.animate() to change the complexity of the test.
        (Benchmark.prototype.record): Shows the current (not final) results of the benchmark.
        (Benchmark.prototype.resolveWhenFinished): Spins until the benchmark is finished and returns its results.
        (Benchmark.prototype.run): Starts the test, runs it, waits until it is finished and return its results.
        (window.runBenchmark): Called from the benchmark runner through the suite controller run-callback.

        * Animometer/tests/resources/math.js: Added.
        (Matrix): A matrix object.
        (Vector3): A vector of size 3 object.
        (Matrix3): A matrix of size 3x3 object.

        (PIDController): Closed-loop controller for a set-point y.
        (PIDController.prototype._sat): Limits the output to a certain range.
        (PIDController.prototype.tune): Given the current output of a system, it produces a new pid value for tuning it.

        (KalmanEstimator): Implement Kalman filter to get an estimate for a sampled data point.
        (KalmanEstimator.prototype.estimate): Returns an estimate for for a sampled data point.

        * Animometer/tests/resources/utilities.js: Added.
        (window.Utilities._parse): Given a separator character, it pareses a string to a set of <key, value> pairs.
        (window.Utilities.parseParameters): Parses a test parameters.
        (window.Utilities.parseArguments): Parses a tag arguments.
        (window.Utilities.extendObject): Adds the attributes and their values of an object to another object.
        (window.Utilities.copyObject): Copies the attributes and their values of an object to a new object.
        (window.Utilities.mergeObjects): Copies the attributes and their values of two objects to a new object.
        (window.Utilities.createSvgElement): Creates an SVGElement given its name and its attributes.

        * Animometer/tests/resources/stage.css: Added.
        * Animometer/tests/resources/stage.js: Added.
        (Rotater): Manages rotating an angle within a fixed time interval.
        (Rotater.prototype.get interval): Returns the time interval which is required to rotate 360 degrees.
        (Rotater.prototype.next): Moves the current time by a delta.
        (Rotater.prototype.degree): Returns the current rotating degree.
        (Rotater.prototype.rotateZ): Returns CSS formatted transform rotateZ() string for the current degree.
        (Rotater.prototype.rotate): Returns SVG formatted transform rotate() string for the current degree.

        (Stage): A base class for managing the test complexity and test animation.
        (Stage.prototype.get size): Returns the size of the stage excluding the CSS padding.
        (Stage.prototype.random): Returns a random float.
        (Stage.prototype.randomInt): Returns a random integer.
        (Stage.prototype.randomPosition): Returns a random position.
        (Stage.prototype.randomSquareSize): Returns a square size.
        (Stage.prototype.randomVelocity): Returns a random velocity.
        (Stage.prototype.randomAngle): Returns a random angle.
        (Stage.prototype.randomColor): Returns a random color not too dark and not too light.
        (Stage.prototype.randomRotater): Creates a random rotater. Its velocity depends on choosing a random rotation time interval.
        (Stage.prototype.tune): A not-implemented version of this function.
        (Stage.prototype.animate): A not-implemented version of this function.
        (Stage.prototype.clear): Clears the stage from all its animation elements.

        (StageAnimator): A base class for the stage-based animators.
        (StageAnimator.prototype.animate): Calls Animator.animate() which updates the test page and then calls Stage.animate() to force redraw.

        (StageBenchmark): A base class for the stage-based benchmarks.
        (StageBenchmark.prototype.createStage): Creates the default stage.
        (StageBenchmark.prototype.createAnimator): Creates the default animator.
        (StageBenchmark.prototype.tune): Delegates the call to stage.
        (StageBenchmark.prototype.clear): Delegates the call to stage.
        (StageBenchmark.prototype.showResults): Shows the results/progress through its recordTable and progressBar.

        * Animometer/tests/resources/yin-yang.png: Added.
        * Animometer/tests/resources/yin-yang.svg: Added.
        These images are shared among all the tests.

        * Animometer/tests/template: Added.
        * Animometer/tests/template/resources: Added.
        This directory includes template tests which do nothing. They can be used
        to author new tests. Animated items can be created, moved and redrawn by
        removing the TODO comments in the script files and writing actual code.

        * Animometer/tests/template/template-css.html: Added.
        * Animometer/tests/template/template-canvas.html: Added.
        * Animometer/tests/template/template-svg.html: Added.
        Template test pages. They can be used as they are. CSS attributes or hidden
        elements can be added to these derived test pages if needed.

        * Animometer/tests/template/resources/template-css.js: Added.

        (TemplateCssStage): A stage to create and animate HTMLElements.
        (TemplateCssStage.prototype.tune): Changes the test by adding or removing elements.
        (TemplateCssStage.prototype.animate): Animates the test elements.
        (TemplateCssBenchmark):
        (TemplateCssBenchmark.prototype.createStage): Creates the test stage.
        (window.benchmarkClient.create): Creates a benchmark of type TemplateCssBenchmark.

        * Animometer/tests/template/resources/template-canvas.js: Added.
        (TemplateCanvasObject):
        (TemplateCanvasObject.prototype._draw): Draws the objects on the canvas context.
        (TemplateCanvasObject.prototype.animate): Moves and redraws the object.
        (TemplateCanvasStage): A stage to create and animate drawing elements.
        (TemplateCanvasStage.prototype.tune): hanges the test by adding or removing elements.
        (TemplateCanvasStage.prototype.animate):  Animates the test elements.
        (TemplateCanvasAnimator.prototype.animate): Starts the animation every frame.
        (TemplateCanvasBenchmark):
        (TemplateCanvasBenchmark.prototype.createStage): Creates a stage of type TemplateCanvasStage.
        (TemplateCanvasBenchmark.prototype.createAnimator): Creates a animator of type TemplateCanvasAnimator.
        (window.benchmarkClient.create): Creates a benchmark of type TemplateCanvasBenchmark.

        * Animometer/tests/template/resources/template-svg.js: Added.
        (TemplateSvgStage): A stage to create and animate SVGElements.
        (TemplateSvgStage.prototype.tune): Changes the test by adding or removing elements.
        (TemplateSvgStage.prototype.animate): Animates the test elements.
        (TemplateSvgBenchmark.prototype.createStage): Creates a stage of type TemplateSvgStage.
        (window.benchmarkClient.create): Creates a benchmark of type TemplateSvgBenchmark.

        * Animometer/tests/text: Added.
        * Animometer/tests/text/resources: Added.
        This directory includes the text animating tests which currently runs
        on CSS stage only.

        * Animometer/tests/text/layering-text.html: Added.
        Text test page.

        * Animometer/tests/text/resources/layering-text.js: Added.
        (LayeringTextStage): Represents the container of all the stacked text layers.
        (LayeringTextStage.parseTextItem): Parses a textItem which may be an opening tag, a closing tag or a self-closing tag.
        (LayeringTextStage.isOpeningTextItem): Returns true if the textItem is an opening tag e.g. '<ol>'.
        (LayeringTextStage.isClosingTextItem): Returns true if  the textItem is an closing tag e.g. '</ol>.
        (LayeringTextStage.textItemsFlags.LayeringTextStage.textItems.map): Calculates and stores isOpening and isClosing flags for each textItem.
        (LayeringTextStage.isColorableTextItem): Returns true if the textItem is self-closing tag e.g. '<p>...</p>'.
        (LayeringTextStage.isInsertableTextItem): Returns true if the textItems causes a new element to be added to the text layers.
        (LayeringTextStage.colorableTextItems.LayeringTextStage.textItemsFlags.filter): Number of colorable textItems.
        (LayeringTextStage.insertableTextItems.LayeringTextStage.textItemsFlags.filter): Number of insertable textItems.
        (LayeringTextStage.colorIndexToTextElementIndex): Maps from colorIndex [0..colorableTextItems-1] to textElementIndex [0..insertableTextItems-1].
        (LayeringTextStage.prototype._nextTextItem): Moves the _textItemIndex one step forward in a loop [0..LayeringTextStage.textItems.length-1].
        (LayeringTextStage.prototype._previousTextItem): Moves the _textItemIndex one step backward in a loop.
        (LayeringTextStage.prototype._pushTextElement): Creates a new textItemElement and adds it to the topmost container <div>.
        (LayeringTextStage.prototype._popTextElement): Removes the last textItemElement from the topmost container <div>.
        (LayeringTextStage.prototype._colorTextItem): Changes the background color of a single colorable textElement. The index advances in a circle [0..colorableTextItems-1].
        (LayeringTextStage.prototype.animate): Changes the background color and the text color of the textElements such that a redraw is enforced.
        (LayeringTextStage.prototype.tune): Adds or removes textElements to the stage.

        (LayeringTextBenchmark): Runs the benchmark for the layering text test.
        (LayeringTextBenchmark.prototype.createStage): Creates a stage of type LayeringTextStage.
        (window.benchmarkClient.create): Creates a benchmark of type LayeringTextBenchmark.

2015-10-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add shared code for a new a graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=149691

        Reviewed by Ryosuke Niwa.

        This set of classes will be shared and used by the tests and the runner
        of a new graphics benchmark.

        * Animometer/resources: Added.
        * Animometer/resources/algorithm.js: Added.
        (Array.prototype.swap): Swaps two elements in an array.
        (Heap): Binary Min/Max Heap object
        (Heap.prototype._parentIndex): Given the child node index, it returns the parent index.
        (Heap.prototype._leftIndex): Given the parent node index, it returns the left node index.
        (Heap.prototype._rightIndex): Given the parent node index, it returns the right node index.
        (Heap.prototype._childIndex): Given the parent node index, it returns the child index that may violate the heap property.
        (Heap.prototype.init): Initializes the heap state.
        (Heap.prototype.top): Returns the value stored at the top of the heap.
        (Heap.prototype.push): Pushes a new node at the top of the heap.
        (Heap.prototype.pop): Extracts the top node of the heap.
        (Heap.prototype._bubble): Fixes the heap property by moving upward.
        (Heap.prototype._sink): Fixes the heap property by moving downward.
        (Heap.prototype.str): Prints the nodes of the heap to a string.
        (Heap.prototype.values): Returns the last "size" heap elements values.

        (Algorithm.createMinHeap): Creates a size-bounded min-heap object.
        (Algorithm.createMaxHeap): Creates a size-bounded max-heap object.

        * Animometer/resources/extensions.js: Added.
        (Point): Point object but can be used as size also.
        (Point.pointOnCircle): Given, the radius of the circle and the angle of the point, it returns a point object.
        (Point.pointOnEllipse): Given, the radiuses of the ellipse and the angle of the point, it returns a point object.
        (Point.prototype.get width): Should be called when the point is used as size.
        (Point.prototype.get height): Should be called when the point is used as size.
        (Point.prototype.get center): Should be called when the point is used as size.
        (Point.prototype.add): Returns a new point = this + other.
        (Point.prototype.subtract): Returns a new point = this - other.
        (Point.prototype.multiply): Returns a new point = this * other.
        (Point.prototype.move): Moves the point in a given direction, velocity, time period.

        (Insets): Represents borders of a container.
        (Insets.prototype.get width): Returns left + right.
        (Insets.prototype.get height): Returns top + bottom.

        (SimplePromise):
        (SimplePromise.prototype.then):
        (SimplePromise.prototype.resolve):
        Moved from Animometer/runner/resources/benchmark-runner.js since tests also need it.

        (Options): Benchmark running options as they are set by the user.

        (ProgressBar): Manages a progress bar element. The progress bar is divided into equal length ranges.
        (ProgressBar.prototype._progressToPercent): Converts the progress into a percentage.
        (ProgressBar.prototype.incRange): Moves to the next range (a range is the running time of a single test).
        (ProgressBar.prototype.setPos): Draws the current progress in the current range.

        (RecordTable): Shows the results of running a benchmark in a tabular form.
        (RecordTable.prototype.clear): Clears the results table.
        (RecordTable.prototype._showTitles): Shows the header titles and appends the sub-titles to a queue.
        (RecordTable.prototype._showHeader): Shows the table header titles.
        (RecordTable.prototype._showEmpty): Shows an empty table cell.
        (RecordTable.prototype._showValue): Shows a number value in the results table.
        (RecordTable.prototype._showSamples): Shows a button for the sampled data graph.
        (RecordTable.prototype._showTest): Shows the results of a single test.
        (RecordTable.prototype._showSuite): Shows the results of a single suite.
        (RecordTable.prototype.showRecord): Shows a single iteration for a single test.
        (RecordTable.prototype.showIterations): Shows the results of all the suites of the iterations.

        * Animometer/resources/sampler.js: Added.
        (Statistics.sampleMean): Returns the sample mean.
        (Statistics.unbiasedSampleStandardDeviation): Returns the unbiased sample variance (i.e. with Bessel's correction)
        (Statistics.geometricMean): Returns the geometric mean.

        (Experiment): Represents a sampling experiment.
        (Experiment.prototype._init): Called when the object is created and when startSampling() is called.
        (Experiment.prototype.startSampling): Called after warmup period. Restarts collecting sampled data points.
        (Experiment.prototype.sample): Add a new data point.
        (Experiment.prototype.mean): Returns the sample mean for the current sampled data points.
        (Experiment.prototype.standardDeviation): Returns the sample standard deviation for the current sampled data points.
        (Experiment.prototype.percentage): Returns the percentage of the standard deviation divided to the mean.
        (Experiment.prototype.confidenceIntervalDelta): Calculates the confidence delta for the current sampled data given a confidence level.
        (Experiment.prototype.concern): Returns the average of the worst given percentage from the sampled data.
        (Experiment.prototype.score): Returns a score for the sampled data. It is the geometric mean of sampleMean and concern.

        (Sampler): Represents a compound experiment. It manages sampling multiple data points at the same time offset.
        (Sampler.prototype.startSampling): Called after warming up period. Restarts collecting sampled data points.
        (Sampler.prototype.sample): Add a new data vector at a given time offset.

2015-10-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add the test runner for a new a graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=149683

        Reviewed by Ryosuke Niwa.

        The test runner collects the selected test suites and the running options
        from its home page. It loops through all the tests, runs them and collects
        their running results. At the end, it shows summary results and a final
        score. It can also show a chart for a test sampled data.

        * Animometer: Added.
        * Animometer/runner: Added.
        * Animometer/runner/resources: Added.

        * Animometer/runner/animometer.html: Added.
        * Animometer/runner/resources/animometer.css: Added.
        The benchmark runner page and css.

        * Animometer/runner/resources/animometer.js: Added.
        (window.benchmarkRunnerClient.willAddTestFrame): Called after the test <iframe> is created.
        (window.benchmarkRunnerClient.didRunTest): Called after running a test is finished.
        (window.benchmarkRunnerClient.willStartFirstIteration): Called at the beginning before running any test.
        (window.benchmarkRunnerClient.didRunSuites): Called after running all tests of a suite.
        (window.benchmarkRunnerClient.didFinishLastIteration): Called after running the last test.

        (showSection): Shows a section in the animometer.html page.
        (startTest): Called when the "Start Test" button is clicked.
        (showResults): Called after finishing all the tests.
        (showGraph): Called when "Click..." button in the "Samples" column of the results table is clicked

        * Animometer/runner/resources/benchmark-runner.js: Copied from PerformanceTests/Speedometer/resources/benchmark-runner.js.
        (BenchmarkRunnerState): Tracks the current running <suite, test>
        (BenchmarkRunnerState.prototype.currentSuite): Returns the current running suite.
        (BenchmarkRunnerState.prototype.currentTest): Returns the current running test.
        (BenchmarkRunnerState.prototype.isFirstTest): Returns true if we are running the first test in the current suite.
        (BenchmarkRunnerState.prototype.next): Advances to the next test.
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Creates a new <iframe> and waits for it to load a test.

        (BenchmarkRunner): Manages running the tests and communicating with the benchmarkRunnerClient.
        (BenchmarkRunner.prototype.waitForElement): Waits for an element to be created.
        (BenchmarkRunner.prototype._appendFrame): Creates a new <iframe> element.
        (BenchmarkRunner.prototype._removeFrame): Removed the current <iframe> element.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Runs the current test and saves its results.
        (BenchmarkRunner.prototype.step): Either runs the current test if there is or start a new iteration.
        (BenchmarkRunner.prototype.runAllSteps): Loops to run all the tests and move to the next iteration.
        (this._runNextIteration): Starts a new iteration or show the results.
        (BenchmarkRunner.prototype.runMultipleIterations): Loops to run all the iterations and show the results
        (BenchmarkRunner.prototype._finalize): Finalizes the current iteration and starts a new one.

        (SimplePromise): Deleted.
        (SimplePromise.prototype.then): Deleted.
        (SimplePromise.prototype.resolve): Deleted.
        (BenchmarkTestStep): Deleted.
        (Fibonacci): Deleted.
        SimplePromise was moved t Animometer/resources/extensions.js because it is used by the runner and the tests.

        (BenchmarkRunner.prototype._waitAndWarmUp): Deleted.
        (BenchmarkRunner.prototype._runTest): Deleted.
        (BenchmarkState.prototype.currentSuite): Deleted.
        (BenchmarkState.prototype.currentTest): Deleted.
        (BenchmarkState.prototype.next): Deleted.
        (BenchmarkState.prototype.isFirstTest): Deleted.
        (BenchmarkState.prototype.prepareCurrentSuite): Deleted.
        BenchmarkState was renamed to BenchmarkRunnerState to not be confused with the tests BenchmarkState.

        * Animometer/runner/resources/d3.min.js: Copied from Websites/perf.webkit.org/public/v2/js/d3/d3.min.js.
        Needed for drawing charts for the sampled scores and frame rates.

        * Animometer/runner/resources/graph.js: Added.
        (graph): Draws a chart for a test sampled data. It shows two y-axes: one for the animated items and the second for FPS.

        * Skipped: Skip the Animometer benchmark for now.

2015-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION(r188793): It made 200 layout tests and Bindings/event-target-wrapper.html performance test fail
        https://bugs.webkit.org/show_bug.cgi?id=148470

        Unreviewed gardening, skip the hanging test to make the performance bot work.

        * Skipped:

2015-08-17  Chris Dumez  <cdumez@apple.com>

        Add performance tests for traversal of collections returned by getElementsByClassName() / getElementsByTagName()
        https://bugs.webkit.org/show_bug.cgi?id=148080

        Reviewed by Antti Koivisto.

        Add performance tests for traversal of *uncached* collections returned
        by getElementsByClassName() / getElementsByTagName(). These methods
        will soon be updated to return an HTMLCollection instead of a
        NodeList and we need to make sure we don't regress performance in the
        process.

        * DOM/get-elements-by-class-name-traversal-uncached.html: Added.
        * DOM/get-elements-by-tag-name-traversal-uncached.html: Added.

2015-08-14  Chris Dumez  <cdumez@apple.com>

        Add performance tests for NodeList and HTMLCollection traversal
        https://bugs.webkit.org/show_bug.cgi?id=148043

        Reviewed by Gavin Barraclough.

        Add performance tests for NodeList and HTMLCollection traversal.
        Ideally, those 2 tests should be as fast. However, due to inefficiencies
        in our HTMLCollection bindings code, the HTMLCollection tests is ~30%
        slower. This will be addressed in the near future.

        * Bindings/childNodes-traversal.html: Added.
        * Bindings/children-traversal.html: Added.

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Add a second font-fallback performance test
        https://bugs.webkit.org/show_bug.cgi?id=147692

        Reviewed by Ryosuke Niwa.

        This test is smaller, but has more realistic content. Also, it uses the "lang" attribute.

        * Layout/font-fallback-2.html: Added.
        * Layout/resources/font-fallback-2.html: Added.

2015-07-13  Filip Pizlo  <fpizlo@apple.com>

        Update JetStream version number to 1.1.

        Rubber stamped by Ryosuke Niwa.

        * JetStream/create.rb:

2015-06-30  Filip Pizlo  <fpizlo@apple.com>

        Update the JetStream documentation to reflect the recent changes
        https://bugs.webkit.org/show_bug.cgi?id=146474

        Reviewed by Geoffrey Garen.

        * JetStream/create.rb: Bump the version.
        * JetStream/in-depth-TEMPLATE.html: Add cdjs documentation. Remove cordic documentation. Change documentation for splay and mandreel.

2015-06-26  Filip Pizlo  <fpizlo@apple.com>

        [JetStream] Raise the percentile of mandreel-latency and splay-latency
        https://bugs.webkit.org/show_bug.cgi?id=146378

        Reviewed by Mark Lam.

        The current percentile is 95%.  When I looked at the sample lists in our GC, it was
        clear that the worst 5% samples completely amortize our GC pauses.  Our GC pauses can
        be quite bad.  Clearly, splay-latency is meant to test whether we have an incremental
        GC that ensures that you don't have bad worst-case pauses.  But 95% is too small,
        because it doesn't really capture those pauses.  Raising the percentile to above 99%
        appears to do the trick.  99.5% or more seems like a good bet.  The trade-off there is
        just that if we set it too high, then we won't have enough statistics.  Doing this very
        clearly rewards GCs that are incremental, and punishes GCs that aren't (like ours).
        That's what we want, since in the future we want to use this test to guide any
        improvements to the worst-case performance of our GC.

        The way that the percentile is selected will also affect mandreel-latency.  That's a
        good thing, because 95% is probably too low for that test as well.  That test ends up
        with >10k samples.  The goal of using 95% in the first place was to get enough samples
        to have a stable average.  But if we have >10k samples, we can push that percentile up
        much higher and still get good statistics while achieving the effect we want - i.e.
        getting the worst case.

        I don't think that we need to do the same thing for cdjs.  That test only takes 200
        samples, so 95% means we report the average of the worst 10 samples.  That's probably
        good enough.

        * JetStream/Octane2/base.js: Raise the percentile as described above.
        (BenchmarkSuite.prototype.RunSingleBenchmark):
        * JetStream/Reference.js: Tweak the reference times to bring the latency tests closer to 100ish on my machine.
        * JetStream/create.rb: Bump the version.

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        Run CDjs as part of JSC stress testing
        https://bugs.webkit.org/show_bug.cgi?id=146174

        Reviewed by Geoffrey Garen.

        * JetStream/cdjs/cdjs-tests.yaml: Added. This tells JSC stress tests what tests to run. It uses new syntax ("tests" being a list) that I add in this change.
        * JetStream/cdjs/main.js: Mark this as a slow test.
        * JetStream/create.rb: Don't copy the JSC stress tests artifacts into the JetStream bundle.

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix a small indentation goof.

        * JetStream/cdjs/motion.js:
        (Motion.prototype.findIntersection):

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        JetStream should include a JavaScript version of the CDx real-time benchmark
        https://bugs.webkit.org/show_bug.cgi?id=146156

        Reviewed by Geoffrey Garen.

        This adds a JavaScript port of the CDx real-time benchmark to JetStream, and retires
        the cordic test because it was previously the smallest and probably least interesting.

        The new test, "cdjs", is mostly a faithful rewrite of the Java code into JavaScript.
        I got the Java code from https://www.cs.purdue.edu/sss/projects/cdx/.

        There are some differences:

        - It uses RedBlackTree's for all sets and maps rather than hashtables. This is clearly
          more in the spirit of real-time than the CDx benchmark. FWIW, CDx used to use trees
          and I don't know why that changed in the latest version.

        - CDjs doesn't attempt to avoid memory allocations, unlike the real-time Java version.
          I wrote the code that I wanted to write for aesthetics, rather than the code that I
          would have written if I tried to write the fastest code possible. Again, I believe
          that this is in the spirit of CDj - it's meant to test what would happen if you wrote
          real-timey stuff in a high level language and actually took advantage of that
          language to be more productive.

        The test score reflects the average latency of the worst 10 samples out of 200 samples.
        The simulation uses 1000 aircraft, flying along paths that result in some detected
        collisions every once in a while. The benchmark validates its results by checking the
        total number of collisions detected.

        Apart from the integration into the JetStream harness, the CDjs directory contains a
        fully self-contained benchmark that could be run either in the jsc shell or in browser.

        This new code uses the same 3-clause BSD license as the Purdue code, and gives
        attribution to Purdue in almost all files. I believe that is appropriate since I wrote
        most of the JS files by looking at the Purdue Java code and trascribing to JavaScript.
        In some cases, I even copy-pasted the Java code, like the complicated math for
        four-dimensional intersections and voxel hashing.

        * JetStream/CDjsSetup.js: Added.
        * JetStream/Octane2Setup.js:
        * JetStream/Reference.js:
        * JetStream/cdjs: Added.
        * JetStream/cdjs/benchmark.js: Added.
        (benchmark):
        * JetStream/cdjs/call_sign.js: Added.
        (CallSign):
        (CallSign.prototype.compareTo):
        (CallSign.prototype.toString):
        * JetStream/cdjs/collision.js: Added.
        (Collision):
        (Collision.prototype.toString):
        * JetStream/cdjs/collision_detector.js: Added.
        (CollisionDetector):
        (CollisionDetector.prototype.handleNewFrame.get for):
        (CollisionDetector.prototype.handleNewFrame):
        * JetStream/cdjs/constants.js: Added.
        * JetStream/cdjs/main.html: Added.
        * JetStream/cdjs/main.js: Added.
        * JetStream/cdjs/motion.js: Added.
        (Motion):
        (Motion.prototype.toString):
        (Motion.prototype.delta):
        (Motion.prototype.findIntersection):
        * JetStream/cdjs/motion_test.js: Added.
        (checkDoesIntersect):
        (checkDoesNotIntersect):
        (makeMotion):
        * JetStream/cdjs/red_black_tree.js: Added.
        (RedBlackTree):
        (RedBlackTree.):
        * JetStream/cdjs/red_black_tree_test.js: Added.
        (test):
        (test.):
        * JetStream/cdjs/reduce_collision_set.js: Added.
        (drawMotionOnVoxelMap):
        (drawMotionOnVoxelMap.):
        (.get reduceCollisionSet):
        * JetStream/cdjs/reduce_collision_set_test.js: Added.
        (makeMotion):
        (keys):
        (test):
        * JetStream/cdjs/simulator.js: Added.
        (Simulator):
        (Simulator.prototype.simulate):
        * JetStream/cdjs/util.js: Added.
        (compareNumbers):
        (averageAbovePercentile):
        (currentTime):
        (else.currentTime):
        * JetStream/cdjs/vector_2d.js: Added.
        (Vector2D):
        (Vector2D.prototype.plus):
        (Vector2D.prototype.minus):
        (Vector2D.prototype.toString):
        (Vector2D.prototype.compareTo):
        * JetStream/cdjs/vector_3d.js: Added.
        (Vector3D):
        (Vector3D.prototype.plus):
        (Vector3D.prototype.minus):
        (Vector3D.prototype.dot):
        (Vector3D.prototype.squaredMagnitude):
        (Vector3D.prototype.magnitude):
        (Vector3D.prototype.times):
        (Vector3D.prototype.as2D):
        (Vector3D.prototype.toString):
        * JetStream/create.rb:
        * JetStream/index-TEMPLATE.html:
        * JetStream/sunspider/cordic.js: Removed.

2015-06-17  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] We should add performance tests for stretching logic
        https://bugs.webkit.org/show_bug.cgi?id=146063

        Reviewed by Sergio Villar Senin.

        Added a new performance test for Grid Layout to ensure there are no
        regressions in the stretching alignment logic.

        * Layout/fixed-grid-lots-of-stretched-data.html: Added.

2015-06-17  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Performance tests are using the old syntax
        https://bugs.webkit.org/show_bug.cgi?id=146061

        Reviewed by Sergio Villar Senin.

        Adapted tests to the new grid tracks definition syntax.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:

2015-06-08  Filip Pizlo  <fpizlo@apple.com>

        JetStream should have a more rational story for jitter-oriented latency tests
        https://bugs.webkit.org/show_bug.cgi?id=145762

        Reviewed by Geoffrey Garen.

        JetStream has some latency tests that are meant to measure jitter.  Prior to this change, they
        did this by computing the RMS.  But the RMS is a pretty bad metric.  The thing that it rewards
        isn't really the thing that you'd want your browser to do.  These RMS-based tests involve taking
        the geomean of the RMS of some samples and the sample average.  The lower the geomean, the better
        (in the JetStream harness we then invert the scores so that higher is better, but let's ignore
        that for this discussion and assume that lower is better).  Here's an example of how this can go
        bad.  A browser that always computes a task in some horribly long time (say, 1000ms) but never
        varies that time will perform better than a browser that usually computes the task super quickly
        (say, 10ms) and sometimes just a little bit less quickly (say, 15ms).  The former browser will
        have an RMS of 0 and an average of 1000.  The latter will have a RMS somewhere around 3.5 and an
        average of 12.5 (assuming equal probability of 10ms and 15ms).  The geomean of (0, 1000) is 0.
        The geomean of (3.5, 12.5) is 6.6.  Lower is better, so the former browser scores higher - even
        though it's obviously never better to have a browser always complete a task in 1000ms when a
        different browser can do it in 15ms in the worst case.

        JetStream should not have this pathology.  The right way of avoiding it is to replace RMS with
        some other metric of how bad things get.  A good metric is the average of the worst percentile.
        The worst 1% or the worst 5% would be good things to average.  This will catch cases where the VM
        jittered due to JIT or GC, but it never have the pathology that we end up giving the better score
        to a VM whose best case is worst than another VM's worst case.

        For now, this change uses the highest samples above the 95% percentile. I'm not yet sure if that
        is the best thing - it might include too many scores that are around the best-case performance -
        but it's certainly better than RMS and it might be good enough to keep. But because of that
        uncertainty, I'm setting the version to be "1.1-alpha1" to indicate that we aren't ready to
        release this yet.

        * JetStream/Octane2/base.js:
        (.this.Setup.setup.setup):
        (.this.TearDown.tearDown.tearDown):
        (BenchmarkSuite.GeometricMeanTime):
        (BenchmarkSuite.AverageAbovePercentile):
        (BenchmarkSuite.GeometricMeanLatency):
        (BenchmarkSuite.prototype.NotifyStep):
        (BenchmarkSuite.prototype.RunSingleBenchmark):
        * JetStream/Octane2/mandreel.js:
        (setupMandreel):
        (updateMandreelStats):
        (startMandreelTimer):
        (latencyMandreel):
        (tearDownMandreel):
        (RMSMandreel): Deleted.
        * JetStream/Octane2/splay.js:
        (GenerateKey):
        (SplayUpdateStats):
        (InsertNewNode):
        (SplayTearDown):
        (SplayRMS): Deleted.
        * JetStream/create.rb:

2015-06-03  Zalan Bujtas  <zalan@apple.com>

        Skip Dromaeo/jslib-modify-prototype.html for now.

        Unreviewed gardening.

        * Skipped:

2015-05-04  Filip Pizlo  <fpizlo@apple.com>

        Large array shouldn't be slow
        https://bugs.webkit.org/show_bug.cgi?id=144617

        Reviewed by Geoffrey Garen.

        Add the hash-map benchmark to LongSpider. LongSpider was already not a perfect match of
        SunSpider. It's not an official benchmark. It contains benchmarks that are relatively
        long-running. So, hash-map sort of belongs here.

        * LongSpider/hash-map.js: Added.
        (HashMap):
        (HashMap.):
        (.get var):

2015-05-01  Dewei Zhu  <dewei_zhu@apple.com>

        Fix typo bug in Speedometer/resources/main.js
        https://bugs.webkit.org/show_bug.cgi?id=144504

        Reviewed by Ryosuke Niwa.

        * Speedometer/resources/main.js: Fix typo.
        (window.benchmarkClient.totalTimeInDisplayUnit):

2015-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Add JetStream to PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=144024

        Rubber-stamped by Filip Pizlo.

        * JetStream: Added.
        * JetStream/JetStream-Logo.png: Added.
        * JetStream/JetStream-Logo@2x.png: Added.
        * JetStream/JetStream.css: Added.
        * JetStream/JetStreamDriver.js: Added.
        * JetStream/LICENSE.txt: Added.
        * JetStream/LLVM-test-suite-LICENSE.txt: Added.
        * JetStream/Octane: Added.
        * JetStream/Octane/base.js: Added.
        * JetStream/Octane/code-load.js: Added.
        * JetStream/Octane2: Added.
        * JetStream/Octane2/base.js: Added.
        * JetStream/Octane2/box2d.js: Added.
        * JetStream/Octane2/code-load.js: Added.
        * JetStream/Octane2/crypto.js: Added.
        * JetStream/Octane2/deltablue.js: Added.
        * JetStream/Octane2/earley-boyer.js: Added.
        * JetStream/Octane2/gbemu-part1.js: Added.
        * JetStream/Octane2/gbemu-part2.js: Added.
        * JetStream/Octane2/mandreel.js: Added.
        * JetStream/Octane2/navier-stokes.js: Added.
        * JetStream/Octane2/pdfjs.js: Added.
        * JetStream/Octane2/raytrace.js: Added.
        * JetStream/Octane2/regexp.js: Added.
        * JetStream/Octane2/richards.js: Added.
        * JetStream/Octane2/run.js: Added.
        * JetStream/Octane2/splay.js: Added.
        * JetStream/Octane2/typescript-compiler.js: Added.
        * JetStream/Octane2/typescript-input.js: Added.
        * JetStream/Octane2/typescript.js: Added.
        * JetStream/Octane2/zlib-data.js: Added.
        * JetStream/Octane2/zlib.js: Added.
        * JetStream/Octane2Setup.js: Added.
        * JetStream/OctaneSetup.js: Added.
        * JetStream/README: Added.
        * JetStream/Reference.js: Added.
        * JetStream/SimpleSetup.js: Added.
        * JetStream/SunSpiderSetup.js: Added.
        * JetStream/Swoosh.png: Added.
        * JetStream/Swoosh@2x.png: Added.
        * JetStream/TestingSetup.js: Added.
        * JetStream/create.rb: Added.
        * JetStream/docs: Added.
        * JetStream/docs/JetStreamBlogPost.html: Added.
        * JetStream/in-depth-TEMPLATE.html: Added.
        * JetStream/index-TEMPLATE.html: Added.
        * JetStream/simple: Added.
        * JetStream/simple/bigfib.cpp: Added.
        * JetStream/simple/bigfib.cpp.js: Added.
        * JetStream/simple/container.cpp: Added.
        * JetStream/simple/container.cpp.js: Added.
        * JetStream/simple/dry.c: Added.
        * JetStream/simple/dry.c.js: Added.
        * JetStream/simple/float-mm.c: Added.
        * JetStream/simple/float-mm.c.js: Added.
        * JetStream/simple/gcc-loops.cpp: Added.
        * JetStream/simple/gcc-loops.cpp.js: Added.
        * JetStream/simple/hash-map.js: Added.
        * JetStream/simple/n-body.c: Added.
        * JetStream/simple/n-body.c.js: Added.
        * JetStream/simple/quicksort.c: Added.
        * JetStream/simple/quicksort.c.js: Added.
        * JetStream/simple/towers.c: Added.
        * JetStream/simple/towers.c.js: Added.
        * JetStream/sunspider: Added.
        * JetStream/sunspider/3d-cube.js: Added.
        * JetStream/sunspider/3d-raytrace.js: Added.
        * JetStream/sunspider/base64.js: Added.
        * JetStream/sunspider/cordic.js: Added.
        * JetStream/sunspider/crypto-aes.js: Added.
        * JetStream/sunspider/crypto-md5.js: Added.
        * JetStream/sunspider/crypto-sha1.js: Added.
        * JetStream/sunspider/date-format-tofte.js: Added.
        * JetStream/sunspider/date-format-xparb.js: Added.
        * JetStream/sunspider/n-body.js: Added.
        * JetStream/sunspider/regex-dna.js: Added.
        * JetStream/sunspider/tagcloud.js: Added.

2015-04-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        textPath layout performance improvement.
        https://bugs.webkit.org/show_bug.cgi?id=141570.

        Reviewed by Darin Adler.

        Cut down the time spent in traversing the path for text by 50%. Instead
        of traversing the path twice at a certain length: one time for the position
        and the second time for the angle, we can merge these two passes into one.

        * SVG/TextOnPathSimple.html: Added.
        * SVG/resources/TextOnPathSimple.svg: Added.

2015-04-13  Zalan Bujtas  <zalan@apple.com>

        Clear up the test content when test is done.

        Unreviewed fix.

        * Layout/simple-line-layout-innertext.html:

2015-04-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout(regression): Calling innerText on RenderFlow with multiple children is slow.
        https://bugs.webkit.org/show_bug.cgi?id=143554

        Reviewed by Antti Koivisto.

        Initialize render flow's segments only when the render flow changes in TextIterator.
        The included performance test shows 6x speedup. (from ~10 runs/sec to ~60 runs/sec)

        * Layout/simple-line-layout-innertext.html: Added.

2015-03-09  Chris Dumez  <cdumez@apple.com>

        [CG] Have Canvas use the IOSurfacePool
        https://bugs.webkit.org/show_bug.cgi?id=142417
        <rdar://problem/20044440>

        Reviewed by Darin Adler.

        Lower the number of different canvas sizes from 1000 to 100 so that
        the test does not require such a huge cache size. With 100, we now
        get over 90% cache hit rate with the default IOSurfacePool size.

        * Canvas/reuse.html:

2015-01-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Poor performance on IE's Chalkboard benchmark.
        https://bugs.webkit.org/show_bug.cgi?id=140753.

        Reviewed by Zalan Bujtas.

        * SVG/UnderTheSeeBenchmark.html: Added
        * SVG/WorldcupBenchmark.html: Added.
        * SVG/resources/RenderAnimator.css: Added.
        * SVG/resources/RenderAnimator.js: Added.
        These are benchmarks for the SVG rendering. Mainly we want to measure how fast
        the SVG rendering will be when only a small part of it is drawn.

2015-01-21  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: support aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=140732

        Reviewed by Andreas Kling.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/memalign.cpp:
        (test):
        (benchmark_memalign): Added a test for specific interesting memalign values.

        * MallocBench/MallocBench/stress_aligned.cpp: Added.
        (benchmark_stress_aligned):
        * MallocBench/MallocBench/stress_aligned.h: Added. Added a stress test
        for arbitrary memalign values.

2015-01-16  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: added the tiniest bit of testing for aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=140573

        Reviewed by Andreas Kling.

        Just good enoug to catch two bugs in a preliminary implementation.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/mbmalloc.cpp:
        * MallocBench/MallocBench/mbmalloc.h:
        * MallocBench/MallocBench/memalign.cpp: Added.
        (benchmark_memalign):
        * MallocBench/MallocBench/memalign.h: Added.

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Add performance test related to font fallback
        https://bugs.webkit.org/show_bug.cgi?id=139332

        Reviewed by Simon Fraser.

        * Layout/font-fallback.html: Added.
        * Layout/resources/font-fallback.html: Added.

2014-12-08  Dean Jackson  <dino@apple.com>

        [Apple] Use Accelerate framework to speed-up FEGaussianBlur
        https://bugs.webkit.org/show_bug.cgi?id=139310

        Reviewed by Simon Fraser.

        Add an interactive performance test that measures the speed of a set
        of blur operations on a generated images.

        * Interactive/blur-filter-timing.html: Added.

2014-11-13  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add performance test case to measure line layout speed of monolithic text content.
        https://bugs.webkit.org/show_bug.cgi?id=138699

        Reviewed by Antti Koivisto.

        * Layout/line-layout-long-long-text.html: Added.

2014-10-22  Zalan Bujtas  <zalan@apple.com>

        Speed up line parsing for simple line layout (part I)
        https://bugs.webkit.org/show_bug.cgi?id=137275

        Reviewed by Antti Koivisto.

        Extend simple line layout performance test with a few more cases.
        Now we've got:
        <div center
        <div right
        <div justify
        <div white-space: pre (new)
        <div overflow-wrap: break-word (new)
        <pre
        <pre white-space: pre-wrap
        <pre white-space: pre-line (new)
        <pre white-space: nowrap (new)
        <pre white-space: pre-wrap overflow-wrap: break-word
        <div + embedded <span etc.
        <div + br

        * Layout/line-layout-simple.html:

2014-10-15  Andrei Bucur  <abucur@adobe.com>

        [Multicol] Start adding performance tests for the multi-column implementation
        https://bugs.webkit.org/show_bug.cgi?id=137687

        Reviewed by Mihnea Ovidenie.

        This patch creates a Multicol folder inside the Layout performance tests suite. It adds only two tests
        as described below.

        The tests are skipped until the implementation stabilizes.

        * Layout/Multicol/MulticolManyColumns.html: Added.
        This test verifies the performance of the multi-column implementation with two nested multi-column
        containers, the first having 20 columns and the second 10 columns.

        * Layout/Multicol/MulticolNested.html: Added.
        This test verifies the performance of nesting multi-column containers in the presence
        of floats.

        * Layout/Multicol/resources/multicol-content-many-columns.html: Added.
        * Layout/Multicol/resources/multicol-content-nested.html: Added.
        * Skipped: Skip the Multicol folder for now.

2014-09-29  Filip Pizlo  <fpizlo@apple.com>

        It should be fun and easy to run every possible JavaScript benchmark from the command line
        https://bugs.webkit.org/show_bug.cgi?id=137245

        Reviewed by Oliver Hunt.

        This adds the scaffolding for running Octane version 2 inside run-jsc-benchmarks.
        In the future we should just land Octane2 in this directory, and run-jsc-benchmarks
        should be changed to point directly at this directory instead of requiring the
        Octane path to be configured as part of the configuration file.

        * Octane: Added.
        * Octane/wrappers: Added.
        * Octane/wrappers/jsc-box2d.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-boyer.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-closure.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-decrypt.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-deltablue.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-earley.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-encrypt.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-gbemu.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-jquery.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-mandreel.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-navier-stokes.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-pdfjs.js: Added.
        (jscSetUp.PdfJS_window.console.log):
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-raytrace.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-regexp.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-richards.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-splay.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-typescript.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-zlib.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):

2014-09-28  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix some minor typos: psuedo -> pseudo
        https://bugs.webkit.org/show_bug.cgi?id=137192

        Reviewed by Alexey Proskuryakov.

        * Speedometer/resources/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js:

2014-09-11  Geoffrey Garen  <ggaren@apple.com>

        Some MallocBench refinements
        https://bugs.webkit.org/show_bug.cgi?id=136750

        Reviewed by Sam Weinig.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::run): Allow for null entries in the object list so that
        we can test in modes that exclude large or small allocations.

        * MallocBench/MallocBench/churn.cpp:
        (benchmark_churn):
        * MallocBench/MallocBench/flickr.cpp:
        (benchmark_flickr):
        * MallocBench/MallocBench/fragment.cpp:
        (benchmark_fragment_iterate):
        * MallocBench/MallocBench/list.cpp:
        (benchmark_list_allocate):
        * MallocBench/MallocBench/reddit.cpp:
        (benchmark_reddit): Updated test runtimes to weight them more equally,
        for the sake of arithmetic mean.

        * MallocBench/MallocBench/stress.cpp:
        (Object::Object):
        (allocate):
        (deallocate):
        (benchmark_stress): Verify the contents of memory as we go. Also,
        force scavenging each time through the loop to test the scavenging path.

        * MallocBench/MallocBench/theverge.cpp:
        (benchmark_theverge):
        * MallocBench/MallocBench/tree.cpp:
        (benchmark_tree_churn): Re-weighted, as above.

2014-09-08  Myles C. Maxfield  <mmaxfield@apple.com>

        PerformanceTests/SVG/SVG-Text.html has unparsable output
        https://bugs.webkit.org/show_bug.cgi?id=136648

        Reviewed by Gavin Barraclough.

        I need to clean up the arbitrary text on the page before telling
        the test runner infrastructure that the test is complete.

        * SVG/SVG-Text.html:

2014-09-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Laying out a TextRun using an SVG font is O(n^2)
        https://bugs.webkit.org/show_bug.cgi?id=136584

        Reviewed by Andreas Kling.

        Time how long it takes to lay out and render some text using an SVG font.

        * SVG/SVG-Text.html: Added.
        * SVG/resources/graffiti.svg: Added.

2014-09-02  Geoffrey Garen  <ggaren@apple.com>

        MallocBench should have a stress test for correctness
        https://bugs.webkit.org/show_bug.cgi?id=136468

        Reviewed by Andreas Kling.

        Added a stress test that allocates randomized sizes of randomized
        lifetimes in randomized order.

        This version of the test reproduces the EWS crash seen in bmalloc
        (<https://bugs.webkit.org/show_bug.cgi?id=132629>).

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp: Sort!
        * MallocBench/MallocBench/stress.cpp: Added.
        (Object::Object):
        (SizeStream::SizeStream):
        (SizeStream::next):
        (benchmark_stress): Usually, we random(0). Surprisingly, though, only
        random(1) reproduces the bug I was looking for.
        * MallocBench/MallocBench/stress.h: Added.

2014-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DoYouEvenBench 0.17 to Speedometer 1.0 and add a new look.
        https://bugs.webkit.org/show_bug.cgi?id=133455

        Reviewed by Timothy Hatcher.

        * Speedometer/: Renamed from DoYouEvenBench.
        * Skipped: Updated the path for InteractiveRunner.html

2014-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DoYouEvenBench 0.17 to Speedometer 1.0 and add a new look.
        https://bugs.webkit.org/show_bug.cgi?id=133455

        Reviewed by Timothy Hatcher.

        Renamed the benchmark to Speedometer and added the new look designed by Timothy Hatcher.

        Also changed the unit of measurements from milliseconds to runs-per-minute averaged over the number
        of the benchmark suites (7 for 1.0). You can divide 420000 by the old benchmark score (in milliseconds)
        to get the new value for the set of tests that are enabled by default in 1.0. You can continue to see
        results in milliseconds on Full.html#ms.

        * DoYouEvenBench/Full.html: Added a bunch of sections and the description of the benchmark.

        * DoYouEvenBench/resources/benchmark-report.js: Remove the newly added content when ran inside a DRT or
        WTR so that run-perf-tests wouldn't error.
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame): Call a newly added willAddTestFrame callback when it exists.

        * DoYouEvenBench/resources/gauge.png: Added.
        * DoYouEvenBench/resources/gauge@2x.png: Added.
        * DoYouEvenBench/resources/logo.png: Added.
        * DoYouEvenBench/resources/logo@2x.png: Added.
        * DoYouEvenBench/resources/main.css: Replaced the style.

        * DoYouEvenBench/resources/main.js:
        (window.benchmarkClient.willAddTestFrame): Place the iframe right where #testContainer is shown.
        (window.benchmarkClient.willRunTest): Show the name of the suite (e.g. EmberJS-TodoMVC) to run next.
        (window.benchmarkClient.didRunSuites):
        (window.benchmarkClient.willStartFirstIteration): Initialize _timeValues and _finishedTestCount now that
        we have an UI to run the benchmark multiple times without reloading the page.
        (window.benchmarkClient.didFinishLastIteration): Split into smaller pieces.
        (window.benchmarkClient._computeResults): Computes the mean and the statistics for the given time values,
        and also format them in a human readable form.
        (window.benchmarkClient._computeResults.totalTimeInDisplayUnit): Converts ms to runs/min.
        (window.benchmarkClient._computeResults.sigFigFromPercentDelta): Given a percentage error (e.g. 1%),
        returns the number of significant digits required for the mean.
        (window.benchmarkClient._computeResults.toSigFigPrecision): Calls toPrecision with the specified precision
        constrained to be at least the number of non-decimal digits and at most 6.
        (window.benchmarkClient._addDetailedResultsRow): Renamed from _addResult. It now takes the table to which
        to add a row and the iteration number.
        (window.benchmarkClient._updateGaugeNeedle): Added. Controls the angle of the speed indicator.
        (window.benchmarkClient._populateDetailedResults): Added.
        (window.benchmarkClient.prepareUI): Added. It adds an event listener to show a specified section when
        the push state of the document changes, and shows a warning sign when the view port size is too small.
        We do this inside a callback to avoid running it inside DRT / WTR.
        (startBenchmark):
        (showSection): Added.
        (startTest): Added.
        (showResultsSummary): Added.
        (showResultDetails): Added.
        (showAbout): Added.

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Move test states into benchmarkClient and remove the closure
        https://bugs.webkit.org/show_bug.cgi?id=133438

        Reviewed by Benjamin Poulain.

        Moved all local variables in the closure wrapping benchmarkClient onto the object itself
        and removed the closure to improve the readability of the code.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/main.js:
        (window.benchmarkClient.willRunTest):
        (window.benchmarkClient.didRunTest):
        (window.benchmarkClient.didRunSuites):
        (window.benchmarkClient.willStartFirstIteration):
        (window.benchmarkClient.didFinishLastIteration):
        (window.benchmarkClient._addResult): Moved.
        (.): Deleted.

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Split stylesheets and scripts in Full.html into separate files
        https://bugs.webkit.org/show_bug.cgi?id=133437

        Reviewed by Benjamin Poulain.

        Extracted main.js and main.css.

        Also fixed a bug in startBenchmark that disabled suites were counted towards the total number of tests.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/main.css: Added.
        * DoYouEvenBench/resources/main.js: Added.
        (.addResult):
        (window.benchmarkClient):
        (startBenchmark): Renamed from startTest.

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: CSS parser warning at line 106 of base.css
        https://bugs.webkit.org/show_bug.cgi?id=133433

        Reviewed by Maciej Stachowiak.

        Removed the old filter CSS property for Internet Explorer. The latest Internet Explorer supports -ms-linear-gradient
        on background CSS property anyways.

        It's interesting that some of the tests only have -webkit- prefixes. Perhaps we should update those subtests.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.css:
        (#header:before):

2014-05-31  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Ember.js assertion hit at line 20593
        https://bugs.webkit.org/show_bug.cgi?id=133431

        Reviewed by Darin Adler.

        The assertion was hit because ToDoMVC includes jQuery 2.1 and Ember.js 1.3.1 only recognizes jQuery 2.0.
        Port the assertion from Ember.js 1.5.1 to suppress the assertion.

        We should update the entire Ember.js at some point but this would do the job for now.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js:

2014-05-31  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Prevent frame flattening on iOS
        https://bugs.webkit.org/show_bug.cgi?id=133428

        Reviewed by Andreas Kling.

        Prevent frame flattening on iOS by setting scrolling=no.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame):

2014-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench spits out 404 errors for learn.json
        https://bugs.webkit.org/show_bug.cgi?id=133416

        Reviewed by Oliver Hunt.

        Add an empty learn.json file so that it won't cause a 404 error when hosted on a http server.

        Bumped the version number to 0.12.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/todomvc/learn.json:

2014-05-23  Geoffrey Garen  <ggaren@apple.com>

        Performance testing, diamond-square terrain generation + canvas
        https://bugs.webkit.org/show_bug.cgi?id=133054

        Reviewed by Ryosuke Niwa.

        This test was written by Hunter Loftis. It originally appeared on his
        blog @ <http://www.playfuljs.com/realistic-terrain-in-130-lines/>.

        I did a bit of editing for format and benchmark suitability.

        * Canvas/terrain.html: Added.

2014-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench should run 20 iterations in browser
        https://bugs.webkit.org/show_bug.cgi?id=132795

        Reviewed by Gavin Barraclough.

        Right now, run-perf-tests runs BYEBench 4 times with different instances of DRT/WTR to get
        a more stable time and account for differences in the runtime environment, particularly,
        ASLR (Address Space Layout Randomization).

        While we can't account for the latter effect when the benchmark is ran inside a browser,
        we can at least run 20 iterations to get a more stable (but perhaps biased by ALSR) number.

        While the sample size of 20 is statistically unsound to compute the arithmetic mean from,
        it's MUCH better than the current sample size of 5.

        * DoYouEvenBench/Full.html:
        (benchmarkClient.iterationCount): Set the default iteration count to 20.
        (startTest): Use benchmarkClient.iterationCount as the iteration count.
        * DoYouEvenBench/resources/benchmark-report.js:
        (benchmarkClient.iterationCount): Continue to use the old iteration count of 5 when ran
        inside run-perf-tests.

2014-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench should show 95th percentile right next to the mean with ±
        https://bugs.webkit.org/show_bug.cgi?id=132729

        Reviewed by Darin Adler.

        Before this patch, Full.html showed the 95th percentile delta for the arthemtic mean in a separate row
        but this was confusing for some people. Show it right next to mean in the same row separated by ±.

        * DoYouEvenBench/Full.html:

2014-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench should use TodoMVC to test FlightJS for consistency
        https://bugs.webkit.org/show_bug.cgi?id=132727

        Reviewed by Andreas Kling.

        Add a test suite for the FlightJS version of TodoMVC, and disable FlightJS-MailClient by default.

        I initially intended to include a wider variety of demo apps in DYEBench
        but that's not happening any time soon so let us use TodoMVC for all frameworks for now.

        We can add more demo apps in v2.

        * DoYouEvenBench/Full.html: Increment the version to 0.10.
        * DoYouEvenBench/InteractiveRunner.html: Don't check disabled suites by default.
        * DoYouEvenBench/resources/tests.js:
        * DoYouEvenBench/resources/todomvc/dependency-examples: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/.gitignore: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/.jshintrc: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/app.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/data: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/data/stats.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/data/todos.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/main.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/store.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/main_selector.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/new_item.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/stats.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/todo_list.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/toggle_all.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/with_filters.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/utils.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/templates: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/templates/stats.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/templates/todo.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower.json: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/depot: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/depot/depot.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/es5-shim: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/es5-shim/es5-sham.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/es5-shim/es5-shim.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/advice.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/base.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/component.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/compose.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/debug.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/index.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/logger.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/registry.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/utils.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/jquery: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs-text: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs-text/text.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs/require.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/index.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/karma.conf.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/package.json: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/readme.md: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/.jshintrc: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture/footer.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture/new_todo.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture/toggle_all.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/mock: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/mock/datastore.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/data: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/data/stats_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/data/todos_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui/new_item_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui/stats_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui/toggle_all_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/test-main.js: Added.

2014-05-07  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove runtime feature
        https://bugs.webkit.org/show_bug.cgi?id=132382

        Reviewed by Benjamin Poulain.

        Remove set of WebKitCSSGridLayoutEnabled preference.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:

2014-05-06  Radu Stavila  <stavila@adobe.com>

        [CSSRegions] Enabled regions performance tests by default
        https://bugs.webkit.org/show_bug.cgi?id=128244

        Reviewed by Andreas Kling.

        Enabled regions performance tests.

        * Skipped:

2014-04-25  Andreas Kling  <akling@apple.com>

        Bump jQuery to same version that dromaeo.com uses.

        Rubber-stamped by Ryosuke Niwa.

        * Dromaeo/resources/dromaeo/web/lib/jquery-1.10.2.min.js: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-jquery.html:

2014-04-18  Geoffrey Garen  <ggaren@apple.com>

        Added some more Membuster recordings to MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=131862

        Reviewed by Sam Weinig.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::Benchmark):
        (Benchmark::run):
        * MallocBench/MallocBench/Benchmark.h:
        * MallocBench/MallocBench/CommandLine.cpp:
        * MallocBench/MallocBench/CommandLine.h:
        (CommandLine::runs): Added a --runs option, so we can specify zero runs
        for memory warning benchmarks. Those benchmarks want zero runs so that
        they can perform a single warmup, which does not free all allocated
        objects, and then see how far back to 0MB they can get. Running multiple
        times would accumulate leaks, which is not representative of the
        simulated scenario.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::Interpreter):
        (Interpreter::run):
        * MallocBench/MallocBench/Interpreter.h: Support not deallocating all
        objects allocated during the recording, so we can do low memory warning
        memory use measurements, as above.

        * MallocBench/MallocBench/flickr.cpp:
        (benchmark_flickr_memory_warning):
        * MallocBench/MallocBench/main.cpp:
        (main):
        * MallocBench/MallocBench/reddit.cpp:
        (benchmark_reddit_memory_warning):
        * MallocBench/MallocBench/theverge.cpp:
        (benchmark_theverge_memory_warning): Adopt the API above.

        * MallocBench/run-malloc-benchmarks: I took a first pass at listing all
        available benchmarks here. Then I commented out the benchmarks that
        probably aren't reasonable to run by default.

2014-04-18  Geoffrey Garen  <ggaren@apple.com>

        MallocBench: removed the --measure-heap option
        https://bugs.webkit.org/show_bug.cgi?id=131854

        Reviewed by Sam Weinig.

        As of <https://bugs.webkit.org/show_bug.cgi?id=131661>, measuring the
        heap is fast, so there's no reason to disable it.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::Benchmark):
        (Benchmark::run):
        (Benchmark::printReport):
        * MallocBench/MallocBench/Benchmark.h:
        * MallocBench/MallocBench/CommandLine.cpp:
        (CommandLine::printUsage):
        * MallocBench/MallocBench/CommandLine.h:
        (CommandLine::heapSize):
        (CommandLine::measureHeap): Deleted.
        * MallocBench/MallocBench/main.cpp:
        (main):

2014-04-16  Alexandru Chiculita  <achicu@adobe.com>

        Improve performance of the RenderLayerCompositor::OverlapMap
        https://bugs.webkit.org/show_bug.cgi?id=115063

        Reviewed by Simon Fraser.

        Testing the performance of computing the overlap of 5000 layers.

        * Layout/layers_overlap_2d.html: Added. Using non-composited layers, to check
        that the performance on the non-composited path is not changing with this patch.
        * Layout/layers_overlap_3d.html: Added. Records the time to do the layout of 5000
        non-overlapping 3D layers.

2014-04-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Linking stylesheet instead of inline style definition has ruined ShapesRegions test
        https://bugs.webkit.org/show_bug.cgi?id=131572

        Reviewed by Rob Buis.

        In r167022 I moved the common CSS selectors into RegionsShapes.css, then I linked it into the perf test
        files, but the measurement results dropped down from about 400ms to 10ms. I realized it's caused by the
        linked css rule, so I've put the selectors back into every test case, which fixes the test measurements.

        * Layout/Shapes/resources/RegionsShapes.css: Removed.
        * Layout/Shapes/resources/RegionsShapesContent.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth400.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth600.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth800.html:
        * Layout/Shapes/resources/RegionsShapesContentNoShapes.html:

2014-04-14  Geoffrey Garen  <ggaren@apple.com>

        MallocBench should scavenge explicitly instead of waiting
        https://bugs.webkit.org/show_bug.cgi?id=131661

        Reviewed by Andreas Kling.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Don't build mbmalloc
        by default because it will overwrite any other mbmalloc you're working
        with in the WebKitBuild directory.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::run): Scavenge explicitly instead of waiting. This is faster,
        and it's the only way to get FastMalloc to scavenge. (That's a bug in
        FastMalloc, but we don't want it to interfere with broader testing.)

        * MallocBench/MallocBench/mbmalloc.cpp:
        * MallocBench/MallocBench/mbmalloc.h: Added a scavenge implementation
        for system malloc.

2014-04-14  Geoffrey Garen  <ggaren@apple.com>

        A few MallocBench record/replay fixes
        https://bugs.webkit.org/show_bug.cgi?id=131627

        Reviewed by Andreas Kling.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::run): Accept 0-sized allocations without asserting because
        WebKit does that sometimes.

        * MallocBench/MallocBench/flickr.ops:
        * MallocBench/MallocBench/flickr_memory_warning.ops:
        * MallocBench/MallocBench/reddit.ops:
        * MallocBench/MallocBench/reddit_memory_warning.ops:
        * MallocBench/MallocBench/theverge.ops:
        * MallocBench/MallocBench/theverge_memory_warning.ops: Updated these
        recordings because a bug in the recording mechanism caused one out of
        every few thousand slot values to be bogus.

2014-04-13  Geoffrey Garen  <ggaren@apple.com>

        Added some website recordings to MallocBench -- taken from Membuster
        https://bugs.webkit.org/show_bug.cgi?id=131601

        Reviewed by Ryosuke Niwa.

        Added flickr, reddit, and theverge -- each recorded from Membuster's
        cache, with and without sending Safari a low memory warning.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/flickr.cpp: Added.
        (benchmark_flickr):
        (benchmark_flickr_memory_warning):
        * MallocBench/MallocBench/flickr.h: Added.
        * MallocBench/MallocBench/flickr.ops: Added.
        * MallocBench/MallocBench/flickr_memory_warning.ops: Added.
        * MallocBench/MallocBench/reddit.cpp: Added.
        (benchmark_reddit):
        (benchmark_reddit_memory_warning):
        * MallocBench/MallocBench/reddit.h: Added.
        * MallocBench/MallocBench/reddit.ops: Added.
        * MallocBench/MallocBench/reddit_memory_warning.ops: Added.
        * MallocBench/MallocBench/theverge.cpp: Added.
        (benchmark_theverge):
        (benchmark_theverge_memory_warning):
        * MallocBench/MallocBench/theverge.h: Added.
        * MallocBench/MallocBench/theverge.ops: Added.
        * MallocBench/MallocBench/theverge_memory_warning.ops: Added.

2014-04-13  Geoffrey Garen  <ggaren@apple.com>

        MallocBench record/replay should support realloc
        https://bugs.webkit.org/show_bug.cgi?id=131598

        Reviewed by Ryosuke Niwa.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Fixed some linkage
        issues that caused us not to fully link to system malloc in the default
        case. Also marked mbmalloc.dylib as required so the error message will
        be clearer if we mess up.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::run):
        * MallocBench/MallocBench/Interpreter.h: Added the realloc case, and
        upgraded one-letter names to full words.

2014-04-11  Dirk Schulze  <krit@webkit.org>

        Optimize Canvas fill and drawImage with SourceIn, DestinationIn, SourceOut, and DestinationAtop using transparencyLayer.
        https://bugs.webkit.org/show_bug.cgi?id=79659

        Reviewed by Andreas Kling.

        Add performance tests for real this time.

        * Canvas/compositing-drawimage.html: Added.
        * Canvas/compositing-fillRect.html: Added.


2014-04-11  Dirk Schulze  <krit@webkit.org>

        Optimize Canvas fill and drawImage with SourceIn, DestinationIn, SourceOut, and DestinationAtop using transparencyLayer.
        https://bugs.webkit.org/show_bug.cgi?id=79659

        Reviewed by Andreas Kling.

        Add performance tests for fillRect() and drawImage() on composited contexts.

        * Canvas/compositing-drawimage.html: Added.
        * Canvas/compositing-fillRect.html: Added.

2014-04-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add no shapes version of RegionsShapes performance test
        https://bugs.webkit.org/show_bug.cgi?id=131455

        Reviewed by Ryosuke Niwa.

        This is a no shapes version of the RegionsShapes performance test. All the content
        will wrap around the floating containers. This way we can compare the runtime/memory
        usage of the RegionsShapes test with/without shapes. The test is skipped by default.

        * Layout/Shapes/RegionsShapesNoShapes.html: Added.
        * Layout/Shapes/resources/RegionsShapesContentNoShapes.html: Added.

2014-04-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add no regions version of RegionsShapes performance test
        https://bugs.webkit.org/show_bug.cgi?id=131442

        Reviewed by Ryosuke Niwa.

        We would like have a no regions version for RegionsShapes performance test. The new
        test produces similar layout to RegionsShapes.html without using regions. It is helpful
        for us to do further comparisons when necessary. This test is skipped by default.

        * Layout/Shapes/RegionsShapesNoRegions.html: Added.
        * Layout/Shapes/resources/RegionsShapes.css: Added.
        (html, body):
        (.shape):
        (#circleShape):
        (#imageShape):
        (#insetShape):
        (#roundedInsetShape):
        (#triangleLeft):
        (#triangleRight):
        (#selfIntersectingStar):
        (#region1):
        (#region2):
        (#region3):
        * Layout/Shapes/resources/RegionsShapesContent.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth400.html: Added.
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth600.html: Added.
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth800.html: Added.

2014-04-02  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed.

        Try to ignore some Xcode shmutz in MallocBench.

        * MallocBench/MallocBench.xcodeproj: Added property svn:ignore.

2014-04-02  Geoffrey Garen  <ggaren@apple.com>

        Let's benchmark malloc
        https://bugs.webkit.org/show_bug.cgi?id=131118

        Reviewed by Mark Hahnenberg.

        I want to replace fastMalloc with something faster (fasterMalloc?).
        I wrote these benchmarks to test / drive development.

        * MallocBench: Added.
        * MallocBench/MallocBench: Added.
        * MallocBench/MallocBench.xcodeproj: Added.
        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Added.
        * MallocBench/MallocBench/Benchmark.cpp: Added.
        (allocateHeap):
        (deallocateHeap):
        (Benchmark::Benchmark):
        (Benchmark::printBenchmarks):
        (Benchmark::runOnce):
        (Benchmark::run):
        (Benchmark::printReport):
        (Benchmark::currentTimeMS):
        (Benchmark::currentMemoryBytes):
        * MallocBench/MallocBench/Benchmark.h: Added.
        (Benchmark::Memory::Memory):
        (Benchmark::Memory::operator-):
        (Benchmark::isValid):
        * MallocBench/MallocBench/CPUCount.cpp: Added.
        (cpuCount):
        * MallocBench/MallocBench/CPUCount.h: Added.
        * MallocBench/MallocBench/CommandLine.cpp: Added.
        (CommandLine::printUsage):
        * MallocBench/MallocBench/CommandLine.h: Added.
        (CommandLine::isValid):
        (CommandLine::benchmarkName):
        (CommandLine::isParallel):
        (CommandLine::heapSize):
        (CommandLine::measureHeap):
        * MallocBench/MallocBench/Interpreter.cpp: Added.
        (Interpreter::Interpreter):
        (Interpreter::~Interpreter):
        (Interpreter::run):
        * MallocBench/MallocBench/Interpreter.h: Added.
        * MallocBench/MallocBench/balloon.cpp: Added.
        (benchmark_balloon):
        * MallocBench/MallocBench/balloon.h: Added.
        * MallocBench/MallocBench/big.cpp: Added.
        (benchmark_big):
        * MallocBench/MallocBench/big.h: Added.
        * MallocBench/MallocBench/churn.cpp: Added.
        (HeapDouble::operator new):
        (HeapDouble::operator delete):
        (HeapDouble::HeapDouble):
        (HeapDouble::operator+=):
        (benchmark_churn):
        * MallocBench/MallocBench/churn.h: Added.
        * MallocBench/MallocBench/crash.ops: Added.
        * MallocBench/MallocBench/facebook.cpp: Added.
        (benchmark_facebook):
        * MallocBench/MallocBench/facebook.h: Added.
        * MallocBench/MallocBench/facebook.ops: Added.
        * MallocBench/MallocBench/fragment.cpp: Added.
        (validate):
        (benchmark_fragment):
        (benchmark_fragment_iterate):
        * MallocBench/MallocBench/fragment.h: Added.
        * MallocBench/MallocBench/list.cpp: Added.
        (benchmark_list_allocate):
        (benchmark_list_traverse):
        * MallocBench/MallocBench/list.h: Added.
        * MallocBench/MallocBench/main.cpp: Added.
        (main):
        * MallocBench/MallocBench/mbmalloc.cpp: Added.
        * MallocBench/MallocBench/mbmalloc.h: Added.
        * MallocBench/MallocBench/medium.cpp: Added.
        (benchmark_medium):
        * MallocBench/MallocBench/medium.h: Added.
        * MallocBench/MallocBench/message.cpp: Added.
        (benchmark_message_one):
        (benchmark_message_many):
        * MallocBench/MallocBench/message.h: Added.
        * MallocBench/MallocBench/realloc.cpp: Added.
        (benchmark_realloc):
        * MallocBench/MallocBench/realloc.h: Added.
        * MallocBench/MallocBench/tree.cpp: Added.
        (benchmark_tree_allocate):
        (benchmark_tree_traverse):
        (benchmark_tree_churn):
        * MallocBench/MallocBench/tree.h: Added.
        * MallocBench/run-malloc-benchmarks: Added.

2014-03-29  Mark Lam  <mark.lam@apple.com>

        LongSpider 3d-morph result check is inappropriate.
        <https://webkit.org/b/130928>

        Reviewed by Filip Pizlo.

        The LongSpider 3d-morph component expected result check is incorrect.
        The existing test checks if the leading digit of a sum starts with "-1".
        However, it turned out that the expected sum is in the order of
        -1.8735013540549517e-16 (i.e. very close to 0).  With small errors in
        the terms of the sum adding up, it is very easy for the resultant sum
        to fluctuate.  There is no guarantee that the resultant sum's most
        significant digit will start with -1 either.

        The fix is to do a tolerance check on all the terms of the sum as well
        as the total sum value instead.  The tolerance should be more lenient
        for the sum which accumulates error from the individual terms, then for
        individual terms.

        * LongSpider/3d-morph.js:
        (expect):

2014-03-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance tests for Shapes with Regions
        https://bugs.webkit.org/show_bug.cgi?id=129624

        Reviewed by Ryosuke Niwa.

        This tests introduces a real-life like page, which contains different types of shapes within
        shape-outsides. The content flows through regions, which use media queries. The performance test
        loads the actual Shapes-Regions test case into iframes with different page sizes (thus the layout
        triggers the media queries as well), and measures its load time.

        * Layout/RegionsShapes.html: Added.
        * Layout/Shapes/resources/RegionsShapesContent.html: Added.

2014-03-20  Zoltan Horvath  <zoltan@webkit.org>

        Add option for hiding Confidence Interval Delta on the performance tests results page
        https://bugs.webkit.org/show_bug.cgi?id=130483

        Reviewed by Ryosuke Niwa.

        I've found it useful to hide the confidence interval delta from the results table
        sometimes, for example on copying data, or for a clearer look. This patch introduces
        a new button for it on the local results page.

        * resources/results-template.html:

2014-03-20  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Optimize RenderTable::colToEffCol() for tables without colspans
        https://bugs.webkit.org/show_bug.cgi?id=129298

        Reviewed by Simon Fraser.

        Create an alternative fast path to RenderTable colToEffCol() and effColToCol()
        when there is no colspan or colspan does not exceed the width of table.
        Blink merge https://codereview.chromium.org/154243002 by rhogan

        * Layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html: Added.
        * Layout/large-table-with-collapsed-borders-and-colspans.html: Added.
        * Layout/large-table-with-collapsed-borders-and-no-colspans.html: Added.
        * Layout/resources/large-table-with-collapsed-borders.css: Added.
        * Layout/resources/large-table-with-collapsed-borders.js: Added.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>

        Reviewed by Simon Fraser.

        * Dromaeo/resources/dromaeo/web/tests/sunspider-3d-raytrace.html:
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-bitwise-and.html:
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-cordic.html:
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-tagcloud.html:
        * LongSpider/3d-morph.js:
        * LongSpider/3d-raytrace.js:
        * LongSpider/math-cordic.js:
        * LongSpider/string-tagcloud.js:
        * Parser/resources/html5-8266.html:
        * Parser/resources/html5.html:

2014-03-10  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance tests for SVG shape with shape-margin
        https://bugs.webkit.org/show_bug.cgi?id=129930

        Reviewed by Ryosuke Niwa.

        The test is skipped by default.

        * Layout/Shapes/ShapeOutsideSVGWithMargin.html: Added.
        * Layout/Shapes/resources/shape.svg: Added.

2014-02-19  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for stacked floats with shape-outsides
        https://bugs.webkit.org/show_bug.cgi?id=128821

        Reviewed by Brent Fulgham.

        This tests generate stacked floats content with shape-outsides.
        The test is skipped by default.

        * Layout/Shapes/ShapeOutsideStackedPolygons.html: Added.

2014-02-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for raster shape with shape-margin
        https://bugs.webkit.org/show_bug.cgi?id=128770

        Reviewed by Ryosuke Niwa.

        This patch introduces a new performance test for image valued shapes,
        where shape-margin is applied on the shape.
        The test is skipped by default.

        * Layout/Shapes/ShapeOutsideRasterWithMargin.html: Added.

2014-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        Improve the appearance of DYEBench
        https://bugs.webkit.org/show_bug.cgi?id=128866

        Reviewed by Antti Koivisto.

        Add a div that shows progress during the test. Also show 95th percentile,
        and use a table instead of pre to show results.

        * DoYouEvenBench/Full.html:
        (.addResult): Added. Shows results in a table.
        (benchmarkClient.willRunTest): Added to show the progress bar.
        (benchmarkClient.didRunTest):
        (benchmarkClient.didRunSuites):
        (benchmarkClient.didFinishLastIteration): Compute 95th percentile using Statistics.js

        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame): Fix the bug where marginLeft and marginTop
        weren't correctly parsed. We were treating top as left and bottom as top somehow.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Fixed a typo.

2014-02-13  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for complex polygon with shape-margin
        https://bugs.webkit.org/show_bug.cgi?id=128769

        Reviewed by Ryosuke Niwa.

        This patch modifies the logic of createShapeOutsideTest to accept multiple
        CSS properties from the test. The patch adds performance test for complex
        polygon shape (self intersecting at multiple places) case, moreover we
        apply shape-margin on the polygon also.

        * Layout/Shapes/ShapeOutsideContentBox.html:
        * Layout/Shapes/ShapeOutsideInset.html:
        * Layout/Shapes/ShapeOutsidePolygonWithMargin.html: Added.
        * Layout/Shapes/ShapeOutsideRaster.html:
        * Layout/Shapes/ShapeOutsideSimplePolygon.html:
        * Layout/Shapes/resources/shapes.js:

2014-02-13  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for raster shape
        https://bugs.webkit.org/show_bug.cgi?id=128746

        Reviewed by Ryosuke Niwa.

        This patch adds performance testing for image valued shape-outside.
        The test is skipped by default for now.

        * Layout/Shapes/ShapeOutsideRaster.html: Added.
        * Layout/Shapes/resources/shape.gif: Added.

2014-02-10  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add initial performance tests for polygon shape
        https://bugs.webkit.org/show_bug.cgi?id=128554

        Reviewed by Ryosuke Niwa.

        This patch adds performance testing for simple polygon shape-outside.
        The Shapes performance tests directory is skipped by default.

        * Layout/Shapes/ShapeOutsideSimplePolygon.html: Added.

2014-02-07  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add initial performance tests for inset shape
        https://bugs.webkit.org/show_bug.cgi?id=128378

        Reviewed by Ryosuke Niwa.

        * Layout/Shapes/ShapeOutsideContentBox.html: Move js to shapes.js.
        * Layout/Shapes/ShapeOutsideInset.html: Added.
        * Layout/Shapes/resources/shapes.js: Added.
        (.):

2014-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        Undelete the "build" directory erroneously removed in r163427.

        * DoYouEvenBench/resources/todomvc/labs/architecture-examples/react/bower_components/director/build:

2014-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the change made in r162216 as it broke the benchmark on shipping Safari.

        * DoYouEvenBench/resources/benchmark-runner.js:

2014-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Update Ember.js test case
        https://bugs.webkit.org/show_bug.cgi?id=128227

        Reviewed by Benjamin Poulain.

        Updated the Ember.js TodoMVC implementation.

        * DoYouEvenBench/resources/tests.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower.json:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember-data/ember-data.js: Added.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter/localstorage_adapter.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/jquery/jquery.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/index.html:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/app.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/controllers/todo_controller.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/controllers/todos_controller.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/helpers/pluralize.js: Added.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/libs/ember-data.js: Removed.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/models/store.js: Removed.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/models/todo.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/router.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/views/edit_todo_view.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/views/todos_view.js: Added.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/readme.md:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/test.html:

2014-02-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add initial performance test for shape-outside: content-box
        https://bugs.webkit.org/show_bug.cgi?id=128190

        Reviewed by Ryosuke Niwa.

        I've introduced Shapes subdirectory in Layout, every CSS Shapes related performance tests should
        go there in the future. The initial performance tests uses 'shape-outside: content-box' in order
        to tests the code paths of the Shapes implementation. I also introduced shapes.js, which allows us
        to easily add new, simple performance tests for shape-outside.

        The entire progress is tracked under #128188 meta bug.

        * Layout/Shapes/ShapeOutsideContentBox.html: Added.
        * Layout/Shapes/resources/shapes.css: Added.
        * Layout/Shapes/resources/shapes.js: Added.
        * Skipped: We skip running the tests by default for now.

2014-01-17  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Minor fixes in regions performance tests
        https://bugs.webkit.org/show_bug.cgi?id=127041

        Reviewed by Ryosuke Niwa.

        Fix minor issues in CSS Regions performance tests.

        * Layout/RegionsAuto.html: Change type to lower case.
        * Layout/RegionsAutoMaxHeight.html: Ditto.
        * Layout/RegionsFixed.html: Ditto.
        * Layout/RegionsFixedShort.html: Ditto.
        * Layout/RegionsSelection.html: Ditto. Move test methods from regions.js.
        * Layout/resources/regions.js: Remove moved methods.

2014-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        Host DoYouEvenBench on webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=127185

        Reviewed by Benjamin Poulain.

        Compute the resources directory relative to the benchmark-runner's location
        so that we can load tests even if the runner HTML was located elsewhere.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkState._containingDirectory):

2014-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Move flightjs-example-app and todomvc into resources
        https://bugs.webkit.org/show_bug.cgi?id=127183

        Rubber-stamped by Anders Carlsson.

        * DoYouEvenBench/InteractiveRunner.html: Copied from PerformanceTests/DoYouEvenBench/benchmark.html.
        * DoYouEvenBench/benchmark.html: Removed.
        * DoYouEvenBench/flightjs-example-app: Removed.
        * DoYouEvenBench/flightjs-example-app/LICENSE.md: Removed.
        * DoYouEvenBench/flightjs-example-app/README.md: Removed.
        * DoYouEvenBench/flightjs-example-app/app: Removed.
        * DoYouEvenBench/flightjs-example-app/app/boot: Removed.
        * DoYouEvenBench/flightjs-example-app/app/boot/page.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data/compose_box.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data/mail_items.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data/move_to.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/compose_box.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/folders.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_controls.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_items.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/move_to_selector.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/with_select.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/css: Removed.
        * DoYouEvenBench/flightjs-example-app/app/css/custom.css: Removed.
        * DoYouEvenBench/flightjs-example-app/app/data.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/templates.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.min.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.min.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings-white.png: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings.png: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/.gitignore: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CHANGES: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CONTRIBUTORS.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/LICENSE: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/README.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/component.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/package.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-kill.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-matchers.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/index.html: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine-html.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine_favicon.png: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/json2.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-array.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-date.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-function.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-object.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-string.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/.travis.yml: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/advice.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/component.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/compose.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/index.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/logger.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/registry.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/utils.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug/debug.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/LICENSE.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/README.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/bower.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib/jasmine-flight.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib/jasmine-jquery.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/component.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/composer.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/mustache: Removed.
        * DoYouEvenBench/flightjs-example-app/components/mustache/mustache.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/requirejs: Removed.
        * DoYouEvenBench/flightjs-example-app/components/requirejs/require.js: Removed.
        * DoYouEvenBench/flightjs-example-app/index.html: Removed.
        * DoYouEvenBench/flightjs-example-app/karma.conf.js: Removed.
        * DoYouEvenBench/flightjs-example-app/package.json: Removed.
        * DoYouEvenBench/flightjs-example-app/requireMain.js: Removed.
        * DoYouEvenBench/resources/benchmark-runner.js:
        * DoYouEvenBench/resources/flightjs-example-app: Copied from PerformanceTests/DoYouEvenBench/flightjs-example-app.
        * DoYouEvenBench/resources/todomvc: Copied from PerformanceTests/DoYouEvenBench/todomvc.
        * DoYouEvenBench/todomvc: Removed.
        * DoYouEvenBench/todomvc/architecture-examples: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks/angular-mocks.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular/angular.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers/todoCtrl.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoBlur.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoEscape.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoFocus.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services/todoStorage.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config/testacular.conf.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/package.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/directivesSpec.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/todoCtrlSpec.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage/backbone.localStorage.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone/backbone.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery/jquery.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore/underscore.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections/todos.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models/todo.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers/router.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/app-view.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/todo-view.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter/localstorage_adapter.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery/jquery.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todo_controller.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todos_controller.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs/ember-data.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/store.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/todo.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/router.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views/edit_todo_view.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/test.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars/handlebars.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery/jquery.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css/app.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/readme.md: Removed.
        * DoYouEvenBench/todomvc/labs: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower.json: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/LICENSE: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/README.md: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.min.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/ender.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/JSXTransformer.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/bower.json: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.min.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/index.html: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/app.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/footer.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/todoItem.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/utils.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/readme.md: Removed.
        * DoYouEvenBench/todomvc/license.md: Removed.
        * DoYouEvenBench/todomvc/readme.md: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower.json: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/index.html: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/app.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/controller.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/helpers.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/model.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/store.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/view.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/readme.md: Removed.
        * Skipped:

2014-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Skip HTML files that are not tests.

        * Skipped:

2014-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Automate DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=124497

        Reviewed by Geoffrey Garen.

        Enable DoYouEvenBench/Full.html on perf bots by default.

        Put a space between the time and ms, and fixed a typo in runner.js so that the aggregator name will be reported.

        * DoYouEvenBench/Full.html:
        * Skipped:
        * resources/runner.js:

2014-01-15  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Add performance tests for selection with mixed content
        https://bugs.webkit.org/show_bug.cgi?id=126427

        Reviewed by Ryosuke Niwa.

        Add new performance tests for selection in CSS Regions mixing regular
        content with regions. 2 new tests are added, one checking select all
        command and another simulating a user selection passing through all the
        paragraphs (similar to Layout/RegionsSelection.html).

        Test are skipped for now while implementation of selection in CSS
        Regions is still evolving.

        * Layout/RegionsExtendingSelectionMixedContent.html: Added.
        * Layout/RegionsSelectAllMixedContent.html: Added.
        * Layout/resources/regions.css:
        (.regular):
        * Layout/resources/regions.js:
        * Skipped:

2014-01-14  Ryosuke Niwa  <rniwa@webkit.org>

        Make DoYouEvenBench runnable by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=127030

        Reviewed by Andreas Kling.

        Added Full.html that runs 5 iterations of DoYouEvenBench. This is the canonical DoYouEvenBench,
        which is also runnable by run-perf-tests.

        * DoYouEvenBench/Full.html: Added.

        * DoYouEvenBench/benchmark.html:
        (startTest): Updated the code to account for the fact old measuredValues is pushed down to tests
        property and we now have total property so that we don't have to manually compute the total.

        * DoYouEvenBench/resources/benchmark-report.js: Added. When we're inside a DRT/WTR, use
        PerfTestRunner to output that can be parsed by run-perf-tests. Do the same when the query part
        or the fragment part of the current URL is "webkit" for debugging purposes.

        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner):
        (BenchmarkRunner.prototype._appendFrame): Position the frame at (0, 0) inside DRT and WTR since
        we have exactly 800px by 600px inside those two test runners. Also always insert the iframe as
        the first child of body to avoid inserting it after the pre inserted by the test runner.
        (BenchmarkRunner.prototype.step): Initializes _measuredValues.
        (BenchmarkRunner.prototype.runAllSteps): Merged callNextStep in benchmark.html.
        (BenchmarkRunner.prototype.runMultipleIterations): Added.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Compute the grand total among suites.
        Also push down the sync and async time into tests property for consistency.
        (BenchmarkRunner.prototype._finalize):

        * Dromaeo/resources/dromaeorunner.js:
        (DRT.testObject): Renamed dromaeoIterationCount to customIterationCount as this option is also
        used by DoYouEvenBench.

        * resources/runner.js: Ditto.
        (.finish): Spit out the aggregator name.

2014-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Turn BenchmarkRunner into a real class
        https://bugs.webkit.org/show_bug.cgi?id=126613

        Reviewed by Stephanie Lewis.

        Made BenchmarkRunner an instantiatable class. Made tests.js simply create an array of suite objects
        instead of calling BenchmarkRunner.Suite now that we can have mulitple instances of BenchmarkRunner.

        * DoYouEvenBench/benchmark.html:
        (formatTestName): Moved and renamed from BenchmarkRunner._testName.
        (createUIForSuites): Extracted from a giant blob of code.
        (startTest): Ditto.
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner): Added.
        (BenchmarkRunner.prototype.waitForElement):
        (BenchmarkRunner.prototype._removeFrame):
        (BenchmarkRunner.prototype._appendFrame):
        (BenchmarkRunner.prototype._waitAndWarmUp):
        (BenchmarkRunner.prototype._runTest):
        (BenchmarkState.prototype.prepareCurrentSuite):
        (BenchmarkRunner.prototype.step):
        (BenchmarkRunner.prototype._runTestAndRecordResults):
        (BenchmarkRunner.prototype._finalize):
        * DoYouEvenBench/resources/tests.js:

2014-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Extract tests and runner code from benchmark.js/html
        https://bugs.webkit.org/show_bug.cgi?id=126596

        Reviewed by Stephanie Lewis.

        Extracted benchmark-runner.js and tests.js out of benchmark.js and benchmark.html.

        Added a "client" interface to BenchmarkRunner so that benchmark.html could register necessary hooks to
        update its UI. Also made BenchmarkRunner store a tree of results so that the serialization of test names
        could be isolated from BenchmarkRunner itself in the future.

        * DoYouEvenBench/benchmark.html:
        Moved the code to instantiate and update UI here from benchmark.js. The test code was moved out of this
        file into resources/tests.js.

        * DoYouEvenBench/resources/benchmark-runner.js: Renamed from PerformanceTests/DoYouEvenBench/benchmark.js.
        (SimplePromise): Moved from benchmark.js
        (SimplePromise.prototype.then): Ditto.
        (SimplePromise.prototype.resolve): Ditto.
        (BenchmarkTestStep): Added. Wraps each test step.
        (BenchmarkRunner.suite): Moved from benchmark.js.
        (BenchmarkRunner.setClient): Added.
        (BenchmarkRunner.waitForElement): Moved.
        (BenchmarkRunner._removeFrame): Ditto.
        (BenchmarkRunner._appendFrame): Ditto. Set the width and the height of the iframe as they're more than
        presentational as they affect performance.
        (BenchmarkRunner._waitAndWarmUp): Ditto.
        (BenchmarkRunner._runTest): Ditto.
        (BenchmarkRunner._testName): Ditto.
        (BenchmarkState): Ditto.
        (BenchmarkState.prototype.currentSuite): Ditto.
        (BenchmarkState.prototype.currentTest): Ditto.
        (BenchmarkState.prototype.next): Ditto.
        (BenchmarkState.prototype.isFirstTest): Ditto.
        (BenchmarkState.prototype.prepareCurrentSuite): Ditto.
        (BenchmarkRunner.step): Ditto.
        (BenchmarkRunner._runTestAndRecordResults): Ditto. Note the code to update the UI has been move to
        benchmark.html. Also moved the code to accumulate the totals here from _finalize.
        (BenchmarkRunner._finalize): Moved.

        * DoYouEvenBench/resources/tests.js: Copied from PerformanceTests/DoYouEvenBench/benchmark.html.
        Uses BenchmarkTestStep instead of an array for each test step.

2014-01-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test times creating a variety of different sizes of canvases
        once some have already been created. The second creation of the
        canvases should re-use the existing IOSurfaces.

        * Canvas/reuse.html: Added.

2013-12-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160945.
        http://trac.webkit.org/changeset/160945
        https://bugs.webkit.org/show_bug.cgi?id=126164

        Seems to have broken multiple canvas tests (Requested by ap on
        #webkit).

        * Canvas/reuse.html: Removed.

2013-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test times creating a variety of different sizes of canvases
        once some have already been created. The second creation of the
        canvases should re-use the existing IOSurfaces.

        * Canvas/reuse.html: Added.

2013-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: 2x regression on Dromaeo DOM query tests
        https://bugs.webkit.org/show_bug.cgi?id=125377

        Reviewed by Filip Pizlo.

        Added a micro-benchmark for updating a named property on document.

        * Bindings/update-name-getter.html: Added.
        * Skipped:

2013-12-03  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Fix Layout/RegionsSelection.html in Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=124963

        Reviewed by Ryosuke Niwa.

        Layout/RegionsSelection.html introduced in r159488 was not working in
        Mac platform because of it was trying to use mouse events out of the
        window dimensions. Use collapse() and extend() methods from Selection
        object to solve the issue.

        * Layout/resources/regions.js: Use collapse() and extend() instead of
        mouse events.

2013-11-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r159805.

        * resources/runner.js:

2013-11-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support grid-definition-{rows|columns} repeat() syntax
        https://bugs.webkit.org/show_bug.cgi?id=103312

        Reviewed by Andreas Kling.

        Use the repeat() syntax to build the huge grids used by the
        performance tests.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Record subtest values in Dromaeo tests
        https://bugs.webkit.org/show_bug.cgi?id=124498

        Reviewed by Andreas Kling.

        Made Dromaeo's test runner report values in DRT.progress via newly added PerfTestRunner.reportValues.

        * Dromaeo/resources/dromaeorunner.js:
        (.): Moved the definition out of DRT.setup.
        (DRT.setup): Ditto.
        (DRT.testObject): Extracted from DRT.setup. Set the subtest name and continueTesting.
        continueTesting is set true for subtests; i.e. when name is specified.
        (DRT.progress): Call PerfTestRunner.reportValues to report subtest results.
        (DRT.teardown): Call PerfTestRunner.reportValues instead of measureValueAsync.

        * resources/runner.js: Made various changes for newly added PerfTestRunner.reportValues.
        (.): Moved the initialization of completedIterations, results, jsHeapResults, and mallocHeapResults into
        start since they need to be initialized before running each subtest. Initialize logLines here since we
        need to use the same logger for all subtests.
        (.start): Initialize the variables mentioned above here. Also respect doNotLogStart used by reportValues.
        (ignoreWarmUpAndLog): Added doNotLogProgress. Used by reportValues since it reports all values at once.
        (finish): Compute the metric name such as FrameFrame and Runs from unit. Also don't log or notify done
        when continueTesting is set on the test object.
        (PerfTestRunner.reportValues): Added. Reports all values for the main/sub test.

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Remove replay performance tests as it's not actively maintained
        https://bugs.webkit.org/show_bug.cgi?id=124764

        Reviewed by Andreas Kling.

        Removed the replay performance tests. We can add them back when time comes.

        * Replay/Chinese/chinaz.com.replay: Removed.
        * Replay/Chinese/www.163.com.replay: Removed.
        * Replay/Chinese/www.alipay.com.replay: Removed.
        * Replay/Chinese/www.baidu.com.replay: Removed.
        * Replay/Chinese/www.csdn.net.replay: Removed.
        * Replay/Chinese/www.douban.com.replay: Removed.
        * Replay/Chinese/www.hao123.com.replay: Removed.
        * Replay/Chinese/www.xinhuanet.com.replay: Removed.
        * Replay/Chinese/www.xunlei.com.replay: Removed.
        * Replay/Chinese/www.youku.com.replay: Removed.
        * Replay/English/beatonna.livejournal.com.replay: Removed.
        * Replay/English/cakewrecks.blogspot.com.replay: Removed.
        * Replay/English/chemistry.about.com.replay: Removed.
        * Replay/English/digg.com.replay: Removed.
        * Replay/English/en.wikipedia.org-rorschach_test.replay: Removed.
        * Replay/English/icanhascheezburger.com.replay: Removed.
        * Replay/English/imgur.com-gallery.replay: Removed.
        * Replay/English/online.wsj.com.replay: Removed.
        * Replay/English/stockoverflow.com-best-comment.replay: Removed.
        * Replay/English/www.alibaba.com.replay: Removed.
        * Replay/English/www.amazon.com-kindle.replay: Removed.
        * Replay/English/www.apple.com.replay: Removed.
        * Replay/English/www.cnet.com.replay: Removed.
        * Replay/English/www.dailymotion.com.replay: Removed.
        * Replay/English/www.ehow.com-prevent-fire.replay: Removed.
        * Replay/English/www.filestube.com-amy-adams.replay: Removed.
        * Replay/English/www.foxnews.replay: Removed.
        * Replay/English/www.huffingtonpost.com.replay: Removed.
        * Replay/English/www.imdb.com-twilight.replay: Removed.
        * Replay/English/www.mozilla.com-all-order.replay: Removed.
        * Replay/English/www.php.net.replay: Removed.
        * Replay/English/www.reddit.com.replay: Removed.
        * Replay/English/www.telegraph.co.uk.replay: Removed.
        * Replay/English/www.w3.org-htmlcss.replay: Removed.
        * Replay/English/www.w3schools.com-html.replay: Removed.
        * Replay/English/www.youtube.com-music.replay: Removed.
        * Replay/French/www.orange.fr.replay: Removed.
        * Replay/Italian/www.repubblica.it.replay: Removed.
        * Replay/Japanese/2ch.net-newsplus.replay: Removed.
        * Replay/Japanese/entameblog.seesaa.net.replay: Removed.
        * Replay/Japanese/ja.wikipedia.org.replay: Removed.
        * Replay/Japanese/www.hatena.ne.jp.replay: Removed.
        * Replay/Japanese/www.livedoor.com.replay: Removed.
        * Replay/Japanese/www.nicovideo.jp.replay: Removed.
        * Replay/Japanese/www.rakuten.co.jp.replay: Removed.
        * Replay/Japanese/www.yahoo.co.jp.replay: Removed.
        * Replay/Korean/www.naver.com.replay: Removed.
        * Replay/Persian/blogfa.com.replay: Removed.
        * Replay/Polish/www.wp.pl.replay: Removed.
        * Replay/Portuguese/www.uol.com.br.replay: Removed.
        * Replay/Russian/lenta.ru.replay: Removed.
        * Replay/Russian/vkontakte.ru-help.replay: Removed.
        * Replay/Russian/www.ixbt.com.replay: Removed.
        * Replay/Russian/www.kp.ru.replay: Removed.
        * Replay/Russian/www.liveinternet.ru.replay: Removed.
        * Replay/Russian/www.pravda.ru.replay: Removed.
        * Replay/Russian/www.rambler.ru.replay: Removed.
        * Replay/Russian/www.ucoz.ru.replay: Removed.
        * Replay/Russian/www.yandex.ru.replay: Removed.
        * Replay/Spanish/www.taringa.net.replay: Removed.
        * Replay/Swedish/www.flashback.se.replay: Removed.
        * Replay/Swedish/www.tradera.com.replay: Removed.
        * Replay/www.google.com.replay: Removed.
        * Replay/www.techcrunch.com.replay: Removed.
        * Replay/www.youtube.com.replay: Removed.

2013-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Layout Test editing/deleting/password-delete-performance.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=124781

        Reviewed by Alexey Proskuryakov.

        Add a new performance test to replace editing/deleting/password-delete-performance.html.
        We skip this test by default since it's a micro benchmark.

        * Interactive/DeletingInPasswordField.html: Added.
        * Skipped:

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Improve content-sized track layout
        https://bugs.webkit.org/show_bug.cgi?id=124408

        Reviewed by Dean Jackson.

        From Blink r156122 by <jchaffraix@chromium.org>

        New test to check the performance of layouting grids with content sized tracks.

        * Layout/auto-grid-lots-of-data.html: Added.

2013-11-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Run the content-sized tracks sizing algorithm only when required
        https://bugs.webkit.org/show_bug.cgi?id=124039

        Reviewed by Dean Jackson.

        From Blink r156028 and r156168 by <jchaffraix@chromium.org>.

        New performance tests for layouts in grids with fixed size tracks.

        * Layout/fixed-grid-lots-of-data.html: Added.

2013-11-19  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Add performance test for selection
        https://bugs.webkit.org/show_bug.cgi?id=119230

        Reviewed by Ryosuke Niwa.

        Add new performance test for selection in CSS Regions. It checks a
        selection from the first region to the last one, passing through all the
        regions.

        Test is skipped for now while implementation of selection in CSS Regions
        is still evolving.

        * Layout/RegionsSelection.html: Added.
        * Layout/resources/regions.js:
        (.):
        * Skipped:

2013-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify and reformat the output of performance tests inside test runners
        https://bugs.webkit.org/show_bug.cgi?id=124496

        Reviewed by Antti Koivisto.

        As a preparation to support subtests for Dromaeo and DoYouEvenBench, simplify the output performance tests generate.
        Also modernize the output to better support "metric" concept we introduced a while ago.

        New output on Dromaeo/dom-attr looks like this:
        -----------------------------------------------
        Running 5 times
        getAttribute -> [1105, 1108, 1134, 1137, 1154]
        element.property -> [1634, 1655, 1685, 1696, 1723]
        setAttribute -> [646.3536463536464, 651, 651, 656.3436563436563, 658]
        element.property = value -> [934, 949, 963, 964, 974]
        element.expando = value -> [419, 419.5804195804196, 421.57842157842157, 425.57442557442556, 429]
        element.expando -> [501, 517, 519.4805194805194, 521.4785214785214, 525]

            1: 117.40644785571585 runs/s
            2: 118.84720469666297 runs/s
            3: 119.80547640905021 runs/s
            4: 120.51886194758805 runs/s
            5: 121.51924380569295 runs/s

        :Time -> [117.40644785571585, 118.84720469666297, 119.80547640905021, 120.51886194758805, 121.51924380569295] runs/s
            mean: 119.619446942942 runs/s
            median: 119.80547640905021 runs/s
            stdev: 1.5769040458730506 runs/s
            min: 117.40644785571585 runs/s
            max: 121.51924380569295 runs/s
        -----------------------------------------------

        * Dromaeo/resources/dromaeorunner.js:
        (DRT.progress): Use the new format for subtest reports.
        * resources/runner.js:
        (.): Declare verboseLogging, which is set to true outside of test runners.
        (PerfTestRunner.logInfo): Use verboseLogging instead of directly checking window.testRunner.
        (PerfTestRunner.logDetail): Added. Logs informative text with a label such as "mean: 123 s" with 4-space indentation.
        (PerfTestRunner.logStatistics): Use logDetail.
        (.start): Initialize verboseLogging. Also log "Running 20 times" as an informative log using logDetail.
        (.ignoreWarmUpAndLog): Use logDetail for showing the progress. These logs were useless inside test runners anyway
        because perftest didn't get to see any output until the test finished running.
        (.finish): Call logStatistics with metric name as opposed to a label. Each metric name is now prefixed with ':' to be
        distinguishable from subtests, making the new format forward compatible.

2013-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        [Performance tests] Interactive/SelectAll.html throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=124495

        Reviewed by Antti Koivisto

        Return a boolean indicating whether more values are needed or not in
        PerfTestRunner.measureValueAsync so that runTest can terminate gracefully.

        * Interactive/SelectAll.html:
        (runTest): Don't schedule a timer for runTest if we've got enough values.
        * resources/runner.js:
        (PerfTestRunner.measureValueAsync): Returns true iff more values are needed.

2013-11-13  Antti Koivisto  <antti@apple.com>

        This was supposed to test overflow-wrap:break-word instead of word-break:break-all.

        Rubber-stamped by Andreas Kling.

        * Layout/line-layout-simple.html:

2013-11-12  Andreas Kling  <akling@apple.com>

        Remove body onload handler from html5-8266.html that was causing
        the test to sometimes finish before doing anything interesting.

        Unskip Parser/HTML5-8266-FullRender.html now that it's stable.

        Rubber-stamped by Antti Koivisto.

        * Parser/resources/html5-8266.html:
        * Skipped:

2013-11-12  Andreas Kling  <akling@apple.com>

        Neutralize external resource loads in the new HTML5 spec copy.

        Skip Parser/HTML5-8266-FullRender.html until I can make it less flaky.

        * Parser/resources/html5-8266.html:
        * Skipped:

2013-11-12  Andreas Kling  <akling@apple.com>

        Import a fresh version of the full HTML5 spec for perf testing.

        Rubber-stamped by Antti Koivisto.

        * Parser/HTML5-8266-FullRender.html: Added.
        * Parser/HTML5-8266-ParseOnly.html: Added.
        * Parser/resources/html5-8266.html: Added.

2013-11-09  Antti Koivisto  <antti@apple.com>

        Add subtest for word-break:break-all to Layout/line-layout-simple.html
        https://bugs.webkit.org/show_bug.cgi?id=124103

        Reviewed by Andreas Kling.

        * Layout/line-layout-simple.html:

        Combination "white-space:pre-wrap; word-break:break-all" is common for pure text.

2013-11-08  Antti Koivisto  <antti@apple.com>

        Add line layout performance test that exercises more cases
        https://bugs.webkit.org/show_bug.cgi?id=124041

        Reviewed by Anders Carlsson.

        The existing line-layout.html covers the most basic left-aligned case only.
        Add a test with more coverage for things that are mostly not yet supported by the simple
        line layout path:

        - centered text
        - right aligned text
        - justified text
        - pre
        - white-space:pre-wrap
        - text with simple inlines
        - text with br

        * Layout/line-layout-simple.html: Added.

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        From Blink r152960 by <ojan@chromium.org>

        New performance test for layouts in flexboxes.

        * Layout/flexbox-lots-of-data.html: Added.

2013-10-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157916.
        http://trac.webkit.org/changeset/157916
        https://bugs.webkit.org/show_bug.cgi?id=123274

        Broke Layout/flexbox-lots-of-data.html on perfbot (Requested
        by ap on #webkit).

        * Layout/flexbox-lots-of-data.html: Removed.

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        From Blink r152960 by <ojan@chromium.org>

        New performance test for layouts in flexboxes.

        * Layout/flexbox-lots-of-data.html: Added.

2013-10-06  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Make it work on Internet Explorer 11 Release Preview
        https://bugs.webkit.org/show_bug.cgi?id=122406

        Reviewed by Darin Adler.

        On Internet Explorer 11, $(elem).closest('li').data('id') fails to find the containig li of elem once
        the first item is marked complete or deleted until we get back to the event loop in the jQuery/TodoMVC.
        Worked around this limitation by overriding app.getTodo to use each item's id computed in advance.

        Also use $.text instead of execCommand('InsertText') in FlightJS/MailClient since Internet Explorer
        doesn't support execCommand('InsertText'). Also select the recipient to avoid exceptions.

        * DoYouEvenBench/benchmark.html:

2013-10-05  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Add Facebook's React TodoMVC test case
        https://bugs.webkit.org/show_bug.cgi?id=122379

        Reviewed by Andreas Kling.

        Add React/TodoMVC as a new test case. Somehow we beat Firefox on this one as well.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/todomvc/labs: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower.json: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/LICENSE: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/README.md: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.min.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/ender.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/JSXTransformer.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/bower.json: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.min.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/index.html: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/app.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/footer.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/todoItem.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/utils.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/readme.md: Added.

2013-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Add a test case for FlightJS
        https://bugs.webkit.org/show_bug.cgi?id=121926

        Reviewed by Antti Koivisto.

        Add a FlightJS test case.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/benchmark.js:
        * DoYouEvenBench/flightjs-example-app: Added.
        * DoYouEvenBench/flightjs-example-app/LICENSE.md: Added.
        * DoYouEvenBench/flightjs-example-app/README.md: Added.
        * DoYouEvenBench/flightjs-example-app/app: Added.
        * DoYouEvenBench/flightjs-example-app/app/boot: Added.
        * DoYouEvenBench/flightjs-example-app/app/boot/page.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data/compose_box.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data/mail_items.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data/move_to.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/compose_box.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/folders.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_controls.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_items.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/move_to_selector.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/with_select.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/css: Added.
        * DoYouEvenBench/flightjs-example-app/app/css/custom.css: Added.
        * DoYouEvenBench/flightjs-example-app/app/data.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/templates.js: Added.
        * DoYouEvenBench/flightjs-example-app/components: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.min.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.min.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings-white.png: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings.png: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/.gitignore: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CHANGES: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CONTRIBUTORS.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/LICENSE: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/README.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/component.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/package.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-kill.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-matchers.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/index.html: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine-html.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine_favicon.png: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/json2.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-array.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-date.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-function.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-object.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-string.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/.travis.yml: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/advice.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/component.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/compose.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/index.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/logger.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/registry.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/utils.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug/debug.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/LICENSE.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/README.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/bower.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib/jasmine-flight.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib/jasmine-jquery.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/component.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/composer.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/mustache: Added.
        * DoYouEvenBench/flightjs-example-app/components/mustache/mustache.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/requirejs: Added.
        * DoYouEvenBench/flightjs-example-app/components/requirejs/require.js: Added.
        * DoYouEvenBench/flightjs-example-app/index.html: Added.
        * DoYouEvenBench/flightjs-example-app/karma.conf.js: Added.
        * DoYouEvenBench/flightjs-example-app/package.json: Added.
        * DoYouEvenBench/flightjs-example-app/requireMain.js: Added.

2013-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Indentations in benchmark.js and benchmark.html are all messed up
        https://bugs.webkit.org/show_bug.cgi?id=121597

        Reviewed by Anders Carlsson.

        Fixed indentations.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/benchmark.js:
        (SimplePromise.prototype.resolve.else):
        (SimplePromise.prototype.resolve):
        (BenchmarkRunner.waitForElement.resolveIfReady):
        (BenchmarkRunner.waitForElement):
        (BenchmarkRunner._waitAndWarmUp.Fibonacci):
        (BenchmarkRunner._finalize):

2013-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add an AngularJS test to DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=121595

        Reviewed by Antti Koivisto.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/todomvc/architecture-examples/angularjs: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks/angular-mocks.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular/angular.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers/todoCtrl.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoBlur.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoEscape.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoFocus.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services/todoStorage.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config/testacular.conf.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/package.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/directivesSpec.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/todoCtrlSpec.js: Added.

2013-09-17  Ryosuke Niwa  <rniwa@webkit.org>

        Add a not completely unrealistic DOM Benchmark
        https://bugs.webkit.org/show_bug.cgi?id=121361

        Reviewed by Filip Pizlo.

        Add a DOM benchmark based on TodoMVC for vanilla JS, Ember.js, Backbone.js, and jQuery.
        We'll add more frameworks and demo apps as we go.

        * DoYouEvenBench: Added.
        * DoYouEvenBench/benchmark.html: Added.
        * DoYouEvenBench/benchmark.js: Added.
        (SimplePromise):
        (SimplePromise.prototype.then):
        (SimplePromise.prototype.resolve.else):
        (SimplePromise.prototype.resolve):
        (BenchmarkRunner.suite):
        (BenchmarkRunner.waitForElement.resolveIfReady):
        (BenchmarkRunner.waitForElement):
        (BenchmarkRunner._removeFrame):
        (BenchmarkRunner._appendFrame):
        (BenchmarkRunner._waitAndWarmUp.Fibonacci):
        (BenchmarkRunner._testName):
        (BenchmarkRunner._testItemId):
        (BenchmarkRunner.listSuites.button.onclick):
        (BenchmarkRunner.listSuites.callNextStep):
        (BenchmarkRunner.listSuites):
        (BenchmarkState):
        (BenchmarkState.prototype.currentSuite):
        (BenchmarkState.prototype.currentTest):
        (BenchmarkState.prototype.next):
        (BenchmarkState.prototype.isFirstTest):
        (BenchmarkState.prototype.prepareCurrentSuite.frame.onload):
        (BenchmarkRunner.step):
        (BenchmarkRunner._runTestAndRecordResults):
        (BenchmarkRunner._finalize):
        * DoYouEvenBench/todomvc: Added.
        * DoYouEvenBench/todomvc/architecture-examples: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage/backbone.localStorage.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone/backbone.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore/underscore.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections/todos.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models/todo.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers/router.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/app-view.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/todo-view.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter/localstorage_adapter.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todo_controller.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todos_controller.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs/ember-data.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/store.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/todo.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views/edit_todo_view.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/test.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars/handlebars.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css/app.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/readme.md: Added.
        * DoYouEvenBench/todomvc/license.md: Added.
        * DoYouEvenBench/todomvc/readme.md: Added.
        * DoYouEvenBench/todomvc/vanilla-examples: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower.json: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/index.html: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/app.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/controller.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/helpers.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/model.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/store.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/view.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/readme.md: Added.
        * Skipped:

2013-09-04  Filip Pizlo  <fpizlo@apple.com>

        Introduce a version of SunSpider that runs for a really long time (about 1 sec on my machine)

        Rubber stamped by Mark Hahnenberg.

        This isn't meant for serious VM-to-VM performance comparisons, but it is useful
        to see how these benchmarks behave when they're completely warmed up.

        * LongSpider: Added.
        * LongSpider/3d-cube.js: Added.
        (DrawLine):
        (CalcCross):
        (CalcNormal):
        (CreateP):
        (MMulti):
        (VMulti):
        (VMulti2):
        (MAdd):
        (Translate):
        (RotateX):
        (RotateY):
        (RotateZ):
        (DrawQube):
        (Loop):
        (Init):
        * LongSpider/3d-morph.js: Added.
        (loops.3500.nx.120.nz.120.morph):
        * LongSpider/3d-raytrace.js: Added.
        (createVector):
        (sqrLengthVector):
        (lengthVector):
        (addVector):
        (subVector):
        (scaleVector):
        (normaliseVector):
        (add):
        (sub):
        (scalev):
        (dot):
        (scale):
        (cross):
        (normalise):
        (transformMatrix):
        (invertMatrix):
        (Triangle):
        (Triangle.prototype.intersect):
        (Scene):
        (Scene.prototype.intersect):
        (Scene.prototype.blocked):
        (Camera):
        (Camera.prototype.generateRayPair):
        (renderRows):
        (Camera.prototype.render):
        (raytraceScene.floorShader):
        (raytraceScene):
        (arrayToCanvasCommands):
        * LongSpider/access-binary-trees.js: Added.
        (TreeNode):
        (TreeNode.prototype.itemCheck):
        (bottomUpTree):
        * LongSpider/access-fannkuch.js: Added.
        (fannkuch):
        * LongSpider/access-nbody.js: Added.
        (Body):
        (Body.prototype.offsetMomentum):
        (Jupiter):
        (Saturn):
        (Uranus):
        (Neptune):
        (Sun):
        (NBodySystem):
        (NBodySystem.prototype.advance):
        (NBodySystem.prototype.energy):
        * LongSpider/access-nsieve.js: Added.
        (pad):
        (nsieve):
        (sieve):
        * LongSpider/bitops-3bit-bits-in-byte.js: Added.
        (fast3bitlookup):
        (TimeFunc):
        * LongSpider/bitops-bits-in-byte.js: Added.
        (bitsinbyte):
        (TimeFunc):
        * LongSpider/bitops-nsieve-bits.js: Added.
        (pad):
        (primes):
        (sieve):
        * LongSpider/controlflow-recursive.js: Added.
        (ack):
        (fib):
        (tak):
        * LongSpider/crypto-aes.js: Added.
        (Cipher):
        (SubBytes):
        (ShiftRows):
        (MixColumns):
        (AddRoundKey):
        (KeyExpansion):
        (SubWord):
        (RotWord):
        (AESEncryptCtr):
        (AESDecryptCtr):
        (escCtrlChars):
        * LongSpider/crypto-md5.js: Added.
        (hex_md5):
        (b64_md5):
        (str_md5):
        (hex_hmac_md5):
        (b64_hmac_md5):
        (str_hmac_md5):
        (md5_vm_test):
        (core_md5):
        (md5_cmn):
        (md5_ff):
        (md5_gg):
        (md5_hh):
        (md5_ii):
        (core_hmac_md5):
        (safe_add):
        (bit_rol):
        (str2binl):
        (binl2str):
        (binl2hex):
        (binl2b64):
        * LongSpider/crypto-sha1.js: Added.
        (hex_sha1):
        (b64_sha1):
        (str_sha1):
        (hex_hmac_sha1):
        (b64_hmac_sha1):
        (str_hmac_sha1):
        (sha1_vm_test):
        (core_sha1):
        (sha1_ft):
        (sha1_kt):
        (core_hmac_sha1):
        (safe_add):
        (rol):
        (str2binb):
        (binb2str):
        (binb2hex):
        (binb2b64):
        * LongSpider/date-format-tofte.js: Added.
        (arrayExists):
        (.a):
        (.A):
        (.B):
        (.d):
        (.D):
        (.F):
        (.g):
        (.G):
        (.h):
        (.H):
        (.i):
        (.j):
        (.l):
        (.L):
        (.m):
        (.M):
        (.n):
        (.O):
        (.r):
        (.S):
        (.s):
        (.t):
        (.U):
        (.W):
        (.w):
        (.Y):
        (.y):
        (.z):
        (Date.prototype.formatDate):
        * LongSpider/date-format-xparb.js: Added.
        (Date.prototype.dateFormat):
        (Date.createNewFormat):
        (Date.getFormatCode):
        (Date.parseDate):
        (Date.createParser):
        (Date.formatCodeToRegex):
        (Date.prototype.getTimezone):
        (Date.prototype.getGMTOffset):
        (Date.prototype.getDayOfYear):
        (Date.prototype.getWeekOfYear):
        (Date.prototype.isLeapYear):
        (Date.prototype.getFirstDayOfMonth):
        (Date.prototype.getLastDayOfMonth):
        (Date.prototype.getDaysInMonth):
        (Date.prototype.getSuffix):
        (String.escape):
        * LongSpider/math-cordic.js: Added.
        (FIXED):
        (FLOAT):
        (DEG2RAD):
        (cordicsincos):
        (cordic):
        * LongSpider/math-partial-sums.js: Added.
        (partial):
        * LongSpider/math-spectral-norm.js: Added.
        (A):
        (Au):
        (Atu):
        (AtAu):
        (spectralnorm):
        * LongSpider/string-base64.js: Added.
        (toBase64):
        (base64ToString):
        * LongSpider/string-fasta.js: Added.
        (rand):
        (makeCumulative):
        (fastaRepeat):
        (fastaRandom):
        * LongSpider/string-tagcloud.js: Added.
        (.Array.prototype.toJSONString):
        (.Boolean.prototype.toJSONString):
        (.Date.prototype.toJSONString):
        (.Number.prototype.toJSONString):
        (.Object.prototype.toJSONString):
        (.):

2013-06-10  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Rename region-overflow to region-fragment
        https://bugs.webkit.org/show_bug.cgi?id=117397

        Renamed -webkit-region-overflow to -webkit-region-fragment according to the new working draft
        at http://www.w3.org/TR/2013/WD-css3-regions-20130528/#the-region-fragment-property

        Reviewed by Alexander Pavlov.

        * Layout/resources/regions.css:

2013-06-05  Zan Dobersek  <zdobersek@igalia.com>

        Move MemoryInfo under window.internals
        https://bugs.webkit.org/show_bug.cgi?id=117197

        Reviewed by Ryosuke Niwa.

        * resources/runner.js: Remove the setMemoryEnabled call, it's not required anymore as the memory
        info is now accessed through window.internals and doesn't need the setting to be enabled to work.

2013-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: tests in PerformanceTests/inspector/ are timing out
        https://bugs.webkit.org/show_bug.cgi?id=77024

        Reviewed by Andreas Kling.

        These tests have been disabled for ages and don't conform to the standard format.

        * Skipped:
        * inspector: Removed.
        * inspector/console-300-lines.html: Removed.
        * inspector/first-open-elements.html: Removed.
        * inspector/first-open-resources.html: Removed.
        * inspector/first-open-scripts.html.broken: Removed.
        * inspector/heap-snapshot-advanced.html: Removed.
        * inspector/heap-snapshot-performance-test.js: Removed.
        * inspector/heap-snapshot.html: Removed.
        * inspector/inspector-startup-time.html: Removed.
        * inspector/network-append-30-requests.html.broken: Removed.
        * inspector/performance-test.js: Removed.
        * inspector/show-panel.html.broken: Removed.

2013-05-27  Benjamin Poulain  <benjamin@webkit.org>

        Add a balanced benchmark for QuerySelector
        https://bugs.webkit.org/show_bug.cgi?id=116811

        Reviewed by Sam Weinig.

        The goal of this benchmark is to have an overview of querySelector as typically used
        by webpages.

        It uses queries similar to what is used by popular websites and applies somewhat
        similar weighting for each type of query.

        The tree used for the queries is intentionally kept simple to ensure we measure QuerySelector
        a not purely the overhead of traversal.

        * CSS/QuerySelector.html: Added.
        * CSS/resources/query-selector.html: Added.

2013-05-18  Ryosuke Niwa  <rniwa@webkit.org>

        Add a performance test for copying
        https://bugs.webkit.org/show_bug.cgi?id=116394

        Reviewed by Andreas Kling.

        Added. We're going to skip this test by default since it's such a microbenchmark, and also because
        it currently takes 30 minutes to run. As insane as it sounds, each copy takes rouhgly 57 seconds.

        Running Interactive/CopyAll.html (1 of 1)
        RESULT Interactive: CopyAll: Time= 57618.05 ms
        median= 57135.0 ms, stdev= 1542.07271571 ms, min= 55095.0 ms, max= 60913.0 ms
        RESULT Interactive: CopyAll: JSHeap= 102811.2 bytes
        median= 103272.0 bytes, stdev= 1115.28148913 bytes, min= 100648.0 bytes, max= 103504.0 bytes
        RESULT Interactive: CopyAll: Malloc= 446408712.0 bytes
        median= 459156772.0 bytes, stdev= 20007346.3266 bytes, min= 415564040.0 bytes, max= 462011928.0 bytes
        Finished: 1766.883236 s

        * Interactive/CopyAll.html: Added.
        * Skipped:

2013-05-13  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Get rid of native-memory-snapshot in performance test
        https://bugs.webkit.org/show_bug.cgi?id=116013

        Reviewed by Andreas Kling.

        Remove native-memory-snapshot.html from PerformanceTests.

        * inspector/native-memory-snapshot.html: Removed.
        * inspector/performance-test.js:
        (initialize_TimeTracker.Timer):
        (initialize_TimeTracker.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):

2013-04-10  Benjamin Poulain  <bpoulain@apple.com>

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * Bindings/resources: Removed.

2013-04-02  Glenn Adams  <glenn@skynav.com>

        Need japanese line layout performance test
        https://bugs.webkit.org/show_bug.cgi?id=113811

        Reviewed by Ryosuke Niwa.

        Will be used by https://bugs.webkit.org/show_bug.cgi?id=105692 to test potential performance regression
        for Japanese (and other CJK) line break changes.

        * Layout/LineLayoutJapanese.html: Added.
        * Skipped: Skip this test by default.

2013-03-29  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Add performance tests
        https://bugs.webkit.org/show_bug.cgi?id=113303

        Reviewed by Antti Koivisto.

        Add simple performance tests for regions, without nested named flows: a region chain and a flow article.
        The regions.js script is used to generate the tests and can set the following parameters: the number of regions,
        the number of paragraphs, the regions width, height, max-height and the propability of a forced break after a paragraph.

        The tests are skipped for now. They should be enabled once the regions performance is stable enough to create a baseline.

        * Layout/RegionsAuto.html: Added. A few regions with a short article. The regions have auto-height and some
        paragraphs (80%) have forced breaks after. Stress test for the auto-height algorithm.
        * Layout/RegionsAutoMaxHeight.html: Added. A lot of regions with auto-height and max-height. Tests the impact of
        max-height on the auto-height algorithm.
        * Layout/RegionsFixed.html: Added. A lot of regions with a long article. Some paragraphs (50%) have forced breaks after.
        Stress test for the regions layout algorithm.
        * Layout/RegionsFixedShort.html: Added. A lot of short regions with a long content. Tests the impact of unforced breaks
        on the layout speed.
        * Layout/resources/regions.css: Added.
        (.articleInFlow):
        (.articleNone):
        (.region):
        (.contentParagraph):
        (.breakAfter):
        (.regionContainer):
        * Layout/resources/regions.js: Added.
        (.):
        * Skipped:

2013-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Add a performance tests for selecting all content in a document
        https://bugs.webkit.org/show_bug.cgi?id=113358

        Reviewed by Levi Weintraub.

        Add a performance test for selecting all. We wait for paint to happen by setTimeout(~, 0).

        Example outputs:
            RESULT Interactive: SelectAll: Time= 652.6 ms
            median= 644.5 ms, stdev= 54.6177144967 ms, min= 599.0 ms, max= 773.0 ms

            RESULT Interactive: SelectAll: Time= 654.4 ms
            median= 633.5 ms, stdev= 55.9223145368 ms, min= 600.0 ms, max= 769.0 ms

            RESULT Interactive: SelectAll: Time= 657.9 ms
            median= 640.0 ms, stdev= 54.1420159833 ms, min= 604.0 ms, max= 774.0 ms

        * Interactive/SelectAll.html: Added.
        * Skipped:

2013-03-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fix heap profiler performance tests.
        https://bugs.webkit.org/show_bug.cgi?id=112701

        Reviewed by Yury Semikhatsky.

        The tests were broken by profile types refactoring.

        * inspector/heap-snapshot-performance-test.js:
        (test.performanceTest.step0):
        (test.performanceTest.step1):

2013-03-05  Eric Seidel  <eric@webkit.org>

        Add html-parser-threaded perf test now that the threaded parser is enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=111200

        Reviewed by Ryosuke Niwa.

        The old srcdoc test no longer triggers the threaded parser due to compatibility fixes.

        * Parser/html-parser-threaded.html: Renamed from PerformanceTests/Parser/html-parser-srcdoc.html.
        * Skipped: Unfortunately this new test is still skipped too.

2013-03-04  Eric Seidel  <eric@webkit.org>

        Add PerformanceTest for document startup via iframe append/remove
        https://bugs.webkit.org/show_bug.cgi?id=111389

        Reviewed by Kentaro Hara.

        We'd like pages with lots of iframes to be fast.
        This test shows that at least for V8/Chromium we spend
        all our time booting v8.

        On my 32-core linux machine I see about 70 runs/sec in
        Release and 5 runs/sec in Debug.

        * DOM/iframe-append-remove.html: Added.

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Some perf. tests have variances that differ greatly between runs
        https://bugs.webkit.org/show_bug.cgi?id=97510

        Reviewed by Benjamin Poulain.

        In order to control the number of iterations and processes to use from run-perf-tests, always use 20
        iterations on all tests except Dromaeo, where even doing 5 iterations is prohibitively slow, by default.
        Without this change, it'll become extremely hard for us to tweak the number of iterations and processes
        to use from run-perf-tests.

        * Animation/balls.html:
        * DOM/DOMTable.html:
        * DOM/resources/dom-perf.js:
        (runBenchmarkSuite.PerfTestRunner.measureTime):
        * Dromaeo/resources/dromaeorunner.js:
        * Layout/floats_100_100.html:
        * Layout/floats_100_100_nested.html:
        * Layout/floats_20_100.html:
        * Layout/floats_20_100_nested.html:
        * Layout/floats_2_100.html:
        * Layout/floats_2_100_nested.html:
        * Layout/floats_50_100.html:
        * Layout/floats_50_100_nested.html:
        * Layout/subtree-detaching.html:
        * Parser/html5-full-render.html:
        * SVG/SvgHitTesting.html:
        * resources/runner.js:
        * resources/results-template.html:

2013-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Use perf.webkit.org JSON format in results page
        https://bugs.webkit.org/show_bug.cgi?id=110842

        Reviewed by Benjamin Poulain.

        Updated the results page template to use the new JSON format.

        Since new JSON format doesn't contain statistics such as stdev and min, added statistics.js to compute
        these values. Also use 95% percentile confidence interval instead of standard deviation in various places.

        * resources/results-template.html: Added statistics.js as dependency.
        (TestResult): Updated to take a metric instead of its test. Replaced stdev() with confidenceIntervalDelta()
        now that we have a fancy Statistics class.

        (TestRun.webkitRevision):
        (PerfTestMetric): Renamed from PerfTest since this object now encapsulates each measurement (such as time,
        JS heap, and malloc) in test. Also added a conversion table from a metric name to a unit since new format
        doesn't contain units.
        (PerfTestMetric.name): Updated to compute the full metric name from test name and metric name, matching
        the old behavior.
        (PerfTestMetric.isMemoryTest): Explicitly look for 'JSHeap' and 'Malloc' tests.
        (PerfTestMetric.smallerIsBetter):

        (attachPlot): Deleted the code to deal with tests that don't provide individual iteration measurement
        since such tests no longer exist. Also fixed up the code compute y-axis range.

        (createTableRow.markupForRun): Updated to use confidenceIntervalDelta() instead of stdev().

        (init.addTests): Added. Recursively add metrics.

        * resources/statistics.js: Added. Imported from perf.webkit.org.
        (Statistics.max):
        (Statistics.min):
        (Statistics.sum):
        (Statistics.squareSum):
        (Statistics.sampleStandardDeviation):
        (Statistics.supportedConfidenceLevels):
        (Statistics.confidenceIntervalDelta):
        (Statistics.confidenceInterval):

2013-02-11  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
        https://bugs.webkit.org/show_bug.cgi?id=108653

        Reviewed by Yury Semikhatsky.

        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
        In fact these two profile types have not too much in common. So put each into its own domain.
        It should also help when Profiles panel gets split into several tools.
        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
        change the original InspectorProfilerAgent.

        * inspector/heap-snapshot-performance-test.js:
        (test.performanceTest.cleanup):

2013-02-05  Dominik Röttsches  <dominik.rottsches@intel.com>

        Add a performance test for arabic line breaking
        https://bugs.webkit.org/show_bug.cgi?id=108948

        Reviewed by Eric Seidel.

        Adding a perfomance test based to exercise the complex
        font path used in rendering arabic script.

        * Layout/ArabicLineLayout.html: Added.
        * Skipped: New test skipped by default as per Ryosuke's request.

2013-01-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: some measurements are missing in PerformanceTests/inspector/heap-*.html
        https://bugs.webkit.org/show_bug.cgi?id=107687

        Reviewed by Pavel Feldman.

        * inspector/heap-snapshot-performance-test.js: override methods on JSHeapSnapshot instead
        of HeapSnapshot, otherwise overrides from JSHeapSnapshot will rule.

2013-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        Skip DOM/TraverseChildNodes.html as intended in r140070.

        * Skipped:

2013-01-17  Dominic Cooney  <dominicc@chromium.org>

        Unreviewed, re-land r140051.

        I overzealously rolled this out; the test was intended to be
        skipped, but was not skipped because of a typo in Skipped. See
        <https://bugs.webkit.org/show_bug.cgi?id=107210>

        * Parser/html-parser-srcdoc.html: Added.
        * Skipped: Big-P Parser.

2013-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140051.
        http://trac.webkit.org/changeset/140051
        https://bugs.webkit.org/show_bug.cgi?id=107210

        html-parser-srcdoc.html failing on Chromium Linux Perf and
        Chromium Mac Perf with a lot of error spew about blocked
        script execution in 'about:srcdoc' (Requested by dominicc on
        #webkit).

        * Parser/html-parser-srcdoc.html: Removed.
        * Skipped:

2013-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Remove NodeListsNodeData when it's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=107074

        Reviewed by Darin Adler.

        Added a micro benchmark to see the benefit of removing NodeListsNodeData.
        The test traverses all elements in the html5 specification page and accesses childNodes.

        Don't enable this test for now since it's really a micro benchmark specifically
        designed to test this patch.

        * DOM/TraverseChildNodes.html: Added.
        * Skipped: Don't enable newly added test by default.
        * resources/results-template.html: Compare against the unscaled unit (e.g. "bytes") as
        opposed to scaled units such as "K bytes".
        * resources/runner.js:
        (.start): Moved the code to call currentTest.setup from measureRunsPerSecondOnce so that
        it'll be ran for all test types, namely of PerfTestRunner.measureTime.
        (.measureRunsPerSecondOnce):

2013-01-17  Eric Seidel  <eric@webkit.org>

        Add a version of the html-parser benchmark which uses srcdoc instead of document.write so it tests the threaded parser
        https://bugs.webkit.org/show_bug.cgi?id=107158

        Reviewed by Ryosuke Niwa.

        Currently this test even opts-in to the threaded parser if available.
        We'll remove that line when the threaded parser becomes default or goes away.

        * Parser/html-parser-srcdoc.html: Added.

2013-01-16  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        inconsistency in drawImage with target rect negative dimensions.
        https://bugs.webkit.org/show_bug.cgi?id=100026

        Reviewed by Dean Jackson.

        Create a drawImage performance test. There is no significative change
        in performance: 27144.6851528 runs/s without the patch; 27153.517612
        runs/s with the patch. Test is currently skipped.

        * Canvas/drawimage.html: Added.
        * Skipped:

2013-01-15  Dominic Cooney  <dominicc@chromium.org>

        Allow zero values as results from the runFunction.
        https://bugs.webkit.org/show_bug.cgi?id=102500

        Reviewed by Kentaro Hara.

        DOM/DOMWalk.js fails on the Chromium Win perf bot because one or
        more parts of the test usually return zero at some point.

        * resources/runner.js: Accept merely non-negative results.

2012-12-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename distanceToWindow to distance
        https://bugs.webkit.org/show_bug.cgi?id=105823

        Reviewed by Pavel Feldman.

        Updated heap profiler performance test after renaming distanceToWindow to distance.

        * inspector/heap-snapshot-performance-test.js:

2012-12-18  Hayato Ito  <hayato@chromium.org>

        Use element.webkitCreateShadowRoot instead of WebKitShadowRoot in PerformanceTests.
        https://bugs.webkit.org/show_bug.cgi?id=105256

        Reviewed by Dimitri Glazkov.

        WebKitShadowRoot constructor was deleted in favor of element.webkitCreateShadowRoot().

        * ShadowDOM/ChangingClassNameShadowDOM.html:
        * ShadowDOM/ChangingSelect.html:
        * ShadowDOM/ContentReprojection.html:
        * ShadowDOM/DistributionWithMultipleShadowRoots.html:
        * ShadowDOM/LargeDistributionWithLayout.html:
        * ShadowDOM/MultipleInsertionPoints.html:
        * ShadowDOM/ShadowReprojection.html:
        * ShadowDOM/SmallDistributionWithLayout.html:

2012-12-17  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] LargeDistributionWithLayout.html should be updated
        https://bugs.webkit.org/show_bug.cgi?id=105242

        Reviewed by Ryosuke Niwa.

        Since this test was written when distribution took O(N^2). However, now it's almost O(N), so this test finishes
        in very short time. We should convert it unit to runs/s.

        This test contains a some error to cause test failure, e.g. using obsolete API, so they also should be fixed.

        * ShadowDOM/LargeDistributionWithLayout.html:

2012-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        [chromium perf] DOM/DOMWalk.html failures
        https://bugs.webkit.org/show_bug.cgi?id=104866

        Reviewed by Eric Seidel.

        Use PerfTestRunner.now which in turn uses window.performance.now() when it's available.

        * DOM/resources/dom-perf.js:
        (Interval.start):
        (Interval.stop):
        (BenchmarkSuite.prototype.RunSingle):

2012-12-05  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Performance tests for ShadowDOM distribution
        https://bugs.webkit.org/show_bug.cgi?id=103617

        Reviewed by Dimitri Glazkov.

        We would like to measure ShadowDOM distribution performance in various cases.
        In this patch, we add performance tests for several distribution patterns.

        * ShadowDOM/ContentReprojection.html: Added.
        * ShadowDOM/DistributionWithMultipleShadowRoots.html: Added.
        * ShadowDOM/LargeDistributionWithLayout.html: Added.
        * ShadowDOM/MultipleInsertionPoints.html: Added.
        * ShadowDOM/ShadowReprojection.html: Added.
        * ShadowDOM/SmallDistributionWithLayout.html: Added.

2012-12-05  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Performance tests of distribution for changing className
        https://bugs.webkit.org/show_bug.cgi?id=103612

        Reviewed by Dimitri Glazkov.

        We would like to measure ShadowDOM performance and compare it to the similar functional HTML without using ShadowDOM.
        In this patch, we add a case when classNames of distributed elemeents are changed.

        * ShadowDOM/ChangingClassName.html: Added.
        * ShadowDOM/ChangingClassNameShadowDOM.html: Added.

2012-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Dromaeo should report individual test result
        https://bugs.webkit.org/show_bug.cgi?id=99800

        Reviewed by Eric Seidel.

        Made one small modification to Droameo's webrunner.js so that it reports individual runs/s values
        for each subtest. This allows us to compute the aggregated run/s for each iteration like other
        performance tests.

        Also stop measuring memory usage in Dromaeo tests because some Dromaeo tests (e.g. jslib-modify-jquery)
        have unrealistic memory usage, and measuring them at the time of teardown doesn't make much sense.

        * Animation/balls.html: Fixed typo: measureValueAync.
        * Dromaeo/resources/dromaeo/web/webrunner.js:

        * Dromaeo/resources/dromaeorunner.js:
        (DRT.setup): Call prepareToMeasureValuesAsync so that DRT.teardown can use meausreValueAsync, and log
        "Running 5 times". Since the log container will be inserted before iframe, we need to explicitly insert
        the iframe as the first child of the body element to avoid logs from affecting the iframe's position.
        Also specify the number of iterations by calling PerfTestRunner.iterationCount() so that we may adjust
        the number of iterations in PerfTestRunner.

        (DRT.progress): Log individual measurement for each subtest.
        (DRT.teardown): Compute the aggregated result for each iteration, and log them using measureValueAsync.

        * resources/runner.js:
        (PerfTestRunner.logStatistics): Merged printStatistics since it's no longer needed after r131638.
        (PerfTestRunner): Removed getAndPrintMemoryStatistics since it was used only in Dromaeo tests but
        we no longer measure memory usage in Dromaeo tests.

        (start): Increment completedRuns from -1 to 0 for Dromaeo tests where we don't want to ignore the initial
        measurement. Note that ignoreWarmUpAndLog ignores the measurements for which completedRuns is negative.

        (ignoreWarmUpAndLog): We don't measure memory usage in Dromaeo tests. See above.
        (PerfTestRunner.iterationCount): Added. This abstraction allows us to auto-adjust the number of iterations from
        run-perf-tests in near future.
        (PerfTestRunner.measureValueAsync): Renamed from measureValueAync.

2012-11-29  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Performance tests of distribution for changing select attribute
        https://bugs.webkit.org/show_bug.cgi?id=103611

        Reviewed by Hajime Morita.

        We would like to measure ShadowDOM performance and compare it to the similar functional HTML without using ShadowDOM.
        In this patch, we add a case when select attribute of HTMLContentElement is changed.

        * ShadowDOM/ChangingSelect.html: Added.
        * ShadowDOM/ChangingSelectWithoutShadow.html: Added.
        * Skipped:

2012-11-19  Shinya Kawanaka  <shinyak@chromium.org>

        Changing id, className, or attribute should invalidate distribution
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Reviewed by Dimitri Glazkov.

        Added test code to modify id/class/attribute.

        * DOM/ModifyAttribute.html: Added.
        * DOM/resources/dom-perf/modify-attribute.js: Added.
        (ModifyAttribute.CreateElementToSetUp):
        (ModifyAttribute.ModifyId):
        (ModifyAttribute.ModifyClass):
        (ModifyAttribute.ModifyTitle):

2012-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        runCount in runner.js should be renamed to iterationCount
        https://bugs.webkit.org/show_bug.cgi?id=102208

        Reviewed by Tony Chang.

        Prior to this patch, there were terminology confusions between "runs" and "iterations".
        The term "run" should refer to running a performance test once, and "iteration" should
        refer to one measurement in the test. i.e. Executing run-perf-should once will result in
        a single "run" of performance tests and each test may execute multiple "iterations"
        to complete the run.

        Unfortunately, we still overload the meaning of "runs" in "runs/s" (is "function calls/s")
        but that could be addressed in a separate patch.

        * Animation/balls.html:
        * DOM/DOMTable.html:
        * DOM/resources/dom-perf.js:
        * Layout/floats_100_100.html:
        * Layout/floats_100_100_nested.html:
        * Layout/floats_20_100.html:
        * Layout/floats_20_100_nested.html:
        * Layout/floats_2_100.html:
        * Layout/floats_2_100_nested.html:
        * Layout/floats_50_100.html:
        * Layout/floats_50_100_nested.html:
        * Layout/subtree-detaching.html:
        * Parser/html5-full-render.html:
        * SVG/SvgHitTesting.html:
        * resources/runner.js:

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134367.
        http://trac.webkit.org/changeset/134367
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Speculative rollout, could have cause Dromaeo setAttribute
        perf regression.

        * DOM/ModifyAttribute.html: Removed.
        * DOM/resources/dom-perf/modify-attribute.js: Removed.

2012-11-12  Shinya Kawanaka  <shinyak@chromium.org>

        Changing id, className, or attribute should invalidate distribution
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Reviewed by Dimitri Glazkov.

        Added test code to modify id/class/attribute.

        * DOM/ModifyAttribute.html: Added.
        * DOM/resources/dom-perf/modify-attribute.js: Added.
        (ModifyAttribute.CreateElementToSetUp):
        (ModifyAttribute.ModifyId):
        (ModifyAttribute.ModifyClass):
        (ModifyAttribute.ModifyTitle):

2012-11-06  Adam Barth  <abarth@webkit.org>

        DOMImplementation should use ScriptWrappable
        https://bugs.webkit.org/show_bug.cgi?id=101279

        Reviewed by Eric Seidel.

        This simple PerformanceTest measure how quickly we can access
        document.implementation. The goal of this performance test is just to
        validate that using ScriptWrappable actually makes the bindings faster.

        * Bindings/document-implementation.html: Added.

2012-11-05  Geoffrey Garen  <ggaren@apple.com>

        WebKit should have performance tests for book chapter reflow
        https://bugs.webkit.org/show_bug.cgi?id=101271

        Reviewed by Dan Bernstein.

        I grabbed a book chapter from the Project Gutenberg front page:

        * Layout/chapter-reflow-once.html: Added.
        * Layout/chapter-reflow-thrice.html: Added.
        * Layout/chapter-reflow-twice.html: Added.
        * Layout/chapter-reflow.html: Added.

        I also created a torture-test random text generator:

        * Layout/chapter-reflow-once-random.html: Added.

2012-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #7 (last)
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #7 (last) commit of the whole patch.

        * PageLoad: Removed.
        * PageLoad/svg: Removed.
        * PageLoad/svg/LICENSES: Removed.
        * PageLoad/svg/files: Removed.
        * PageLoad/svg/files/33041-Samurai.svg: Removed.
        * PageLoad/svg/files/42450-under the see.svg: Removed.
        * PageLoad/svg/files/world-iso.svg: Removed.
        * PageLoad/svg/svg.pltsuite: Removed.
        * SVG/Samurai.html: Added.
        * SVG/UnderTheSee.html: Added.
        * SVG/WorldIso.html: Added.
        * SVG/resources/LICENSES: Copied from PerformanceTests/PageLoad/svg/LICENSES.
        * SVG/resources/Samurai.svg: Copied from PerformanceTests/PageLoad/svg/files/33041-Samurai.svg.
        * SVG/resources/UnderTheSee.svg: Copied from PerformanceTests/PageLoad/svg/files/42450-under%20the%20see.svg.
        * SVG/resources/WorldIso.svg: Copied from PerformanceTests/PageLoad/svg/files/world-iso.svg.
        * SVG/resources/svg.pltsuite: Copied from PerformanceTests/PageLoad/svg/svg.pltsuite.
        * Skipped: Rename the files on the skipped list also.

2012-10-26  Eric Seidel  <eric@webkit.org>

        Add a microbenchmark for Hindi (complex-text) line-layout
        https://bugs.webkit.org/show_bug.cgi?id=100024

        Reviewed by Ryosuke Niwa.

        I wrote this to make sure that we don't regress line-breaking performance
        for the complex-text codepath. This test has shown me that TOT is
        already 5% slower than Safari 6.0.1 here. :(

        * Layout/hindi-line-layout.html: Added.

2012-10-26  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #6
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #6 commit of the whole patch.

        * PageLoad/svg/files/gearflowers.svg: Removed.
        * PageLoad/svg/files/hereGear4.svg: Removed.
        * PageLoad/svg/files/worldcup.svg: Removed.
        * SVG/GearFlowers.html: Added.
        * SVG/HereGear.html: Added.
        * SVG/Worldcup.html: Added.
        * SVG/resources/GearFlowers.svg: Copied from PerformanceTests/PageLoad/svg/files/gearflowers.svg.
        * SVG/resources/HereGear.svg: Copied from PerformanceTests/PageLoad/svg/files/hereGear4.svg.
        * SVG/resources/Worldcup.svg: Copied from PerformanceTests/PageLoad/svg/files/worldcup.svg.
        * Skipped: Rename the files on the skipped list also.

2012-10-26  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #5
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #5 commit of the whole patch.

        * PageLoad/svg/files/Harvey_Rayner.svg: Removed.
        * PageLoad/svg/files/Sierpinski_carpet_6.svg: Removed.
        * PageLoad/svg/files/mtsthelens.svg: Removed.
        * PageLoad/svg/files/mtsthelens0.jpg: Removed.
        * SVG/HarveyRayner.html: Added.
        * SVG/MtSaintHelens.html: Added.
        * SVG/SierpinskiCarpet.html: Added.
        * SVG/resources/HarveyRayner.svg: Copied from PerformanceTests/PageLoad/svg/files/Harvey_Rayner.svg.
        * SVG/resources/MtSaintHelens.svg: Copied from PerformanceTests/PageLoad/svg/files/mtsthelens.svg.
        * SVG/resources/SierpinskiCarpet.svg: Copied from PerformanceTests/PageLoad/svg/files/Sierpinski_carpet_6.svg.
        * SVG/resources/mtsthelens0.jpg: Copied from PerformanceTests/PageLoad/svg/files/mtsthelens0.jpg.
        * Skipped: Rename the files on the skipped list also.

2012-10-25  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #4
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #4 commit of the whole patch.

        * PageLoad/svg/files/france.svg: Removed.
        * PageLoad/svg/files/francobollo_gnome_ezechi_02.svg: Removed.
        * SVG/France.html: Added.
        * SVG/FrancoBolloGnomeEzechi.html: Added.
        * SVG/resources/France.svg: Copied from PerformanceTests/PageLoad/svg/files/france.svg.
        * SVG/resources/FrancoBolloGnomeEzechi.svg: Copied from PerformanceTests/PageLoad/svg/files/francobollo_gnome_ezechi_02.svg.
        * Skipped: Rename the files on the skipped list also.

2012-10-25  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #3
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #3 commit of the whole patch.

        * PageLoad/svg/files/42470-flower_from_my_garden_v2.svg: Removed.
        * PageLoad/svg/files/44057-drops on a blade.svg: Removed.
        * PageLoad/svg/files/deb9frac1.svg: Removed.
        * PageLoad/svg/files/food_leif_lodahl_01.svg: Removed.
        * SVG/Debian.html: Added.
        * SVG/DropsOnABlade.html: Added.
        * SVG/FlowerFromMyGarden.html: Added.
        * SVG/FoodLeifLodahl.html: Added.
        * SVG/resources/Debian.svg: Copied from PerformanceTests/PageLoad/svg/files/deb9frac1.svg.
        * SVG/resources/DropsOnABlade.svg: Copied from PerformanceTests/PageLoad/svg/files/44057-drops%20on%20a%20blade.svg.
        * SVG/resources/FlowerFromMyGarden.svg: Copied from PerformanceTests/PageLoad/svg/files/42470-flower_from_my_garden_v2.svg.
        * SVG/resources/FoodLeifLodahl.svg: Copied from PerformanceTests/PageLoad/svg/files/food_leif_lodahl_01.svg.

2012-10-24  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #2
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #2 commit of the whole patch.

        * PageLoad/svg/files/cacuts_01.svg: Removed.
        * PageLoad/svg/files/cowboy.svg: Removed.
        * PageLoad/svg/files/crawfish2_ganson.svg: Removed.
        * SVG/Cactus.html: Added.
        * SVG/Cowboy.html: Added.
        * SVG/CrawFishGanson.html: Added.
        * SVG/resources/Cactus.svg: Copied from PerformanceTests/PageLoad/svg/files/cacuts_01.svg.
        * SVG/resources/Cowboy.svg: Copied from PerformanceTests/PageLoad/svg/files/cowboy.svg.
        * SVG/resources/CrawFishGanson.svg: Copied from PerformanceTests/PageLoad/svg/files/crawfish2_ganson.svg.
        * Skipped: Remove az-lizard_benji_park_01.svg from the skipped list.

2012-10-24  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #1
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #1 commit of the whole patch.

        * PageLoad/svg/files/az-lizard_benji_park_01.svg: Removed.
        * PageLoad/svg/files/bamboo_01.svg: Removed.
        * SVG/AzLizardBenjiPark.html: Added.
        * SVG/Bamboo.html: Added.
        * SVG/resources: Added.
        * SVG/resources/AzLizardBenjiPark.svg: Copied from PerformanceTests/PageLoad/svg/files/az-lizard_benji_park_01.svg.
        * SVG/resources/Bamboo.svg: Copied from PerformanceTests/PageLoad/svg/files/bamboo_01.svg.

2012-10-24  Zoltan Horvath  <zoltan@webkit.org>

        REGRESSION(r131982): Skip SVG/SvgNestedUse.html performancetest since it is crashing
        https://bugs.webkit.org/show_bug.cgi?id=100262

        Unreviewed.

        Skip until proper fix.

        * Skipped: Add SVG/SvgNestedUse.html

2012-10-23  Zoltan Horvath  <zoltan@webkit.org>

        Store the loaded file locally in measurePageLoadTime
        https://bugs.webkit.org/show_bug.cgi?id=100172

        Reviewed by Csaba Osztrogonác.

        Store the loaded file as a local variable instead of attaching it to the test object.
        Handle chunkSize inside test.run.

        * resources/runner.js:
        (.):

2012-10-23  Zoltan Horvath  <zoltan@webkit.org>

        Add measurePageLoadTime function to PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=100029

        Reviewed by Ryosuke Niwa.

        Adopt chunk based loading logic from html5-full-render.html into measurePageLoadTime function,
        this is needed to measure the performance and the memory consumption of the PageLoadTests as
        we do it for all other performancetests.

        * Parser/html5-full-render.html: Move the behavior to runner.js.
        * resources/runner.js:
        (.): Add measurePageLoadTime function.

2012-10-22  Adam Barth  <abarth@webkit.org>

        [V8] Vastly simplify V8GCController's NodeVisitor
        https://bugs.webkit.org/show_bug.cgi?id=99884

        Reviewed by Kentaro Hara.

        Adds some performance tests for the garbage collector.

        * Bindings/gc-forest.html: Added.
        * Bindings/gc-mini-tree.html: Added.
        * Bindings/gc-tree.html: Added.

2012-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Bump up the number of iterations of html5-full-render to 5
        https://bugs.webkit.org/show_bug.cgi?id=99657

        Reviewed by Andreas Kling.

        Now that html5-full-render.html runs in less than 15 seconds after r131553,
        we can afford to get 5 instead of 2 samples.

        * Parser/html5-full-render.html:

2012-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename PerfTestRunner.runPerSecond to PerfTestRunner.measureRunsPerSecond for consistency
        https://bugs.webkit.org/show_bug.cgi?id=99642

        Reviewed by Dirk Pranke.

        Renamed the method.

        * Bindings/append-child.html:
        * Bindings/create-element.html:
        * Bindings/event-target-wrapper.html:
        * Bindings/first-child.html:
        * Bindings/get-attribute.html:
        * Bindings/get-element-by-id.html:
        * Bindings/get-elements-by-tag-name.html:
        * Bindings/id-getter.html:
        * Bindings/id-setter.html:
        * Bindings/insert-before.html:
        * Bindings/node-list-access.html:
        * Bindings/scroll-top.html:
        * Bindings/set-attribute.html:
        * Bindings/typed-array-construct-from-array.html:
        * Bindings/typed-array-construct-from-same-type.html:
        * Bindings/typed-array-construct-from-typed.html:
        * Bindings/typed-array-set-from-typed.html:
        * Bindings/undefined-first-child.html:
        * Bindings/undefined-get-element-by-id.html:
        * Bindings/undefined-id-getter.html:
        * CSS/CSSPropertySetterGetter.html:
        * CSS/CSSPropertyUpdateValue.html:
        * CSS/PseudoClassSelectors.html:
        * DOM/textarea-dom.html:
        * DOM/textarea-edit.html:
        * Interactive/resources/window-resize.js:
        * Layout/flexbox-column-nowrap.html:
        * Layout/flexbox-column-wrap.html:
        * Layout/flexbox-row-nowrap.html:
        * Layout/flexbox-row-wrap.html:
        * Layout/line-layout.html:
        * Parser/css-parser-yui.html:
        * Parser/innerHTML-setter.html:
        * Parser/query-selector-deep.html:
        * Parser/query-selector-first.html:
        * Parser/query-selector-last.html:
        * Parser/simple-url.html:
        * Parser/textarea-parsing.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * SVG/SvgNestedUse.html:
        * resources/runner.js:

2012-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Performance test should support asynchronous tests
        https://bugs.webkit.org/show_bug.cgi?id=95668

        Reviewed by Dirk Pranke.

        Added PerfTestRunner.prepareToMeasureValuesAsync and PerfTestRunner.measureValueAsync,
        and deployed it in Animation/balls.

        * Animation/balls.html:
        * resources/runner.js:

2012-10-16  Elliott Sprehn  <esprehn@chromium.org>

        html5-full-render.html test uses substring but meant substr
        https://bugs.webkit.org/show_bug.cgi?id=99495

        Reviewed by Adam Barth.

        This test intended to chunk up the HTML5 spec into chunks of 500k chars, but used
        substring(to,from) instead of substr(from,length) so it actually loaded 5x more
        content than was in the HTML5 spec.

        * Parser/html5-full-render.html:

2012-10-11  James Simonsen  <simonjam@chromium.org>

        unprefix window.performance.webkitNow()
        https://bugs.webkit.org/show_bug.cgi?id=88278

        Reviewed by Tony Gentilcore.

        * resources/runner.js: Bind to proper object to avoid invalid invocation errors.

2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Skip Layout/subtree-detaching.html temporarily as it's very noisy and
        takes 112s to run on Chromium Mac. This is tracked by the bug 98708.

        * Skipped:

2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Perf. test results page is broken when runs have different sets of tests
        https://bugs.webkit.org/show_bug.cgi?id=98691

        Reviewed by Daniel Bates.

        Add "missing" columns for tests that are missing some runs.

        Also fix regressions from the previous patch:
        - Make reference run switch work again
        - Load jquery plugins from the remote server when the jquery is loaded from the remote server.

        * resources/results-template.html:

2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Perf test pesults page takes forever to load on a machine with a slow Internet connection
        https://bugs.webkit.org/show_bug.cgi?id=98561

        Reviewed by Ojan Vafai.

        Try loading jquery both locally and remotely, and use the same method to load the remaining
        jquery plugins when either one succeeds.

        * resources/results-template.html:

2012-10-04  Hayato Ito  <hayato@chromium.org>

        [Refactoring] Introduce a traversal strategy in SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=97298

        Reviewed by Antti Koivisto.

        Introduces querySelector() performance tests to check SelectorChecker performance.

        * CSS/PseudoClassSelectors.html: Added.

2012-10-03  Philip Rogers  <pdr@google.com>

        Force GC between PageLoad tests.
        https://bugs.webkit.org/show_bug.cgi?id=98203

        Reviewed by Ryosuke Niwa.

        Previously, our PageLoad PerfTests had multi-modal distributions,
        typically with a small cluster at 1-2x the median. This turned out
        to be caused by not garbage collecting between tests!

        This patch adds a new file, force-gc.html, and loads this file between
        PageLoad tests to force a GC. I manually verified that this cleans up
        our perf test outliers.

        * resources/force-gc.html: Added.

2012-10-03  Julien Chaffraix  <jchaffraix@webkit.org>

        Add a performance test for subtree detaching
        https://bugs.webkit.org/show_bug.cgi?id=98281

        Reviewed by Eric Seidel.

        The new test tries to stress detaching on a heavy subtree (2 levels deep but with 1,000 nodes per level).
        We set display: none on the root and measure the time it takes to update the tree. Note that we will also
        measure the time taken by recalcStyle and relayout but I don't think we can avoid that.

        * Layout/subtree-detaching.html: Added.

2012-10-02  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r130135. Dromaeo tests only report single memory value,
        and computeStatistics should report variance as 0 in such cases.

        * resources/runner.js:

2012-10-02  Philip Rogers  <pdr@google.com>

        Fix PerfTest standard deviation calculation.
        https://bugs.webkit.org/show_bug.cgi?id=98115

        Reviewed by Ryosuke Niwa.

        Previously our standard deviation calculation was incorrect. This patch
        updates perftest.py's algorithm to calculate the sample standard deviation
        (with Bessel's correction) using Knuth's online algorithm:
        http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm
        An existing test has been modified to prove our new results.

        This patch also updates runner.js to use Bessel's correction in
        its sample standard deviation calculation, which is more accurate
        for small sample sizes.

        Additionally, runner.js has been modified to not calculate
        the 'sum' statistic, which was not very useful.

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):

2012-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner: Move all functions into the closure and always use double quotation for string literals
        https://bugs.webkit.org/show_bug.cgi?id=98093

        Reviewed by Ojan Vafai.

        Move all methods of PerfTestRunner into the closure that defines it.
        Also always use double quotations for string literals for consistency.

        * resources/runner.js:

2012-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        Encapsulate private properties in PerfTestRunner better
        https://bugs.webkit.org/show_bug.cgi?id=97833

        Reviewed by Ojan Vafai.

        This patch moves "private" methods and properties of PerfTestRunner into a closure so that they're
        inaccssible from outside. Also catch exceptions from test.run, test.done, and other runner code
        to ensure we call notifyDone() even if we broke tests. Otherwise DRT will timeout and we end up
        waiting for 10 minutes per each broken test on bots.

        * resources/runner.js:
        (PerfTestRunner.gc):
        (logInDocument): Extracted from PerfTestRunner.log.
        (PerfTestRunner.log): Moved.
        (logFatalError): Added.
        (start): Renamed from PerfTestRunner._start.
        (scheduleNextRun): Extracted from PerfTestRunner._runLoop. Also catch any exceptions that happen
        in the runner and ignoreWarmUpAndLog so that we don't end up timing out. We call logFatalError in
        such cases, which in turn ensures notifyDone() is called.
        (ignoreWarmUpAndLog): Renamed from PerfTestRunner._ignoreWarmUpAndLog.
        (finish): Extracted from PerfTestRunner._runLoop.
        (PerfTestRunner.measureTime): Moved. The initialization of runCount is moved into start().
        (measureTimeOnce): Renamed from PerfTestRunner._measureTimeOnce.
        (PerfTestRunner.runPerSecond): Moved. Ditto about runCount.
        (measureRunsPerSecondOnce): Renamed from PerfTestRunner._measureRunsPerSecondOnce.
        (callRunAndMeasureTime): Renamed from PerfTestRunner._perSecondRunnerIterator.

2012-10-01  Florin Malita  <fmalita@chromium.org>

        Add a performance test for nested <use> elements
        https://bugs.webkit.org/show_bug.cgi?id=98047

        Reviewed by Ryosuke Niwa.

        Currently at ~5 runs per second on my workstation, but should go up significantly (100+)
        after landing a fix for https://bugs.webkit.org/show_bug.cgi?id=97905.

        * SVG/SvgNestedUse.html: Added.

2012-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Add back test.runCount for runPerSecond as it's used by tests in fast/harness/perftests.

        * resources/runner.js:
        (PerfTestRunner.runPerSecond):

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r129824.

        * DOM/resources/dom-perf.js:
        (runBenchmarkSuite):

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused features and reduce code duplications in PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=97852

        Reviewed by Kentaro Hara.

        Made the following refactoring changes:
        - Remove PerfTestRunner.info since it's never used.
        - Moved the js heap/malloc related functions up to where they belong.
        - Moved the initialization of _callsPerIteration, _test, and -description into _start,
          and stopped initializing _runFunction and _doneFunction since both test times now
          use _test object.
        - Made _measureTimeOnce and _measureRunsPerSecondOnce return the measured value
          instead of calling ignoreWarmUpAndLog and _runLoop to share the code; they're now
          called in _measureRunsPerSecondOnce.

        * resources/runner.js:
        (PerfTestRunner.storeHeapResults): Moved.
        (PerfTestRunner.getUsedMallocHeap): Moved.
        (PerfTestRunner.getUsedJSHeap): Moved.
        (PerfTestRunner.getAndPrintMemoryStatistics): Moved.
        (PerfTestRunner._scheduleNextMeasurementOrNotifyDone): Renamed from _runLoop. Calls
        ignoreWarmUpAndLog and schedules the next call.
        (PerfTestRunner._measureTimeOnce): Renamed from _runner.
        (PerfTestRunner._start): Renamed from initAndStartLoop.
        (PerfTestRunner.measureTime):
        (PerfTestRunner.runPerSecond):
        (PerfTestRunner._measureRunsPerSecondOnce): Renamed from _measureRunsPerSecondOnce.
        (PerfTestRunner._perSecondRunnerIterator):

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner.run should take an object
        https://bugs.webkit.org/show_bug.cgi?id=97743

        Reviewed by Kentaro Hara.

        Rename PerfTestRunner.run to PerfTestRunner.measureTime and make it take an object instead of
        5 arguments. Also get rid of PerfTestRunner._loopsPerRun since it's no longer used (it's always 1).

        * CSS/StyleSheetInsert.html:
        * DOM/resources/dom-perf.js:
        * Layout/floats_100_100.html:
        * Layout/floats_100_100_nested.html:
        * Layout/floats_20_100.html:
        * Layout/floats_20_100_nested.html:
        * Layout/floats_2_100.html:
        * Layout/floats_2_100_nested.html:
        * Layout/floats_50_100.html:
        * Layout/floats_50_100_nested.html:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * SVG/SvgCubics.html:
        * SVG/SvgHitTesting.html:
        * resources/runner.js:

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        PerformanceTests/CSS/StyleSheetInsert.html has a time-dependent non-Gaussian distribution
        https://bugs.webkit.org/show_bug.cgi?id=97741

        Reviewed by Antti Koivisto.

        Reset the content in the iframe in each run so that the runtime from each run follows a normal distribution.
        We can cleanup this code once my patch to replace the argument list of run by an object is landed.

        * CSS/StyleSheetInsert.html:

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed. Minor appearance tweaks after r129813.

        * resources/results-template.html:

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Results page should warn about time-dependent distributions
        https://bugs.webkit.org/show_bug.cgi?id=97818

        Reviewed by Ojan Vafai.

        Add a simple linear regression analysis on results page to detect time-dependent distributions.
        We add a warning sign (inline SVG) when the regression gave us a slope of at least 0.01 and a R^2 of at least 0.6.
        Also added time-series graphs per run under the bar graphs so that humans can manually inspect them.

        A nice follow up would be to add some normality test (e.g. Shapiro-Wilk) to detect bi-modal distributions
        but we probably need to restructure the code to run it asynchronously since normality tests are slow.

        * resources/results-template.html:

2012-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Use runPerSecond in PerformanceTests/Bindings/typed-array* and event-target-wrapper
        https://bugs.webkit.org/show_bug.cgi?id=97625

        Reviewed by Eric Seidel.

        Use PerfTestRunner.runPerSecond instead of PerfTestRunner.run. Also reduce the fixed number of
        elements and iterations in these tests by a factor of 10 since runPerSecond can dynamically
        adjust the number of function calls.

        * Bindings/event-target-wrapper.html:
        * Bindings/typed-array-construct-from-array.html:
        * Bindings/typed-array-construct-from-same-type.html:
        * Bindings/typed-array-construct-from-typed.html:
        * Bindings/typed-array-set-from-typed.html:

2012-09-25  Antti Koivisto  <antti@apple.com>

        Optimize stylesheet insertions
        https://bugs.webkit.org/show_bug.cgi?id=97627

        Reviewed by Andreas Kling.

        Add synthetic performance test for avoiding style recalcs on stylesheet inserts.

        * CSS/StyleSheetInsert.html: Added.

2012-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        Skip Dromaeo/jslib-modify-jquery.html per bug 95376.
        It runs out of memory on Chromium port, and it takes unreasonably long time (~5 minutes)
        to run on other ports.

        * Skipped:

2012-09-20  Ryosuke Niwa  <rniwa@webkit.org>

        Results page should show indivisual value
        https://bugs.webkit.org/show_bug.cgi?id=97178

        Reviewed by Tony Chang.

        Show indivisual values instead of statistics (min, max, stdev).

        * resources/results-template.html:

2012-09-20  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should record individual value instead of statistics
        https://bugs.webkit.org/show_bug.cgi?id=97155

        Reviewed by Hajime Morita.

        Report the list of values as "values" so that run-perf-tests can parse them.

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129091.
        http://trac.webkit.org/changeset/129091
        https://bugs.webkit.org/show_bug.cgi?id=97205

        It broke perf tests everywhere (Requested by Ossy on #webkit).

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should record indivisual value instead of statistics
        https://bugs.webkit.org/show_bug.cgi?id=97155

        Reviewed by Hajime Morita.

        Report the list of values as "values" so that run-perf-tests can parse them.

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-09-17  Ryosuke Niwa  <rniwa@webkit.org>

        Perf test results is incomprehensive
        https://bugs.webkit.org/show_bug.cgi?id=94668

        Reviewed by Eric Seidel.

        Overhauled the results page to have a tabular view. Clicking on each row shows a flot graph we used to have.
        For each run and test, we show the mean value with the standard deviation along with the percent difference
        against the reference run chosen by the user if the difference is statistically significant; it also indicates
        whether the new value is progression or not.

        The unit of each test is adjusted automatically using SI prefixes (Kilo, Mega, Milli), and rows can be sorted
        by each column. Time and memory results are separated into two tabs.

        * resources/jquery.tablesorter.min.js: Added.
        * resources/results-template.html:

2012-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Use performance.webkitNow in PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=92826

        Reviewed by Eric Seidel.

        Use performance.webkitNow with Date.now as a fallback for more accurate time measurements.

        * resources/runner.js:
        (PerfTestRunner._runner):
        (PerfTestRunner._perSecondRunnerIterator):

2012-09-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128562.
        http://trac.webkit.org/changeset/128562
        https://bugs.webkit.org/show_bug.cgi?id=96747

        It broke perf tests on Qt and Chromium (Requested by Ossy on
        #webkit).

        * resources/runner.js:
        (PerfTestRunner._runner):
        (PerfTestRunner._perSecondRunnerIterator):

2012-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Use performance.webkitNow in PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=92826

        Reviewed by Eric Seidel.

        Use performance.webkitNow with Date.now as a fallback for more acurate time measurements.

        * resources/runner.js:
        (PerfTestRunner._runner):
        (PerfTestRunner._perSecondRunnerIterator):

2012-08-23  Ilya Tikhonovsky  <loislo@chromium.org>

        WebInspector: unreviewed single line test fix.

        The test has to open profiles panel explicitly because it is creating lazily.

        * inspector/heap-snapshot-performance-test.js:

2012-08-15  Scott Graham  <scottmg@chromium.org>

        Rename window.internals.fastMallocStatistics to mallocStatistics
        https://bugs.webkit.org/show_bug.cgi?id=94033

        Reviewed by Adam Barth.

        * resources/runner.js:
        (PerfTestRunner.storeHeapResults):
        (PerfTestRunner.getUsedMallocHeap):
        (PerfTestRunner.getAndPrintMemoryStatistics):
        (PerfTestRunner.initAndStartLoop):

2012-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed; fix an insanely silly typo.

        * resources/results-template.html:

2012-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r125178.

        * resources/runner.js:

2012-08-09  Zoltan Horvath  <zoltan@webkit.org>

        Add memory measurement to balls.html and dromaeorunner.js
        https://bugs.webkit.org/show_bug.cgi?id=93617

        Reviewed by Adam Barth.

        Since we added memory measurement support to performance tests we need to modify these tests.

        * Animation/balls.html:
        * Dromaeo/resources/dromaeorunner.js:

2012-08-09  Zoltan Horvath  <zoltan@webkit.org>

        JSHeap and FastMallocStatistics based memory measurement for performance-tests
        https://bugs.webkit.org/show_bug.cgi?id=90858

        Reviewed Ryosuke Niwa.

        Measure the memory usage of the performancetests with the help of the windows.memory.usedJSHeapSize
        object and the window.internals.fastMallocStatistics() function call.

        * resources/runner.js:
        (PerfTestRunner.logStatistics):
        (PerfTestRunner.printStatistics):
        (PerfTestRunner.storeHeapResults):
        (PerfTestRunner.getUsedFastMallocHeap):
        (PerfTestRunner.getUsedJSHeap):
        (PerfTestRunner.getAndPrintMemoryStatistics):
        (PerfTestRunner.ignoreWarmUpAndLog):
        (PerfTestRunner.initAndStartLoop):

2012-08-08  Benjamin Poulain  <benjamin@webkit.org>

        Calling internals from the performance test runner prevents manual running
        https://bugs.webkit.org/show_bug.cgi?id=93527

        Reviewed by Ryosuke Niwa.

        Since r125065, it is impossible to run the Performance tests manually. The problem is
        "internals" is not defined when running outside the test runner, so the whole script
        evaluation fails.

        * resources/runner.js: Verify is window.internals is available before invoking something on it.

2012-08-08  Zoltan Horvath  <zoltan@webkit.org>

        Set access to MemoryInfo enabled for the performance tests
        https://bugs.webkit.org/show_bug.cgi?id=92498

        Reviewed by Ryosuke Niwa.

        We need access to console.memory for the memory measurements.

        * resources/runner.js:

2012-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support --no-show-results
        https://bugs.webkit.org/show_bug.cgi?id=93409

        Reviewed by Dirk Pranke.

        Add a flot as a separate file and load it as an external resource.

        Also include scripts as external resources from both local filesystem and webkit.org
        so that it continues to work regardless of where you put it.

        It breaks when someone else receives the file and save it somewhere and doesn't have
        a network connection but that seems like a scenario we don't care that much.

        * resources/jquery.flot.min.js: Added.
        * resources/results-template.html:

2012-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        run-webkit-tests should have ability to add description to its JSON output
        https://bugs.webkit.org/show_bug.cgi?id=93296

        Reviewed by Dirk Pranke.

        Parse description and show it with the WebKit revision on the results page. Also use bar graphs
        instead of line graphs since we're not depicting the time series here per arv's suggestion.
        Finally, add the ability to adjust y-axis between the adjusted value and 0 (plot even doesn't adjust
        y-axis automatically now) by a mouse click.

        * resources/results-template.html:

2012-08-04  Ryosuke Niwa  <rniwa@webkit.org>

        Use testRunner instead of layoutTestController in performance tests
        https://bugs.webkit.org/show_bug.cgi?id=93184

        Reviewed by Adam Barth.

        * Animation/balls.html:
        * Dromaeo/resources/dromaeorunner.js:
        * inspector/console-300-lines.html:
        * inspector/inspector-startup-time.html:
        * inspector/network-append-30-requests.html.broken:
        * inspector/show-panel.html.broken:
        * resources/runner.js:
        (PerfTestRunner.logInfo):
        (PerfTestRunner.initAndStartLoop):

2012-08-02  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        TypedArray set method is slow when called with another typed array
        https://bugs.webkit.org/show_bug.cgi?id=92556

        Reviewed by Kenneth Russell.

        * Bindings/typed-array-set-from-typed.html: Added.

2012-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should generate a results page
        https://bugs.webkit.org/show_bug.cgi?id=92575

        Reviewed by Eric Seidel.

        Add a results page template. This page includes flot and flot.fillbetween.
        jQuery and the json that contains test results are injected by run-perf-tests.

        * resources/results-template.html: Added.

2012-07-27  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        use createUninitialized when creating TypedArray from another array
        https://bugs.webkit.org/show_bug.cgi?id=92518

        Reviewed by Kenneth Russell.

        * Bindings/typed-array-construct-from-array.html: Added.

2012-07-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add more Russian replay performance tests
        https://bugs.webkit.org/show_bug.cgi?id=92462

        Reviewed by Tony Chang.

        Add more Russian sites as suggested by loislo.

        * Replay/Russian/lenta.ru.replay: Added.
        * Replay/Russian/www.ixbt.com.replay: Added.
        * Replay/Russian/www.kp.ru.replay: Added.
        * Replay/Russian/www.liveinternet.ru.replay: Added.
        * Replay/Russian/www.pravda.ru.replay: Added.

2012-07-26  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        constructing TypedArray from another TypedArray is slow
        https://bugs.webkit.org/show_bug.cgi?id=90838

        Reviewed by Kenneth Russell.

        * Bindings/typed-array-construct-from-same-type.html: Added.
        * Bindings/typed-array-construct-from-typed.html: Added.

2012-07-25  Ryosuke Niwa  <rniwa@webkit.org>

        Import more replay performance tests from Mozilla's Tp5 test suite
        https://bugs.webkit.org/show_bug.cgi?id=92229

        Reviewed by Andreas Kling.

        Add more replay tests based on Mozilla's Tp5 test suite [1]. Unfortunately,
        we cannot import all URLs because some of them are not archived on archive.org
        and others do not replay well on web-page-replay. Nonethless, we're still adding
        60+ URLs in this patch.

        [1] http://people.mozilla.org/~jmaher/tp5.manifest

        * Replay/Chinese: Added.
        * Replay/Chinese/chinaz.com.replay: Added.
        * Replay/Chinese/www.163.com.replay: Added.
        * Replay/Chinese/www.alipay.com.replay: Added.
        * Replay/Chinese/www.baidu.com.replay: Added.
        * Replay/Chinese/www.csdn.net.replay: Added.
        * Replay/Chinese/www.douban.com.replay: Added.
        * Replay/Chinese/www.hao123.com.replay: Added.
        * Replay/Chinese/www.xinhuanet.com.replay: Added.
        * Replay/Chinese/www.xunlei.com.replay: Added.
        * Replay/Chinese/www.youku.com.replay: Added.
        * Replay/English: Added.
        * Replay/English/beatonna.livejournal.com.replay: Added.
        * Replay/English/cakewrecks.blogspot.com.replay: Added.
        * Replay/English/chemistry.about.com.replay: Added.
        * Replay/English/digg.com.replay: Added.
        * Replay/English/en.wikipedia.org-rorschach_test.replay: Added.
        * Replay/English/icanhascheezburger.com.replay: Added.
        * Replay/English/imgur.com-gallery.replay: Added.
        * Replay/English/online.wsj.com.replay: Added.
        * Replay/English/stockoverflow.com-best-comment.replay: Added.
        * Replay/English/www.alibaba.com.replay: Added.
        * Replay/English/www.amazon.com-kindle.replay: Added.
        * Replay/English/www.apple.com.replay: Added.
        * Replay/English/www.cnet.com.replay: Added.
        * Replay/English/www.dailymotion.com.replay: Added.
        * Replay/English/www.ehow.com-prevent-fire.replay: Added.
        * Replay/English/www.filestube.com-amy-adams.replay: Added.
        * Replay/English/www.foxnews.replay: Added.
        * Replay/English/www.huffingtonpost.com.replay: Added.
        * Replay/English/www.imdb.com-twilight.replay: Added.
        * Replay/English/www.mozilla.com-all-order.replay: Added.
        * Replay/English/www.php.net.replay: Added.
        * Replay/English/www.reddit.com.replay: Added.
        * Replay/English/www.telegraph.co.uk.replay: Added.
        * Replay/English/www.w3.org-htmlcss.replay: Added.
        * Replay/English/www.w3schools.com-html.replay: Added.
        * Replay/English/www.youtube.com-music.replay: Added.
        * Replay/French: Added.
        * Replay/French/www.orange.fr.replay: Added.
        * Replay/German: Added.
        * Replay/Italian: Added.
        * Replay/Italian/www.repubblica.it.replay: Added.
        * Replay/Japanese/entameblog.seesaa.net.replay: Added.
        * Replay/Japanese/www.hatena.ne.jp.replay: Added.
        * Replay/Japanese/www.nicovideo.jp.replay: Added.
        * Replay/Korean: Added.
        * Replay/Korean/www.naver.com.replay: Added.
        * Replay/Persian: Added.
        * Replay/Persian/blogfa.com.replay: Added.
        * Replay/Polish: Added.
        * Replay/Polish/www.wp.pl.replay: Added.
        * Replay/Portuguese: Added.
        * Replay/Portuguese/www.uol.com.br.replay: Added.
        * Replay/Russian: Added.
        * Replay/Russian/vkontakte.ru-help.replay: Added.
        * Replay/Russian/www.rambler.ru.replay: Added.
        * Replay/Russian/www.ucoz.ru.replay: Added.
        * Replay/Russian/www.yandex.ru.replay: Added.
        * Replay/Spanish: Added.
        * Replay/Spanish/www.taringa.net.replay: Added.

2012-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add some Japanese and Swedish websites to replay tests
        https://bugs.webkit.org/show_bug.cgi?id=92076

        Reviewed by Andreas Kling.

        Added new replay tests as follows.

        * Replay/Japanese: Added.
        * Replay/Japanese/2ch.net-newsplus.replay: Added.
        * Replay/Japanese/ja.wikipedia.org.replay: Added.
        * Replay/Japanese/www.livedoor.com.replay: Added.
        * Replay/Japanese/www.rakuten.co.jp.replay: Added.
        * Replay/Japanese/www.yahoo.co.jp.replay: Added.
        * Replay/Swedish: Added.
        * Replay/Swedish/www.flashback.se.replay: Added.
        * Replay/Swedish/www.tradera.com.replay: Added.
        * Replay/www.techcrunch.com.replay: Added.

2012-07-18  MORITA Hajime  <morrita@google.com>

        Add window resize benchmark
        https://bugs.webkit.org/show_bug.cgi?id=91070

        Reviewed by Ryosuke Niwa.

        Added window-resize.html which exercise html5.html. This test
        resizes the window and forces re-layout repeatedly.

        * Interactive/resources/window-resize.js: Added.
        * Interactive/window-resize.html: Added.
        * Parser/resources/html5.html: Modified to inject driver scripts.

2012-07-11  Philip Rogers  <pdr@google.com>

        Add a performance test for hit testing in SVG
        https://bugs.webkit.org/show_bug.cgi?id=90811

        Reviewed by Ryosuke Niwa.

        The shape rendering code is changing a lot and I'd like a performance test to
        make sure we don't regress, and to track our improvements.

        Performance results in my Linux desktop:
            RESULT SVG: SvgHitTesting= 105.0 ms
            median= 103.5 ms, stdev= 4.60434577329 ms, min= 101.0 ms, max= 116.0 ms

            RESULT SVG: SvgHitTesting= 97.8 ms
            median= 96.5 ms, stdev= 2.67581763205 ms, min= 95.0 ms, max= 102.0 ms

            RESULT SVG: SvgHitTesting= 104.3 ms
            median= 104.0 ms, stdev= 1.41774468788 ms, min= 102.0 ms, max= 107.0 ms

            RESULT SVG: SvgHitTesting= 103.6 ms
            median= 103.5 ms, stdev= 1.2 ms, min= 102.0 ms, max= 106.0 ms

        * SVG/SvgHitTesting.html: Added.

2012-07-03  Jan Keromnes  <janx@linux.com>

        Web Inspector: WebInspector.TextViewer should be renamed WebInspector.TextEditor
        https://bugs.webkit.org/show_bug.cgi?id=89939

        Reviewed by Vsevolod Vlasov.

        * inspector/first-open-scripts.html.broken:

2012-06-22  Philip Rogers  <pdr@google.com>

        Make SvgCubics performance test more consistent
        https://bugs.webkit.org/show_bug.cgi?id=89778

        Reviewed by Ryosuke Niwa.

        Previously this test ran twice for each iteration, but this led to inconsistent repaints.
        This change updates the test to only run once per iteration, and adds even more cubics
        so that the test runs consistently in the 80ms range on my Linux desktop.

        Performance results on my desktop:
            RESULT SVG: SvgCubics= 80.5 ms
            median= 82.0 ms, stdev= 3.04138126515 ms, min= 75.0 ms, max= 85.0 ms

            RESULT SVG: SvgCubics= 80.1 ms
            median= 81.0 ms, stdev= 4.27668095607 ms, min= 74.0 ms, max= 88.0 ms

            RESULT SVG: SvgCubics= 81.45 ms
            median= 83.0 ms, stdev= 4.01839520207 ms, min= 75.0 ms, max= 89.0 ms

            RESULT SVG: SvgCubics= 78.9 ms
            median= 80.0 ms, stdev= 4.75289385533 ms, min= 72.0 ms, max= 87.0 ms

        * SVG/SvgCubics.html:

2012-06-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: partially instrument DOM Tree native memory.
        https://bugs.webkit.org/show_bug.cgi?id=89568

        This patch adds MemoryInstrumentation class that counts all visited
        objects and calls reportMemoryUsage.

        Reviewed by Yury Semikhatsky.

        * inspector/native-memory-snapshot.html:

2012-06-21  Kentaro Hara  <haraken@chromium.org>

        Add a perf-test for innerHTML setter for a large DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=89723

        Reviewed by Ryosuke Niwa.

        We want a benchmark for innerHTML setter for the following reason:

        - innerHTML setter is widely used in the real world.
        - I am planning to optimize innerHTML setter in the near future.
        - I want to use the innerHTML setter benchmark for the patch of bug 88834.

        Performance results in my Linux desktop:

        RESULT Parser: innerHTML-setter= 289.782649995 runs/s
        median= 290.046269741 runs/s, stdev= 1.06575112224 runs/s, min= 286.831812256 runs/s, max= 291.005291005 runs/s

        RESULT Parser: innerHTML-setter= 289.020706132 runs/s
        median= 289.093298292 runs/s, stdev= 0.985203313093 runs/s, min= 286.831812256 runs/s, max= 290.620871863 runs/s

        RESULT Parser: innerHTML-setter= 288.912051701 runs/s
        median= 291.005291005 runs/s, stdev= 3.65241325588 runs/s, min= 283.505154639 runs/s, max= 292.553191489 runs/s

        RESULT Parser: innerHTML-setter= 288.644186666 runs/s
        median= 288.713910761 runs/s, stdev= 1.31889053717 runs/s, min= 286.085825748 runs/s, max= 290.620871863 runs/s

        RESULT Parser: innerHTML-setter= 288.698714577 runs/s
        median= 288.713910761 runs/s, stdev= 1.03938198202 runs/s, min= 286.458333333 runs/s, max= 290.237467018 runs/s

        * Parser/innerHTML-setter.html: Added.

2012-06-20  Philip Rogers  <pdr@google.com>

        Add a performance test for paths in SVG
        https://bugs.webkit.org/show_bug.cgi?id=89547

        Reviewed by Ryosuke Niwa.

        This change adds the first performance test for SVG paths.
        In the test we modify complex cubic paths in several ways, testing:
        transformations, clipping, d attribute changes, stroke properties,
        text on a path, and opacity.

        Sample test results on my Linux desktop:
            RESULT SVG: SvgCubics= 68.85 ms
            median= 69.5 ms, stdev= 4.70398767005 ms, min= 56.0 ms, max= 75.0 ms

            RESULT SVG: SvgCubics= 68.4 ms
            median= 69.0 ms, stdev= 3.51283361405 ms, min= 59.0 ms, max= 74.0 ms

            RESULT SVG: SvgCubics= 66.95 ms
            median= 67.0 ms, stdev= 3.4420197559 ms, min= 59.0 ms, max= 74.0 ms

            RESULT SVG: SvgCubics= 70.2 ms
            median= 71.5 ms, stdev= 3.23419232576 ms, min= 63.0 ms, max= 74.0 ms

        * SVG: Added.
        * SVG/SvgCubics.html: Added.

2012-06-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Import themaninblue.com/experiment/AnimationBenchmark/ as performance tests
        https://bugs.webkit.org/show_bug.cgi?id=78789

        Reviewed by Ryosuke Niwa.

        Added PerfTestRunner fixture around it.

        * Animation/balls.html: Added.

2012-06-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: native memory snapshot performance and coverage test implementation.
        https://bugs.webkit.org/show_bug.cgi?id=89363

        We have to track the performance of MemoryAgent.getProcessMemoryDistribution.
        Also this test will work as a burn down chart for Unknown memory metric.

        Reviewed by Pavel Feldman.

        * inspector/native-memory-snapshot.html: Added.
        * inspector/performance-test.js:
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.reportSize):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):

2012-06-05  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: serialize edge counts instead of indexes in heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=88324

        The serialized node structure currently holds an index
        of its first containment edge in the edges array.
        The index can be quite big (up to 7 digits for large snapshots).
        The patch changes the serialization format to pass
        node containment edge count instead. For most nodes the count
        is just a single digit number.
        This reduces serialized snapshot size and therefore its transfer time.

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot-performance-test.js:

2012-06-04  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: speed up _calculateRetainedSizes function
        https://bugs.webkit.org/show_bug.cgi?id=87863

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot-advanced.html: Added.
        * inspector/heap-snapshot-performance-test.js: Copied from PerformanceTests/inspector/heap-snapshot.html.
        (test.performanceTest.step0):
        (test.performanceTest.step1):
        (test.performanceTest.step2):
        (test.performanceTest.cleanup):
        (test.performanceTest.done):
        (test.performanceTest):
        (test):
        * inspector/heap-snapshot.html:

2012-06-03  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a benchmark of querySelector() for an element that appears in the depths in the document
        https://bugs.webkit.org/show_bug.cgi?id=88202

        Reviewed by Ryosuke Niwa.

        query-selector-first.html tests querySelector() for an element
        that appears at the head of the document. query-selector-last.html
        tests querySelector() for an element that appears at the tail of
        the document. In addition, we want a benchmark of querySelector()
        for an element that appears in the depths in the document.

        Test results in my Linux desktop:

        RESULT Parser: query-selector-deep= 460.776980611 runs/s
        median= 460.947503201 runs/s, stdev= 1.72274941942 runs/s, min= 455.696202532 runs/s, max= 463.32046332 runs/s

        RESULT Parser: query-selector-deep= 458.925050915 runs/s
        median= 459.183673469 runs/s, stdev= 1.47930124139 runs/s, min= 454.545454545 runs/s, max= 460.947503201 runs/s

        RESULT Parser: query-selector-deep= 461.866981491 runs/s
        median= 461.538461538 runs/s, stdev= 1.14613123359 runs/s, min= 459.183673469 runs/s, max= 463.917525773 runs/s

        RESULT Parser: query-selector-deep= 453.922010788 runs/s
        median= 454.258855898 runs/s, stdev= 1.77279123317 runs/s, min= 447.204968944 runs/s, max= 455.696202532 runs/s

        RESULT Parser: query-selector-deep= 454.666321221 runs/s
        median= 454.545454545 runs/s, stdev= 1.65775667417 runs/s, min= 451.127819549 runs/s, max= 456.852791878 runs/s

        * Parser/query-selector-deep.html: Added.

2012-06-03  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Make query-selector-last.html more realistic
        https://bugs.webkit.org/show_bug.cgi?id=88203

        Reviewed by Ryosuke Niwa.

        query-selector-last.html tests querySelector() for an element
        that appears after 1000 div elements, all of which have the same
        id and class. To test the performance of querySelector() under
        a lot of ids and classes, we should make the ids and classes of
        the 1000 elements different.

        This patch degrades the performance of query-selector-last.html
        by 3.6%.

        [Before]
        RESULT Parser: query-selector-last= 476.382274152 runs/s
        median= 476.821192053 runs/s, stdev= 1.14578875814 runs/s, min= 474.308300395 runs/s, max= 478.087649402 runs/s

        RESULT Parser: query-selector-last= 478.423061861 runs/s
        median= 478.723404255 runs/s, stdev= 1.54876867255 runs/s, min= 473.684210526 runs/s, max= 481.347773767 runs/s

        RESULT Parser: query-selector-last= 479.849287174 runs/s
        median= 480.0 runs/s, stdev= 1.69849752498 runs/s, min= 475.561426684 runs/s, max= 481.927710843 runs/s

        RESULT Parser: query-selector-last= 476.765438846 runs/s
        median= 477.453580902 runs/s, stdev= 1.8724488664 runs/s, min= 471.821756225 runs/s, max= 478.723404255 runs/s

        RESULT Parser: query-selector-last= 481.715340644 runs/s
        median= 481.637742305 runs/s, stdev= 1.81446361145 runs/s, min= 475.561426684 runs/s, max= 483.675937122 runs/s

        [After]
        RESULT Parser: query-selector-last= 458.866623582 runs/s
        median= 459.183673469 runs/s, stdev= 1.48881464737 runs/s, min= 453.972257251 runs/s, max= 460.947503201 runs/s

        RESULT Parser: query-selector-last= 460.363532897 runs/s
        median= 460.358056266 runs/s, stdev= 1.58512056995 runs/s, min= 456.273764259 runs/s, max= 462.130937099 runs/s

        RESULT Parser: query-selector-last= 457.727448451 runs/s
        median= 458.015267176 runs/s, stdev= 1.23681915516 runs/s, min= 453.972257251 runs/s, max= 459.183673469 runs/s

        RESULT Parser: query-selector-last= 465.57336853 runs/s
        median= 465.717981889 runs/s, stdev= 1.6616925374 runs/s, min= 460.947503201 runs/s, max= 467.532467532 runs/s

        RESULT Parser: query-selector-last= 459.836252019 runs/s
        median= 459.770114943 runs/s, stdev= 1.84485630505 runs/s, min= 455.696202532 runs/s, max= 462.724935733 runs/s

        * Parser/query-selector-last.html:

2012-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Add public page loading performance tests using web-page-replay
        https://bugs.webkit.org/show_bug.cgi?id=84008

        Reviewed by Dirk Pranke.

        Add replay tests for google.com and youtube.com as examples.

        * Replay: Added.
        * Replay/www.google.com.replay: Added.
        * Replay/www.youtube.com.replay: Added.

2012-05-30  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a benchmark for querySelector()
        https://bugs.webkit.org/show_bug.cgi?id=87742

        Reviewed by Ryosuke Niwa.

        Now I am optimizing querySelector() (bug 87625).
        This patch adds a performance test for querySelector().
        query-selector-first.html queries an element that appears
        at the head of the document. On the other hand,
        query-selector-last.html queries an element that appears
        at the tail of the document.

        Test results in my desktop:

        [query-selector-first.html]
        RESULT Parser: query-selector-first= 252.339803014 runs/s
        median= 253.646265594 runs/s, stdev= 2.32610873209 runs/s, min= 248.138957816 runs/s, max= 254.777070064 runs/s

        RESULT Parser: query-selector-first= 252.688468897 runs/s
        median= 252.684876579 runs/s, stdev= 3.60008778708 runs/s, min= 246.002460025 runs/s, max= 258.397932817 runs/s

        RESULT Parser: query-selector-first= 253.466019656 runs/s
        median= 254.129606099 runs/s, stdev= 1.78002675664 runs/s, min= 247.831474597 runs/s, max= 254.777070064 runs/s

        RESULT Parser: query-selector-first= 256.245078189 runs/s
        median= 257.06940874 runs/s, stdev= 2.84722072201 runs/s, min= 249.687890137 runs/s, max= 259.74025974 runs/s

        RESULT Parser: query-selector-first= 252.203100497 runs/s
        median= 252.047989175 runs/s, stdev= 1.75233446036 runs/s, min= 248.138957816 runs/s, max= 255.427841635 runs/s

        [query-selector-last.html]
        RESULT Parser: query-selector-last= 356.009616076 runs/s
        median= 355.781448539 runs/s, stdev= 0.841519086864 runs/s, min= 354.430379747 runs/s, max= 358.056265985 runs/s

        RESULT Parser: query-selector-last= 360.735271001 runs/s
        median= 361.057532424 runs/s, stdev= 1.12253219867 runs/s, min= 358.514724712 runs/s, max= 362.225097025 runs/s

        RESULT Parser: query-selector-last= 359.598592463 runs/s
        median= 359.435173299 runs/s, stdev= 0.816538258728 runs/s, min= 358.056265985 runs/s, max= 360.824742268 runs/s

        RESULT Parser: query-selector-last= 357.260651715 runs/s
        median= 357.598978289 runs/s, stdev= 1.17393159885 runs/s, min= 353.982300885 runs/s, max= 358.974358974 runs/s

        RESULT Parser: query-selector-last= 351.696240713 runs/s
        median= 351.980025916 runs/s, stdev= 1.14200564038 runs/s, min= 348.692403487 runs/s, max= 353.535353535 runs/s

        * Parser/query-selector-first.html: Added.
        * Parser/query-selector-last.html: Added.

2012-05-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: introduce performance counter for HeapSnapshotConstructorsDataGrid._aggregatesReceived method.
        https://bugs.webkit.org/show_bug.cgi?id=87393

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html:

2012-05-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler's perf test: each N-th run pushes the run results N-th times.
        https://bugs.webkit.org/show_bug.cgi?id=87476

        The time tracking wrappers were attaching on each run.

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html:

2012-05-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler: upstream retainedSize calculation.
        https://bugs.webkit.org/show_bug.cgi?id=87107

        This patch upstreams V8::HeapSnapshotGenerator::CalculateRetainedSizes function to front-end.
        After that we will be able to drop retainedSize field from the snapshot serialized data.
        See meta-bug https://bugs.webkit.org/show_bug.cgi?id=87089

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html: add counter for the _calculateRetainedSize method.

2012-05-21  Kent Tamura  <tkent@chromium.org>

        Add performance tests for <textarea>
        https://bugs.webkit.org/show_bug.cgi?id=86994

        Reviewed by Ryosuke Niwa.

        * DOM/textarea-dom.html: Added.
        * DOM/textarea-edit.html: Added.
        * Parser/textarea-parsing.html: Added.

2012-05-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: upstream build dominators tree procedure from v8.
        https://bugs.webkit.org/show_bug.cgi?id=86640

        The idea is to reduce transfer size and move all the post-processing steps to the front-end.
        The JS implementation is ~1.5 times slower.

        Reviewed by Yury Semikhatsky.

        Covered by existing tests and performance tests.

        * inspector/heap-snapshot.html:

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Remove Bindings/dom-attributes.html
        https://bugs.webkit.org/show_bug.cgi?id=86820

        Reviewed by Ryosuke Niwa.

        Bindings/dom-attributes.html is just a collection of random
        DOM attributes and methods. Now we've added more reasonable
        micro benchmarks by classifying DOM binding call paths, we
        can remove Bindings/dom-attributes.html.

        * Bindings/dom-attributes.html: Removed.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for getElementById() for an undefined id
        https://bugs.webkit.org/show_bug.cgi?id=86812

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for document.getElementById() for an undefined id.
        This benchmark covers 'getElementById (not in document)' in Dromaeo/dom-query.html,
        and other Node-query methods that return a null.'

        (Note: This benchmark is slower than document.getElementById() for a defined id.
        We will fix the performance issue soon.)

        Test results in my Linux desktop:

        RESULT Bindings: undefined-get-element-by-id= 271.945751345 runs/s
        median= 273.122389532 runs/s, stdev= 6.78219237299 runs/s, min= 257.4002574 runs/s, max= 281.690140845 runs/s

        RESULT Bindings: undefined-get-element-by-id= 269.105872408 runs/s
        median= 268.948655257 runs/s, stdev= 5.73707323755 runs/s, min= 257.4002574 runs/s, max= 278.128950695 runs/s

        RESULT Bindings: undefined-get-element-by-id= 269.987513372 runs/s
        median= 272.952853598 runs/s, stdev= 5.30252336078 runs/s, min= 255.754475703 runs/s, max= 273.97260274 runs/s

        RESULT Bindings: undefined-get-element-by-id= 270.169625901 runs/s
        median= 271.604938272 runs/s, stdev= 5.29502391906 runs/s, min= 258.064516129 runs/s, max= 278.481012658 runs/s

        RESULT Bindings: undefined-get-element-by-id= 269.054631422 runs/s
        median= 267.966292802 runs/s, stdev= 6.27197240579 runs/s, min= 258.064516129 runs/s, max= 278.481012658 runs/s

        * Bindings/undefined-get-element-by-id.html: Added.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for getElementsByTagName()
        https://bugs.webkit.org/show_bug.cgi?id=86810

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for document.getElementsByTagName().
        This benchmark covers 'getElementsByTagName (not in document)',
        'getElementsByTagName', 'getElementsByName (not in document)'
        and 'getElementsByName' in Dromaeo/dom-query.html, and other DOM
        methods that return a NodeList.

        Test results in my Linux desktop:

        RESULT Bindings: get-elements-by-tag-name= 364.542328875 runs/s
        median= 366.972477064 runs/s, stdev= 5.25387955333 runs/s, min= 351.317440402 runs/s, max= 368.421052632 runs/s

        RESULT Bindings: get-elements-by-tag-name= 364.341569369 runs/s
        median= 366.492146597 runs/s, stdev= 4.867374197 runs/s, min= 352.644836272 runs/s, max= 367.936925099 runs/s

        RESULT Bindings: get-elements-by-tag-name= 363.924242967 runs/s
        median= 366.013071895 runs/s, stdev= 5.16768212289 runs/s, min= 351.317440402 runs/s, max= 367.936925099 runs/s

        RESULT Bindings: get-elements-by-tag-name= 365.332594438 runs/s
        median= 367.454068241 runs/s, stdev= 6.17046918572 runs/s, min= 350.0 runs/s, max= 370.37037037 runs/s

        RESULT Bindings: get-elements-by-tag-name= 363.999514324 runs/s
        median= 366.492146597 runs/s, stdev= 5.31235674905 runs/s, min= 350.877192982 runs/s, max= 368.421052632 runs/s

        * Bindings/get-elements-by-tag-name.html: Added.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add 7 micro benchmarks for DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=86816

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.
        This patch adds seven micro benchmarks for DOM bindings.

        id-getter.html covers 'element.property' in Dromaeo/dom-attr.html,
        'innerHTML' in Dromaeo/dom-modify.html, and other DOM attributes that
        return a String.

        id-setter.html covers 'element.property = value' in Dromaeo/dom-attr.html,
        and other DOM attributes that sets a String.

        undefined-id-getter.html covers undefined DOM attributes that return an empty String.

        append-child.html covers 'appendChild' and 'removeChild' in Dromaeo/dom-modify.html.

        insert-before.html covers 'insertBefore' in Dromaeo/dom-modify.html and replaceChild().

        create-element.html covers 'createElement', 'createTextNode' and 'cloneNode'
        in Dromaeo/dom-modify.html, and other DOM methods that return a new Node object.

        node-list-access.html covers 'childNodes' in Dromaeo/dom-traverse.html,
        and other DOM attributes that access NodeList.

        Test results in my Linux desktop:

        [id-getter]
        RESULT Bindings: id-getter= 550.517821097 runs/s
        median= 550.688360451 runs/s, stdev= 0.970723739106 runs/s, min= 548.628428928 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 550.655839847 runs/s
        median= 550.688360451 runs/s, stdev= 1.03312821884 runs/s, min= 549.313358302 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 550.277753355 runs/s
        median= 550.344180225 runs/s, stdev= 1.19960683464 runs/s, min= 547.945205479 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 550.072271009 runs/s
        median= 550.344180225 runs/s, stdev= 1.38925152131 runs/s, min= 547.263681592 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 548.802050235 runs/s
        median= 548.628428928 runs/s, stdev= 1.18244513683 runs/s, min= 545.905707196 runs/s, max= 550.688360451 runs/s

        [id-setter]
        RESULT Bindings: id-setter= 211.370591663 runs/s
        median= 210.803689065 runs/s, stdev= 1.4555795889 runs/s, min= 209.973753281 runs/s, max= 214.285714286 runs/s

        RESULT Bindings: id-setter= 215.439081352 runs/s
        median= 214.797136038 runs/s, stdev= 1.50920388121 runs/s, min= 213.049267643 runs/s, max= 218.446601942 runs/s

        RESULT Bindings: id-setter= 216.721698466 runs/s
        median= 215.956886352 runs/s, stdev= 1.54090749644 runs/s, min= 214.285714286 runs/s, max= 219.78021978 runs/s

        RESULT Bindings: id-setter= 216.343019087 runs/s
        median= 215.827338129 runs/s, stdev= 1.46619894553 runs/s, min= 215.053763441 runs/s, max= 218.97810219 runs/s

        RESULT Bindings: id-setter= 216.799288017 runs/s
        median= 215.956886352 runs/s, stdev= 1.49100776978 runs/s, min= 215.311004785 runs/s, max= 219.78021978 runs/s

        [undefined-id-getter]
        RESULT Bindings: undefined-id-getter= 494.104255241 runs/s
        median= 494.132368875 runs/s, stdev= 1.13092821109 runs/s, min= 490.797546012 runs/s, max= 495.662949195 runs/s

        RESULT Bindings: undefined-id-getter= 493.921802916 runs/s
        median= 493.827160494 runs/s, stdev= 1.25097443119 runs/s, min= 490.196078431 runs/s, max= 495.662949195 runs/s

        RESULT Bindings: undefined-id-getter= 491.976485667 runs/s
        median= 492.004920049 runs/s, stdev= 0.947090576896 runs/s, min= 490.196078431 runs/s, max= 493.827160494 runs/s

        RESULT Bindings: undefined-id-getter= 491.987710185 runs/s
        median= 494.132368875 runs/s, stdev= 8.66602543327 runs/s, min= 454.545454545 runs/s, max= 495.662949195 runs/s

        RESULT Bindings: undefined-id-getter= 494.195515847 runs/s
        median= 494.437577256 runs/s, stdev= 1.06135681702 runs/s, min= 490.797546012 runs/s, max= 495.662949195 runs/s

        [append-child]
        RESULT Bindings: append-child= 260.628237026 runs/s
        median= 260.926399352 runs/s, stdev= 2.55231060598 runs/s, min= 256.739409499 runs/s, max= 265.604249668 runs/s

        RESULT Bindings: append-child= 280.796193436 runs/s
        median= 280.791435348 runs/s, stdev= 2.53961321867 runs/s, min= 277.427490542 runs/s, max= 286.085825748 runs/s

        RESULT Bindings: append-child= 279.856209714 runs/s
        median= 280.25477707 runs/s, stdev= 2.85447647301 runs/s, min= 275.344180225 runs/s, max= 284.237726098 runs/s

        RESULT Bindings: append-child= 280.834502714 runs/s
        median= 280.25477707 runs/s, stdev= 2.67738046429 runs/s, min= 277.427490542 runs/s, max= 287.206266319 runs/s

        RESULT Bindings: append-child= 274.723872106 runs/s
        median= 273.291925466 runs/s, stdev= 3.03671746706 runs/s, min= 272.614622057 runs/s, max= 282.413350449 runs/s

        [insert-before]
        RESULT Bindings: insert-before= 180.986913006 runs/s
        median= 180.878552972 runs/s, stdev= 0.758038687299 runs/s, min= 180.18018018 runs/s, max= 183.968462549 runs/s

        RESULT Bindings: insert-before= 186.339916144 runs/s
        median= 186.170212766 runs/s, stdev= 0.869022097127 runs/s, min= 185.676392573 runs/s, max= 189.798339265 runs/s

        RESULT Bindings: insert-before= 189.45344838 runs/s
        median= 189.349112426 runs/s, stdev= 0.811854866567 runs/s, min= 187.79342723 runs/s, max= 192.539109507 runs/s

        RESULT Bindings: insert-before= 189.363295991 runs/s
        median= 189.349112426 runs/s, stdev= 0.75387713097 runs/s, min= 188.014101058 runs/s, max= 192.076830732 runs/s

        RESULT Bindings: insert-before= 189.252041642 runs/s
        median= 189.349112426 runs/s, stdev= 0.840447225363 runs/s, min= 187.573270809 runs/s, max= 192.076830732 runs/s

        [create-element]
        RESULT Bindings: create-element= 280.675830077 runs/s
        median= 280.701824914 runs/s, stdev= 0.788606343054 runs/s, min= 279.441117764 runs/s, max= 282.542885974 runs/s

        RESULT Bindings: create-element= 276.427631436 runs/s
        median= 277.227722772 runs/s, stdev= 3.39874667549 runs/s, min= 262.417994377 runs/s, max= 279.162512463 runs/s

        RESULT Bindings: create-element= 277.156894411 runs/s
        median= 277.227722772 runs/s, stdev= 1.13255119226 runs/s, min= 274.914089347 runs/s, max= 278.884462151 runs/s

        RESULT Bindings: create-element= 278.066825356 runs/s
        median= 278.191822254 runs/s, stdev= 0.686497782792 runs/s, min= 276.953511375 runs/s, max= 279.162512463 runs/s

        RESULT Bindings: create-element= 276.431538109 runs/s
        median= 276.406712734 runs/s, stdev= 0.759593662298 runs/s, min= 275.229357798 runs/s, max= 278.053624628 runs/s

        [node-list-access]
        RESULT Bindings: node-list-access= 222.747504073 runs/s
        median= 222.772277228 runs/s, stdev= 0.789027527555 runs/s, min= 221.674876847 runs/s, max= 224.159402242 runs/s

        RESULT Bindings: node-list-access= 220.722448287 runs/s
        median= 221.266217576 runs/s, stdev= 1.65463497875 runs/s, min= 217.391304348 runs/s, max= 222.222222222 runs/s

        RESULT Bindings: node-list-access= 222.195870443 runs/s
        median= 222.222222222 runs/s, stdev= 0.489709262091 runs/s, min= 221.13022113 runs/s, max= 223.048327138 runs/s

        RESULT Bindings: node-list-access= 221.431121677 runs/s
        median= 221.538545435 runs/s, stdev= 0.608292116087 runs/s, min= 220.048899756 runs/s, max= 222.772277228 runs/s

        RESULT Bindings: node-list-access= 219.001367135 runs/s
        median= 221.538545435 runs/s, stdev= 4.65773933007 runs/s, min= 209.973753281 runs/s, max= 222.496909765 runs/s

        * Bindings/append-child.html: Added.
        * Bindings/create-element.html: Added.
        * Bindings/id-getter.html: Added.
        * Bindings/id-setter.html: Added.
        * Bindings/insert-before.html: Added.
        * Bindings/node-list-access.html: Added.
        * Bindings/undefined-id-getter.html: Added.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for div.setAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=86815

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for div.setAttribute(). This benchmark
        covers 'setAttribute' in Dromaeo/dom-attr.html and other DOM methods
        that return an undefined.

        Test results in my Linux desktop:

        RESULT Bindings: set-attribute= 793.745073252 runs/s
        median= 791.589665765 runs/s, stdev= 6.00467159709 runs/s, min= 785.27607362 runs/s, max= 808.080808081 runs/s

        RESULT Bindings: set-attribute= 790.858444164 runs/s
        median= 787.918921436 runs/s, stdev= 7.86264953655 runs/s, min= 780.234070221 runs/s, max= 806.04534005 runs/s

        RESULT Bindings: set-attribute= 787.277571417 runs/s
        median= 784.31372549 runs/s, stdev= 7.45363346657 runs/s, min= 778.588807786 runs/s, max= 804.020100503 runs/s

        RESULT Bindings: set-attribute= 782.401393791 runs/s
        median= 779.062978802 runs/s, stdev= 6.48250081621 runs/s, min= 777.642770352 runs/s, max= 796.019900498 runs/s

        RESULT Bindings: set-attribute= 791.792516608 runs/s
        median= 791.556728232 runs/s, stdev= 6.49182980397 runs/s, min= 779.220779221 runs/s, max= 808.080808081 runs/s

        * Bindings/set-attribute.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for div.getAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=86814

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for div.getAttribute(). This benchmark
        covers 'getAttribute' in Dromaeo/dom-attr.html, and other DOM methods
        that return a String.

        Test results in my Linux desktop:

        RESULT Bindings: get-attribute= 250.088158538 runs/s
        median= 250.469728765 runs/s, stdev= 4.66551901315 runs/s, min= 240.673886883 runs/s, max= 256.739409499 runs/s

        RESULT Bindings: get-attribute= 250.209764698 runs/s
        median= 250.626959986 runs/s, stdev= 4.12030002477 runs/s, min= 241.254523522 runs/s, max= 255.102040816 runs/s

        RESULT Bindings: get-attribute= 248.907532887 runs/s
        median= 250.312891114 runs/s, stdev= 3.23173125874 runs/s, min= 240.673886883 runs/s, max= 251.572327044 runs/s

        RESULT Bindings: get-attribute= 250.243680844 runs/s
        median= 250.783797637 runs/s, stdev= 4.19327170024 runs/s, min= 240.963855422 runs/s, max= 255.102040816 runs/s

        RESULT Bindings: get-attribute= 245.329046608 runs/s
        median= 244.948040416 runs/s, stdev= 2.24314248534 runs/s, min= 240.384615385 runs/s, max= 248.756218905 runs/s

        * Bindings/get-attribute.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for getElementById()
        https://bugs.webkit.org/show_bug.cgi?id=86808

        Reviewed by Ryosuke Niwa.

        Currently Bindings/dom-attributes.html is just a collection
        of random DOM attributes and methods. We should remove it and
        instead add more reasonable micro benchmarks by classifying
        DOM binding call paths.

        This patch adds a benchmark for document.getElementById(),
        which covers other DOM methods that return a Node Object.

        The reason why we want to add a benchmark for document.getElementById()
        in spite of the fact that Dromaeo/dom-query.html is already testing
        document.getElementById(), is that Dromaeo/dom-query.html outputs one
        result for several benchmarks (i.e. getElementById().nodeType,
        getElementsByTagName()[0].nodeType etc), and thus we cannot observe
        regression of getElementById() itself. (Catching regression of
        getElementById() would be critical.)

        Test results in my Linux desktop:

        RESULT Bindings: get-element-by-id= 300.933707795 runs/s
        median= 302.267002519 runs/s, stdev= 3.04954648504 runs/s, min= 295.930949445 runs/s, max= 305.34351145 runs/s

        RESULT Bindings: get-element-by-id= 302.030324483 runs/s
        median= 302.267481977 runs/s, stdev= 1.78518068367 runs/s, min= 298.507462687 runs/s, max= 304.568527919 runs/s

        RESULT Bindings: get-element-by-id= 301.993483538 runs/s
        median= 302.648171501 runs/s, stdev= 1.87604126626 runs/s, min= 296.662546354 runs/s, max= 304.568527919 runs/s

        RESULT Bindings: get-element-by-id= 301.936607982 runs/s
        median= 302.45758701 runs/s, stdev= 1.88991087072 runs/s, min= 298.879202989 runs/s, max= 304.955527319 runs/s

        RESULT Bindings: get-element-by-id= 301.952234563 runs/s
        median= 302.648171501 runs/s, stdev= 1.59929752614 runs/s, min= 299.625468165 runs/s, max= 304.568527919 runs/s

        * Bindings/get-element-by-id.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a benchmark for body.scrollTop
        https://bugs.webkit.org/show_bug.cgi?id=86806

        Reviewed by Ryosuke Niwa.

        Currently Bindings/dom-attributes.html is just a collection of random
        DOM attributes and methods. We should remove it and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for body.scrollTop, which covers other
        DOM attributes that return small integers.

        (Note: Performance optimization for the benchmark will be coming soon.)

        Test results in my Linux desktop:

        RESULT Bindings: scroll-top= 209.410654239 runs/s
        median= 211.64021164 runs/s, stdev= 4.09958741195 runs/s, min= 201.005025126 runs/s, max= 212.483399734 runs/s

        RESULT Bindings: scroll-top= 195.651111157 runs/s
        median= 196.319018405 runs/s, stdev= 1.77011627406 runs/s, min= 191.846522782 runs/s, max= 197.28729963 runs/s
        RESULT Bindings: scroll-top= 200.004907612 runs/s
        median= 201.511335013 runs/s, stdev= 3.27455403827 runs/s, min= 193.236714976 runs/s, max= 202.53164557 runs/s

        RESULT Bindings: scroll-top= 209.582737512 runs/s
        median= 210.803689065 runs/s, stdev= 3.16769655464 runs/s, min= 203.045685279 runs/s, max= 211.920529801 runs/s

        RESULT Bindings: scroll-top= 199.924607687 runs/s
        median= 201.13144338 runs/s, stdev= 3.11080503619 runs/s, min= 193.003618818 runs/s, max= 202.02020202 runs/s

        * Bindings/scroll-top.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a micro benchmark for div.firstChild getter for an undefined firstChild
        https://bugs.webkit.org/show_bug.cgi?id=86725

        Reviewed by Ryosuke Niwa.

        We are going to remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        In this bug, we add a micro benchmark for div.firstChild getter for an
        undefined firstChild. This benchmark covers other undefined DOM attributes
        that return a null.

        (Note: In V8, div.firstChild for an undefined firstChild is currently slower
        than div.firstChild for a defined firstChild.)

        Test results in my Linux desktop:

        RESULT Bindings: undefined-first-child= 541.408311042 runs/s
        median= 541.205412054 runs/s, stdev= 1.29841219187 runs/s, min= 537.897310513 runs/s, max= 543.209876543 runs/s

        RESULT Bindings: undefined-first-child= 541.00750695 runs/s
        median= 540.540540541 runs/s, stdev= 0.967521230965 runs/s, min= 539.215686275 runs/s, max= 543.209876543 runs/s

        RESULT Bindings: undefined-first-child= 523.630714897 runs/s
        median= 523.560209424 runs/s, stdev= 1.01570919645 runs/s, min= 522.193211488 runs/s, max= 525.624178712 runs/s

        RESULT Bindings: undefined-first-child= 553.077663588 runs/s
        median= 553.459119497 runs/s, stdev= 0.805697397863 runs/s, min= 551.378446115 runs/s, max= 554.156171285 runs/s

        RESULT Bindings: undefined-first-child= 541.5401432 runs/s
        median= 541.538666618 runs/s, stdev= 0.954301364767 runs/s, min= 539.877300613 runs/s, max= 543.209876543 runs/s

        * Bindings/undefined-first-child.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [Performance test] Add a micro benchmark for div.firstChild getter
        https://bugs.webkit.org/show_bug.cgi?id=86582

        Reviewed by Ryosuke Niwa.

        We are going to remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        In this bug, we add a micro benchmark for div.firstChild getter.
        This benchmark covers 'firstChild', 'lastChild', 'nextSibling' and
        'previousSibling' in Dromaeo/dom-traverse.html, and other DOM attributes
        that return a Node object.

        Multiple test results in my Linux desktop:

        RESULT Bindings: first-child= 798.157160346 runs/s
        median= 798.004987531 runs/s, stdev= 1.52006063407 runs/s, min= 796.019900498 runs/s, max= 801.001251564 runs/s
        RESULT Bindings: first-child= 797.603608554 runs/s
        median= 797.872340426 runs/s, stdev= 2.2522621261 runs/s, min= 791.556728232 runs/s, max= 801.001251564 runs/s
        RESULT Bindings: first-child= 798.656295468 runs/s
        median= 798.004987531 runs/s, stdev= 1.79367478063 runs/s, min= 797.01120797 runs/s, max= 803.011292346 runs/s
        RESULT Bindings: first-child= 797.812784267 runs/s
        median= 798.004987531 runs/s, stdev= 2.31766523191 runs/s, min= 791.100123609 runs/s, max= 802.005012531 runs/s
        RESULT Bindings: first-child= 797.963311597 runs/s
        median= 798.004987531 runs/s, stdev= 2.53014907337 runs/s, min= 789.14919852 runs/s, max= 801.001251564 runs/s

        * Bindings/first-child.html: Added.

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [Performance test] Support "description" for PerfTestRunner.run and PerfTestRunner.runPerSecond
        https://bugs.webkit.org/show_bug.cgi?id=86696

        Reviewed by Ryosuke Niwa.

        We want to add some description for each PerfTestRunner.run and
        PerfTestRunner.runPerSecond, so that people can know what each
        run is testing.

        Output example:

        $ ./Tools/Scripts/run-perf-tests Bindings/first-child.html
        Running Bindings/first-child.html (1 of 1)
        DESCRIPTION: Benchmark for DOM attributes that return a Node object.
        RESULT Bindings: first-child= 788.359076534 runs/s
        median= 797.508097751 runs/s, stdev= 19.0972905207 runs/s, min= 746.666666667 runs/s, max= 801.001251564 runs/s

        * resources/runner.js:
        (PerfTestRunner.logStatistics):
        (PerfTestRunner.printStatistics):
        (PerfTestRunner.runPerSecond):

2012-05-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix heap profiler performance test after r117234.

        * inspector/heap-snapshot.html:

2012-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Convert CSS and Parser tests to runs/s tests
        https://bugs.webkit.org/show_bug.cgi?id=86399

        Reviewed by Ojan Vafai.

        Use runPerSecond instead of run to measure results in function calls per second (run/s) instead of time (ms).
        This allows us to continue measuring performance reliably even when WebKit's performance improves and results
        become too small for Date.now()'s precision (around 15 ms).

        It should also reduce perf. bots cycle time for slower tests because we limit the number of function calls by time.

        * CSS/CSSPropertySetterGetter.html:
        * CSS/CSSPropertyUpdateValue.html:
        * Parser/css-parser-yui.html:
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:

2012-05-14  Dan Bernstein  <mitz@apple.com>

        Add a line layout performance test
        https://bugs.webkit.org/show_bug.cgi?id=86216

        Reviewed by Ryosuke Niwa.

        * Layout/line-layout.html: Added.

2012-05-14  Tony Chang  <tony@chromium.org>

        Don't append log lines while perf tests are running.
        https://bugs.webkit.org/show_bug.cgi?id=86028

        Reviewed by Ryosuke Niwa.

        In some tests, the extra DOM nodes can cause the test timing to change.
        Avoid adding DOM nodes until the test is over. When running in a browser,
        we append nodes as we run so the user can have some feedback.

        * resources/runner.js:
        (PerfTestRunner.log): Store the log lines in an array until the test is finished.

2012-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Don't adjust calls per iteration in the second run.

        * resources/runner.js:
        (PerfTestRunner._perSecondRunner):

2012-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        performance tests should be able to measure runs/sec rather than time
        https://bugs.webkit.org/show_bug.cgi?id=86021

        Reviewed by Ojan Vafai.

        Add PerfTestRunner.runPerSecond. It uses _runLoop but replaces _runner by _perSecondRunner
        to compute runs/s of runFunction.

        When _perSecondRunner is called for the first time, i.e. _completedRuns is 0 (notice this is -1
        in regular run/_runner), it slowly increases the number of function calls to runFunction between
        time measurements in order to discount the time used by new Date() calls themselves until the
        total time spent reaches 100 milliseconds.

        By default, runPerSecond runs the test for at least 750 milliseconds in each run, and executes
        21 runs, yielding the total run time of roughly 18 seconds. This is significantly faster than
        most of existing performance tests. Also see http://ejohn.org/blog/accuracy-of-javascript-time/.

        Finally, refactored the existing methods of PerfTestRunner to allow "runs/s" unit and share code.

        * Layout/flexbox-column-nowrap.html:
        * Layout/flexbox-column-wrap.html:
        * Layout/flexbox-row-nowrap.html:
        * Layout/flexbox-row-wrap.html:
        * resources/runner.js:
        (PerfTestRunner.computeStatistics): Takes unit.
        (PerfTestRunner.logStatistics): Ditto.
        (PerfTestRunner._runLoop):
        (PerfTestRunner._runner):
        (PerfTestRunner.runPerSecond): Added.
        (PerfTestRunner._perSecondRunner): Added. Called by _runLoop.
        (PerfTestRunner._perSecondRunnerIterator): Added.

2012-05-09  Tony Chang  <tony@chromium.org>

        add some basic perf-o-matic tests for flexbox
        https://bugs.webkit.org/show_bug.cgi?id=86017

        Reviewed by Ryosuke Niwa.

        Each of these tests take < 3s on my machine.

        * Layout/flexbox-column-nowrap.html: Added.
        * Layout/flexbox-column-wrap.html: Added.
        * Layout/flexbox-row-nowrap.html: Added.
        * Layout/flexbox-row-wrap.html: Added.

2012-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: unreviewed followup fix for the performance test after r116218.

        * inspector/heap-snapshot.html:

2012-05-02  Tom Zakrajsek  <tomz@codeaurora.org>

        Need tests for PerfTestRunner.computeStatistics
        https://bugs.webkit.org/show_bug.cgi?id=85410

        Reviewed by Ryosuke Niwa.

        * resources/runner.js:

2012-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115905.
        http://trac.webkit.org/changeset/115905
        https://bugs.webkit.org/show_bug.cgi?id=85435

        New computeStatistics test is failing on chromium ports
        (Requested by tomz on #webkit).

        * resources/runner.js:

2012-05-02  Tom Zakrajsek  <tomz@codeaurora.org>

        Need tests for PerfTestRunner.computeStatistics
        https://bugs.webkit.org/show_bug.cgi?id=85410

        Reviewed by Ryosuke Niwa.

        * resources/runner.js:

2012-04-29  Tom Zakrajsek  <tomz@codeaurora.org>

        PerfTestRunner.computeStatistics incorrectly calculates min, max and median
        https://bugs.webkit.org/show_bug.cgi?id=85111

        Reviewed by Ryosuke Niwa.

        The sort of the data input was being done alphabetically.
        So I provided a numeric compare function.

        * resources/runner.js:

2012-04-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: the fix for test after massive rename in r114271.
        https://bugs.webkit.org/show_bug.cgi?id=84147

        Drive by fix. The test was renamed to heap-snapshot.html

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html: Renamed from PerformanceTests/inspector/detailed-heapshots-smoke-test.html.

2012-04-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename heap profiler files and classes DetailedHeapshot* ->HeapSnapshot*
        https://bugs.webkit.org/show_bug.cgi?id=84038

        A bunch of renames "detailed heapshot" -> "heap snapshot".

        Reviewed by Pavel Feldman.

        * inspector/detailed-heapshots-smoke-test.html:

2012-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Fix skipped list.

        * Skipped:

2012-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Enable SVG page loading performance tests
        https://bugs.webkit.org/show_bug.cgi?id=83861

        Reviewed by Adam Barth.

        Unskip PageLoad directory and skip tests that load too fast (less than 100ms) and are unstable,
        and the ones that take too long to load (more than 20s).

        * Skipped:

2012-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Unreviewed. temporary disable broken inspector tests.

        * inspector/first-open-scripts.html.broken: Renamed from PerformanceTests/inspector/first-open-scripts.html.
        * inspector/network-append-30-requests.html.broken: Renamed from PerformanceTests/inspector/network-append-30-requests.html.
        * inspector/show-panel.html.broken: Renamed from PerformanceTests/inspector/show-panel.html.

2012-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: linearise aggregate's retaining size calculation.
        https://bugs.webkit.org/show_bug.cgi?id=83125

        This version is twice as fast as the original and it is non-recursive.

        Reviewed by Yury Semikhatsky.

        * inspector/detailed-heapshots-smoke-test.html:

2012-03-30  David Barr  <davidbarr@chromium.org>

        Split up top-level .gitignore and .gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=82687

        Reviewed by Tor Arne Vestbø.

        * .gitattributes: Added.

2012-03-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: switch heap profiler front-end to separate storage of nodes and edges
        https://bugs.webkit.org/show_bug.cgi?id=82453

        Updated heap profiler performance test after heap profiler front-end
        changes.

        Reviewed by Pavel Feldman.

        * inspector/detailed-heapshots-smoke-test.html:

2012-03-27  Alexis Menard  <alexis.menard@openbossa.org>

        Add a perf test which updates the value of an already declared CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=82321

        Reviewed by Andreas Kling.

        This benchmark update CSS existing properties of the style from JS.

        * CSS/CSSPropertyUpdateValue.html: Added.

2012-03-15  Kentaro Hara  <haraken@chromium.org>

        [PerformanceTests] run-perf-tests should output correct units
        https://bugs.webkit.org/show_bug.cgi?id=78303

        Reviewed by Ryosuke Niwa.

        Previously run-perf-tests just supported "ms" for units.
        Consequently, Dromaeo perf tests had been reporting runs/s as "ms".
        This patch fixes run-perf-tests so that they can support custom units.
        The default unit is "ms".

        The test result looks like this:

        $ ./Tools/Scripts/run-perf-tests Dromaeo/dom-attr.html
        RESULT Dromaeo: dom-attr= 6465.9525483 runs/s
        median= 0.0 runs/s, stdev= 24.2983433436 runs/s, min= 6435.87649402 runs/s, max= 6515.63693392 runs/s

        * Dromaeo/resources/dromaeorunner.js:
        (.):
        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-03-15  Alexis Menard  <alexis.menard@openbossa.org>

        Fix the test failing with run-perf-tests.

        Rubber stamped by Ryosuke Niwa.

        * CSS/CSSPropertySetterGetter.html:

2012-03-14  Alexis Menard  <alexis.menard@openbossa.org>

        Add a new perf test to benchmark setting and reading CSS properties from JS.
        https://bugs.webkit.org/show_bug.cgi?id=81155

        Reviewed by Ryosuke Niwa.

        This benchmark read and set CSS properties from JS. It contains a list
        of common CSS properties.

        * CSS/CSSPropertySetterGetter.html: Added.

2012-03-14  Alexandru Chiculita  <achicu@adobe.com>

        Layout/floats.html should be runnable by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=77051

        Reviewed by Ryosuke Niwa.

        I've split Layout/floats.html into multiple tests for each button in the original manual test.
        Some tests take longer to run and I've changed the number of iterations, so that each tests finishes under 30s per run.

        * DOM/resources/dom-perf.js:
        * Layout/floats.html: Removed.
        * Layout/floats_100_100.html: Added.
        * Layout/floats_100_100_nested.html: Added.
        * Layout/floats_20_100.html: Added.
        * Layout/floats_20_100_nested.html: Added.
        * Layout/floats_2_100.html: Added.
        * Layout/floats_2_100_nested.html: Added.
        * Layout/floats_50_100.html: Added.
        * Layout/floats_50_100_nested.html: Added.
        * Layout/resources/floats.css: Added.
        (.container):
        (.float):
        (.big):
        (.float-end):
        * Layout/resources/floats.js: Added.
        (.):
        * Skipped:
        * resources/runner.js:
        (PerfTestRunner.resetRandomSeed):
        (PerfTestRunner.random):
        (Math.random):
            Moved the Math.random to runner.js to be used by all tests.
            Added resetRandomSeed to bring the randomizer back to initial seed.
            It is useful to get the same results at every run and minimize the
            differences between runs.

2012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110559.
        http://trac.webkit.org/changeset/110559
        https://bugs.webkit.org/show_bug.cgi?id=81142

        Broke Dromaeo tests (Requested by rniwa on #webkit).

        * Dromaeo/resources/dromaeorunner.js:
        (.):

2012-03-13  Kentaro Hara  <haraken@chromium.org>

        Dromaeo perf-tests results are wrong
        https://bugs.webkit.org/show_bug.cgi?id=80974

        Reviewed by Hajime Morita.

        Dromaeo perf-tests had reported the sum of runs/seconds as "ms".
        This patch fixes them to report the execution time per run.

        At present, they report "0.0ms" for "stdev". This is because
        dromaeorunner.js can just know stdev of "runs/seconds"
        and cannot calculate stdev of "ms" from that. We can fix it later.

        * Dromaeo/resources/dromaeorunner.js:
        (.):

2012-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: increase heap snapshot performance coverage.
        https://bugs.webkit.org/show_bug.cgi?id=80829

        Reviewed by Yury Semikhatsky.

        * inspector/detailed-heapshots-smoke-test.html:
        * inspector/performance-test.js:
        (initialize_TimeTracker.InspectorTest.measureFunction):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        [Perf tests] Reduce the number of loops in dom-attributes.html
        https://bugs.webkit.org/show_bug.cgi?id=80077

        Reviewed by Ryosuke Niwa.

        dom-attributes.html takes 100~ seconds in the perf bots. This patch reduces
        the time by reducing the number of loops.

        This is just a temporary fix. After more detailed investigation, I will reduce
        the number of tests in dom-attributes.html, and revert back the number of loops
        to guarantee the reliability of the perf test results.

        * Bindings/dom-attributes.html:

2012-03-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Heap Snapshot test: split overal time metric into separate metrics.
        https://bugs.webkit.org/show_bug.cgi?id=80409

        Reviewed by Yury Semikhatsky.

        * inspector/detailed-heapshots-smoke-test.html:

2012-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: [chromium] introduce HeapSnapshot performance test.
        https://bugs.webkit.org/show_bug.cgi?id=80280

        Reviewed by Pavel Feldman.

        * inspector/detailed-heapshots-smoke-test.html: Added.

2012-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        DOM tests take too long to run
        https://bugs.webkit.org/show_bug.cgi?id=80082

        Reviewed by Eric Seidel.

        Reduce benchmark.timeToRun from 500ms to 100ms. Doesn't seem to affect test results much
        (except DOM/DOMTable.html) but significantly reduces the runtime of tests.

        * DOM/resources/dom-perf.js:
        (BenchmarkSuite.prototype.RunSingle):

2012-02-26  Kentaro Hara  <haraken@chromium.org>

        [Performance Tests] [Chromium] Bindings/dom-attributes.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=79593

        Reviewed by Adam Barth.

        This patch halves the execution time of Bindings/dom-attributes.html
        in order to avoid timeout in Chromium. The reason for the timeout is that
        V8 DOM bindings are too much slower than JSC bindings.
        I am a bit afraid that this patch will reduce the accuracy of the
        perf test results, but it would make sense to reduce the execution time
        until we fix the performance issue in V8 DOM bindings.

        * Bindings/dom-attributes.html:

2012-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Rename dom*_*attributes.html to dom*-*attributes.html to follow the WebKit convention.

        * Bindings/dom-attributes.html: Copied from PerformanceTests/Bindings/dom_attributes.html.
        * Bindings/dom_attributes.html: Removed.

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r108477.
        http://trac.webkit.org/changeset/108477
        https://bugs.webkit.org/show_bug.cgi?id=79209

        The perf tests committed in r108748 covers the perf tests
        committed in r108477. So I'll roll out r108477.

        * Bindings/dom_attributes_id_getter.html: Removed.
        * Bindings/dom_attributes_id_setter.html: Removed.
        * Bindings/resources/dom_attributes_common.js: Removed.

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Add performance tests for DOM attribute getters and setters
        https://bugs.webkit.org/show_bug.cgi?id=79208

        Reviewed by Ryosuke Niwa.

        This patch adds performance micro-benchmarks for DOM attribute
        getters and setters. We selected DOM attributes from HTMLElement,
        Element and Node which will most impact on the DOM performance
        in the real Web and which have different call-paths from another
        DOM attribute.

        The perf test result in my local Chromium/Linux environment is as follows:
        median= 14967.0 ms, stdev= 85.2385476178 ms, min= 14861.0 ms, max= 15155.0 ms

        If we run the test with DumpRenderTree, we can get the following test results:
        Info: [HTMLElement.id] avg=65.76ms, median=65.00ms, stdev=2.14ms, min=63, max=70
        Info: [HTMLElement.title] avg=64.05ms, median=63.00ms, stdev=1.50ms, min=63, max=67
        Info: [HTMLElement.lang] avg=64.19ms, median=63.00ms, stdev=1.82ms, min=62, max=67
        Info: [HTMLElement.dir] avg=64.10ms, median=63.00ms, stdev=1.72ms, min=62, max=68
        Info: [HTMLElement.className] avg=63.33ms, median=63.00ms, stdev=0.89ms, min=63, max=67
        Info: [HTMLElement.classList] avg=1946.00ms, median=1945.00ms, stdev=38.22ms, min=1921, max=2110
        Info: [HTMLElement.tabIndex] avg=83.52ms, median=80.00ms, stdev=6.00ms, min=79, max=94
        Info: [HTMLElement.draggable] avg=78.14ms, median=81.00ms, stdev=3.51ms, min=74, max=82
        Info: [HTMLElement.webkitdropzone] avg=64.33ms, median=63.00ms, stdev=1.98ms, min=63, max=68
        Info: [HTMLElement.hidden] avg=65.57ms, median=64.00ms, stdev=3.27ms, min=63, max=71
        Info: [HTMLElement.accessKey] avg=64.43ms, median=63.00ms, stdev=2.11ms, min=62, max=68
        Info: [HTMLElement.children] avg=130.76ms, median=128.00ms, stdev=9.75ms, min=109, max=143
        Info: [HTMLElement.isContentEditable] avg=74.29ms, median=75.00ms, stdev=2.00ms, min=71, max=77
        Info: [HTMLElement.spellcheck] avg=79.52ms, median=80.00ms, stdev=2.52ms, min=76, max=82
        Info: [HTMLElement.innerHTML] avg=279.05ms, median=279.00ms, stdev=1.96ms, min=276, max=283
        Info: [HTMLElement.innerText] avg=204.14ms, median=203.00ms, stdev=2.95ms, min=200, max=210
        Info: [HTMLElement.outerHTML] avg=1544.10ms, median=1546.00ms, stdev=15.56ms, min=1514, max=1568
        Info: [HTMLElement.outerText] avg=216.05ms, median=207.00ms, stdev=18.19ms, min=201, max=247
        Info: [HTMLElement.contentEditable] avg=334.24ms, median=323.00ms, stdev=36.06ms, min=318, max=446
        Info: [HTMLElement.id="foo"] avg=53.19ms, median=53.00ms, stdev=1.76ms, min=52, max=58
        Info: [HTMLElement.title="foo"] avg=63.14ms, median=63.00ms, stdev=0.35ms, min=63, max=64
        Info: [HTMLElement.lang="foo"] avg=60.86ms, median=61.00ms, stdev=0.56ms, min=60, max=62
        Info: [HTMLElement.dir="foo"] avg=53.57ms, median=54.00ms, stdev=0.58ms, min=53, max=55
        Info: [HTMLElement.className="foo"] avg=64.52ms, median=64.00ms, stdev=0.91ms, min=63, max=66
        Info: [HTMLElement.tabIndex="foo"] avg=367.86ms, median=369.00ms, stdev=8.06ms, min=352, max=380
        Info: [HTMLElement.draggable="foo"] avg=79.43ms, median=79.00ms, stdev=0.58ms, min=79, max=81
        Info: [HTMLElement.webkitdropzone="foo"] avg=62.14ms, median=62.00ms, stdev=0.35ms, min=62, max=63
        Info: [HTMLElement.hidden="foo"] avg=61.67ms, median=62.00ms, stdev=0.71ms, min=61, max=64
        Info: [HTMLElement.accessKey="foo"] avg=61.86ms, median=62.00ms, stdev=0.56ms, min=61, max=63
        Info: [HTMLElement.spellcheck="foo"] avg=79.57ms, median=80.00ms, stdev=0.58ms, min=78, max=80
        Info: [HTMLElement.innerHTML="foo"] avg=1176.67ms, median=1169.00ms, stdev=26.60ms, min=1146, max=1246
        Info: [HTMLElement.innerText="foo"] avg=51.62ms, median=52.00ms, stdev=0.72ms, min=50, max=53
        Info: [Element.tagName] avg=79.52ms, median=80.00ms, stdev=1.05ms, min=78, max=81
        Info: [Element.style] avg=126.19ms, median=126.00ms, stdev=10.40ms, min=104, max=161
        Info: [Element.offsetLeft] avg=98.95ms, median=104.00ms, stdev=4.01ms, min=100, max=99
        Info: [Element.clientLeft] avg=98.33ms, median=102.00ms, stdev=2.59ms, min=100, max=99
        Info: [Element.scrollLeft] avg=103.29ms, median=96.00ms, stdev=15.63ms, min=100, max=97
        Info: [Element.dataset] avg=2448.62ms, median=2441.00ms, stdev=20.43ms, min=2426, max=2503
        Info: [Element.firstElementChild] avg=58.71ms, median=58.00ms, stdev=2.37ms, min=57, max=65
        Info: [Element.lastElementChild] avg=56.33ms, median=55.00ms, stdev=1.83ms, min=54, max=59
        Info: [Element.previousElementSibling] avg=52.95ms, median=52.00ms, stdev=1.70ms, min=52, max=57
        Info: [Element.nextElementSibling] avg=58.48ms, median=58.00ms, stdev=1.79ms, min=57, max=63
        Info: [Element.childElementCount] avg=64.57ms, median=64.00ms, stdev=1.81ms, min=63, max=71
        Info: [Element.onload] avg=98.38ms, median=98.00ms, stdev=0.49ms, min=98, max=99
        Info: [Element.scrollLeft="foo"] avg=95.24ms, median=95.00ms, stdev=0.92ms, min=94, max=98
        Info: [Element.onload="foo"] avg=67.14ms, median=67.00ms, stdev=0.56ms, min=66, max=68
        Info: [Node.nodeName] avg=76.29ms, median=76.00ms, stdev=0.63ms, min=75, max=77
        Info: [Node.nodeType] avg=53.05ms, median=52.00ms, stdev=2.61ms, min=52, max=61
        Info: [Node.parentNode] avg=53.52ms, median=53.00ms, stdev=1.22ms, min=52, max=56
        Info: [Node.childNodes] avg=118.33ms, median=123.00ms, stdev=8.85ms, min=107, max=129
        Info: [Node.firstChild] avg=53.62ms, median=53.00ms, stdev=1.13ms, min=51, max=55
        Info: [Node.lastChild] avg=53.14ms, median=53.00ms, stdev=1.21ms, min=52, max=55
        Info: [Node.previousSibling] avg=51.86ms, median=51.00ms, stdev=1.55ms, min=50, max=54
        Info: [Node.nextSibling] avg=52.86ms, median=54.00ms, stdev=1.81ms, min=50, max=55
        Info: [Node.attributes] avg=2027.71ms, median=2026.00ms, stdev=10.48ms, min=2010, max=2051
        Info: [Node.ownerDocument] avg=152.14ms, median=152.00ms, stdev=1.73ms, min=149, max=155
        Info: [Node.namespaceURI] avg=60.86ms, median=59.00ms, stdev=3.85ms, min=56, max=66
        Info: [Node.localName] avg=60.00ms, median=59.00ms, stdev=2.71ms, min=57, max=66
        Info: [Node.baseURI] avg=671.10ms, median=668.00ms, stdev=10.66ms, min=659, max=706
        Info: [Node.parentElement] avg=55.05ms, median=56.00ms, stdev=2.15ms, min=52, max=58
        Info: [Node.nodeValue] avg=61.24ms, median=60.00ms, stdev=2.56ms, min=59, max=68
        Info: [Node.prefix] avg=60.90ms, median=58.00ms, stdev=4.26ms, min=57, max=68
        Info: [Node.textContent] avg=149.71ms, median=149.00ms, stdev=1.12ms, min=148, max=152
        Info: [Node.nodeValue="foo"] avg=23.62ms, median=23.00ms, stdev=0.72ms, min=23, max=25
        Info: [Node.prefix="foo"] avg=49.57ms, median=49.00ms, stdev=0.73ms, min=49, max=51
        Info: [Node.textContent="foo"] avg=145.81ms, median=140.00ms, stdev=17.43ms, min=138, max=199

        * Bindings/dom_attributes.html: Added.
        * resources/runner.js:
        (PerfTestRunner.info):

2012-02-22  Kentaro Hara  <haraken@chromium.org>

        Add performance tests for the Element.id getter and setter
        https://bugs.webkit.org/show_bug.cgi?id=79209

        Reviewed by Adam Barth.

        This patch adds performance tests for the Element.id getter and setter.

        The results of 10 runs in my local Chromium/Linux are as follows:

        dom_attributes_id_getter.html:
        median= 92.0 ms, stdev= 1.65151445649 ms, min= 89.0 ms, max= 96.0 ms
        median= 87.5 ms, stdev= 1.84390889146 ms, min= 85.0 ms, max= 92.0 ms
        median= 94.0 ms, stdev= 1.46543508898 ms, min= 90.0 ms, max= 95.0 ms
        median= 86.0 ms, stdev= 1.66958078571 ms, min= 84.0 ms, max= 91.0 ms
        median= 94.0 ms, stdev= 2.25610283454 ms, min= 103.0 ms, max= 98.0 ms
        median= 86.0 ms, stdev= 1.49666295471 ms, min= 84.0 ms, max= 91.0 ms
        median= 86.0 ms, stdev= 1.5321553446 ms, min= 84.0 ms, max= 90.0 ms
        median= 86.0 ms, stdev= 2.20227155455 ms, min= 84.0 ms, max= 94.0 ms
        median= 96.0 ms, stdev= 1.74570902501 ms, min= 101.0 ms, max= 99.0 ms
        median= 86.0 ms, stdev= 1.63935963108 ms, min= 84.0 ms, max= 90.0 ms
        median= 94.0 ms, stdev= 1.49248115566 ms, min= 90.0 ms, max= 95.0 ms
        median= 88.0 ms, stdev= 5.20192272146 ms, min= 84.0 ms, max= 98.0 ms
        median= 86.0 ms, stdev= 1.41067359797 ms, min= 84.0 ms, max= 89.0 ms
        median= 86.0 ms, stdev= 1.48660687473 ms, min= 84.0 ms, max= 89.0 ms
        median= 94.0 ms, stdev= 1.58113883008 ms, min= 93.0 ms, max= 97.0 ms
        median= 86.0 ms, stdev= 1.95959179423 ms, min= 84.0 ms, max= 93.0 ms
        median= 86.0 ms, stdev= 1.8547236991 ms, min= 84.0 ms, max= 92.0 ms
        median= 86.0 ms, stdev= 1.39283882772 ms, min= 84.0 ms, max= 89.0 ms
        median= 88.0 ms, stdev= 1.48660687473 ms, min= 85.0 ms, max= 90.0 ms
        median= 86.5 ms, stdev= 2.3 ms, min= 84.0 ms, max= 93.0 ms

        dom_attributes_id_setter.html:
        median= 123.0 ms, stdev= 2.06397674406 ms, min= 119.0 ms, max= 128.0 ms
        median= 119.0 ms, stdev= 1.92028643697 ms, min= 117.0 ms, max= 123.0 ms
        median= 121.0 ms, stdev= 1.8781639971 ms, min= 118.0 ms, max= 123.0 ms
        median= 123.0 ms, stdev= 2.21585198062 ms, min= 119.0 ms, max= 130.0 ms
        median= 124.5 ms, stdev= 2.36378933071 ms, min= 119.0 ms, max= 129.0 ms
        median= 122.0 ms, stdev= 2.4474476501 ms, min= 118.0 ms, max= 128.0 ms
        median= 123.0 ms, stdev= 1.76351920885 ms, min= 118.0 ms, max= 125.0 ms
        median= 119.0 ms, stdev= 1.79652442232 ms, min= 117.0 ms, max= 125.0 ms
        median= 121.0 ms, stdev= 1.49916643506 ms, min= 119.0 ms, max= 123.0 ms
        median= 119.5 ms, stdev= 1.85135085816 ms, min= 117.0 ms, max= 125.0 ms
        median= 124.0 ms, stdev= 1.43090880213 ms, min= 120.0 ms, max= 124.0 ms
        median= 122.0 ms, stdev= 1.45859521458 ms, min= 118.0 ms, max= 123.0 ms
        median= 123.0 ms, stdev= 1.50332963784 ms, min= 120.0 ms, max= 124.0 ms
        median= 123.0 ms, stdev= 1.3638181697 ms, min= 120.0 ms, max= 125.0 ms
        median= 119.0 ms, stdev= 1.43527000944 ms, min= 117.0 ms, max= 121.0 ms
        median= 122.5 ms, stdev= 1.71682847134 ms, min= 118.0 ms, max= 124.0 ms
        median= 121.0 ms, stdev= 1.44481832768 ms, min= 118.0 ms, max= 123.0 ms
        median= 120.0 ms, stdev= 1.40978721799 ms, min= 117.0 ms, max= 122.0 ms
        median= 122.0 ms, stdev= 1.68522995464 ms, min= 119.0 ms, max= 125.0 ms
        median= 122.0 ms, stdev= 1.55804364509 ms, min= 118.0 ms, max= 123.0 ms


        * Bindings/dom_attributes_id_getter.html: Added.
        * Bindings/dom_attributes_id_setter.html: Added.
        * Bindings/resources/dom_attributes_common.js: Added.

2012-02-16  Alexis Menard  <alexis.menard@openbossa.org>

        Add a perf test for the CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=78114

        Reviewed by Ryosuke Niwa.

        Add a perf test for the CSS parser. It load a big CSS chunk
        which contains some snippets of the YUI library from Yahoo!.

        * Parser/css-parser-yui.html: Added.

2012-02-08  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] sunspider-crypto-md5.html and sunspider-crypto-sha1.html are timing out on cr-mac perf bot
        https://bugs.webkit.org/show_bug.cgi?id=78174

        Reviewed by Ryosuke Niwa.

        Pulled back removed files.

        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-md5.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-sha1.html: Added.

2012-02-02  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Each Dromaeo test needs its landing html.
        https://bugs.webkit.org/show_bug.cgi?id=77504

        Reviewed by Ryosuke Niwa.

        - Added landing pages for each test which are listed in MANIFEST.json
        - Removed some tests which depends on the library whose license is incompatible to WebKit.
        - Added local copy of corresponding library. And replace the references to the remote sources
          to the local copies.
        - Removed old library files under Dromaeo/resources/dromaeo/web/lib/.
        - Skipped Sunsupier and v8 test. Such JS centric test should have its own test instead of
          running as a part of Dromaeo.

        * Dromaeo/cssquery-dojo.html: Added.
        * Dromaeo/cssquery-jquery.html: Added.
        * Dromaeo/cssquery-prototype.html: Added.
        * Dromaeo/dom-attr.html: Added.
        * Dromaeo/dom-modify.html: Added.
        * Dromaeo/dom-traverse.html: Added.
        * Dromaeo/dromaeo-3d-cube.html: Added.
        * Dromaeo/dromaeo-core-eval.html: Added.
        * Dromaeo/dromaeo-object-array.html: Added.
        * Dromaeo/dromaeo-object-regexp.html: Added.
        * Dromaeo/dromaeo-object-string.html: Added.
        * Dromaeo/dromaeo-string-base64.html: Added.
        * Dromaeo/jslib-attr-jquery.html: Added.
        * Dromaeo/jslib-attr-prototype.html: Added.
        * Dromaeo/jslib-event-jquery.html: Added.
        * Dromaeo/jslib-event-prototype.html: Added.
        * Dromaeo/jslib-modify-jquery.html: Added.
        * Dromaeo/jslib-modify-prototype.html: Added.
        * Dromaeo/jslib-style-jquery.html: Added.
        * Dromaeo/jslib-style-prototype.html: Added.
        * Dromaeo/jslib-traverse-jquery.html: Added.
        * Dromaeo/jslib-traverse-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/lib/dojo.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/dojo-1.6.1.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/jquery.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/jquery-1.6.4.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/mootools.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/prototype.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/prototype-1.7.js: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-dojo.html:
        * Dromaeo/resources/dromaeo/web/tests/cssquery-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/cssquery-mootools.html: Removed.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-prototype.html:
        * Dromaeo/sunspider-3d-morph.html: Added.
        * Dromaeo/sunspider-3d-raytrace.html: Added.
        * Dromaeo/sunspider-access-binary-trees.html: Added.
        * Dromaeo/sunspider-access-fannkuch.html: Added.
        * Dromaeo/sunspider-access-nbody.html: Added.
        * Dromaeo/sunspider-access-nsieve.html: Added.
        * Dromaeo/sunspider-bitops-3bit-bits-in-byte.html: Added.
        * Dromaeo/sunspider-bitops-bits-in-byte.html: Added.
        * Dromaeo/sunspider-bitops-bitwise-and.html: Added.
        * Dromaeo/sunspider-bitops-nsieve-bits.html: Added.
        * Dromaeo/sunspider-controlflow-recursive.html: Added.
        * Dromaeo/sunspider-crypto-aes.html: Added.
        * Dromaeo/sunspider-crypto-md5.html: Added.
        * Dromaeo/sunspider-crypto-sha1.html: Added.
        * Dromaeo/sunspider-date-format-tofte.html: Added.
        * Dromaeo/sunspider-date-format-xparb.html: Added.
        * Dromaeo/sunspider-math-cordic.html: Added.
        * Dromaeo/sunspider-math-partial-sums.html: Added.
        * Dromaeo/sunspider-math-spectral-norm.html: Added.
        * Dromaeo/sunspider-regexp-dna.html: Added.
        * Dromaeo/sunspider-string-fasta.html: Added.
        * Dromaeo/sunspider-string-tagcloud.html: Added.
        * Dromaeo/sunspider-string-unpack-code.html: Added.
        * Dromaeo/sunspider-string-validate-input.html: Added.
        * Dromaeo/v8-crypto.html: Added.
        * Dromaeo/v8-deltablue.html: Added.
        * Dromaeo/v8-earley-boyer.html: Added.
        * Dromaeo/v8-raytrace.html: Added.
        * Dromaeo/v8-richards.html: Added.
        * Skipped:

2012-02-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106543.
        http://trac.webkit.org/changeset/106543
        https://bugs.webkit.org/show_bug.cgi?id=77671

        Made tests less stable (Requested by rniwa on #webkit).

        * resources/init.html: Removed.

2012-02-02  Ryosuke Niwa  <rniwa@webkit.org>

        [PerformanceTests] tests have dependencies
        https://bugs.webkit.org/show_bug.cgi?id=77506

        Reviewed by Hajime Morita.

        * resources/init.html: Added.

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Fix after r106386. The empty anchor element was generating an erroneous whitespace.

        * Bindings/event-target-wrapper.html:

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Another fix after r106379.

        * Parser/html5-full-render.html:

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        Import Dromaeo to WebKit repository.
        https://bugs.webkit.org/show_bug.cgi?id=77328

        Reviewed by Ryosuke Niwa.

        Imported a modified version of Dromaeo which is able to
        run on the DRT.

        The imported version originally came from:
        https://github.com/omo/dromaeo/commit/c942a1452109cdd5f759b3c4aee8d68d490d44a2

        * Dromaeo/resources/dromaeo/web/application.css: Added.
        * Dromaeo/resources/dromaeo/web/favicon.ico: Added.
        * Dromaeo/resources/dromaeo/web/favicon.png: Added.
        * Dromaeo/resources/dromaeo/web/htmlrunner.js: Added.
        * Dromaeo/resources/dromaeo/web/ie.css: Added.
        * Dromaeo/resources/dromaeo/web/images/bg.png: Added.
        * Dromaeo/resources/dromaeo/web/images/clouds.png: Added.
        * Dromaeo/resources/dromaeo/web/images/clouds2.png: Added.
        * Dromaeo/resources/dromaeo/web/images/comets.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino1.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino2.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino3.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino4.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino5.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino6.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino7.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino8.png: Added.
        * Dromaeo/resources/dromaeo/web/images/left.png: Added.
        * Dromaeo/resources/dromaeo/web/images/logo.png: Added.
        * Dromaeo/resources/dromaeo/web/images/logo2.png: Added.
        * Dromaeo/resources/dromaeo/web/images/logo3.png: Added.
        * Dromaeo/resources/dromaeo/web/images/right.png: Added.
        * Dromaeo/resources/dromaeo/web/images/top.png: Added.
        * Dromaeo/resources/dromaeo/web/images/water.png: Added.
        * Dromaeo/resources/dromaeo/web/index.html: Added.
        * Dromaeo/resources/dromaeo/web/jquery.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/dojo.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/jquery.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/mootools.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/prototype.js: Added.
        * Dromaeo/resources/dromaeo/web/pngfix.js: Added.
        * Dromaeo/resources/dromaeo/web/reset.css: Added.
        * Dromaeo/resources/dromaeo/web/test-head.html: Added.
        * Dromaeo/resources/dromaeo/web/test-head.js: Added.
        * Dromaeo/resources/dromaeo/web/test-tail.html: Added.
        * Dromaeo/resources/dromaeo/web/test-tail.js: Added.
        * Dromaeo/resources/dromaeo/web/tests/MANIFEST.json: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-dojo.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-mootools.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-yui.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-attr.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-modify.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-query.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-traverse.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-3d-cube.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-core-eval.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-object-array.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-object-regexp.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-object-string.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-string-base64.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-3d-morph.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-3d-raytrace.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-binary-trees.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-fannkuch.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-nbody.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-nsieve.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-3bit-bits-in-byte.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-bits-in-byte.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-bitwise-and.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-nsieve-bits.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-controlflow-recursive.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-aes.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-md5.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-sha1.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-date-format-tofte.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-date-format-xparb.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-cordic.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-partial-sums.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-spectral-norm.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-regexp-dna.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-fasta.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-tagcloud.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-unpack-code.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-validate-input.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-crypto.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-deltablue.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-earley-boyer.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-raytrace.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-richards.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/72px.png: Added.
        * Dromaeo/resources/dromaeo/web/web-style.css: Added.
        * Dromaeo/resources/dromaeo/web/webrunner.js: Added.
        * Skipped: Unskip the dromaeo driver.

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Fix Parser/html5-full-render.html after r106379.

        * Parser/html5-full-render.html:

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner should automatically create pre#log
        https://bugs.webkit.org/show_bug.cgi?id=77469

        Reviewed by Tony Chang.

        Automatically generate <pre id="log"></pre> if there isn't one.

        * Bindings/event-target-wrapper.html:
        * DOM/Accessors.html:
        * DOM/CloneNodes.html:
        * DOM/CreateNodes.html:
        * DOM/DOMDivWalk.html:
        * DOM/DOMTable.html:
        * DOM/DOMWalk.html:
        * DOM/Events.html:
        * DOM/GetElement.html:
        * DOM/GridSort.html:
        * DOM/Template.html:
        * Dromaeo/dom-query.html:
        * Dromaeo/resources/dromaeorunner.js:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * resources/runner.js:
        (PerfTestRunner.log):
        (PerfTestRunner.printStatistics):

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        runner.js in performance tests should define a class
        https://bugs.webkit.org/show_bug.cgi?id=77074

        Reviewed by Eric Seidel.

        Wrap all functions in runner.js by PerfTestRunner and update tests that runner.js accordingly.
        Also replace compute* functions in runner.js by more robust code from dom-perf.js.

        * Bindings/event-target-wrapper.html:
        * DOM/DOMTable.html:
        * DOM/resources/dom-perf.js:
        (BenchmarkSuite.prototype.RunSingle):
        (runBenchmarkSuite):
        * Mutation/append-child-deep.html:
        * Mutation/append-child.html:
        * Mutation/inner-html.html:
        * Mutation/remove-child-deep.html:
        * Mutation/remove-child.html:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * resources/runner.js:
        (PerfTestRunner.log):
        (PerfTestRunner.logInfo):
        (PerfTestRunner.loadFile):
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.logStatistics):
        (PerfTestRunner._runLoop.else):
        (PerfTestRunner._runLoop):
        (PerfTestRunner._runner):

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Add landing html for Dromaeo dom-query test
        https://bugs.webkit.org/show_bug.cgi?id=77329

        Reviewed by Ryosuke Niwa.

        Added a "landing html" which includes actual dromaemo page and
        send messages to interact with it. The landing html also dumps the
        score in run-perf-tests friendly format.

        This test isn't enabled until Dromaemo itself is available for run-perf-tests.
        It will happen in a separate change.

        * Dromaeo/dom-query.html: Added.
        * Dromaeo/resources/dromaeorunner.js: Added.
        * Skipped: Skipping this for now.

2012-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Skip inspector tests since they have been timing out.

        * Skipped:

2012-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        DOM/DOMDivWalk.html result is unreliable
        https://bugs.webkit.org/show_bug.cgi?id=77313

        Reviewed by Adam Barth.

        Trigger garbage collection manually between test runs to avoid GC
        to occur in the middle of runs.

        * DOM/resources/dom-perf.js:
        (BenchmarkSuite.prototype.RunSingle):
        * resources/runner.js:
        (gc.else.gcRec):
        (gc):
        (runLoop):

2012-01-26  Ryosuke Niwa  <rniwa@webkit.org>

        Import Chromium's dom_perf test
        https://bugs.webkit.org/show_bug.cgi?id=77175

        Reviewed by Adam Barth.

        Import dom_perf.

        Note resources/dom/suites.js isn't used by any html file yet but it will be used by Chromium port
        once its perf bots start pulling test files from WebKit repository instead of Google's internal repository.

        * DOM: Added.
        * DOM/Accessors.html: Added.
        * DOM/CloneNodes.html: Added.
        * DOM/CreateNodes.html: Added.
        * DOM/DOMDivWalk.html: Added.
        * DOM/DOMTable.html: Added.
        * DOM/DOMWalk.html: Added.
        * DOM/Events.html: Added.
        * DOM/GetElement.html: Added.
        * DOM/GridSort.html: Added.
        * DOM/Template.html: Added.
        * DOM/resources: Added.
        * DOM/resources/dom-perf.js: Added.
        * DOM/resources/dom-perf: Added.
        * DOM/resources/dom-perf/accessors.js: Added.
        * DOM/resources/dom-perf/clonenodes.js: Added.
        * DOM/resources/dom-perf/createnodes.js: Added.
        * DOM/resources/dom-perf/domdivwalk.js: Added.
        * DOM/resources/dom-perf/domtable.js: Added.
        * DOM/resources/dom-perf/domwalk.js: Added.
        * DOM/resources/dom-perf/events.js: Added.
        * DOM/resources/dom-perf/getelement.js: Added.
        * DOM/resources/dom-perf/gridsort.js: Added.
        * DOM/resources/dom-perf/suites.js: Added.
        * DOM/resources/dom-perf/template.js: Added.
        * resources/runner.js:

2012-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        html5-full-render.html fails due to a log
        https://bugs.webkit.org/show_bug.cgi?id=77046

        Reviewed by Adam Barth.

        Replace the call to log() in html5-full-render.html by a call to newly added logInfo(),
        which doesn't print anything inside DRT.

        * Parser/html5-full-render.html:
        * resources/runner.js:
        (logInfo):

2012-01-19  Adam Barth  <abarth@webkit.org>

        PerformanceTests's runner.js shouldn't be Parser-specific
        https://bugs.webkit.org/show_bug.cgi?id=76670

        Reviewed by Ryosuke Niwa.

        This runner script is used by a bunch of difference performance tests.
        It shouldn't be in the Parser directory anymore.

        * Bindings/event-target-wrapper.html:
        * Mutation/append-child-deep.html:
        * Mutation/append-child.html:
        * Mutation/inner-html.html:
        * Mutation/remove-child-deep.html:
        * Mutation/remove-child.html:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * Parser/resources/runner.js: Removed.
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * resources: Added.
        * resources/runner.js: Copied from PerformanceTests/Parser/resources/runner.js.

2012-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        Some perf tests time out when ran by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=76612

        Reviewed by Dirk Pranke and Eric Seidel.

        Replace all images in html5.html by geenbox.png to avoid accessing whatwg.org when
        running the parser tests. Also call dumpAsText, waitUntilDone, and notifyDone automatically
        inside runner.js to avoid having to call them in individual tests.

        * Bindings/event-target-wrapper.html: Removed calls to layoutTestController methods since
        they are now called by runner.js automatically.
        * Parser/resources/greenbox.png: Copied from LayoutTests/fast/css/resources/greenbox.png.
        * Parser/resources/html5.html:
        * Parser/resources/runner.js:
        (runLoop):

2012-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=76594

        Reviewed by Adam Barth.

        Add Skipped list to be used by run-perf-tests as it can only runs tests in
        Bindings, Parser, and inspector at the moment.

        * Skipped: Added.

2012-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: performance: restore 'log 300 messages into console' test.
        https://bugs.webkit.org/show_bug.cgi?id=76170

        It was removed in order of transition from layout tests to perf tests.

        Reviewed by Yury Semikhatsky.

        * inspector/console-300-lines.html: Added.

2012-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: performance tests: fix memory leak in first-open-resources test.
        https://bugs.webkit.org/show_bug.cgi?id=76049

        first-open-resources doesn't reset resource panel properly after test run.

        Reviewed by Yury Semikhatsky.

        * inspector/first-open-resources.html:

2012-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. WebInspector: Remove unnecessary logging from the test.

        * inspector/first-open-resources.html:

2012-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Restore test that was removed during migration from LayoutTests folder.

        * inspector/first-open-resources.html: Added.

2012-01-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed test fix after r103683.

        * inspector/first-open-scripts.html:
        * inspector/show-panel.html:

2012-01-03  Adam Barth  <abarth@webkit.org>

        html-parser.html takes too long to run
        https://bugs.webkit.org/show_bug.cgi?id=75515

        Reviewed by Eric Seidel.

        In working on runner.js, we introduced a factor of 10 increase to the
        running time of this benchmark.  This patch dials down the number of
        iterations to something more user-friendly.

        * Parser/html-parser.html:

2011-12-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move heap data stats to separate tab.
        https://bugs.webkit.org/show_bug.cgi?id=74704

        Reviewed by Pavel Feldman.

        * inspector/performance-test.js:
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):

2011-12-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: move and adapt Inspector's performance tests for running with run-inspector-perf-tests.py.
        https://bugs.webkit.org/show_bug.cgi?id=72260

        Reviewed by Pavel Feldman.

        * inspector/first-open-elements.html: Renamed from LayoutTests/inspector/performance/resources/first-open-elements.html.
        * inspector/first-open-scripts.html: Renamed from LayoutTests/inspector/performance/resources/first-open-scripts.html.
        * inspector/inspector-startup-time.html: Renamed from LayoutTests/inspector/performance/resources/inspector-startup-time.html.
        * inspector/network-append-30-requests.html: Renamed from LayoutTests/inspector/performance/resources/network-append-30-requests.html.
        * inspector/performance-test.js: Renamed from LayoutTests/inspector/performance/resources/performance-test.js.
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.start):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.finish):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._getJSHeapSize):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.done):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._runTest):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):
        (initialize_TimeTracker.InspectorTest.mark):
        * inspector/show-panel.html: Renamed from LayoutTests/inspector/performance/resources/show-panel.html.

2011-11-09  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Microbenchmarks for appendChild, removeChild, and innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=71939

        Reviewed by Ojan Vafai.

        These benchmarks time both the DOM mutations themselves and the time taken
        to call the MutationCallback. This measurement is achieved by
        executing the code entirely within the MutationCallback itself.

        * Mutation/append-child-deep.html: Added. Covers appendChild in a 200-node-deep tree with subtree observation.
        * Mutation/append-child.html: Added. Covers appendChild in a flat tree.
        * Mutation/inner-html.html: Added. Covers innerHTML adding and removing many nodes at a time.
        * Mutation/remove-child-deep.html: Added. Covers removeChild in a 200-node-deep tree with subtree observation.
        * Mutation/remove-child.html: Added. Covers removeChild in a flat tree.

2011-10-25  Adam Barth  <abarth@webkit.org>

        EventTargetFactory.in is not sorted
        https://bugs.webkit.org/show_bug.cgi?id=70855

        Reviewed by Eric Seidel.

        Add a microbenchmark for wrapping event target.

        * Bindings: Added.
        * Bindings/event-target-wrapper.html: Added.
        * Parser/resources/runner.js:
        (runLoop):
            - Let the user of the harness get a callback when the test is done.

2011-10-04  Eric Seidel  <eric@webkit.org>

        Update html5-full-render.html to load the HTML5 spec incrementally, closer to how the browser would
        https://bugs.webkit.org/show_bug.cgi?id=69374

        Unreviewed.

        Per https://bugs.webkit.org/show_bug.cgi?id=69374#c7
        updating the chunksize to be a bit smaller now that the total
        size of the html5 spec is smaller than when I wrote the test.

        This should increase the prevalence of style resolution in the
        sample time, which more closely matches instrument samples
        taken when loading the full page in Safari.

        * Parser/html5-full-render.html:

2011-10-04  Eric Seidel  <eric@webkit.org>

        Update html5-full-render.html to load the HTML5 spec incrementally, closer to how the browser would
        https://bugs.webkit.org/show_bug.cgi?id=69374

        Reviewed by James Robinson.

        This should finally be able to provide us with a repeatable metric
        for how fast we're currently able to load the HTML5 spec.
        There are a variety of interesting functions which show up in this
        sample, including of course style resolution.

        * Parser/html5-full-render.html:

2011-10-04  Eric Seidel  <eric@webkit.org>

        Update our copy of the HTML5 spec used for performance testing to match the latest version
        https://bugs.webkit.org/show_bug.cgi?id=69364

        Unreviewed.  The patch is too large to post, so landing this unreviewed. :(

        The copy of the html5 spec we were using for testing was over a year old
        and didn't have any of the subresources with it (we were only using it
        as an HTML parsing benchmark).  I'm about to use it for testing
        the full load/render time of the benchmark, so I've updated to the latest
        version of the spec (now 8mb instead of 5mb) and inlined two of the
        CSS files.  (Inlining the CSS was necessary to make my testing consistent
        as there seems to be a race with some timer fired after CSS load.)

        Increasing from 5mb to 8mb showed a similar 30% slowdown in our parser
        benchmarks as expected.

        * Parser/resources/html5.html:

2011-10-04  Eric Seidel  <eric@webkit.org>

        Add loopsPerRun option to Parser performance test runner
        https://bugs.webkit.org/show_bug.cgi?id=69363

        Reviewed by Antti Koivisto.

        Add loopsPerRun option and abstract out runLoop function (to make the UI more responsive).
        No change in behavior in any of the tests.

        * Parser/resources/runner.js:
        (runLoop):
        (run):
        (start):

2011-10-03  Eric Seidel  <eric@webkit.org>

        Add a microbenchmark for a full-page render of the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=69285

        Reviewed by Adam Barth.

        This was designed to be a test for https://bugs.webkit.org/show_bug.cgi?id=68944
        But it seems that by far our dominating cost for the HTML5 benchmark is
        time spent laying out lines (which isn't actually that surprising).

        I'm adding the performance test for posterity.

        * Parser/html-parser.html:
         - Removed use of "about:blank" which abarth says is a no-op.  Made comment more accurate.
        * Parser/html5-full-render.html: Copied from PerformanceTests/Parser/html-parser.html.

2011-10-03  Eric Seidel  <eric@webkit.org>

        PerformanceTests/Parser/html-parser is only testing parsing of the head element
        https://bugs.webkit.org/show_bug.cgi?id=69283

        Reviewed by Adam Barth.

        While investigating https://bugs.webkit.org/show_bug.cgi?id=68944
        I found that the html-parser benchmark was only parsing up to the
        first script tag per loop!  We've fixed this by adding the sandbox
        tag which will deny all external loads and allow the parser to
        synchronously continue parsing the entire document to completion
        (as we had expected it was doing).

        This changes the profile somewhat.  Line number counting is much
        hotter, since we're actually accounting for the parse of the entire
        document in our sample.

        Total sample time only about doubles, from 1800ms to 3800ms on my machine
        which is less than I would have expected.

        * Parser/html-parser.html:

2011-08-09  Alexandru Chiculita  <achicu@adobe.com>

        Fixing 65868 REGRESSION(r92610) caused by 65668 - Optimize floating elements lookup
        https://bugs.webkit.org/show_bug.cgi?id=65871

        Reviewed by Dave Hyatt.

        * Layout/floats.html: Added the nested divs, so that we can test the propagation impact of the floats tree.

2011-08-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r92610.
        http://trac.webkit.org/changeset/92610
        https://bugs.webkit.org/show_bug.cgi?id=65868

        Caused assertion failures when running fast/multicol tests
        (Requested by andersca on #webkit).

        * Layout/floats.html:

2011-08-08  Alexandru Chiculita  <achicu@adobe.com>

        Optimize floating elements lookup
        https://bugs.webkit.org/show_bug.cgi?id=65668

        Reviewed by David Hyatt.

        * Layout/floats.html: Added the nested divs, so that we can test the propagation impact of the floats tree.

2011-08-04  Alexandru Chiculita  <achicu@adobe.com>

        Add a performance test for floating elements layout algorithm
        https://bugs.webkit.org/show_bug.cgi?id=65741

        The test creating lots of small floats and randomly changes
        the width of one element at a time. It measures how often it can do that.

        Reviewed by Adam Barth.

        * Layout/floats.html: Added.

2011-05-30  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        Rename XSSFilter to XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=61718

        Currently we use the names XSSFilter and XSSAuditor throughout the project.
        Instead, we should choose one name for consistency.

        No functionality was changed. So, no new tests.

        * XSSAuditor: Copied from PerformanceTests/XSSFilter.
        * XSSFilter: Removed.
        * XSSFilter/large-post-many-events.html: Removed.
        * XSSFilter/large-post-many-inline-scripts-and-events.html: Removed.
        * XSSFilter/resources: Removed.
        * XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html: Removed.

2011-03-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        SVG <use> element performance improvement
        https://bugs.webkit.org/show_bug.cgi?id=57077

        Add a manual test case which is from
        http://upload.wikimedia.org/wikipedia/commons/4/4e/Sierpinski_carpet_6.svg
        for svg <use> element performance test.

        * PageLoad/svg/files/Sierpinski_carpet_6.svg: Added.
        * PageLoad/svg/svg.pltsuite:

2011-02-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add performance tests for URL parsing
        https://bugs.webkit.org/show_bug.cgi?id=53845

        The final-url-en URL corpus is from:
        http://corpus.leeds.ac.uk/internet.html

        There are also other language corpuses which we may want to use in the future.

        The usage instructions were as follows:
        "URL lists and other resources: you can freely use them in your research
        provided that you supply a link to this website: http://corpus.leeds.ac.uk/."
        Done.

        * Parser/simple-url.html: Added.
         On my machine:
         Firefox: 255ms
         TOT WebKit: 378ms
         Chrome: 286ms
         Opera: 2830ms (no, that is not a typo)
        * Parser/url-parser.html: Added.
         Firefox: 381ms
         TOT WebKit: 216ms
         Chrome: 131ms
         Opera: 1383ms (again, not a typo)
        * Parser/resources/final-url-en: Added.

2011-02-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Add another XSSFilter PerformanceTest
        https://bugs.webkit.org/show_bug.cgi?id=53750

        This PerformanceTest tests the case that was slow in
        https://bugs.webkit.org/show_bug.cgi?id=49845

        * XSSFilter/large-post-many-inline-scripts-and-events.html: Added.
        * XSSFilter/resources: Added.
        * XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html: Added.

2011-02-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add PerformanceTest for XSSFilter
        https://bugs.webkit.org/show_bug.cgi?id=53741

        This performance tests covers the case of a large POST data and many
        small event handlers.

        * XSSFilter: Added.
        * XSSFilter/large-post-many-events.html: Added.

2011-02-02  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Merge PerformanceTests/Parser/ChangeLog and
        PerformanceTests/PageLoad/ChangeLog into PerformanceTests/ChangeLog.

        It's silly to have ChangeLogs for each of these directories separately.
        I've left SunSpider with its own ChangeLog because it's more of an
        independent entity.

        * ChangeLog: Added.

2011-02-02  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just fixing an exception seen in Firefox.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        Make the benchmarks work in Firefox/Opera.

        * resources/runner.js:
        (log):

2011-01-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        It's unclear exactly what the Peacekeeper benchmark is testing,
        because I haven't found a way to run it myself.

        However, I constructed a benchmark which shows at least one possible slow point.
        The HTML5 spec talks about creating a new document for every time we use
        the fragment parsing algorithm.  Document() it turns out, it a huge bloated
        mess, and the constructor and destructor do a huge amount of work.

        * benchmarks/parser/tiny-innerHTML.html: Added.

2011-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77050.
        http://trac.webkit.org/changeset/77050
        https://bugs.webkit.org/show_bug.cgi?id=53371

        Caused a crash in Chromium's test_shell_tests (Requested by
        rniwa on #webkit).

        * resources/performance-test.js: Removed.
        * tiny-innerHTML.html: Removed.

2011-01-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        It's unclear exactly what the Peacekeeper benchmark is testing,
        because I haven't found a way to run it myself.

        However, I constructed a benchmark which shows at least one possible slow point.
        The HTML5 spec talks about creating a new document for every time we use
        the fragment parsing algorithm.  Document() it turns out, it a huge bloated
        mess, and the constructor and destructor do a huge amount of work.
        To avoid constructing (or destructing) documents for each innerHTML call,
        this patch adds a shared dummy document used by all innerHTML calls.

        * benchmarks/parser/tiny-innerHTML.html: Added.

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move HTML and XML parser benchmarks into PerformanceTests/Parser
        https://bugs.webkit.org/show_bug.cgi?id=51772

        Add a ChangeLog for tracking changes to the Parser PerformanceTest.

        * ChangeLog: Added.

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move PageLoadTests to PerformanceTests/PageLoad
        https://bugs.webkit.org/show_bug.cgi?id=51771

        Update URLs to point to the new directory name.

        * svg/svg.pltsuite:

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        * svg/svg.pltsuite: re-enable word-iso.svg after fixing http://bugs.webkit.org/show_bug.cgi?id=11987

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by bradee-oh.

        Add new PageLoadTests directory (this one)
        Add LICENSES file to explain where each SVG came from.

        * ChangeLog: Added.
        * svg/LICENSES: Added.
        * svg/files/33041-Samurai.svg: Added.
        * svg/files/42470-flower_from_my_garden_v2.svg: Added.
        * svg/files/Harvey_Rayner.svg: Added.
        * svg/files/az-lizard_benji_park_01.svg: Added.
        * svg/files/bamboo_01.svg: Added.
        * svg/files/cacuts_01.svg: Added.
        * svg/files/cowboy.svg: Added.
        * svg/files/crawfish2_ganson.svg: Added.
        * svg/files/deb9frac1.svg: Added.
        * svg/files/food_leif_lodahl_01.svg: Added.
        * svg/files/france.svg: Added.
        * svg/files/francobollo_gnome_ezechi_02.svg: Added.
        * svg/files/gearflowers.svg: Added.
        * svg/files/hereGear4.svg: Added.
        * svg/files/mtsthelens.svg: Added.
        * svg/files/mtsthelens0.jpg: Added.
        * svg/files/world-iso.svg: Added.
        * svg/files/worldcup.svg: Added.
        * svg/svg.pltsuite: Added.

