- 23 Jan, 2014 1 commit
-
-
mark.lam@apple.com authored
<https://webkit.org/b/122836> Reviewed by Geoffrey Garen. Previously we gained back some performance (run at baseline JIT speeds) when the WebInspector is opened provided no breakpoints are set. This was achieved by simply skipping all op_debug callbacks to the debugger if no breakpoints are set. If any breakpoints are set, the debugger will set a m_needsOpDebugCallbacks flag which causes the callbacks to be called, and we don't get the baseline JIT speeds anymore. With this patch, we will now track the number of breakpoints set in the CodeBlock that they are set in. The LLINT and baseline JIT code will check CodeBlock::m_numBreakpoints to determine if the op_debug callbacks need to be called. With this, we will only enable op_debug callbacks for CodeBlocks that need it i.e. those with breakpoints set in them. Debugger::m_needsOpDebugCallbacks is now obsoleted. The LLINT and baseline JIT code still needs to check Debugger::m_shouldPause to determine if the debugger is in stepping mode and hence, needs op_debug callbacks enabled for everything until the debugger "continues" the run and exit stepping mode. Also in this patch, I fixed a regression in DOM breakpoints which relies Debugger::breakProgram() to pause the debugger. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): - Missed accounting for op_debug's new hasBreakpointFlag operand here when it was added. (JSC::CodeBlock::CodeBlock): (JSC::CodeBlock::hasOpDebugForLineAndColumn): - This is needed in Debugger::toggleBreakpoint() to determine if a breakpoint falls within a CodeBlock or not. Simply checking the bounds of the CodeBlock is insufficient. For example, let's say we have the following JS code: // begin global scope function f1() { function f2() { ... // set breakpoint here. } } // end global scope Using the CodeBlock bounds alone, the breakpoint above will to appear to be in the global program CodeBlock, and the CodeBlocks for function f1() and f2(). With CodeBlock::hasOpDebugForLineAndColumn() we can rule out the global program CodeBlock and f1(), and only apply the breakpoint to f2(0 where it belongs. CodeBlock::hasOpDebugForLineAndColumn() works by iterating over all the opcodes in the CodeBlock to look for op_debug's. For each op_debug, it calls CodeBlock::expressionRangeForBytecodeOffset() to do a binary seach to get the line and column info for that op_debug. This is a N * log(N) algorithm. However, a quick hands on test using the WebInspector (with this patch applied) to exercise setting, breaking on, and clearing breakpoints, as well as stepping through some code shows no noticeable degradation of the user experience compared to the baseline without this patch. * bytecode/CodeBlock.h: (JSC::CodeBlock::numBreakpoints): (JSC::CodeBlock::numBreakpointsOffset): (JSC::CodeBlock::addBreakpoint): (JSC::CodeBlock::removeBreakpoint): (JSC::CodeBlock::clearAllBreakpoints): * debugger/Breakpoint.h: - defined Breakpoint::unspecifiedColumn so that we can explicitly indicate when the WebInspector was setting a line breakpoint and did not provide a column value. CodeBlock::hasOpDebugForLineAndColumn() needs this information in order to loosen its matching criteria for op_debug bytecodes for the specified breakpoint line and column values provided by the debugger. Previously, we just hijack a 0 value column as an unspecified column. However, the WebInspector operates on 0-based ints for column values. Hence, 0 should be a valid column value and should not be hijacked to mean an unspecified column. * debugger/Debugger.cpp: (JSC::Debugger::Debugger): - added tracking of the VM that the debugger is used with. This is needed by Debugger::breakProgram(). The VM pointer is attained from the first JSGlobalObject that the debugger attaches to. When the debugger detaches from the last JSGlobalObject, it will nullify its VM pointer to allow a new one to be set on the next attach. We were always only using each debugger instance with one VM. This change makes it explicit with an assert to ensure that all globalObjects that the debugger attaches to beongs to the same VM. (JSC::Debugger::attach): (JSC::Debugger::detach): (JSC::Debugger::setShouldPause): (JSC::Debugger::registerCodeBlock): (JSC::Debugger::unregisterCodeBlock): - registerCodeBlock() is responsible for applying pre-existing breakpoints to new CodeBlocks being installed. Similarly, unregisterCodeBlock() clears the breakpoints. (JSC::Debugger::toggleBreakpoint): - This is the workhorse function that checks if a breakpoint falls within a CodeBlock or not. If it does, then it can either enable or disable said breakpoint in the CodeBlock. In the current implementation, enabling/disabling the breakpoint simply means incrementing/decrementing the CodeBlock's m_numBreakpoints. (JSC::Debugger::applyBreakpoints): (JSC::Debugger::ToggleBreakpointFunctor::ToggleBreakpointFunctor): (JSC::Debugger::ToggleBreakpointFunctor::operator()): (JSC::Debugger::toggleBreakpoint): - Iterates all relevant CodeBlocks and apply the specified breakpoint if appropriate. This is called when a new breakpoint is being defined by the WebInspector and needs to be applied to an already installed CodeBlock. (JSC::Debugger::setBreakpoint): (JSC::Debugger::removeBreakpoint): (JSC::Debugger::hasBreakpoint): (JSC::Debugger::ClearBreakpointsFunctor::ClearBreakpointsFunctor): (JSC::Debugger::ClearBreakpointsFunctor::operator()): (JSC::Debugger::clearBreakpoints): (JSC::Debugger::breakProgram): - Fixed a regression that broke DOM breakpoints. The issue is that with the skipping of op_debug callbacks, we don't always have an updated m_currentCallFrame. Normally, m_currentCallFrame is provided as arg in the op_debug callback. In this case, we can get the CallFrame* from m_vm->topCallFrame. (JSC::Debugger::updateCallFrameAndPauseIfNeeded): (JSC::Debugger::pauseIfNeeded): (JSC::Debugger::willExecuteProgram): * debugger/Debugger.h: (JSC::Debugger::Debugger): (JSC::Debugger::shouldPause): * heap/CodeBlockSet.h: (JSC::CodeBlockSet::iterate): * heap/Heap.h: (JSC::Heap::forEachCodeBlock): - Added utility to iterate all CodeBlocks in the heap / VM. * interpreter/Interpreter.cpp: (JSC::Interpreter::debug): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_debug): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_debug): * llint/LowLevelInterpreter.asm: - These now checks CodeBlock::m_numBreakpoints and Debugger::m_shouldPause instead of Debugger::m_needsOpDebugCallbacks. * runtime/Executable.cpp: (JSC::ScriptExecutable::installCode): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162598 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 20 Jan, 2014 2 commits
-
-
fpizlo@apple.com authored
op_captured_mov and op_new_captured_func in UnlinkedCodeBlocks should use the IdentifierMap instead of the strings directly https://bugs.webkit.org/show_bug.cgi?id=127311 <rdar://problem/15853958> Reviewed by Andreas Kling. This makes UnlinkedCodeBlocks use 32-bit instruction streams again. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): * bytecode/UnlinkedCodeBlock.h: (JSC::UnlinkedInstruction::UnlinkedInstruction): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::addVar): (JSC::BytecodeGenerator::emitInitLazyRegister): (JSC::BytecodeGenerator::createArgumentsIfNecessary): * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::watchableVariable): (JSC::BytecodeGenerator::hasWatchableVariable): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162390 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mark.lam@apple.com authored
<https://webkit.org/b/127321> Reviewed by Geoffrey Garen. We're changing plans and will be going with CodeBlock level breakpoints instead of bytecode level breakpoints. As a result, we no longer need the services of CodeBlock::opDebugBytecodeOffsetForLineAndColumn() (and friends). This patch will remove that unused code. * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/CodeBlock.cpp: * bytecode/CodeBlock.h: * bytecode/LineColumnInfo.h: Removed. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo): * bytecode/UnlinkedCodeBlock.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162389 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 18 Jan, 2014 7 commits
-
-
akling@apple.com authored
<https://webkit.org/b/127239> Reviewed by Anders Carlsson. * bytecode/CodeBlock.h: (JSC::CodeBlock::setNumberOfByValInfos): (JSC::CodeBlock::setNumberOfCallLinkInfos): Use resizeToFit() instead of grow() for these vectors, since we know the final size here. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::shrinkToFit): No need to shrink here anymore. We were not even shrinking m_byValInfo before! git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162284 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
akling@apple.com authored
<https://webkit.org/b/127238> Reviewed by Anders Carlsson. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): Use resizeToFit() instead of grow() for m_functionExprs and m_functionDecls since we know they will never change size. (JSC::CodeBlock::shrinkToFit): No need to shrink them here anymore. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162281 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
akling@apple.com authored
<https://webkit.org/b/127237> Reviewed by Anders Carlsson. * bytecode/CodeBlock.h: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): (JSC::CodeBlock::shrinkToFit): Remove m_additionalIdentifiers, nothing uses it. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162279 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
akling@apple.com authored
<https://webkit.org/b/127235> Kill copyPostParseDataFrom() and copyPostParseDataFromAlternative() since they are not used. Reviewed by Anders Carlsson. * bytecode/CodeBlock.cpp: * bytecode/CodeBlock.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162278 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
akling@apple.com authored
<https://webkit.org/b/127234> Avoid allocation churn for CodeBlock::m_exceptionHandlers. Reviewed by Anders Carlsson. * bytecode/CodeBlock.h: Removed unused CodeBlock::allocateHandlers() function. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): Use resizeToFit() instead of grow() for m_exceptionHandlers since we know it's never going to change size. (JSC::CodeBlock::shrinkToFit): No need to shrink m_exceptionHandlers here since it's already the perfect size. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162277 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mark.lam@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=127230. Reviewed by Geoffrey Garen. This is in anticipation of upcoming changes to support bytecode level breakpoints. This patch adds the flag to the op_debug bytecode and initializes it, but does not use it yet. * bytecode/Opcode.h: (JSC::padOpcodeName): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitDebugHook): * llint/LowLevelInterpreter.asm: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162270 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mark.lam@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=127127. Reviewed by Geoffrey Garen. In order to implement bytecode level breakpoints, we need a mechanism for computing the best fit op_debug bytecode offset for any valid given line and column value in the source. The "best fit" op_debug bytecode in this case is defined below in the comment for UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn(). * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::opDebugBytecodeOffsetForLineAndColumn): - Convert the line and column to unlinked line and column values and pass them to UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn() to do the real work. * bytecode/CodeBlock.h: * bytecode/LineColumnInfo.h: Added. (JSC::LineColumnInfo::operator <): (JSC::LineColumnInfo::LineColumnPair::LineColumnPair): (JSC::LineColumnInfo::operator ==): (JSC::LineColumnInfo::operator !=): (JSC::LineColumnInfo::operator <=): (JSC::LineColumnInfo::operator >): (JSC::LineColumnInfo::operator >=): * bytecode/LineInfo.h: Removed. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedCodeBlock::decodeExpressionRangeLineAndColumn): - Factored this out of expressionRangeForBytecodeOffset() so that it can be called from multiple places. (JSC::dumpLineColumnEntry): (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo): (JSC::UnlinkedCodeBlock::dumpOpDebugLineColumnInfoList): - Some dumpers for debugging use only. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): (JSC::UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn): - Finds the earliest op_debug bytecode whose line and column matches the specified line and column values. If an exact match is not found, then finds the nearest op_debug bytecode that precedes the specified line and column values. If there are more than one op_debug at that preceding line and column value, then the earliest of those op_debug bytecodes will be be selected. The offset of the selected bytecode will be returned. We want the earliest one because when we have multiple op_debug bytecodes that map to a given line and column, a debugger user would expect to break on the first one and step through the rest thereafter if needed. (JSC::compareLineColumnInfo): (JSC::UnlinkedCodeBlock::opDebugLineColumnInfoList): - Creates the sorted opDebugLineColumnInfoList on demand. This list is stored in the UnlinkedCodeBlock's rareData. * bytecode/UnlinkedCodeBlock.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162256 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 16 Jan, 2014 1 commit
-
-
commit-queue@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=127111 Patch by Peter Molnar <pmolnar.u-szeged@partner.samsung.com> on 2014-01-16 Reviewed by Anders Carlsson. Now all compilers support explicit override control, this workaround can be removed. Source/JavaScriptCore: * API/JSAPIWrapperObject.mm: * API/JSCallbackObject.h: * API/JSManagedValue.mm: * API/JSScriptRef.cpp: * bytecode/CodeBlock.h: * bytecode/CodeBlockJettisoningWatchpoint.h: * bytecode/ProfiledCodeBlockJettisoningWatchpoint.h: * bytecode/StructureStubClearingWatchpoint.h: * dfg/DFGArrayifySlowPathGenerator.h: * dfg/DFGCallArrayAllocatorSlowPathGenerator.h: * dfg/DFGFailedFinalizer.h: * dfg/DFGJITCode.h: * dfg/DFGJITFinalizer.h: * dfg/DFGSaneStringGetByValSlowPathGenerator.h: * dfg/DFGSlowPathGenerator.h: * dfg/DFGSpeculativeJIT64.cpp: * heap/Heap.h: * heap/IncrementalSweeper.h: * heap/SuperRegion.h: * inspector/InspectorValues.h: * inspector/JSGlobalObjectInspectorController.h: * inspector/agents/InspectorAgent.h: * inspector/remote/RemoteInspector.h: * inspector/remote/RemoteInspectorDebuggableConnection.h: * inspector/scripts/CodeGeneratorInspector.py: (Generator.go): * jit/ClosureCallStubRoutine.h: * jit/ExecutableAllocatorFixedVMPool.cpp: * jit/GCAwareJITStubRoutine.h: * jit/JITCode.h: * jit/JITToDFGDeferredCompilationCallback.h: * parser/Nodes.h: * parser/SourceProvider.h: * runtime/DataView.h: * runtime/GCActivityCallback.h: * runtime/GenericTypedArrayView.h: * runtime/JSGlobalObjectDebuggable.h: * runtime/JSPromiseReaction.cpp: * runtime/RegExpCache.h: * runtime/SimpleTypedArrayController.h: * runtime/SymbolTable.h: * runtime/WeakMapData.h: Source/WebCore: * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: * Modules/encryptedmedia/CDMPrivateAVFoundation.h: * Modules/encryptedmedia/CDMPrivateAVFoundation.mm: * Modules/encryptedmedia/MediaKeyMessageEvent.h: * Modules/encryptedmedia/MediaKeyNeededEvent.h: * Modules/encryptedmedia/MediaKeySession.h: * Modules/encryptedmedia/MediaKeys.h: * Modules/geolocation/Geolocation.h: * Modules/indexeddb/DOMWindowIndexedDatabase.h: * Modules/indexeddb/IDBCursorBackendOperations.h: * Modules/indexeddb/IDBCursorWithValue.h: * Modules/indexeddb/IDBDatabase.h: * Modules/indexeddb/IDBDatabaseCallbacksImpl.h: * Modules/indexeddb/IDBOpenDBRequest.h: * Modules/indexeddb/IDBRequest.h: * Modules/indexeddb/IDBTransaction.h: * Modules/indexeddb/IDBTransactionBackendOperations.h: * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp: * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h: * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h: * Modules/indieui/UIRequestEvent.h: * Modules/mediasource/MediaSource.h: * Modules/mediasource/MediaSourceRegistry.h: * Modules/mediasource/SourceBuffer.h: * Modules/mediasource/SourceBufferList.h: * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaConstraintsImpl.h: * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrackEvent.h: * Modules/mediastream/MediaStreamTrackSourcesRequest.h: * Modules/mediastream/RTCDTMFSender.h: * Modules/mediastream/RTCDataChannel.h: * Modules/mediastream/RTCPeerConnection.h: * Modules/mediastream/RTCSessionDescriptionRequestImpl.h: * Modules/mediastream/RTCStatsRequestImpl.h: * Modules/mediastream/RTCStatsResponse.h: * Modules/mediastream/RTCVoidRequestImpl.h: * Modules/mediastream/UserMediaRequest.h: * Modules/mediastream/VideoStreamTrack.h: * Modules/networkinfo/NetworkInfoConnection.h: * Modules/notifications/DOMWindowNotifications.h: * Modules/notifications/Notification.h: * Modules/notifications/NotificationCenter.h: * Modules/plugins/QuickTimePluginReplacement.h: * Modules/speech/SpeechRecognition.h: * Modules/speech/SpeechRecognitionError.h: * Modules/speech/SpeechRecognitionEvent.h: * Modules/speech/SpeechSynthesis.h: * Modules/speech/SpeechSynthesisUtterance.h: * Modules/webaudio/AnalyserNode.h: * Modules/webaudio/AudioBasicInspectorNode.h: * Modules/webaudio/AudioBasicProcessorNode.h: * Modules/webaudio/AudioBufferSourceNode.h: * Modules/webaudio/AudioContext.h: * Modules/webaudio/AudioDestinationNode.h: * Modules/webaudio/AudioNode.h: * Modules/webaudio/AudioNodeInput.h: * Modules/webaudio/AudioParam.h: * Modules/webaudio/AudioProcessingEvent.h: * Modules/webaudio/BiquadDSPKernel.h: * Modules/webaudio/BiquadProcessor.h: * Modules/webaudio/ChannelMergerNode.h: * Modules/webaudio/ChannelSplitterNode.h: * Modules/webaudio/ConvolverNode.h: * Modules/webaudio/DefaultAudioDestinationNode.h: * Modules/webaudio/DelayDSPKernel.h: * Modules/webaudio/DelayProcessor.h: * Modules/webaudio/DynamicsCompressorNode.h: * Modules/webaudio/GainNode.h: * Modules/webaudio/MediaElementAudioSourceNode.h: * Modules/webaudio/MediaStreamAudioDestinationNode.h: * Modules/webaudio/MediaStreamAudioSourceNode.h: * Modules/webaudio/OfflineAudioCompletionEvent.h: * Modules/webaudio/OfflineAudioDestinationNode.h: * Modules/webaudio/OscillatorNode.h: * Modules/webaudio/PannerNode.h: * Modules/webaudio/ScriptProcessorNode.h: * Modules/webaudio/WaveShaperDSPKernel.h: * Modules/webaudio/WaveShaperProcessor.h: * Modules/webdatabase/DatabaseTask.h: * Modules/webdatabase/SQLTransaction.h: * Modules/webdatabase/SQLTransactionBackend.h: * Modules/websockets/CloseEvent.h: * Modules/websockets/WebSocket.h: * Modules/websockets/WebSocketChannel.h: * Modules/websockets/WebSocketDeflateFramer.cpp: * Modules/websockets/WorkerThreadableWebSocketChannel.cpp: * Modules/websockets/WorkerThreadableWebSocketChannel.h: * accessibility/AccessibilityARIAGrid.h: * accessibility/AccessibilityARIAGridCell.h: * accessibility/AccessibilityARIAGridRow.h: * accessibility/AccessibilityImageMapLink.h: * accessibility/AccessibilityList.h: * accessibility/AccessibilityListBox.h: * accessibility/AccessibilityListBoxOption.h: * accessibility/AccessibilityMediaControls.h: * accessibility/AccessibilityMenuList.h: * accessibility/AccessibilityMenuListOption.h: * accessibility/AccessibilityMenuListPopup.h: * accessibility/AccessibilityMockObject.h: * accessibility/AccessibilityNodeObject.h: * accessibility/AccessibilityProgressIndicator.h: * accessibility/AccessibilityRenderObject.h: * accessibility/AccessibilitySVGRoot.h: * accessibility/AccessibilityScrollView.h: * accessibility/AccessibilityScrollbar.h: * accessibility/AccessibilitySearchFieldButtons.h: * accessibility/AccessibilitySlider.h: * accessibility/AccessibilitySpinButton.h: * accessibility/AccessibilityTable.h: * accessibility/AccessibilityTableCell.h: * accessibility/AccessibilityTableColumn.h: * accessibility/AccessibilityTableHeaderContainer.h: * accessibility/AccessibilityTableRow.h: * bindings/js/JSCryptoAlgorithmBuilder.h: * bindings/js/JSCryptoKeySerializationJWK.h: * bindings/js/JSDOMGlobalObjectTask.h: * bindings/js/JSEventListener.h: * bindings/js/JSLazyEventListener.h: * bindings/js/JSMutationCallback.h: * bindings/js/PageScriptDebugServer.h: * bindings/js/ScriptDebugServer.h: * bindings/js/WebCoreTypedArrayController.h: * bindings/js/WorkerScriptDebugServer.h: * bridge/c/c_class.h: * bridge/c/c_instance.h: * bridge/c/c_runtime.h: * bridge/runtime_root.h: * crypto/algorithms/CryptoAlgorithmAES_CBC.h: * crypto/algorithms/CryptoAlgorithmAES_KW.h: * crypto/algorithms/CryptoAlgorithmHMAC.h: * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h: * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h: * crypto/algorithms/CryptoAlgorithmSHA1.h: * crypto/algorithms/CryptoAlgorithmSHA224.h: * crypto/algorithms/CryptoAlgorithmSHA256.h: * crypto/algorithms/CryptoAlgorithmSHA384.h: * crypto/algorithms/CryptoAlgorithmSHA512.h: * crypto/keys/CryptoKeyAES.h: * crypto/keys/CryptoKeyHMAC.h: * crypto/keys/CryptoKeyRSA.h: * crypto/keys/CryptoKeySerializationRaw.h: * crypto/parameters/CryptoAlgorithmAesCbcParams.h: * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h: * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: * crypto/parameters/CryptoAlgorithmHmacParams.h: * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h: * crypto/parameters/CryptoAlgorithmRsaOaepParams.h: * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: * css/CSSBasicShapes.h: * css/CSSCanvasValue.h: * css/CSSCharsetRule.h: * css/CSSComputedStyleDeclaration.h: * css/CSSCrossfadeValue.h: * css/CSSFilterImageValue.h: * css/CSSFontFaceRule.h: * css/CSSFontSelector.h: * css/CSSGroupingRule.h: * css/CSSHostRule.h: * css/CSSImportRule.h: * css/CSSMediaRule.h: * css/CSSPageRule.h: * css/CSSStyleRule.h: * css/CSSStyleSheet.h: * css/CSSSupportsRule.h: * css/CSSUnknownRule.h: * css/FontLoader.cpp: * css/FontLoader.h: * css/PropertySetCSSStyleDeclaration.h: * css/WebKitCSSFilterRule.h: * css/WebKitCSSKeyframeRule.h: * css/WebKitCSSKeyframesRule.h: * css/WebKitCSSRegionRule.h: * css/WebKitCSSViewportRule.h: * dom/Attr.h: * dom/BeforeTextInsertedEvent.h: * dom/BeforeUnloadEvent.h: * dom/CDATASection.h: * dom/CharacterData.h: * dom/ChildNodeList.h: * dom/Clipboard.cpp: * dom/ClipboardEvent.h: * dom/ContainerNode.h: * dom/DOMImplementation.cpp: * dom/DatasetDOMStringMap.h: * dom/DeviceMotionController.h: * dom/DeviceOrientationController.h: * dom/Document.h: * dom/DocumentEventQueue.cpp: * dom/DocumentEventQueue.h: * dom/DocumentFragment.h: * dom/Element.h: * dom/ErrorEvent.h: * dom/EventContext.h: * dom/EventTarget.h: * dom/FocusEvent.h: * dom/KeyboardEvent.h: * dom/LiveNodeList.h: * dom/MessagePort.h: * dom/MouseEvent.h: * dom/MutationRecord.cpp: * dom/Node.h: * dom/PageTransitionEvent.h: * dom/ProcessingInstruction.h: * dom/ProgressEvent.h: * dom/PseudoElement.h: * dom/ScriptExecutionContext.h: * dom/ShadowRoot.h: * dom/StaticNodeList.h: * dom/StyledElement.h: * dom/TagNodeList.h: * dom/TemplateContentDocumentFragment.h: * dom/Text.h: * dom/TextEvent.h: * dom/TouchEvent.h: * dom/TransitionEvent.h: * dom/UIEvent.h: * dom/WebKitAnimationEvent.h: * dom/WebKitNamedFlow.h: * dom/WebKitTransitionEvent.h: * editing/AppendNodeCommand.h: * editing/ApplyBlockElementCommand.h: * editing/ApplyStyleCommand.h: * editing/BreakBlockquoteCommand.h: * editing/CompositeEditCommand.h: * editing/DeleteButton.h: * editing/DeleteFromTextNodeCommand.h: * editing/EditCommand.h: * editing/InsertIntoTextNodeCommand.h: * editing/InsertNodeBeforeCommand.h: * editing/InsertTextCommand.h: * editing/MergeIdenticalElementsCommand.h: * editing/RemoveCSSPropertyCommand.h: * editing/RemoveNodeCommand.h: * editing/ReplaceNodeWithSpanCommand.h: * editing/SetNodeAttributeCommand.h: * editing/SetSelectionCommand.h: * editing/SpellChecker.h: * editing/SpellingCorrectionCommand.cpp: * editing/SpellingCorrectionCommand.h: * editing/SplitElementCommand.h: * editing/SplitTextNodeCommand.h: * editing/WrapContentsInDummySpanCommand.h: * editing/ios/EditorIOS.mm: * editing/markup.cpp: * fileapi/Blob.cpp: * fileapi/Blob.h: * fileapi/File.h: * fileapi/FileReader.h: * fileapi/FileThreadTask.h: * history/BackForwardList.h: * html/BaseButtonInputType.h: * html/BaseCheckableInputType.h: * html/BaseChooserOnlyDateAndTimeInputType.h: * html/BaseClickableWithKeyInputType.h: * html/BaseDateAndTimeInputType.h: * html/BaseTextInputType.h: * html/ButtonInputType.h: * html/CheckboxInputType.h: * html/ClassList.h: * html/ColorInputType.h: * html/DOMSettableTokenList.h: * html/DateInputType.h: * html/DateTimeInputType.h: * html/DateTimeLocalInputType.h: * html/EmailInputType.h: * html/FTPDirectoryDocument.cpp: * html/FileInputType.h: * html/FormAssociatedElement.cpp: * html/FormAssociatedElement.h: * html/HTMLAnchorElement.h: * html/HTMLAppletElement.h: * html/HTMLAreaElement.h: * html/HTMLBRElement.h: * html/HTMLBaseElement.h: * html/HTMLBodyElement.h: * html/HTMLButtonElement.h: * html/HTMLCanvasElement.h: * html/HTMLDetailsElement.cpp: * html/HTMLDetailsElement.h: * html/HTMLDivElement.h: * html/HTMLDocument.h: * html/HTMLElement.h: * html/HTMLEmbedElement.h: * html/HTMLFieldSetElement.h: * html/HTMLFontElement.h: * html/HTMLFormControlElement.h: * html/HTMLFormControlElementWithState.h: * html/HTMLFormControlsCollection.h: * html/HTMLFormElement.h: * html/HTMLFrameElement.h: * html/HTMLFrameElementBase.h: * html/HTMLFrameOwnerElement.h: * html/HTMLFrameSetElement.h: * html/HTMLHRElement.h: * html/HTMLHtmlElement.h: * html/HTMLIFrameElement.h: * html/HTMLImageElement.h: * html/HTMLImageLoader.h: * html/HTMLInputElement.cpp: * html/HTMLInputElement.h: * html/HTMLKeygenElement.h: * html/HTMLLIElement.h: * html/HTMLLabelElement.h: * html/HTMLLegendElement.h: * html/HTMLLinkElement.h: * html/HTMLMapElement.h: * html/HTMLMarqueeElement.h: * html/HTMLMediaElement.h: * html/HTMLMediaSession.h: * html/HTMLMediaSource.h: * html/HTMLMetaElement.h: * html/HTMLMeterElement.h: * html/HTMLModElement.h: * html/HTMLOListElement.h: * html/HTMLObjectElement.h: * html/HTMLOptGroupElement.h: * html/HTMLOptionElement.h: * html/HTMLOutputElement.h: * html/HTMLParagraphElement.h: * html/HTMLParamElement.h: * html/HTMLPlugInElement.h: * html/HTMLPlugInImageElement.h: * html/HTMLPreElement.h: * html/HTMLProgressElement.h: * html/HTMLQuoteElement.h: * html/HTMLScriptElement.h: * html/HTMLSelectElement.h: * html/HTMLSourceElement.h: * html/HTMLStyleElement.h: * html/HTMLSummaryElement.h: * html/HTMLTableCaptionElement.h: * html/HTMLTableCellElement.h: * html/HTMLTableColElement.h: * html/HTMLTableElement.h: * html/HTMLTablePartElement.h: * html/HTMLTableRowsCollection.h: * html/HTMLTableSectionElement.h: * html/HTMLTemplateElement.h: * html/HTMLTextAreaElement.h: * html/HTMLTextFormControlElement.h: * html/HTMLTitleElement.h: * html/HTMLTrackElement.h: * html/HTMLUListElement.h: * html/HTMLUnknownElement.h: * html/HTMLVideoElement.h: * html/HiddenInputType.h: * html/ImageDocument.cpp: * html/ImageInputType.h: * html/LabelableElement.h: * html/LabelsNodeList.h: * html/MediaController.h: * html/MonthInputType.h: * html/NumberInputType.h: * html/PasswordInputType.h: * html/PluginDocument.h: * html/RadioInputType.h: * html/RangeInputType.h: * html/ResetInputType.h: * html/SearchInputType.h: * html/SubmitInputType.h: * html/TelephoneInputType.h: * html/TextFieldInputType.h: * html/TextInputType.h: * html/TimeInputType.h: * html/URLInputType.h: * html/WeekInputType.h: * html/canvas/CanvasRenderingContext2D.cpp: * html/canvas/CanvasRenderingContext2D.h: * html/canvas/WebGLRenderingContext.h: * html/parser/HTMLDocumentParser.h: * html/parser/TextDocumentParser.h: * html/shadow/DetailsMarkerControl.h: * html/shadow/InsertionPoint.h: * html/shadow/MediaControlElementTypes.h: * html/shadow/MediaControlElements.h: * html/shadow/MediaControls.h: * html/shadow/MediaControlsApple.h: * html/shadow/MediaControlsGtk.h: * html/shadow/MeterShadowElement.h: * html/shadow/ProgressShadowElement.h: * html/shadow/SliderThumbElement.cpp: * html/shadow/SliderThumbElement.h: * html/shadow/SpinButtonElement.h: * html/shadow/TextControlInnerElements.h: * html/shadow/YouTubeEmbedShadowElement.h: * html/track/AudioTrack.h: * html/track/AudioTrackList.h: * html/track/InbandGenericTextTrack.h: * html/track/InbandTextTrack.h: * html/track/InbandWebVTTTextTrack.h: * html/track/LoadableTextTrack.h: * html/track/TextTrack.h: * html/track/TextTrackCue.h: * html/track/TextTrackCueGeneric.cpp: * html/track/TextTrackCueGeneric.h: * html/track/TextTrackList.h: * html/track/TrackListBase.h: * html/track/VideoTrack.h: * html/track/VideoTrackList.h: * html/track/WebVTTElement.h: * inspector/CommandLineAPIModule.h: * inspector/InjectedScriptCanvasModule.h: * inspector/InspectorApplicationCacheAgent.h: * inspector/InspectorCSSAgent.h: * inspector/InspectorCanvasAgent.h: * inspector/InspectorConsoleAgent.cpp: * inspector/InspectorConsoleAgent.h: * inspector/InspectorController.h: * inspector/InspectorDOMAgent.h: * inspector/InspectorDOMDebuggerAgent.h: * inspector/InspectorDOMStorageAgent.h: * inspector/InspectorDatabaseAgent.h: * inspector/InspectorDebuggerAgent.h: * inspector/InspectorHeapProfilerAgent.h: * inspector/InspectorIndexedDBAgent.cpp: * inspector/InspectorIndexedDBAgent.h: * inspector/InspectorInputAgent.h: * inspector/InspectorLayerTreeAgent.h: * inspector/InspectorMemoryAgent.h: * inspector/InspectorPageAgent.h: * inspector/InspectorProfilerAgent.h: * inspector/InspectorResourceAgent.h: * inspector/InspectorTimelineAgent.h: * inspector/InspectorWorkerAgent.h: * inspector/PageConsoleAgent.cpp: * inspector/PageConsoleAgent.h: * inspector/PageInjectedScriptHost.h: * inspector/PageInjectedScriptManager.h: * inspector/PageRuntimeAgent.h: * inspector/WorkerConsoleAgent.h: * inspector/WorkerDebuggerAgent.h: * inspector/WorkerInspectorController.h: * inspector/WorkerRuntimeAgent.h: * loader/DocumentLoader.h: * loader/EmptyClients.h: * loader/FrameNetworkingContext.h: * loader/ImageLoader.h: * loader/NavigationScheduler.cpp: * loader/NetscapePlugInStreamLoader.h: * loader/PingLoader.h: * loader/ResourceLoader.h: * loader/SubresourceLoader.h: * loader/WorkerThreadableLoader.h: * loader/appcache/ApplicationCacheGroup.cpp: * loader/appcache/ApplicationCacheGroup.h: * loader/appcache/DOMApplicationCache.h: * loader/archive/cf/LegacyWebArchive.h: * loader/cache/CachedCSSStyleSheet.h: * loader/cache/CachedFont.h: * loader/cache/CachedFontClient.h: * loader/cache/CachedImage.h: * loader/cache/CachedImageClient.h: * loader/cache/CachedRawResource.h: * loader/cache/CachedRawResourceClient.h: * loader/cache/CachedSVGDocument.h: * loader/cache/CachedSVGDocumentClient.h: * loader/cache/CachedScript.h: * loader/cache/CachedShader.h: * loader/cache/CachedStyleSheetClient.h: * loader/cache/CachedTextTrack.h: * loader/cache/CachedXSLStyleSheet.h: * loader/icon/IconLoader.h: * mathml/MathMLElement.h: * mathml/MathMLInlineContainerElement.h: * mathml/MathMLMathElement.h: * mathml/MathMLSelectElement.h: * mathml/MathMLTextElement.h: * page/CaptionUserPreferencesMediaAF.h: * page/Chrome.h: * page/DOMTimer.h: * page/DOMWindow.h: * page/DOMWindowExtension.h: * page/EventSource.h: * page/Frame.h: * page/FrameView.h: * page/PageDebuggable.h: * page/PageSerializer.cpp: * page/Performance.h: * page/SuspendableTimer.h: * page/animation/ImplicitAnimation.h: * page/animation/KeyframeAnimation.h: * page/scrolling/AsyncScrollingCoordinator.h: * page/scrolling/ScrollingConstraints.h: * page/scrolling/ScrollingStateFixedNode.h: * page/scrolling/ScrollingStateScrollingNode.h: * page/scrolling/ScrollingStateStickyNode.h: * page/scrolling/ScrollingTreeScrollingNode.h: * page/scrolling/ThreadedScrollingTree.h: * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h: * page/scrolling/ios/ScrollingCoordinatorIOS.h: * page/scrolling/ios/ScrollingTreeIOS.h: * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h: * page/scrolling/mac/ScrollingCoordinatorMac.h: * page/scrolling/mac/ScrollingTreeFixedNode.h: * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h: * page/scrolling/mac/ScrollingTreeStickyNode.h: * pdf/ios/PDFDocument.cpp: * pdf/ios/PDFDocument.h: * platform/CalculationValue.h: * platform/ClockGeneric.h: * platform/MainThreadTask.h: * platform/PODIntervalTree.h: * platform/PODRedBlackTree.h: * platform/RefCountedSupplement.h: * platform/ScrollView.h: * platform/Scrollbar.h: * platform/Timer.h: * platform/animation/TimingFunction.h: * platform/audio/AudioDSPKernelProcessor.h: * platform/audio/EqualPowerPanner.h: * platform/audio/HRTFPanner.h: * platform/audio/ios/AudioDestinationIOS.h: * platform/audio/mac/AudioDestinationMac.h: * platform/audio/nix/AudioDestinationNix.h: * platform/efl/RenderThemeEfl.h: * platform/efl/ScrollbarEfl.h: * platform/efl/ScrollbarThemeEfl.h: * platform/graphics/AudioTrackPrivate.h: * platform/graphics/BitmapImage.h: * platform/graphics/CrossfadeGeneratedImage.h: * platform/graphics/FloatPolygon.h: * platform/graphics/GeneratedImage.h: * platform/graphics/GradientImage.h: * platform/graphics/GraphicsLayer.h: * platform/graphics/InbandTextTrackPrivate.h: * platform/graphics/MediaPlayer.cpp: * platform/graphics/SimpleFontData.h: * platform/graphics/VideoTrackPrivate.h: * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: * platform/graphics/avfoundation/VideoTrackPrivateAVF.h: * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h: * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h: * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h: * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h: * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h: * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h: * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h: * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/ca/mac/PlatformCALayerMac.h: * platform/graphics/ca/mac/TileController.h: * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h: * platform/graphics/ca/win/PlatformCALayerWin.h: * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h: * platform/graphics/cg/PDFDocumentImage.h: * platform/graphics/efl/GraphicsContext3DPrivate.h: * platform/graphics/egl/GLContextFromCurrentEGL.h: * platform/graphics/filters/DistantLightSource.h: * platform/graphics/filters/FEComposite.h: * platform/graphics/filters/FEDisplacementMap.h: * platform/graphics/filters/FEFlood.h: * platform/graphics/filters/FilterOperation.h: * platform/graphics/filters/PointLightSource.h: * platform/graphics/filters/SpotLightSource.h: * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h: * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h: * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h: * platform/graphics/ios/MediaPlayerPrivateIOS.h: * platform/graphics/ios/TextTrackRepresentationIOS.h: * platform/graphics/surfaces/GLTransportSurface.h: * platform/graphics/surfaces/egl/EGLContext.h: * platform/graphics/surfaces/egl/EGLSurface.h: * platform/graphics/surfaces/egl/EGLXSurface.h: * platform/graphics/surfaces/glx/GLXContext.h: * platform/graphics/surfaces/glx/GLXSurface.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/TextureMapperGL.h: * platform/graphics/texmap/TextureMapperImageBuffer.h: * platform/graphics/texmap/TextureMapperLayer.h: * platform/graphics/texmap/TextureMapperTiledBackingStore.h: * platform/graphics/texmap/coordinated/CompositingCoordinator.h: * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h: * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp: * platform/graphics/texmap/coordinated/CoordinatedTile.h: * platform/graphics/texmap/coordinated/UpdateAtlas.cpp: * platform/gtk/RenderThemeGtk.h: * platform/ios/DeviceMotionClientIOS.h: * platform/ios/DeviceOrientationClientIOS.h: * platform/ios/ScrollAnimatorIOS.h: * platform/ios/ScrollbarThemeIOS.h: * platform/ios/WebSafeGCActivityCallbackIOS.h: * platform/ios/WebSafeIncrementalSweeperIOS.h: * platform/mac/PlatformClockCA.h: * platform/mac/PlatformClockCM.h: * platform/mac/ScrollAnimatorMac.h: * platform/mac/ScrollbarThemeMac.h: * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h: * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/MediaStreamCenterMac.h: * platform/mock/DeviceMotionClientMock.h: * platform/mock/DeviceOrientationClientMock.h: * platform/mock/MockMediaStreamCenter.h: * platform/mock/RTCDataChannelHandlerMock.h: * platform/mock/RTCNotifiersMock.h: * platform/mock/RTCPeerConnectionHandlerMock.h: * platform/mock/mediasource/MockMediaPlayerMediaSource.h: * platform/mock/mediasource/MockMediaSourcePrivate.h: * platform/mock/mediasource/MockSourceBufferPrivate.cpp: * platform/mock/mediasource/MockSourceBufferPrivate.h: * platform/network/BlobRegistryImpl.h: * platform/network/BlobResourceHandle.cpp: * platform/network/BlobResourceHandle.h: * platform/network/ResourceHandle.h: * platform/network/SynchronousLoaderClient.h: * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h: * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: * platform/nix/RenderThemeNix.h: * platform/nix/ScrollbarThemeNix.h: * platform/text/LocaleICU.h: * platform/text/LocaleNone.cpp: * platform/text/PlatformLocale.cpp: * platform/text/mac/LocaleMac.h: * platform/text/win/LocaleWin.h: * platform/win/PopupMenuWin.h: * plugins/PluginView.h: * rendering/AutoTableLayout.h: * rendering/ClipPathOperation.h: * rendering/EllipsisBox.h: * rendering/FilterEffectRenderer.h: * rendering/FixedTableLayout.h: * rendering/InlineElementBox.h: * rendering/InlineFlowBox.h: * rendering/InlineTextBox.h: * rendering/RenderBlock.h: * rendering/RenderBlockFlow.h: * rendering/RenderBox.h: * rendering/RenderBoxModelObject.h: * rendering/RenderButton.h: * rendering/RenderCombineText.h: * rendering/RenderCounter.h: * rendering/RenderDeprecatedFlexibleBox.h: * rendering/RenderDetailsMarker.h: * rendering/RenderElement.h: * rendering/RenderEmbeddedObject.h: * rendering/RenderFieldset.h: * rendering/RenderFileUploadControl.h: * rendering/RenderFlexibleBox.h: * rendering/RenderFlowThread.h: * rendering/RenderFrame.h: * rendering/RenderFrameSet.h: * rendering/RenderFullScreen.h: * rendering/RenderGrid.h: * rendering/RenderHTMLCanvas.h: * rendering/RenderIFrame.h: * rendering/RenderImage.h: * rendering/RenderImageResourceStyleImage.h: * rendering/RenderInline.h: * rendering/RenderLayer.h: * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.h: * rendering/RenderLayerFilterInfo.h: * rendering/RenderLayerModelObject.h: * rendering/RenderLineBreak.h: * rendering/RenderListBox.h: * rendering/RenderListItem.h: * rendering/RenderListMarker.h: * rendering/RenderMedia.h: * rendering/RenderMenuList.h: * rendering/RenderMeter.h: * rendering/RenderMultiColumnBlock.h: * rendering/RenderMultiColumnFlowThread.h: * rendering/RenderMultiColumnSet.h: * rendering/RenderNamedFlowFragment.h: * rendering/RenderNamedFlowThread.h: * rendering/RenderObject.h: * rendering/RenderProgress.h: * rendering/RenderQuote.h: * rendering/RenderRegion.h: * rendering/RenderRegionSet.h: * rendering/RenderReplaced.h: * rendering/RenderReplica.h: * rendering/RenderRuby.h: * rendering/RenderRubyRun.h: * rendering/RenderRubyText.h: * rendering/RenderScrollbar.h: * rendering/RenderScrollbarPart.h: * rendering/RenderScrollbarTheme.h: * rendering/RenderSearchField.h: * rendering/RenderSlider.h: * rendering/RenderSnapshottedPlugIn.h: * rendering/RenderTable.h: * rendering/RenderTableCaption.h: * rendering/RenderTableCell.h: * rendering/RenderTableCol.h: * rendering/RenderTableRow.h: * rendering/RenderTableSection.h: * rendering/RenderText.h: * rendering/RenderTextControl.h: * rendering/RenderTextControlMultiLine.h: * rendering/RenderTextControlSingleLine.h: * rendering/RenderTextFragment.h: * rendering/RenderTextTrackCue.h: * rendering/RenderThemeIOS.h: * rendering/RenderThemeMac.h: * rendering/RenderThemeSafari.h: * rendering/RenderThemeWin.h: * rendering/RenderVideo.h: * rendering/RenderView.h: * rendering/RenderWidget.h: * rendering/RootInlineBox.h: * rendering/mathml/RenderMathMLBlock.h: * rendering/mathml/RenderMathMLFenced.h: * rendering/mathml/RenderMathMLFraction.h: * rendering/mathml/RenderMathMLMath.h: * rendering/mathml/RenderMathMLOperator.h: * rendering/mathml/RenderMathMLRoot.h: * rendering/mathml/RenderMathMLRow.h: * rendering/mathml/RenderMathMLScripts.h: * rendering/mathml/RenderMathMLSpace.h: * rendering/mathml/RenderMathMLSquareRoot.h: * rendering/mathml/RenderMathMLUnderOver.h: * rendering/shapes/BoxShape.h: * rendering/shapes/PolygonShape.h: * rendering/shapes/RasterShape.h: * rendering/shapes/RectangleShape.h: * rendering/shapes/ShapeInsideInfo.h: * rendering/shapes/ShapeOutsideInfo.h: * rendering/style/BasicShapes.h: * rendering/style/ContentData.h: * rendering/style/StyleCachedImage.h: * rendering/style/StyleCachedImageSet.h: * rendering/style/StyleGeneratedImage.h: * rendering/style/StylePendingImage.h: * rendering/svg/RenderSVGBlock.h: * rendering/svg/RenderSVGContainer.h: * rendering/svg/RenderSVGForeignObject.h: * rendering/svg/RenderSVGGradientStop.h: * rendering/svg/RenderSVGHiddenContainer.h: * rendering/svg/RenderSVGImage.h: * rendering/svg/RenderSVGInline.h: * rendering/svg/RenderSVGInlineText.h: * rendering/svg/RenderSVGModelObject.h: * rendering/svg/RenderSVGPath.h: * rendering/svg/RenderSVGResourceClipper.h: * rendering/svg/RenderSVGResourceContainer.h: * rendering/svg/RenderSVGResourceFilter.h: * rendering/svg/RenderSVGResourceGradient.h: * rendering/svg/RenderSVGResourceLinearGradient.h: * rendering/svg/RenderSVGResourceMarker.h: * rendering/svg/RenderSVGResourceMasker.h: * rendering/svg/RenderSVGResourcePattern.h: * rendering/svg/RenderSVGResourceRadialGradient.h: * rendering/svg/RenderSVGResourceSolidColor.h: * rendering/svg/RenderSVGRoot.h: * rendering/svg/RenderSVGShape.cpp: * rendering/svg/RenderSVGShape.h: * rendering/svg/RenderSVGText.h: * rendering/svg/RenderSVGTextPath.h: * rendering/svg/RenderSVGViewportContainer.h: * rendering/svg/SVGInlineFlowBox.h: * rendering/svg/SVGInlineTextBox.h: * rendering/svg/SVGRootInlineBox.h: * rendering/svg/SVGTextRunRenderingContext.h: * storage/StorageAreaImpl.h: * storage/StorageNamespaceImpl.h: * svg/SVGAElement.h: * svg/SVGAltGlyphDefElement.h: * svg/SVGAltGlyphElement.h: * svg/SVGAltGlyphItemElement.h: * svg/SVGAnimateElement.h: * svg/SVGAnimateMotionElement.h: * svg/SVGAnimateTransformElement.h: * svg/SVGAnimatedAngle.h: * svg/SVGAnimatedBoolean.h: * svg/SVGAnimatedColor.h: * svg/SVGAnimatedEnumeration.h: * svg/SVGAnimatedInteger.h: * svg/SVGAnimatedIntegerOptionalInteger.h: * svg/SVGAnimatedLength.h: * svg/SVGAnimatedLengthList.h: * svg/SVGAnimatedNumber.h: * svg/SVGAnimatedNumberList.h: * svg/SVGAnimatedNumberOptionalNumber.h: * svg/SVGAnimatedPath.h: * svg/SVGAnimatedPointList.h: * svg/SVGAnimatedPreserveAspectRatio.h: * svg/SVGAnimatedRect.h: * svg/SVGAnimatedString.h: * svg/SVGAnimatedTransformList.h: * svg/SVGAnimationElement.h: * svg/SVGCircleElement.h: * svg/SVGClipPathElement.h: * svg/SVGComponentTransferFunctionElement.h: * svg/SVGCursorElement.h: * svg/SVGDefsElement.h: * svg/SVGDocument.h: * svg/SVGElement.h: * svg/SVGElementInstance.h: * svg/SVGEllipseElement.h: * svg/SVGFEBlendElement.h: * svg/SVGFEColorMatrixElement.h: * svg/SVGFEComponentTransferElement.h: * svg/SVGFECompositeElement.h: * svg/SVGFEConvolveMatrixElement.h: * svg/SVGFEDiffuseLightingElement.h: * svg/SVGFEDisplacementMapElement.h: * svg/SVGFEDropShadowElement.h: * svg/SVGFEGaussianBlurElement.h: * svg/SVGFEImageElement.h: * svg/SVGFELightElement.h: * svg/SVGFEMergeNodeElement.h: * svg/SVGFEMorphologyElement.h: * svg/SVGFEOffsetElement.h: * svg/SVGFESpecularLightingElement.h: * svg/SVGFETileElement.h: * svg/SVGFETurbulenceElement.h: * svg/SVGFilterElement.h: * svg/SVGFilterPrimitiveStandardAttributes.h: * svg/SVGFontElement.h: * svg/SVGFontFaceElement.h: * svg/SVGFontFaceFormatElement.h: * svg/SVGFontFaceNameElement.h: * svg/SVGFontFaceSrcElement.h: * svg/SVGFontFaceUriElement.h: * svg/SVGForeignObjectElement.h: * svg/SVGGElement.h: * svg/SVGGlyphElement.h: * svg/SVGGlyphRefElement.h: * svg/SVGGradientElement.h: * svg/SVGGraphicsElement.h: * svg/SVGHKernElement.h: * svg/SVGImageElement.h: * svg/SVGLineElement.h: * svg/SVGLinearGradientElement.h: * svg/SVGMPathElement.h: * svg/SVGMarkerElement.h: * svg/SVGMaskElement.h: * svg/SVGMetadataElement.h: * svg/SVGPathElement.h: * svg/SVGPathStringBuilder.h: * svg/SVGPatternElement.h: * svg/SVGPolyElement.h: * svg/SVGRadialGradientElement.h: * svg/SVGRectElement.h: * svg/SVGSVGElement.h: * svg/SVGScriptElement.h: * svg/SVGSetElement.h: * svg/SVGStopElement.h: * svg/SVGStyleElement.h: * svg/SVGSwitchElement.h: * svg/SVGSymbolElement.h: * svg/SVGTRefElement.cpp: * svg/SVGTRefElement.h: * svg/SVGTSpanElement.h: * svg/SVGTextContentElement.h: * svg/SVGTextElement.h: * svg/SVGTextPathElement.h: * svg/SVGTextPositioningElement.h: * svg/SVGTitleElement.h: * svg/SVGTransformable.h: * svg/SVGUnknownElement.h: * svg/SVGUseElement.h: * svg/SVGVKernElement.h: * svg/SVGViewElement.h: * svg/animation/SVGSMILElement.h: * svg/graphics/SVGImage.h: * svg/graphics/SVGImageForContainer.h: * svg/graphics/filters/SVGFilter.h: * svg/properties/SVGAnimatedListPropertyTearOff.h: * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: * svg/properties/SVGListPropertyTearOff.h: * svg/properties/SVGPathSegListPropertyTearOff.h: * svg/properties/SVGPropertyTearOff.h: * testing/InternalSettings.cpp: * testing/Internals.cpp: * testing/MockCDM.cpp: * testing/MockCDM.h: * workers/AbstractWorker.h: * workers/DedicatedWorkerGlobalScope.h: * workers/DedicatedWorkerThread.h: * workers/SharedWorker.h: * workers/SharedWorkerGlobalScope.h: * workers/SharedWorkerThread.h: * workers/Worker.h: * workers/WorkerEventQueue.cpp: * workers/WorkerEventQueue.h: * workers/WorkerGlobalScope.h: * workers/WorkerMessagingProxy.h: * workers/WorkerObjectProxy.h: * workers/WorkerScriptLoader.h: * workers/WorkerThread.cpp: * xml/XMLHttpRequest.h: * xml/XMLHttpRequestUpload.h: * xml/XPathFunctions.cpp: * xml/XPathPath.h: * xml/XPathPredicate.h: * xml/XSLStyleSheet.h: Source/WebKit/efl: * WebCoreSupport/InspectorClientEfl.h: * WebCoreSupport/ProgressTrackerClientEfl.h: Source/WebKit/gtk: * WebCoreSupport/EditorClientGtk.h: * WebCoreSupport/InspectorClientGtk.h: * WebCoreSupport/ProgressTrackerClientGtk.h: Source/WebKit/ios: * Misc/EmojiFallbackFontSelector.h: * Storage/WebSQLiteDatabaseTrackerClient.h: * WebCoreSupport/PopupMenuIOS.h: * WebCoreSupport/SearchPopupMenuIOS.h: * WebCoreSupport/WebChromeClientIOS.h: * WebCoreSupport/WebDiskImageCacheClientIOS.h: Source/WebKit/mac: * Storage/WebDatabaseManagerClient.h: * Storage/WebStorageTrackerClient.h: * WebCoreSupport/WebAlternativeTextClient.h: * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebContextMenuClient.h: * WebCoreSupport/WebDeviceOrientationClient.h: * WebCoreSupport/WebDragClient.h: * WebCoreSupport/WebEditorClient.h: * WebCoreSupport/WebFrameLoaderClient.h: * WebCoreSupport/WebFrameNetworkingContext.h: * WebCoreSupport/WebGeolocationClient.h: * WebCoreSupport/WebIconDatabaseClient.h: * WebCoreSupport/WebInspectorClient.h: * WebCoreSupport/WebNotificationClient.h: * WebCoreSupport/WebPlatformStrategies.h: * WebCoreSupport/WebProgressTrackerClient.h: * WebCoreSupport/WebUserMediaClient.h: * WebView/WebScriptDebugger.h: * WebView/WebViewData.h: Source/WebKit/win: * AccessibleDocument.h: * FullscreenVideoController.cpp: * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebFrameLoaderClient.h: * WebCoreSupport/WebFrameNetworkingContext.h: * WebCoreSupport/WebInspectorClient.h: * WebHistory.h: Source/WebKit/wince: * WebCoreSupport/ChromeClientWinCE.h: * WebCoreSupport/ContextMenuClientWinCE.h: * WebCoreSupport/DragClientWinCE.h: * WebCoreSupport/EditorClientWinCE.h: * WebCoreSupport/FrameLoaderClientWinCE.h: * WebCoreSupport/FrameNetworkingContextWinCE.h: * WebCoreSupport/InspectorClientWinCE.h: * WebCoreSupport/PlatformStrategiesWinCE.h: Source/WebKit2: * DatabaseProcess/DatabaseProcess.h: * DatabaseProcess/DatabaseToWebProcessConnection.h: * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h: * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h: * NetworkProcess/AsynchronousNetworkLoaderClient.h: * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcessPlatformStrategies.h: * NetworkProcess/NetworkResourceLoader.h: * NetworkProcess/RemoteNetworkingContext.h: * NetworkProcess/SynchronousNetworkLoaderClient.h: * NetworkProcess/mac/DiskCacheMonitor.h: * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm: * PluginProcess/PluginControllerProxy.h: * PluginProcess/PluginProcess.h: * PluginProcess/WebProcessConnection.h: * Shared/API/Cocoa/RemoteObjectRegistry.h: * Shared/APIObject.h: * Shared/AsyncRequest.h: * Shared/AsyncTask.h: * Shared/Authentication/AuthenticationManager.h: * Shared/ChildProcess.h: * Shared/ChildProcessProxy.h: * Shared/CoordinatedGraphics/WebCoordinatedSurface.h: * Shared/Downloads/Download.h: * Shared/Network/CustomProtocols/CustomProtocolManager.h: * Shared/WebConnection.h: * Shared/WebResourceBuffer.h: * Shared/cf/KeyedEncoder.h: * Shared/mac/SecItemShim.h: * UIProcess/API/Cocoa/WKBrowsingContextController.mm: * UIProcess/API/gtk/PageClientImpl.h: * UIProcess/API/ios/PageClientImplIOS.h: * UIProcess/API/mac/PageClientImpl.h: * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h: * UIProcess/CoordinatedGraphics/WebView.h: * UIProcess/Databases/DatabaseProcessProxy.h: * UIProcess/Downloads/DownloadProxy.h: * UIProcess/DrawingAreaProxy.h: * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h: * UIProcess/Network/NetworkProcessProxy.h: * UIProcess/Notifications/WebNotificationManagerProxy.h: * UIProcess/Plugins/PluginProcessProxy.h: * UIProcess/Scrolling/RemoteScrollingTree.h: * UIProcess/Storage/StorageManager.h: * UIProcess/WebApplicationCacheManagerProxy.h: * UIProcess/WebBatteryManagerProxy.h: * UIProcess/WebConnectionToWebProcess.h: * UIProcess/WebContext.h: * UIProcess/WebCookieManagerProxy.h: * UIProcess/WebDatabaseManagerProxy.h: * UIProcess/WebFullScreenManagerProxy.h: * UIProcess/WebGeolocationManagerProxy.h: * UIProcess/WebIconDatabase.h: * UIProcess/WebInspectorProxy.h: * UIProcess/WebKeyValueStorageManager.h: * UIProcess/WebMediaCacheManagerProxy.h: * UIProcess/WebNetworkInfoManagerProxy.h: * UIProcess/WebOriginDataManagerProxy.h: * UIProcess/WebPageProxy.h: * UIProcess/WebProcessProxy.h: * UIProcess/WebResourceCacheManagerProxy.h: * UIProcess/WebVibrationProxy.h: * UIProcess/efl/PageViewportControllerClientEfl.h: * UIProcess/efl/WebViewEfl.h: * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h: * UIProcess/mac/SecItemShimProxy.h: * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h: * UIProcess/mac/ViewGestureController.h: * UIProcess/mac/WebColorPickerMac.h: * UIProcess/soup/WebSoupRequestManagerProxy.h: * WebProcess/ApplicationCache/WebApplicationCacheManager.h: * WebProcess/Battery/WebBatteryManager.h: * WebProcess/Cookies/WebCookieManager.h: * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h: * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h: * WebProcess/Databases/WebToDatabaseProcessConnection.h: * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm: * WebProcess/FileAPI/BlobRegistryProxy.h: * WebProcess/Geolocation/WebGeolocationManager.h: * WebProcess/IconDatabase/WebIconDatabaseProxy.h: * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm: * WebProcess/MediaCache/WebMediaCacheManager.h: * WebProcess/Network/NetworkProcessConnection.h: * WebProcess/Network/WebResourceLoadScheduler.h: * WebProcess/Network/WebResourceLoader.h: * WebProcess/NetworkInfo/WebNetworkInfoManager.h: * WebProcess/Notifications/WebNotificationManager.h: * WebProcess/OriginData/WebOriginDataManager.h: * WebProcess/Plugins/Netscape/NetscapePlugin.h: * WebProcess/Plugins/PDF/PDFPlugin.h: * WebProcess/Plugins/PDF/PDFPluginAnnotation.h: * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.h: * WebProcess/Plugins/PDF/PDFPluginPasswordField.h: * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h: * WebProcess/Plugins/PluginProcessConnection.h: * WebProcess/Plugins/PluginProcessConnectionManager.h: * WebProcess/Plugins/PluginProxy.h: * WebProcess/Plugins/PluginView.h: * WebProcess/ResourceCache/WebResourceCacheManager.h: * WebProcess/Scrolling/RemoteScrollingCoordinator.h: * WebProcess/Storage/StorageAreaImpl.h: * WebProcess/Storage/StorageAreaMap.h: * WebProcess/Storage/StorageNamespaceImpl.h: * WebProcess/WebConnectionToUIProcess.h: * WebProcess/WebCoreSupport/WebAlternativeTextClient.h: * WebProcess/WebCoreSupport/WebBatteryClient.h: * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebColorChooser.h: * WebProcess/WebCoreSupport/WebContextMenuClient.h: * WebProcess/WebCoreSupport/WebDatabaseManager.h: * WebProcess/WebCoreSupport/WebDeviceProximityClient.h: * WebProcess/WebCoreSupport/WebDragClient.h: * WebProcess/WebCoreSupport/WebEditorClient.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: * WebProcess/WebCoreSupport/WebGeolocationClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h: * WebProcess/WebCoreSupport/WebNavigatorContentUtilsClient.h: * WebProcess/WebCoreSupport/WebNetworkInfoClient.h: * WebProcess/WebCoreSupport/WebNotificationClient.h: * WebProcess/WebCoreSupport/WebPlatformStrategies.h: * WebProcess/WebCoreSupport/WebPopupMenu.h: * WebProcess/WebCoreSupport/WebProgressTrackerClient.h: * WebProcess/WebCoreSupport/WebSearchPopupMenu.h: * WebProcess/WebCoreSupport/WebVibrationClient.h: * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h: * WebProcess/WebPage/DrawingAreaImpl.h: * WebProcess/WebPage/EventDispatcher.h: * WebProcess/WebPage/ViewGestureGeometryCollector.h: * WebProcess/WebPage/WebBackForwardListProxy.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/gtk/LayerTreeHostGtk.h: * WebProcess/WebPage/mac/GraphicsLayerCARemote.h: * WebProcess/WebPage/mac/PlatformCALayerRemote.h: * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h: * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebProcess.h: * WebProcess/soup/WebSoupRequestManager.h: Source/WTF: * wtf/Compiler.h: * wtf/FilePrintStream.h: * wtf/RunLoop.h: * wtf/StringPrintStream.h: Tools: * DumpRenderTree/gtk/fonts/fonts.conf: * Scripts/do-webcore-rename: Removed this rename operation from the list of contemplated future renames. * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp: * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp: * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp: * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp: * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162139 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 09 Jan, 2014 3 commits
-
-
mhahnenberg@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=126552 Reviewed by Geoffrey Garen. Source/JavaScriptCore: Re-marking the same objects over and over is a waste of effort. This patch implements the sticky mark bit algorithm (along with our already-present write barriers) to reduce overhead during garbage collection caused by rescanning objects. There are now two collection modes, EdenCollection and FullCollection. EdenCollections only visit new objects or objects that were added to the remembered set by a write barrier. FullCollections are normal collections that visit all objects regardless of their generation. In this patch EdenCollections do not do anything in CopiedSpace. This will be fixed in https://bugs.webkit.org/show_bug.cgi?id=126555. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::visitAggregate): * bytecode/CodeBlock.h: (JSC::CodeBlockSet::mark): * dfg/DFGOperations.cpp: * heap/CodeBlockSet.cpp: (JSC::CodeBlockSet::add): (JSC::CodeBlockSet::traceMarked): (JSC::CodeBlockSet::rememberCurrentlyExecutingCodeBlocks): * heap/CodeBlockSet.h: * heap/CopiedBlockInlines.h: (JSC::CopiedBlock::reportLiveBytes): * heap/CopiedSpace.cpp: (JSC::CopiedSpace::didStartFullCollection): * heap/CopiedSpace.h: (JSC::CopiedSpace::heap): * heap/Heap.cpp: (JSC::Heap::Heap): (JSC::Heap::didAbandon): (JSC::Heap::markRoots): (JSC::Heap::copyBackingStores): (JSC::Heap::addToRememberedSet): (JSC::Heap::collectAllGarbage): (JSC::Heap::collect): (JSC::Heap::didAllocate): (JSC::Heap::writeBarrier): * heap/Heap.h: (JSC::Heap::isInRememberedSet): (JSC::Heap::operationInProgress): (JSC::Heap::shouldCollect): (JSC::Heap::isCollecting): (JSC::Heap::isWriteBarrierEnabled): (JSC::Heap::writeBarrier): * heap/HeapOperation.h: * heap/MarkStack.cpp: (JSC::MarkStackArray::~MarkStackArray): (JSC::MarkStackArray::clear): (JSC::MarkStackArray::fillVector): * heap/MarkStack.h: * heap/MarkedAllocator.cpp: (JSC::isListPagedOut): (JSC::MarkedAllocator::isPagedOut): (JSC::MarkedAllocator::tryAllocateHelper): (JSC::MarkedAllocator::addBlock): (JSC::MarkedAllocator::removeBlock): (JSC::MarkedAllocator::reset): * heap/MarkedAllocator.h: (JSC::MarkedAllocator::MarkedAllocator): * heap/MarkedBlock.cpp: (JSC::MarkedBlock::clearMarks): (JSC::MarkedBlock::clearRememberedSet): (JSC::MarkedBlock::clearMarksWithCollectionType): (JSC::MarkedBlock::lastChanceToFinalize): * heap/MarkedBlock.h: Changed atomSize to 16 bytes because we have no objects smaller than 16 bytes. This is also to pay for the additional Bitmap for the remembered set. (JSC::MarkedBlock::didConsumeEmptyFreeList): (JSC::MarkedBlock::setRemembered): (JSC::MarkedBlock::clearRemembered): (JSC::MarkedBlock::atomicClearRemembered): (JSC::MarkedBlock::isRemembered): * heap/MarkedSpace.cpp: (JSC::MarkedSpace::~MarkedSpace): (JSC::MarkedSpace::resetAllocators): (JSC::MarkedSpace::visitWeakSets): (JSC::MarkedSpace::reapWeakSets): (JSC::VerifyMarked::operator()): (JSC::MarkedSpace::clearMarks): * heap/MarkedSpace.h: (JSC::ClearMarks::operator()): (JSC::ClearRememberedSet::operator()): (JSC::MarkedSpace::didAllocateInBlock): (JSC::MarkedSpace::clearRememberedSet): * heap/SlotVisitor.cpp: (JSC::SlotVisitor::~SlotVisitor): (JSC::SlotVisitor::clearMarkStack): * heap/SlotVisitor.h: (JSC::SlotVisitor::markStack): (JSC::SlotVisitor::sharedData): * heap/SlotVisitorInlines.h: (JSC::SlotVisitor::internalAppend): (JSC::SlotVisitor::unconditionallyAppend): (JSC::SlotVisitor::copyLater): (JSC::SlotVisitor::reportExtraMemoryUsage): (JSC::SlotVisitor::heap): * jit/Repatch.cpp: * runtime/JSGenericTypedArrayViewInlines.h: (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): * runtime/JSPropertyNameIterator.h: (JSC::StructureRareData::setEnumerationCache): * runtime/JSString.cpp: (JSC::JSString::visitChildren): * runtime/StructureRareDataInlines.h: (JSC::StructureRareData::setPreviousID): (JSC::StructureRareData::setObjectToStringValue): * runtime/WeakMapData.cpp: (JSC::WeakMapData::visitChildren): Source/WTF: * wtf/Bitmap.h: (WTF::WordType>::count): Added a cast that became necessary when Bitmap is used with smaller types than int32_t. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161615 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
commit-queue@webkit.org authored
http://trac.webkit.org/changeset/161540 https://bugs.webkit.org/show_bug.cgi?id=126704 Caused assertion failures on multiple tests (Requested by ap on #webkit). Source/JavaScriptCore: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::visitAggregate): * bytecode/CodeBlock.h: (JSC::CodeBlockSet::mark): * dfg/DFGOperations.cpp: * heap/CodeBlockSet.cpp: (JSC::CodeBlockSet::add): (JSC::CodeBlockSet::traceMarked): * heap/CodeBlockSet.h: * heap/CopiedBlockInlines.h: (JSC::CopiedBlock::reportLiveBytes): * heap/CopiedSpace.cpp: * heap/CopiedSpace.h: * heap/Heap.cpp: (JSC::Heap::Heap): (JSC::Heap::didAbandon): (JSC::Heap::markRoots): (JSC::Heap::copyBackingStores): (JSC::Heap::collectAllGarbage): (JSC::Heap::collect): (JSC::Heap::didAllocate): * heap/Heap.h: (JSC::Heap::shouldCollect): (JSC::Heap::isCollecting): (JSC::Heap::isWriteBarrierEnabled): (JSC::Heap::writeBarrier): * heap/HeapOperation.h: * heap/MarkStack.cpp: (JSC::MarkStackArray::~MarkStackArray): * heap/MarkStack.h: * heap/MarkedAllocator.cpp: (JSC::MarkedAllocator::isPagedOut): (JSC::MarkedAllocator::tryAllocateHelper): (JSC::MarkedAllocator::addBlock): (JSC::MarkedAllocator::removeBlock): * heap/MarkedAllocator.h: (JSC::MarkedAllocator::MarkedAllocator): (JSC::MarkedAllocator::reset): * heap/MarkedBlock.cpp: * heap/MarkedBlock.h: (JSC::MarkedBlock::lastChanceToFinalize): (JSC::MarkedBlock::didConsumeEmptyFreeList): (JSC::MarkedBlock::clearMarks): * heap/MarkedSpace.cpp: (JSC::MarkedSpace::~MarkedSpace): (JSC::MarkedSpace::resetAllocators): (JSC::MarkedSpace::visitWeakSets): (JSC::MarkedSpace::reapWeakSets): * heap/MarkedSpace.h: (JSC::ClearMarks::operator()): (JSC::MarkedSpace::clearMarks): * heap/SlotVisitor.cpp: (JSC::SlotVisitor::~SlotVisitor): * heap/SlotVisitor.h: (JSC::SlotVisitor::sharedData): * heap/SlotVisitorInlines.h: (JSC::SlotVisitor::internalAppend): (JSC::SlotVisitor::copyLater): (JSC::SlotVisitor::reportExtraMemoryUsage): * jit/Repatch.cpp: * runtime/JSGenericTypedArrayViewInlines.h: (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): * runtime/JSPropertyNameIterator.h: (JSC::StructureRareData::setEnumerationCache): * runtime/JSString.cpp: (JSC::JSString::visitChildren): * runtime/StructureRareDataInlines.h: (JSC::StructureRareData::setPreviousID): (JSC::StructureRareData::setObjectToStringValue): * runtime/WeakMapData.cpp: (JSC::WeakMapData::visitChildren): Source/WTF: * wtf/Bitmap.h: (WTF::WordType>::count): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161557 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
akling@apple.com authored
<https://webkit.org/b/126694> Reorder the members of WatchpointSet, shrinking it by 8 bytes. 767 kB progression on Membuster3. Reviewed by Antti Koivisto. * bytecode/Watchpoint.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161554 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 08 Jan, 2014 1 commit
-
-
mhahnenberg@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=126552 Reviewed by Geoffrey Garen. Source/JavaScriptCore: Re-marking the same objects over and over is a waste of effort. This patch implements the sticky mark bit algorithm (along with our already-present write barriers) to reduce overhead during garbage collection caused by rescanning objects. There are now two collection modes, EdenCollection and FullCollection. EdenCollections only visit new objects or objects that were added to the remembered set by a write barrier. FullCollections are normal collections that visit all objects regardless of their generation. In this patch EdenCollections do not do anything in CopiedSpace. This will be fixed in https://bugs.webkit.org/show_bug.cgi?id=126555. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::visitAggregate): * bytecode/CodeBlock.h: (JSC::CodeBlockSet::mark): * dfg/DFGOperations.cpp: * heap/CodeBlockSet.cpp: (JSC::CodeBlockSet::add): (JSC::CodeBlockSet::traceMarked): (JSC::CodeBlockSet::rememberCurrentlyExecutingCodeBlocks): * heap/CodeBlockSet.h: * heap/CopiedBlockInlines.h: (JSC::CopiedBlock::reportLiveBytes): * heap/CopiedSpace.cpp: (JSC::CopiedSpace::didStartFullCollection): * heap/CopiedSpace.h: (JSC::CopiedSpace::heap): * heap/Heap.cpp: (JSC::Heap::Heap): (JSC::Heap::didAbandon): (JSC::Heap::markRoots): (JSC::Heap::copyBackingStores): (JSC::Heap::addToRememberedSet): (JSC::Heap::collectAllGarbage): (JSC::Heap::collect): (JSC::Heap::didAllocate): (JSC::Heap::writeBarrier): * heap/Heap.h: (JSC::Heap::isInRememberedSet): (JSC::Heap::operationInProgress): (JSC::Heap::shouldCollect): (JSC::Heap::isCollecting): (JSC::Heap::isWriteBarrierEnabled): (JSC::Heap::writeBarrier): * heap/HeapOperation.h: * heap/MarkStack.cpp: (JSC::MarkStackArray::~MarkStackArray): (JSC::MarkStackArray::clear): (JSC::MarkStackArray::fillVector): * heap/MarkStack.h: * heap/MarkedAllocator.cpp: (JSC::isListPagedOut): (JSC::MarkedAllocator::isPagedOut): (JSC::MarkedAllocator::tryAllocateHelper): (JSC::MarkedAllocator::addBlock): (JSC::MarkedAllocator::removeBlock): (JSC::MarkedAllocator::reset): * heap/MarkedAllocator.h: (JSC::MarkedAllocator::MarkedAllocator): * heap/MarkedBlock.cpp: (JSC::MarkedBlock::clearMarks): (JSC::MarkedBlock::clearRememberedSet): (JSC::MarkedBlock::clearMarksWithCollectionType): (JSC::MarkedBlock::lastChanceToFinalize): * heap/MarkedBlock.h: Changed atomSize to 16 bytes because we have no objects smaller than 16 bytes. This is also to pay for the additional Bitmap for the remembered set. (JSC::MarkedBlock::didConsumeEmptyFreeList): (JSC::MarkedBlock::setRemembered): (JSC::MarkedBlock::clearRemembered): (JSC::MarkedBlock::atomicClearRemembered): (JSC::MarkedBlock::isRemembered): * heap/MarkedSpace.cpp: (JSC::MarkedSpace::~MarkedSpace): (JSC::MarkedSpace::resetAllocators): (JSC::MarkedSpace::visitWeakSets): (JSC::MarkedSpace::reapWeakSets): (JSC::VerifyMarked::operator()): (JSC::MarkedSpace::clearMarks): * heap/MarkedSpace.h: (JSC::ClearMarks::operator()): (JSC::ClearRememberedSet::operator()): (JSC::MarkedSpace::didAllocateInBlock): (JSC::MarkedSpace::clearRememberedSet): * heap/SlotVisitor.cpp: (JSC::SlotVisitor::~SlotVisitor): (JSC::SlotVisitor::clearMarkStack): * heap/SlotVisitor.h: (JSC::SlotVisitor::markStack): (JSC::SlotVisitor::sharedData): * heap/SlotVisitorInlines.h: (JSC::SlotVisitor::internalAppend): (JSC::SlotVisitor::unconditionallyAppend): (JSC::SlotVisitor::copyLater): (JSC::SlotVisitor::reportExtraMemoryUsage): (JSC::SlotVisitor::heap): * jit/Repatch.cpp: * runtime/JSGenericTypedArrayViewInlines.h: (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): * runtime/JSPropertyNameIterator.h: (JSC::StructureRareData::setEnumerationCache): * runtime/JSString.cpp: (JSC::JSString::visitChildren): * runtime/StructureRareDataInlines.h: (JSC::StructureRareData::setPreviousID): (JSC::StructureRareData::setObjectToStringValue): * runtime/WeakMapData.cpp: (JSC::WeakMapData::visitChildren): Source/WTF: * wtf/Bitmap.h: (WTF::WordType>::count): Added a cast that became necessary when Bitmap is used with smaller types than int32_t. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 07 Jan, 2014 1 commit
-
-
mark.lam@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=126589. Reviewed by Filip Pizlo. After the removal of ENABLE(VALUE_PROFILER), the LLINT is now expecting the relevant opcode operands to point to ValueProfiler data structures and will write profiling data into them. Hence, we need to allocate these data structures even though the profiling data won't be used in non-DFG builds. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161446 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 06 Jan, 2014 1 commit
-
-
fpizlo@apple.com authored
Rubber stamped by Mark Hahnenberg. Source/JavaScriptCore: * bytecode/CallLinkStatus.cpp: (JSC::CallLinkStatus::computeFor): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpValueProfiling): (JSC::CodeBlock::dumpArrayProfiling): (JSC::CodeBlock::dumpRareCaseProfile): (JSC::CodeBlock::dumpBytecode): (JSC::CodeBlock::CodeBlock): (JSC::CodeBlock::setNumParameters): (JSC::CodeBlock::shrinkToFit): (JSC::CodeBlock::shouldOptimizeNow): * bytecode/CodeBlock.h: (JSC::CodeBlock::valueProfileForBytecodeOffset): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeForChain): (JSC::GetByIdStatus::computeFor): * bytecode/LazyOperandValueProfile.cpp: * bytecode/LazyOperandValueProfile.h: * bytecode/PutByIdStatus.cpp: (JSC::PutByIdStatus::computeFor): * bytecode/ValueProfile.h: * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::newArrayProfile): (JSC::BytecodeGenerator::newArrayAllocationProfile): (JSC::BytecodeGenerator::emitProfiledOpcode): * jit/GPRInfo.h: * jit/JIT.cpp: (JSC::JIT::JIT): (JSC::JIT::privateCompileSlowCases): (JSC::JIT::privateCompile): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::compileBinaryArithOp): (JSC::JIT::emit_op_mul): (JSC::JIT::emit_op_div): * jit/JITArithmetic32_64.cpp: (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): (JSC::JIT::emit_op_div): * jit/JITCall.cpp: (JSC::JIT::emitPutCallResult): * jit/JITCall32_64.cpp: (JSC::JIT::emitPutCallResult): * jit/JITInlines.h: (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): (JSC::JIT::emitValueProfilingSite): (JSC::JIT::emitArrayProfilingSiteForBytecodeIndex): (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase): (JSC::JIT::emitArrayProfileOutOfBoundsSpecialCase): (JSC::arrayProfileSaw): (JSC::JIT::chooseArrayMode): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_get_argument_by_val): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_get_argument_by_val): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_from_scope): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_from_scope): * llint/LLIntOfflineAsmConfig.h: * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * profiler/ProfilerBytecodeSequence.cpp: (JSC::Profiler::BytecodeSequence::BytecodeSequence): * runtime/CommonSlowPaths.cpp: Source/WTF: * wtf/Platform.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161364 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 04 Jan, 2014 1 commit
-
-
zandobersek@gmail.com authored
https://bugs.webkit.org/show_bug.cgi?id=126439 Reviewed by Andreas Kling. Source/JavaScriptCore: Instead of relying on std::pair and std::make_pair symbols being present in the current scope through the pair and make_pair symbols, the std:: specifier should be used explicitly. * bytecode/Opcode.cpp: (JSC::compareOpcodePairIndices): (JSC::OpcodeStats::~OpcodeStats): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::BytecodeGenerator): * parser/ASTBuilder.h: (JSC::ASTBuilder::makeBinaryNode): * parser/Parser.cpp: (JSC::Parser<LexerType>::parseIfStatement): * runtime/Structure.cpp: (JSC::StructureTransitionTable::contains): (JSC::StructureTransitionTable::get): (JSC::StructureTransitionTable::add): Source/WebCore: Instead of relying on std::pair and std::make_pair symbols being present in the current scope through the pair and make_pair symbols, the std:: specifier should be used explicitly. * Modules/webdatabase/DatabaseTracker.cpp: (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged): * accessibility/AXObjectCache.h: * accessibility/AccessibilityARIAGridCell.cpp: (WebCore::AccessibilityARIAGridCell::rowIndexRange): (WebCore::AccessibilityARIAGridCell::columnIndexRange): * accessibility/AccessibilityARIAGridCell.h: * accessibility/AccessibilityObject.h: * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::mathPrescripts): (WebCore::AccessibilityRenderObject::mathPostscripts): * accessibility/AccessibilityTable.cpp: (WebCore::AccessibilityTable::cellForColumnAndRow): * accessibility/AccessibilityTableCell.cpp: (WebCore::AccessibilityTableCell::rowIndexRange): (WebCore::AccessibilityTableCell::columnIndexRange): * accessibility/AccessibilityTableCell.h: * accessibility/atk/WebKitAccessibleInterfaceTable.cpp: (webkitAccessibleTableGetColumnAtIndex): (webkitAccessibleTableGetRowAtIndex): (webkitAccessibleTableGetColumnExtentAt): (webkitAccessibleTableGetRowExtentAt): (webkitAccessibleTableGetColumnHeader): (webkitAccessibleTableGetRowHeader): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]): (-[WebAccessibilityObjectWrapper accessibilityRowRange]): (-[WebAccessibilityObjectWrapper accessibilityColumnRange]): * accessibility/mac/WebAccessibilityObjectWrapperBase.mm: (convertMathPairsToNSArray): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]): * bindings/js/SerializedScriptValue.cpp: * dom/ContainerNode.cpp: * dom/StyledElement.cpp: (WebCore::attributeNameSort): * html/MediaFragmentURIParser.cpp: (WebCore::MediaFragmentURIParser::parseTimeFragment): * html/parser/HTMLMetaCharsetParser.h: * inspector/ContentSearchUtils.cpp: (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines): (WebCore::ContentSearchUtils::searchInTextByLines): * inspector/DOMPatchSupport.cpp: (WebCore::DOMPatchSupport::diff): (WebCore::DOMPatchSupport::innerPatchChildren): * inspector/DOMPatchSupport.h: * inspector/InspectorAgent.cpp: (WebCore::InspectorAgent::enable): (WebCore::InspectorAgent::evaluateForTestInFrontend): * inspector/InspectorAgent.h: * loader/FormSubmission.cpp: (WebCore::FormSubmission::create): * loader/cache/CachedImage.cpp: (WebCore::CachedImage::brokenImage): * loader/cache/CachedImage.h: * platform/URL.cpp: (WebCore::findHostnamesInMailToURL): (WebCore::encodeHostnames): * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h: * platform/graphics/FontCache.cpp: (WebCore::FontCache::getCachedFontData): * platform/graphics/WidthIterator.cpp: * platform/network/HTTPHeaderMap.cpp: (WebCore::HTTPHeaderMap::adopt): * platform/network/ResourceResponseBase.cpp: (WebCore::ResourceResponseBase::parseCacheControlDirectives): (WebCore::parseCacheHeader): * platform/text/AtomicStringKeyedMRUCache.h: * platform/text/LineBreakIteratorPoolICU.h: * rendering/InlineFlowBox.h: * rendering/RenderImage.cpp: (WebCore::RenderImage::imageSizeForError): (WebCore::RenderImage::paintReplaced): * rendering/RenderTableSection.cpp: (WebCore::RenderTableSection::cachedCollapsedBorder): * rendering/RenderTableSection.h: * rendering/svg/SVGTextRunRenderingContext.cpp: (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter): * svg/SVGAnimatedAngle.cpp: (WebCore::SVGAnimatedAngleAnimator::constructFromString): (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes): (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue): * svg/SVGAnimatedIntegerOptionalInteger.cpp: (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString): (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes): (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue): * svg/SVGAnimatedNumberOptionalNumber.cpp: (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString): (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes): (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue): * svg/SVGAnimatedType.cpp: (WebCore::SVGAnimatedType::createIntegerOptionalInteger): (WebCore::SVGAnimatedType::createNumberOptionalNumber): * svg/SVGAnimatedType.h: (WebCore::SVGAnimatedType::integerOptionalInteger): (WebCore::SVGAnimatedType::numberOptionalNumber): * svg/SVGAnimatedTypeAnimator.h: (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues): (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues): * svg/SVGParserUtilities.h: * svg/animation/SMILTimeContainer.h: Source/WebKit/mac: Instead of relying on std::pair and std::make_pair symbols being present in the current scope through the pair and make_pair symbols, the std:: specifier should be used explicitly. * Plugins/Hosted/NetscapePluginInstanceProxy.h: * Plugins/Hosted/NetscapePluginInstanceProxy.mm: (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject): (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain): (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release): (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Source/WebKit2: Instead of relying on std::pair and std::make_pair symbols being present in the current scope through the pair and make_pair symbols, the std:: specifier should be used explicitly. * Shared/mac/ArgumentCodersMac.mm: (IPC::encode): * UIProcess/Notifications/WebNotificationManagerProxy.cpp: (WebKit::WebNotificationManagerProxy::show): (WebKit::WebNotificationManagerProxy::cancel): (WebKit::WebNotificationManagerProxy::didDestroyNotification): * UIProcess/Notifications/WebNotificationManagerProxy.h: * UIProcess/WebContext.cpp: (WebKit::WebContext::createNewWebProcess): * UIProcess/WebContext.h: Source/WTF: * wtf/VectorTraits.h: Stop bringing std::pair into the current scope. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161309 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 29 Dec, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=125531 Reviewed by Oliver Hunt. This finally gets rid of forward exiting. Forward exiting was always a fragile concept since it involved the compiler trying to figure out how to "roll forward" the execution from some DFG node to the next bytecode index. It was always easy to find counterexamples where it broke, and it has always served as an obstacle to adding compiler improvements - the latest being http://webkit.org/b/125523, which tried to make DCE work for more things. This change finishes the work of removing forward exiting. A lot of forward exiting was already removed in some other bugs, but SetLocal still did forward exits. SetLocal is in many ways the hardest to remove, since the forward exiting of SetLocal also implied that any conversion nodes inserted before the SetLocal would then also be marked as forward-exiting. Hence SetLocal's forward-exiting made a bunch of other things also forward-exiting, and this was always a source of weirdo bugs. SetLocal must be able to exit in case it performs a hoisted type speculation. Nodes inserted just before SetLocal must also be able to exit - for example type check hoisting may insert a CheckStructure, or fixup phase may insert something like Int32ToDouble. But if any of those nodes tried to backward exit, then this could lead to the reexecution of a side-effecting operation, for example: a: Call(...) b: SetLocal(@a, r1) For a long time it seemed like SetLocal *had* to exit forward because of this. But this change side-steps the problem by changing the ByteCodeParser to always emit a kind of "two-phase commit" for stores to local variables. Now when the ByteCodeParser wishes to store to a local, it first emits a MovHint and then enqueues a SetLocal. The SetLocal isn't actually emitted until the beginning of the next bytecode instruction (which the exception of op_enter and op_ret, which emit theirs immediately since it's always safe to reexecute those bytecode instructions and since deferring SetLocals would be weird there - op_enter has many SetLocals and op_ret is a set followed by a jump in case of inlining, so we'd have to emit the SetLocal "after" the jump and that would be awkward). This means that the above IR snippet would look something like: a: Call(..., bc#42) b: MovHint(@a, r1, bc#42) c: SetLocal(@a, r1, bc#47) Where the SetLocal exits "backwards" but appears at the beginning of the next bytecode instruction. This means that by the time we get to that SetLocal, the OSR exit analysis already knows that r1 is associated with @a, and it means that the SetLocal or anything hoisted above it can exit backwards as normal. This change also means that the "forward rewiring" can be killed. Previously, we might have inserted a conversion node on SetLocal and then the SetLocal died (i.e. turned into a MovHint) and the conversion node either died completely or had its lifetime truncated to be less than the actual value's bytecode lifetime. This no longer happens since conversion nodes are only inserted at SetLocals. More precisely, this change introduces two laws that we were basically already following anyway: 1) A MovHint's child should never be changed except if all other uses of that child are also replaced. Specifically, this prohibits insertion of conversion nodes at MovHints. 2) Anytime any child is replaced with something else, and all other uses aren't also replaced, we must insert a Phantom use of the original child. This is a slight compile-time regression but has no effect on code-gen. It unlocks a bunch of optimization opportunities so I think it's worth it. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpAssumingJITType): * bytecode/CodeBlock.h: (JSC::CodeBlock::instructionCount): * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGArgumentsSimplificationPhase.cpp: (JSC::DFG::ArgumentsSimplificationPhase::run): * dfg/DFGArrayifySlowPathGenerator.h: (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator): * dfg/DFGBackwardsPropagationPhase.cpp: (JSC::DFG::BackwardsPropagationPhase::propagate): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::setDirect): (JSC::DFG::ByteCodeParser::DelayedSetLocal::DelayedSetLocal): (JSC::DFG::ByteCodeParser::DelayedSetLocal::execute): (JSC::DFG::ByteCodeParser::handleInlining): (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::eliminate): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGCommon.h: * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): * dfg/DFGDCEPhase.cpp: (JSC::DFG::DCEPhase::run): (JSC::DFG::DCEPhase::fixupBlock): (JSC::DFG::DCEPhase::cleanVariables): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): (JSC::DFG::FixupPhase::fixEdge): (JSC::DFG::FixupPhase::injectInt32ToDoubleNode): * dfg/DFGLICMPhase.cpp: (JSC::DFG::LICMPhase::run): (JSC::DFG::LICMPhase::attemptHoist): * dfg/DFGMinifiedNode.cpp: (JSC::DFG::MinifiedNode::fromNode): * dfg/DFGMinifiedNode.h: (JSC::DFG::belongsInMinifiedGraph): (JSC::DFG::MinifiedNode::constantNumber): (JSC::DFG::MinifiedNode::weakConstant): * dfg/DFGNode.cpp: (JSC::DFG::Node::hasVariableAccessData): * dfg/DFGNode.h: (JSC::DFG::Node::convertToPhantom): (JSC::DFG::Node::convertToPhantomUnchecked): (JSC::DFG::Node::convertToIdentity): (JSC::DFG::Node::containsMovHint): (JSC::DFG::Node::hasUnlinkedLocal): (JSC::DFG::Node::willHaveCodeGenOrOSR): * dfg/DFGNodeFlags.cpp: (JSC::DFG::dumpNodeFlags): * dfg/DFGNodeFlags.h: * dfg/DFGNodeType.h: * dfg/DFGOSRAvailabilityAnalysisPhase.cpp: (JSC::DFG::OSRAvailabilityAnalysisPhase::run): * dfg/DFGOSREntrypointCreationPhase.cpp: (JSC::DFG::OSREntrypointCreationPhase::run): * dfg/DFGOSRExit.cpp: * dfg/DFGOSRExit.h: * dfg/DFGOSRExitBase.cpp: * dfg/DFGOSRExitBase.h: (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSite): * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): (JSC::DFG::PredictionPropagationPhase::doDoubleVoting): * dfg/DFGSSAConversionPhase.cpp: (JSC::DFG::SSAConversionPhase::run): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::speculationCheck): (JSC::DFG::SpeculativeJIT::emitInvalidationPoint): (JSC::DFG::SpeculativeJIT::typeCheck): (JSC::DFG::SpeculativeJIT::compileMovHint): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::checkArgumentTypes): (JSC::DFG::SpeculativeJIT::compileInt32ToDouble): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch): (JSC::DFG::SpeculativeJIT::needsTypeCheck): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGTypeCheckHoistingPhase.cpp: (JSC::DFG::TypeCheckHoistingPhase::run): (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks): (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks): * dfg/DFGValidate.cpp: (JSC::DFG::Validate::validateCPS): * dfg/DFGVariableAccessData.h: (JSC::DFG::VariableAccessData::VariableAccessData): * dfg/DFGVariableEventStream.cpp: (JSC::DFG::VariableEventStream::reconstruct): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileGetArgument): (JSC::FTL::LowerDFGToLLVM::compileSetLocal): (JSC::FTL::LowerDFGToLLVM::compileMovHint): (JSC::FTL::LowerDFGToLLVM::compileZombieHint): (JSC::FTL::LowerDFGToLLVM::compileInt32ToDouble): (JSC::FTL::LowerDFGToLLVM::speculate): (JSC::FTL::LowerDFGToLLVM::typeCheck): (JSC::FTL::LowerDFGToLLVM::appendTypeCheck): (JSC::FTL::LowerDFGToLLVM::appendOSRExit): (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall): * ftl/FTLOSRExit.cpp: * ftl/FTLOSRExit.h: * tests/stress/dead-int32-to-double.js: Added. (foo): * tests/stress/dead-uint32-to-number.js: Added. (foo): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161126 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 16 Dec, 2013 1 commit
-
-
oliver@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=125602 Reviewed by Michael Saboff. Source/JavaScriptCore: Support caching of custom getters and accessors on the prototype chain. This is relatively trivial and just requires a little work compared to the direct access mode as we're under more register pressure. * bytecode/StructureStubInfo.h: Removed the unsued initGetByIdProto as it was confusing to still have it present. * jit/Repatch.cpp: (JSC::generateProtoChainAccessStub): (JSC::tryCacheGetByID): (JSC::tryBuildGetByIDList): Tools: Make sure bencher scripts also make noInline exist * Scripts/bencher: LayoutTests: Added a bunch of new tests * js/regress/chain-custom-getter-expected.txt: Added. * js/regress/chain-custom-getter.html: Added. * js/regress/chain-getter-access-expected.txt: Added. * js/regress/chain-getter-access.html: Added. * js/regress/proto-custom-getter-expected.txt: Added. * js/regress/proto-custom-getter.html: Added. * js/regress/proto-getter-access-expected.txt: Added. * js/regress/proto-getter-access.html: Added. * js/regress/resources/regress-pre.js: Made sure that noInline always exists (either using testRunner.neverInlineFunction or a no-op function if nothing else is available) * js/regress/script-tests/chain-custom-getter.js: Added. (foo): * js/regress/script-tests/chain-getter-access.js: Added. (o.get value): (foo): * js/regress/script-tests/proto-custom-getter.js: Added. (foo): * js/regress/script-tests/proto-getter-access.js: Added. (o.get value): (foo): * js/regress/script-tests/simple-custom-getter.js: Added. (cycles.30000.numberObject.Number.foo): * js/regress/script-tests/simple-getter-access.js: Added. (o.get value): (foo): * js/regress/simple-custom-getter-expected.txt: Added. * js/regress/simple-custom-getter.html: Added. * js/regress/simple-getter-access-expected.txt: Added. * js/regress/simple-getter-access.html: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160670 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 15 Dec, 2013 1 commit
-
-
rniwa@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=125377 Reviewed by Filip Pizlo. PerformanceTests: Added a micro-benchmark for updating a named property on document. * Bindings/update-name-getter.html: Added. * Skipped: Source/JavaScriptCore: The bug was caused by JSC not JIT'ing property access on "document" due to its type info having HasImpureGetOwnPropertySlot flag. Fixed the bug by new type info flag NewImpurePropertyFiresWatchpoints, which allows the baseline JIT to generate byte code for access properties on an object with named properties (a.k.a. custom name getter) in DOM. When a new named property appears on the object, VM is notified via VM::addImpureProperty and fires StructureStubClearingWatchpoint added during the repatch. * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeFromLLInt): Take the slow path if we have any object with impure properties in the prototype chain. (JSC::GetByIdStatus::computeForChain): Ditto. * jit/Repatch.cpp: (JSC::repatchByIdSelfAccess): Throw away the byte code when a new impure property is added on any object in the prototype chain via StructureStubClearingWatchpoint. (JSC::generateProtoChainAccessStub): Ditto. (JSC::tryCacheGetByID): (JSC::tryBuildGetByIDList): (JSC::tryRepatchIn): Ditto. * runtime/JSTypeInfo.h: Added NewImpurePropertyFiresWatchpoints. (JSC::TypeInfo::newImpurePropertyFiresWatchpoints): Added. * runtime/Operations.h: (JSC::normalizePrototypeChainForChainAccess): Don't exit early if VM will be notified of new impure property even if the object had impure properties. * runtime/Structure.h: (JSC::Structure::takesSlowPathInDFGForImpureProperty): Added. Wraps hasImpureGetOwnPropertySlot and asserts that newImpurePropertyFiresWatchpoints is true whenever hasImpureGetOwnPropertySlot is true. * runtime/VM.cpp: (JSC::VM::registerWatchpointForImpureProperty): Added. (JSC::VM::addImpureProperty): Added. HTMLDocument calls it to notify JSC of a new impure property. * runtime/VM.h: Source/WebCore: The bug was caused by JSC not JIT'ing property accesses on document because of its having custom named getter (named properties). This resulted in resolution of methods on document such as getElementById to happen inside the interpreter. Fixed the bug by using the new JSC type info flag which tells JSC to JIT property access on document, and then notifying JSC whenever a new named property appeared on document. Tests: js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html * bindings/js/JSDOMBinding.cpp: (WebCore::addImpureProperty): Wraps VM::addImpureProperty. * bindings/js/JSDOMBinding.h: * bindings/scripts/CodeGeneratorJS.pm: (GenerateHeader): Added the support for NewImpurePropertyFiresWatchpoints. * bindings/scripts/IDLAttributes.txt: Ditto. * html/HTMLDocument.cpp: (WebCore::HTMLDocument::addDocumentNamedItem): Calls addImpureProperty. * html/HTMLDocument.idl: Added NewImpurePropertyFiresWatchpoints. LayoutTests: Added more regression tests for throwing away byte code when a new named property appears. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected: Rebaselined. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Fixed the test to use dfgShouldBe. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2-expected.txt: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3-expected.txt: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4-expected.txt: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-5-expected.txt: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-5.html: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2-expected.txt: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3-expected.txt: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4-expected.txt: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-5-expected.txt: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-5.html: Added. * js/dom/script-tests/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Removed. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160628 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 13 Dec, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=125553 Reviewed by Oliver Hunt. UInt32ToNumber was a super complicated node because it had to do a speculation, but it would do it after we already had computed the urshift. It couldn't just back to the beginning of the urshift because the inputs to the urshift weren't necessarily live anymore. We couldn't jump forward to the beginning of the next instruction because the result of the urshift was not yet unsigned-converted. For a while we solved this by forward-exiting in UInt32ToNumber. But that's really gross and I want to get rid of all forward exits. They cause a lot of bugs. We could also have turned UInt32ToNumber to a backwards exit by forcing the inputs to the urshift to be live. I figure that this might be a bit too extreme. So, I just created a new place that we can exit to: I split op_urshift into op_urshift followed by op_unsigned. op_unsigned is an "unsigned cast" along the lines of what UInt32ToNumber does. This allows me to get rid of all of the nastyness in the DFG for forward exiting in UInt32ToNumber. This patch enables massive code carnage in the DFG and FTL, and brings us closer to eliminating one of the DFG's most confusing concepts. On the flipside, it does make the bytecode slightly more complex (one new instruction). This is a profitable trade. We want the DFG and FTL to trend towards simplicity, since they are both currently too complicated. * bytecode/BytecodeUseDef.h: (JSC::computeUsesForBytecodeOffset): (JSC::computeDefsForBytecodeOffset): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): * bytecode/Opcode.h: (JSC::padOpcodeName): * bytecode/ValueRecovery.cpp: (JSC::ValueRecovery::dumpInContext): * bytecode/ValueRecovery.h: (JSC::ValueRecovery::gpr): * bytecompiler/NodesCodegen.cpp: (JSC::BinaryOpNode::emitBytecode): (JSC::emitReadModifyAssignment): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::toInt32): (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGNodeType.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMovHint): (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber): * dfg/DFGSpeculativeJIT.h: * dfg/DFGSpeculativeJIT32_64.cpp: * dfg/DFGSpeculativeJIT64.cpp: * dfg/DFGStrengthReductionPhase.cpp: (JSC::DFG::StrengthReductionPhase::handleNode): (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild): (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild1): (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild2): * ftl/FTLFormattedValue.h: (JSC::FTL::int32Value): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileUInt32ToNumber): * ftl/FTLValueFormat.cpp: (JSC::FTL::reboxAccordingToFormat): (WTF::printInternal): * ftl/FTLValueFormat.h: * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_urshift): (JSC::JIT::emitSlow_op_urshift): (JSC::JIT::emit_op_unsigned): (JSC::JIT::emitSlow_op_unsigned): * jit/JITArithmetic32_64.cpp: (JSC::JIT::emitRightShift): (JSC::JIT::emitRightShiftSlowCase): (JSC::JIT::emit_op_unsigned): (JSC::JIT::emitSlow_op_unsigned): * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * runtime/CommonSlowPaths.cpp: (JSC::SLOW_PATH_DECL): * runtime/CommonSlowPaths.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160587 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 12 Dec, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=124727 <rdar://problem/15566923> Reviewed by Michael Saboff. Get rid of In's hackish use of StructureStubInfo. Previously it was using hotPathBegin, and it was the only IC that used that field, which was wasteful. Moreover, it used it to store two separate locations: the label for patching the jump and the label right after the jump. The code was relying on those two being the same label, which is true on X86 and some other platforms, but it isn't true on ARM64. This gets rid of hotPathBegin and makes In express those two locations as offsets from the callReturnLocation, which is analogous to what the other IC's do. This fixes a bug where any successful In patching would result in a trivially infinite loop - and hence a hang - on ARM64. * bytecode/StructureStubInfo.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::link): * dfg/DFGJITCompiler.h: (JSC::DFG::InRecord::InRecord): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileIn): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::finalize): * jit/Repatch.cpp: (JSC::replaceWithJump): (JSC::patchJumpToGetByIdStub): (JSC::tryCachePutByID): (JSC::tryBuildPutByIdList): (JSC::tryRepatchIn): (JSC::resetGetByID): (JSC::resetPutByID): (JSC::resetIn): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160493 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 11 Dec, 2013 1 commit
-
-
commit-queue@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=125446 Patch by Laszlo Vidacs <lac@inf.u-szeged.hu> on 2013-12-11 Reviewed by Darin Adler. Change Vector to std::array and use typedef. Source/JavaScriptCore: * bytecode/CodeBlockHash.cpp: (JSC::CodeBlockHash::CodeBlockHash): Source/WebCore: * Modules/websockets/WebSocketHandshake.cpp: (WebCore::WebSocketHandshake::getExpectedWebSocketAccept): * inspector/DOMPatchSupport.cpp: (WebCore::DOMPatchSupport::createDigest): * platform/network/soup/ResourceHandleSoup.cpp: (WebCore::HostTLSCertificateSet::computeCertificateHash): Source/WTF: * wtf/SHA1.cpp: (WTF::SHA1::computeHash): (WTF::SHA1::hexDigest): (WTF::SHA1::computeHexDigest): * wtf/SHA1.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160456 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 09 Dec, 2013 3 commits
-
-
fpizlo@apple.com authored
Impose and enforce some basic rules of sanity for where Phi functions are allowed to occur and where their (optional) corresponding MovHints can be https://bugs.webkit.org/show_bug.cgi?id=125480 Reviewed by Geoffrey Garen. Previously, if you wanted to insert some speculation right after where a value was produced, you'd get super confused if that value was produced by a Phi node. You can't necessarily insert speculations after a Phi node because Phi nodes appear in this special sequence of Phis and MovHints that establish the OSR exit state for a block. So, you'd probably want to search for the next place where it's safe to insert things. We already do this "search for beginning of next bytecode instruction" search by looking at the next node that has a different CodeOrigin. But this would be hard for a Phi because those Phis and MovHints have basically random CodeOrigins and they can all have different CodeOrigins. This change imposes some sanity for this situation: - Phis must have unset CodeOrigins. - In each basic block, all nodes that have unset CodeOrigins must come before all nodes that have set CodeOrigins. This all ends up working out just great because prior to this change we didn't have a use for unset CodeOrigins. I think it's appropriate to make "unset CodeOrigin" mean that we're in the prologue of a basic block. It's interesting what this means for block merging, which we don't yet do in SSA. Consider merging the edge A->B. One possibility is that the block merger is now required to clean up Phi/Upsilons, and reascribe the MovHints to have the CodeOrigin of the A's block terminal. But an answer that might be better is that the originless nodes at the top of the B are just given the origin of the terminal and we keep the Phis. That would require changing the above rules. We'll see how it goes, and what we end up picking... Overall, this special-things-at-the-top rule is analogous to what other SSA-based compilers do. For example, LLVM has rules mandating that Phis appear at the top of a block. * bytecode/CodeOrigin.cpp: (JSC::CodeOrigin::dump): * dfg/DFGOSRExitBase.h: (JSC::DFG::OSRExitBase::OSRExitBase): * dfg/DFGSSAConversionPhase.cpp: (JSC::DFG::SSAConversionPhase::run): * dfg/DFGValidate.cpp: (JSC::DFG::Validate::validate): (JSC::DFG::Validate::validateSSA): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160348 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=125253 Reviewed by Oliver Hunt and Mark Hahnenberg. In SSA mode, this reveals array bounds checks and the load of array length in DFG IR, making this a candidate for LICM. This also fixes a long-standing performance bug where the JSObject slow paths would always create contiguous storage, rather than type-specialized storage, when doing a "storage creating" storage, like: var o = {}; o[0] = 42; * CMakeLists.txt: * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/ExitKind.cpp: (JSC::exitKindToString): (JSC::exitKindIsCountable): * bytecode/ExitKind.h: * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::::executeEffects): * dfg/DFGArrayMode.cpp: (JSC::DFG::permitsBoundsCheckLowering): (JSC::DFG::ArrayMode::permitsBoundsCheckLowering): * dfg/DFGArrayMode.h: (JSC::DFG::ArrayMode::lengthNeedsStorage): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGNodeType.h: * dfg/DFGPlan.cpp: (JSC::DFG::Plan::compileInThreadImpl): * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): * dfg/DFGSSALoweringPhase.cpp: Added. (JSC::DFG::SSALoweringPhase::SSALoweringPhase): (JSC::DFG::SSALoweringPhase::run): (JSC::DFG::SSALoweringPhase::handleNode): (JSC::DFG::SSALoweringPhase::lowerBoundsCheck): (JSC::DFG::performSSALowering): * dfg/DFGSSALoweringPhase.h: Added. * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileDoublePutByVal): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileCheckInBounds): (JSC::FTL::LowerDFGToLLVM::compileGetByVal): (JSC::FTL::LowerDFGToLLVM::compilePutByVal): (JSC::FTL::LowerDFGToLLVM::contiguousPutByValOutOfBounds): * runtime/JSObject.cpp: (JSC::JSObject::convertUndecidedForValue): (JSC::JSObject::createInitialForValueAndSet): (JSC::JSObject::putByIndexBeyondVectorLength): (JSC::JSObject::putDirectIndexBeyondVectorLength): * runtime/JSObject.h: * tests/stress/float32array-out-of-bounds.js: Added. (make): (foo): (test): * tests/stress/int32-object-out-of-bounds.js: Added. (make): (foo): (test): * tests/stress/int32-out-of-bounds.js: Added. (foo): (test): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160347 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
weinig@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=125475 Reviewed by Anders Carlsson. ../JavaScriptCore: * bytecode/CodeBlockHash.cpp: (JSC::CodeBlockHash::dump): * bytecode/Opcode.cpp: (JSC::OpcodeStats::~OpcodeStats): * dfg/DFGCSEPhase.cpp: * ftl/FTLAbstractHeap.h: * heap/MarkedSpace.h: * parser/ParserArena.h: * runtime/CodeCache.h: * runtime/DateInstanceCache.h: * runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::reset): * runtime/JSGlobalObject.h: * runtime/JSString.h: * runtime/LiteralParser.h: * runtime/NumericStrings.h: * runtime/RegExpCache.h: * runtime/SmallStrings.h: ../WebCore: * crypto/parameters/CryptoAlgorithmAesCbcParams.h: * platform/graphics/GlyphMetricsMap.h: ../WTF: * wtf/AVLTree.h: * wtf/Bitmap.h: * wtf/SixCharacterHash.cpp: (WTF::integerToSixCharacterHashString): * wtf/SixCharacterHash.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160344 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 06 Dec, 2013 1 commit
-
-
commit-queue@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=125345 Patch by Laszlo Vidacs <lac@inf.u-szeged.hu> on 2013-12-06 Reviewed by Darin Adler. Use SHA1::hashSize instead of local variables. Source/JavaScriptCore: * bytecode/CodeBlockHash.cpp: (JSC::CodeBlockHash::CodeBlockHash): use SHA1::hashSize Source/WebCore: * Modules/websockets/WebSocketHandshake.cpp: (WebCore::WebSocketHandshake::getExpectedWebSocketAccept): * platform/network/soup/ResourceHandleSoup.cpp: (WebCore::HostTLSCertificateSet::computeCertificateHash): Source/WTF: * wtf/SHA1.h: define SHA1 hash size git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160228 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 04 Dec, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=124630 Source/JavaScriptCore: Reviewed by Geoffrey Garen. Captured variables that are assigned once (not counting op_enter's Undefined initialization) and that are contained within a function that has thus far only been entered once are now constant folded. It's pretty awesome. This involves a watchpoint on the assignment to variables and a watchpoint on entry into the function. The former is reused from global variable constant inference and the latter is reused from one-time closure inference. * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): (JSC::CodeBlock::CodeBlock): * bytecode/Instruction.h: (JSC::Instruction::Instruction): * bytecode/Opcode.h: (JSC::padOpcodeName): * bytecode/UnlinkedCodeBlock.h: (JSC::UnlinkedInstruction::UnlinkedInstruction): * bytecode/VariableWatchpointSet.h: (JSC::VariableWatchpointSet::invalidate): * bytecode/Watchpoint.h: (JSC::WatchpointSet::invalidate): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::addVar): (JSC::BytecodeGenerator::BytecodeGenerator): (JSC::BytecodeGenerator::emitInitLazyRegister): (JSC::BytecodeGenerator::emitMove): (JSC::BytecodeGenerator::emitNewFunctionInternal): (JSC::BytecodeGenerator::createArgumentsIfNecessary): * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::addVar): (JSC::BytecodeGenerator::watchableVariable): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::getLocal): (JSC::DFG::ByteCodeParser::inferredConstant): (JSC::DFG::ByteCodeParser::parseBlock): (JSC::DFG::ByteCodeParser::parse): * dfg/DFGGraph.cpp: (JSC::DFG::Graph::tryGetActivation): (JSC::DFG::Graph::tryGetRegisters): * dfg/DFGGraph.h: * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_mov): (JSC::JIT::emit_op_captured_mov): (JSC::JIT::emit_op_new_captured_func): (JSC::JIT::emitSlow_op_captured_mov): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_mov): (JSC::JIT::emit_op_captured_mov): * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * runtime/CommonSlowPaths.cpp: (JSC::SLOW_PATH_DECL): * runtime/CommonSlowPaths.h: * runtime/ConstantMode.h: Added. * runtime/JSGlobalObject.h: * runtime/JSScope.cpp: (JSC::abstractAccess): * runtime/SymbolTable.cpp: (JSC::SymbolTableEntry::prepareToWatch): LayoutTests: Reviewed by Geoffrey Garen. This adds both correctness and performance tests for constant closure variable inference. * js/regress/infer-closure-const-then-mov-expected.txt: Added. * js/regress/infer-closure-const-then-mov-no-inline-expected.txt: Added. * js/regress/infer-closure-const-then-mov-no-inline.html: Added. * js/regress/infer-closure-const-then-mov.html: Added. * js/regress/infer-closure-const-then-put-to-scope-expected.txt: Added. * js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt: Added. * js/regress/infer-closure-const-then-put-to-scope-no-inline.html: Added. * js/regress/infer-closure-const-then-put-to-scope.html: Added. * js/regress/infer-closure-const-then-reenter-expected.txt: Added. * js/regress/infer-closure-const-then-reenter-no-inline-expected.txt: Added. * js/regress/infer-closure-const-then-reenter-no-inline.html: Added. * js/regress/infer-closure-const-then-reenter.html: Added. * js/regress/script-tests/infer-closure-const-then-mov-no-inline.js: Added. * js/regress/script-tests/infer-closure-const-then-mov.js: Added. * js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js: Added. (thingy.): (thingy): * js/regress/script-tests/infer-closure-const-then-put-to-scope.js: Added. (thingy.): (thingy): * js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js: Added. (.return.foo): (foo): * js/regress/script-tests/infer-closure-const-then-reenter.js: Added. (.return.foo): (foo): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160109 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 02 Dec, 2013 5 commits
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=124883 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. Previously, in bytecode, you could assign to a captured variable just as you would assign to any other kind of variable. This complicates closure variable constant inference because we don't have any place where we can intercept stores to captured variables in the LLInt. This patch institutes a policy that only certain instructions can store to captured variables. If you interpret those instructions and you are required to notifyWrite() then you need to check if the relevant variable is captured. Those instructions are tracked in CodeBlock.cpp's VerifyCapturedDef. The main one is simply op_captured_mov. In the future, we'll probably modify those instructions to have a pointer directly to the VariableWatchpointSet; but for now we just introduce the captured instructions as placeholders. In order to validate that the placeholders are inserted correctly, this patch improves the CodeBlock validation to be able to inspect every def in the bytecode. To do that, this patch refactors the liveness analysis' use/def calculator to be reusable; it now takes a functor for each use or def. In the process of refactoring the liveness analysis, I noticed that op_enter was claiming to def all callee registers. That's wrong; it only defs the non-temporary variables. Making that change revealed preexisting bugs in the liveness analysis, since now the validator would pick up cases where the bytecode claimed to use a temporary and the def calculator never noticed the definition (or the converse - where the bytecode was actually not using a temporary but the liveness analysis thought that it was a use). This patch fixes a few of those bugs. * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/BytecodeLivenessAnalysis.cpp: (JSC::stepOverInstruction): * bytecode/BytecodeUseDef.h: Added. (JSC::computeUsesForBytecodeOffset): (JSC::computeDefsForBytecodeOffset): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): (JSC::CodeBlock::isCaptured): (JSC::CodeBlock::validate): * bytecode/CodeBlock.h: * bytecode/Opcode.h: (JSC::padOpcodeName): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::BytecodeGenerator): (JSC::BytecodeGenerator::resolveCallee): (JSC::BytecodeGenerator::emitMove): (JSC::BytecodeGenerator::isCaptured): (JSC::BytecodeGenerator::local): (JSC::BytecodeGenerator::constLocal): (JSC::BytecodeGenerator::emitNewFunction): (JSC::BytecodeGenerator::emitLazyNewFunction): (JSC::BytecodeGenerator::emitNewFunctionInternal): * bytecompiler/BytecodeGenerator.h: (JSC::Local::Local): (JSC::Local::isCaptured): (JSC::Local::captureMode): (JSC::BytecodeGenerator::captureMode): (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::pushOptimisedForIn): * bytecompiler/NodesCodegen.cpp: (JSC::PostfixNode::emitResolve): (JSC::PrefixNode::emitResolve): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::ConstDeclNode::emitCodeSingle): (JSC::ForInNode::emitBytecode): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGCapabilities.cpp: (JSC::DFG::capabilityLevel): * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * runtime/SymbolTable.h: (JSC::SymbolTable::isCaptured): LayoutTests: Reviewed by Mark Hahnenberg. * js/regress/captured-assignments-expected.txt: Added. * js/regress/captured-assignments.html: Added. * js/regress/script-tests/captured-assignments.js: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159943 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
fpizlo@apple.com authored
Instead of watchpointing activation allocation, we should watchpoint entry into functions that have captured variables https://bugs.webkit.org/show_bug.cgi?id=125052 Reviewed by Mark Hahnenberg. This makes us watch function entry rather than activation creation. We only incur the costs of doing so for functions that have captured variables, and only on the first two entries into the function. This means that closure variable constant inference will naturally work even for local uses of the captured variable, like: (function(){ var blah = 42; ... // stuff function () { ... blah /* we can fold this to 42 */ } ... blah // we can also fold this to 42. })(); Previously, only the nested use would have been foldable. * bytecode/BytecodeLivenessAnalysis.cpp: (JSC::computeUsesForBytecodeOffset): (JSC::computeDefsForBytecodeOffset): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): * bytecode/Opcode.h: (JSC::padOpcodeName): * bytecode/Watchpoint.h: (JSC::WatchpointSet::touch): (JSC::InlineWatchpointSet::touch): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::BytecodeGenerator): * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::::executeEffects): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGCapabilities.cpp: (JSC::DFG::capabilityLevel): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGNode.h: (JSC::DFG::Node::hasSymbolTable): * dfg/DFGNodeType.h: * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGWatchpointCollectionPhase.cpp: (JSC::DFG::WatchpointCollectionPhase::handle): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): * jit/JIT.h: * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_touch_entry): * llint/LowLevelInterpreter.asm: * runtime/CommonSlowPaths.cpp: (JSC::SLOW_PATH_DECL): * runtime/CommonSlowPaths.h: * runtime/JSActivation.h: (JSC::JSActivation::create): * runtime/SymbolTable.cpp: (JSC::SymbolTable::SymbolTable): * runtime/SymbolTable.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159942 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
commit-queue@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=125066 Patch by László Langó <lango@inf.u-szeged.hu> on 2013-12-02 Reviewed by Michael Saboff. Remove stdio.h, when it is not necessary to be included. * bytecode/CodeBlock.cpp: * bytecode/StructureSet.h: * profiler/LegacyProfiler.cpp: * profiler/Profile.cpp: * profiler/ProfileNode.cpp: * yarr/YarrInterpreter.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159937 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
commit-queue@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=125062 Patch by László Langó <lango@inf.u-szeged.hu> on 2013-12-02 Reviewed by Michael Saboff. We should organize the includes, and guard JIT methods in ValueRecovery. * bytecode/ValueRecovery.cpp: Guard include files. * bytecode/ValueRecovery.h: Guard JIT methods. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159936 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
commit-queue@webkit.org authored
https://bugs.webkit.org/show_bug.cgi?id=125011 Patch by László Langó <lango@inf.u-szeged.hu> on 2013-12-02 Reviewed by Filip Pizlo. * bytecode/Opcode.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159933 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 30 Nov, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=125025 Rubber stamped by Sam Weinig. This removes a bunch of unused and untested insanity. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::tallyFrequentExitSites): * dfg/DFGArgumentsSimplificationPhase.cpp: (JSC::DFG::ArgumentsSimplificationPhase::run): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation): (JSC::DFG::ByteCodeParser::getArrayModeConsideringSlowPath): (JSC::DFG::ByteCodeParser::makeSafe): (JSC::DFG::ByteCodeParser::makeDivSafe): (JSC::DFG::ByteCodeParser::handleCall): (JSC::DFG::ByteCodeParser::handleInlining): (JSC::DFG::ByteCodeParser::parseBlock): (JSC::DFG::ByteCodeParser::linkBlock): (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): (JSC::DFG::ByteCodeParser::parseCodeBlock): (JSC::DFG::ByteCodeParser::parse): (JSC::DFG::parse): * dfg/DFGCFGSimplificationPhase.cpp: (JSC::DFG::CFGSimplificationPhase::run): (JSC::DFG::CFGSimplificationPhase::convertToJump): (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::endIndexForPureCSE): (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren): (JSC::DFG::CSEPhase::setReplacement): (JSC::DFG::CSEPhase::eliminate): (JSC::DFG::CSEPhase::performNodeCSE): * dfg/DFGCommon.h: (JSC::DFG::verboseCompilationEnabled): (JSC::DFG::logCompilationChanges): (JSC::DFG::shouldDumpGraphAtEachPhase): * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): (JSC::DFG::FixupPhase::injectInt32ToDoubleNode): * dfg/DFGInPlaceAbstractState.cpp: (JSC::DFG::InPlaceAbstractState::initialize): (JSC::DFG::InPlaceAbstractState::endBasicBlock): (JSC::DFG::InPlaceAbstractState::mergeStateAtTail): (JSC::DFG::InPlaceAbstractState::mergeToSuccessors): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::compileBody): (JSC::DFG::JITCompiler::link): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGPredictionInjectionPhase.cpp: (JSC::DFG::PredictionInjectionPhase::run): * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::run): (JSC::DFG::PredictionPropagationPhase::propagate): (JSC::DFG::PredictionPropagationPhase::propagateForward): (JSC::DFG::PredictionPropagationPhase::propagateBackward): (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting): * dfg/DFGScoreBoard.h: (JSC::DFG::ScoreBoard::use): * dfg/DFGSlowPathGenerator.h: (JSC::DFG::SlowPathGenerator::generate): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): (JSC::DFG::SpeculativeJIT::runSlowPathGenerators): (JSC::DFG::SpeculativeJIT::dump): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32): * dfg/DFGSpeculativeJIT.h: * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): (JSC::DFG::SpeculativeJIT::fillSpeculateCell): (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): (JSC::DFG::SpeculativeJIT::fillSpeculateCell): (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGVariableEventStream.cpp: (JSC::DFG::VariableEventStream::reconstruct): * dfg/DFGVariableEventStream.h: (JSC::DFG::VariableEventStream::appendAndLog): * dfg/DFGVirtualRegisterAllocationPhase.cpp: (JSC::DFG::VirtualRegisterAllocationPhase::run): * jit/JIT.cpp: (JSC::JIT::privateCompile): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 28 Nov, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=124812 Source/JavaScriptCore: Reviewed by Oliver Hunt. This detects JSActivations that are created only once. The JSActivation pointer is then baked into the machine code. This takes advantage of the one-time scope inference to reduce the number of indirections needed to get to a closure variable in case where the scope is only allocated once. This isn't really a speed-up since in the common case the total number of instruction bytes needed to load the scope from the stack is about equal to the number of instruction bytes needed to materialize the absolute address of a scoped variable. But, this is a necessary prerequisite to https://bugs.webkit.org/show_bug.cgi?id=124630, so it's probably a good idea anyway. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): (JSC::CodeBlock::CodeBlock): (JSC::CodeBlock::finalizeUnconditionally): * bytecode/Instruction.h: * bytecode/Opcode.h: (JSC::padOpcodeName): * bytecode/Watchpoint.h: (JSC::WatchpointSet::notifyWrite): (JSC::InlineWatchpointSet::notifyWrite): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitResolveScope): * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::::executeEffects): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::scopedVarLoadElimination): (JSC::DFG::CSEPhase::scopedVarStoreElimination): (JSC::DFG::CSEPhase::getLocalLoadElimination): (JSC::DFG::CSEPhase::setLocalStoreElimination): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGGraph.cpp: (JSC::DFG::Graph::tryGetRegisters): * dfg/DFGGraph.h: * dfg/DFGNode.h: (JSC::DFG::Node::varNumber): (JSC::DFG::Node::hasSymbolTable): (JSC::DFG::Node::symbolTable): * dfg/DFGNodeType.h: * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGWatchpointCollectionPhase.cpp: (JSC::DFG::WatchpointCollectionPhase::handle): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileGetClosureRegisters): * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * runtime/JSActivation.h: (JSC::JSActivation::create): * runtime/JSScope.cpp: (JSC::abstractAccess): (JSC::JSScope::abstractResolve): * runtime/JSScope.h: (JSC::ResolveOp::ResolveOp): * runtime/JSVariableObject.h: (JSC::JSVariableObject::registers): * runtime/SymbolTable.cpp: (JSC::SymbolTable::SymbolTable): * runtime/SymbolTable.h: LayoutTests: Reviewed by Oliver Hunt. * js/regress/infer-one-time-closure-expected.txt: Added. * js/regress/infer-one-time-closure-ten-vars-expected.txt: Added. * js/regress/infer-one-time-closure-ten-vars.html: Added. * js/regress/infer-one-time-closure-two-vars-expected.txt: Added. * js/regress/infer-one-time-closure-two-vars.html: Added. * js/regress/infer-one-time-closure.html: Added. * js/regress/infer-one-time-deep-closure-expected.txt: Added. * js/regress/infer-one-time-deep-closure.html: Added. * js/regress/script-tests/infer-one-time-closure-ten-vars.js: Added. * js/regress/script-tests/infer-one-time-closure-two-vars.js: Added. * js/regress/script-tests/infer-one-time-closure.js: Added. * js/regress/script-tests/infer-one-time-deep-closure.js: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159834 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 27 Nov, 2013 1 commit
-
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=124913 Source/JavaScriptCore: Reviewed by Oliver Hunt. Also fix some small bugs in the bytecode liveness analysis that I found by doing this validation thingy. * bytecode/BytecodeLivenessAnalysis.cpp: (JSC::isValidRegisterForLiveness): (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::validate): (JSC::CodeBlock::beginValidationDidFail): (JSC::CodeBlock::endValidationDidFail): * bytecode/CodeBlock.h: * runtime/Executable.cpp: (JSC::ScriptExecutable::prepareForExecutionImpl): * runtime/Options.h: Source/WTF: Reviewed by Oliver Hunt. * GNUmakefile.list.am: * WTF.vcxproj/WTF.vcxproj: * WTF.xcodeproj/project.pbxproj: * wtf/CMakeLists.txt: * wtf/FastBitVector.cpp: Added. (WTF::FastBitVector::dump): * wtf/FastBitVector.h: (WTF::FastBitVector::resize): (WTF::FastBitVector::bitCount): (WTF::FastBitVector::arrayLength): Tools: Reviewed by Oliver Hunt. * Scripts/run-jsc-stress-tests: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159825 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 26 Nov, 2013 2 commits
-
-
fpizlo@apple.com authored
Restructure global variable constant inference so that it could work for any kind of symbol table variable https://bugs.webkit.org/show_bug.cgi?id=124760 Reviewed by Oliver Hunt. This changes the way global variable constant inference works so that it can be reused for closure variable constant inference. Some of the premises that originally motivated this patch are somewhat wrong, but it led to some simplifications anyway and I suspect that we'll be able to fix those premises in the future. The main point of this patch is to make it easy to reuse global variable constant inference for closure variable constant inference, and this will be possible provided we can also either (a) infer one-shot closures (easy) or (b) infer closure variables that are always assigned prior to first use. One of the things that this patch is meant to enable is constant inference for closure variables that may be part of a multi-shot closure. Closure variables may be instantiated multiple times, like: function foo() { var WIDTH = 45; function bar() { ... use WIDTH ... } ... } Even if foo() is called many times and WIDTH is assigned to multiple times, that doesn't change the fact that it's a constant. The goal of closure variable constant inference is to catch any case where a closure variable has been assigned at least once and its value has never changed. This patch doesn't implement that, but it does change global variable constant inference to have most of the powers needed to do that. Note that most likely we will use this functionality only to implement constant inference for one-shot closures, but the resulting machinery is still simpler than what we had before. This involves three changes: - The watchpoint object now contains the inferred value. This involves creating a new kind of watchpoint set, the VariableWatchpointSet. We will reuse this object for closure variables. - Writing to a variable that is watchpointed still involves these three states that we proceed through monotonically (Uninitialized->Initialized->Invalidated) but now, the Initialized->Invalidated state transition only happens if we change the variable's value, rather than store to the variable. Repeatedly storing the same value won't change the variable's state. - On 64-bit systems (the only systems on which we do concurrent JIT), you no longer need fancy fencing to get a consistent view of the watchpoint in the JIT. The state of the VariableWatchpointSet for the purposes of constant folding is entirely encapsulated in the VariableWatchpointSet::m_inferredValue. If that is JSValue() then you cannot fold (either because the set is uninitialized or because it's invalidated - doesn't matter which); on the other hand if the value is anything other than JSValue() then you can fold, and that's the value you fold to. Simple! This also changes the way that DFG IR deals with variable watchpoints. It's now oblivious to global variables. You install a watchpoint using VariableWatchpoint and you notify write using NotifyWrite. Easy! Note that this will requires some more tweaks because of the fact that op_enter will store Undefined into every captured variable. Hence it won't even work for one-shot closures. One-shot closures are easily fixed by introducing another state (so we'll have Uninitialized->Undefined->Initialized->Invalidated). Multi-shot closures will require static analysis. One-shot closures are clearly a higher priority. * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/Instruction.h: * bytecode/VariableWatchpointSet.h: Added. (JSC::VariableWatchpointSet::VariableWatchpointSet): (JSC::VariableWatchpointSet::~VariableWatchpointSet): (JSC::VariableWatchpointSet::inferredValue): (JSC::VariableWatchpointSet::notifyWrite): (JSC::VariableWatchpointSet::invalidate): (JSC::VariableWatchpointSet::finalizeUnconditionally): (JSC::VariableWatchpointSet::addressOfInferredValue): * bytecode/Watchpoint.h: * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::::executeEffects): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::performNodeCSE): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGNode.h: (JSC::DFG::Node::hasRegisterPointer): (JSC::DFG::Node::hasVariableWatchpointSet): (JSC::DFG::Node::variableWatchpointSet): * dfg/DFGNodeType.h: * dfg/DFGOperations.cpp: * dfg/DFGOperations.h: * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileArithMod): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGWatchpointCollectionPhase.cpp: (JSC::DFG::WatchpointCollectionPhase::handle): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileNotifyWrite): * jit/JIT.h: * jit/JITOperations.h: * jit/JITPropertyAccess.cpp: (JSC::JIT::emitNotifyWrite): (JSC::JIT::emitPutGlobalVar): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emitNotifyWrite): (JSC::JIT::emitPutGlobalVar): * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::addGlobalVar): (JSC::JSGlobalObject::addFunction): * runtime/JSGlobalObject.h: * runtime/JSScope.h: (JSC::ResolveOp::ResolveOp): * runtime/JSSymbolTableObject.h: (JSC::symbolTablePut): (JSC::symbolTablePutWithAttributes): * runtime/SymbolTable.cpp: (JSC::SymbolTableEntry::inferredValue): (JSC::SymbolTableEntry::prepareToWatch): (JSC::SymbolTableEntry::addWatchpoint): (JSC::SymbolTableEntry::notifyWriteSlow): (JSC::SymbolTable::visitChildren): (JSC::SymbolTable::WatchpointCleanup::WatchpointCleanup): (JSC::SymbolTable::WatchpointCleanup::~WatchpointCleanup): (JSC::SymbolTable::WatchpointCleanup::finalizeUnconditionally): * runtime/SymbolTable.h: (JSC::SymbolTableEntry::watchpointSet): (JSC::SymbolTableEntry::notifyWrite): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159798 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
fpizlo@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=124824 Reviewed by Oliver Hunt. This helps with one shot closure inference as well as closure variable constant inference, since without this, if code was reloaded from the cache then we would think that the first run was actually an Nth run. This would cause us to think that the watchpoint(s) should all be invalidated. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): (JSC::CodeBlock::stronglyVisitStrongReferences): * bytecode/CodeBlock.h: (JSC::CodeBlock::symbolTable): * runtime/Executable.cpp: (JSC::FunctionExecutable::symbolTable): * runtime/Executable.h: * runtime/SymbolTable.cpp: (JSC::SymbolTable::clone): * runtime/SymbolTable.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159795 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 22 Nov, 2013 1 commit
-
-
fpizlo@apple.com authored
CodeBlock::m_numCalleeRegisters shouldn't also mean frame size, frame size needed for exit, or any other unrelated things https://bugs.webkit.org/show_bug.cgi?id=124793 Reviewed by Mark Hahnenberg. Now m_numCalleeRegisters always refers to the number of locals that the attached bytecode uses. It never means anything else. For frame size, we now have it lazily computed from m_numCalleeRegisters for the baseline engines and we have it stored in DFG::CommonData for the optimizing JITs. For frame-size-needed-at-exit, we store that in DFG::CommonData, too. The code no longer implies that there is any arithmetic relationship between m_numCalleeRegisters and frameSize. Previously it implied that the latter is greater than the former. The code no longer implies that there is any arithmetic relationship between the frame Size and the frame-size-needed-at-exit. Previously it implied that the latter is greater that the former. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::frameRegisterCount): * bytecode/CodeBlock.h: * dfg/DFGCommonData.h: (JSC::DFG::CommonData::CommonData): (JSC::DFG::CommonData::requiredRegisterCountForExecutionAndExit): * dfg/DFGGraph.cpp: (JSC::DFG::Graph::frameRegisterCount): (JSC::DFG::Graph::requiredRegisterCountForExit): (JSC::DFG::Graph::requiredRegisterCountForExecutionAndExit): * dfg/DFGGraph.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compileFunction): * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::SpeculativeJIT): * dfg/DFGVirtualRegisterAllocationPhase.cpp: (JSC::DFG::VirtualRegisterAllocationPhase::run): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct): * ftl/FTLOSREntry.cpp: (JSC::FTL::prepareOSREntry): * interpreter/CallFrame.cpp: (JSC::CallFrame::frameExtentInternal): * interpreter/JSStackInlines.h: (JSC::JSStack::pushFrame): * jit/JIT.h: (JSC::JIT::frameRegisterCountFor): * jit/JITOperations.cpp: * llint/LLIntEntrypoint.cpp: (JSC::LLInt::frameRegisterCountFor): * llint/LLIntEntrypoint.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159721 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-