⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Timeline



Jan 10, 2016:

11:27 PM Changeset in webkit [194843] by bshafiei@apple.com
  • 7 edits in tags/Safari-601.5.8.2/Source/WebCore

Merged r194719. rdar://problem/23769758

11:22 PM Changeset in webkit [194842] by bshafiei@apple.com
  • 5 edits in tags/Safari-601.5.8.2/Source

Versioning.

11:19 PM Changeset in webkit [194841] by bshafiei@apple.com
  • 1 copy in tags/Safari-601.5.8.2

New tag.

10:49 PM Changeset in webkit [194840] by sbarati@apple.com
  • 34 edits
    9 adds in trunk

Implement a sampling profiler
https://bugs.webkit.org/show_bug.cgi?id=151713

Reviewed by Filip Pizlo.

Source/JavaScriptCore:

This patch implements a sampling profiler for JavaScriptCore
that will be used in the Inspector UI. The implementation works as follows:
We queue the sampling profiler to run a task on a background
thread every 1ms. When the queued task executes, the sampling profiler
will pause the JSC execution thread and attempt to take a stack trace.
The sampling profiler does everything it can to be very careful
while taking this stack trace. Because it's reading arbitrary memory,
the sampling profiler must validate every pointer it reads from.

The sampling profiler tries to get an ExecutableBase for every call frame
it reads. It first tries to read the CodeBlock slot. It does this because
it can be 100% certain that a pointer is a CodeBlock while it's taking a
stack trace. But, not every call frame will have a CodeBlock. So we must read
the call frame's callee. For these stack traces where we read the callee, we
must verify the callee pointer, and the pointer traversal to an ExecutableBase,
on the main JSC execution thread, and not on the thread taking the stack
trace. We do this verification either before we run the marking phase in
GC, or when somebody asks the SamplingProfiler to materialize its data.

The SamplingProfiler must also be careful to not grab any locks while the JSC execution
thread is paused (this means it can't do anything that mallocs) because
that could cause a deadlock. Therefore, the sampling profiler grabs
locks for all data structures it consults before it pauses the JSC
execution thread.

(JSC::CodeBlock::clearVisitWeaklyHasBeenCalled):
(JSC::CodeBlockSet::mark):

  • dfg/DFGNodeType.h:
  • heap/CodeBlockSet.cpp:

(JSC::CodeBlockSet::add):
(JSC::CodeBlockSet::promoteYoungCodeBlocks):
(JSC::CodeBlockSet::clearMarksForFullCollection):
(JSC::CodeBlockSet::lastChanceToFinalize):
(JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
(JSC::CodeBlockSet::contains):
(JSC::CodeBlockSet::writeBarrierCurrentlyExecutingCodeBlocks):
(JSC::CodeBlockSet::remove): Deleted.

  • heap/CodeBlockSet.h:

(JSC::CodeBlockSet::getLock):
(JSC::CodeBlockSet::iterate):
The sampling pofiler uses the heap's CodeBlockSet to validate
CodeBlock pointers. This data structure must now be under a lock
because we must be certain we're not pausing the JSC execution thread
while it's manipulating this data structure.

  • heap/ConservativeRoots.cpp:

(JSC::ConservativeRoots::ConservativeRoots):
(JSC::ConservativeRoots::grow):
(JSC::ConservativeRoots::genericAddPointer):
(JSC::ConservativeRoots::genericAddSpan):
(JSC::ConservativeRoots::add):
(JSC::CompositeMarkHook::CompositeMarkHook):
(JSC::CompositeMarkHook::mark):

  • heap/ConservativeRoots.h:
  • heap/Heap.cpp:

(JSC::Heap::markRoots):
(JSC::Heap::visitHandleStack):
(JSC::Heap::visitSamplingProfiler):
(JSC::Heap::traceCodeBlocksAndJITStubRoutines):
(JSC::Heap::snapshotMarkedSpace):

  • heap/Heap.h:

(JSC::Heap::structureIDTable):
(JSC::Heap::codeBlockSet):

  • heap/MachineStackMarker.cpp:

(pthreadSignalHandlerSuspendResume):
(JSC::getCurrentPlatformThread):
(JSC::MachineThreads::MachineThreads):
(JSC::MachineThreads::~MachineThreads):
(JSC::MachineThreads::Thread::createForCurrentThread):
(JSC::MachineThreads::Thread::operator==):
(JSC::isThreadInList):
(JSC::MachineThreads::addCurrentThread):
(JSC::MachineThreads::machineThreadForCurrentThread):
(JSC::MachineThreads::removeThread):
(JSC::MachineThreads::gatherFromCurrentThread):
(JSC::MachineThreads::Thread::Thread):
(JSC::MachineThreads::Thread::~Thread):
(JSC::MachineThreads::Thread::suspend):
(JSC::MachineThreads::Thread::resume):
(JSC::MachineThreads::Thread::getRegisters):
(JSC::MachineThreads::Thread::Registers::stackPointer):
(JSC::MachineThreads::Thread::Registers::framePointer):
(JSC::MachineThreads::Thread::Registers::instructionPointer):
(JSC::MachineThreads::Thread::freeRegisters):
(JSC::MachineThreads::tryCopyOtherThreadStacks):
(JSC::pthreadSignalHandlerSuspendResume): Deleted.
(JSC::MachineThreads::Thread::operator!=): Deleted.

  • heap/MachineStackMarker.h:

(JSC::MachineThreads::Thread::operator!=):
(JSC::MachineThreads::getLock):
(JSC::MachineThreads::threadsListHead):
We can now ask a MachineThreads::Thread for its frame pointer
and program counter on darwin and windows platforms. efl
and gtk implementations will happen in another patch.

  • heap/MarkedBlockSet.h:

(JSC::MarkedBlockSet::getLock):
(JSC::MarkedBlockSet::add):
(JSC::MarkedBlockSet::remove):
(JSC::MarkedBlockSet::recomputeFilter):
(JSC::MarkedBlockSet::filter):
(JSC::MarkedBlockSet::set):

  • heap/MarkedSpace.cpp:

(JSC::Free::Free):
(JSC::Free::operator()):
(JSC::FreeOrShrink::FreeOrShrink):
(JSC::FreeOrShrink::operator()):
(JSC::MarkedSpace::~MarkedSpace):
(JSC::MarkedSpace::isPagedOut):
(JSC::MarkedSpace::freeBlock):
(JSC::MarkedSpace::freeOrShrinkBlock):
(JSC::MarkedSpace::shrink):

  • heap/MarkedSpace.h:

(JSC::MarkedSpace::forEachLiveCell):
(JSC::MarkedSpace::forEachDeadCell):

  • interpreter/CallFrame.h:

(JSC::ExecState::calleeAsValue):
(JSC::ExecState::callee):
(JSC::ExecState::unsafeCallee):
(JSC::ExecState::codeBlock):
(JSC::ExecState::scope):

  • jit/ExecutableAllocator.cpp:

(JSC::ExecutableAllocator::dumpProfile):
(JSC::ExecutableAllocator::getLock):
(JSC::ExecutableAllocator::isValidExecutableMemory):

  • jit/ExecutableAllocator.h:
  • jit/ExecutableAllocatorFixedVMPool.cpp:

(JSC::ExecutableAllocator::allocate):
(JSC::ExecutableAllocator::isValidExecutableMemory):
(JSC::ExecutableAllocator::getLock):
(JSC::ExecutableAllocator::committedByteCount):
The sampling profiler consults the ExecutableAllocator to check
if the frame pointer it reads is in executable allocated memory.

  • jsc.cpp:

(GlobalObject::finishCreation):
(functionCheckModuleSyntax):
(functionStartSamplingProfiler):
(functionSamplingProfilerStackTraces):

  • llint/LLIntPCRanges.h: Added.

(JSC::LLInt::isLLIntPC):

  • offlineasm/asm.rb:

I added the ability to test whether the PC is executing
LLInt code because this code is not part of the memory
our executable allocator allocates.

  • runtime/Executable.h:

(JSC::ExecutableBase::isModuleProgramExecutable):
(JSC::ExecutableBase::isExecutableType):
(JSC::ExecutableBase::isHostFunction):

  • runtime/JSLock.cpp:

(JSC::JSLock::didAcquireLock):
(JSC::JSLock::unlock):

  • runtime/Options.h:
  • runtime/SamplingProfiler.cpp: Added.

(JSC::reportStats):
(JSC::FrameWalker::FrameWalker):
(JSC::FrameWalker::walk):
(JSC::FrameWalker::wasValidWalk):
(JSC::FrameWalker::advanceToParentFrame):
(JSC::FrameWalker::isAtTop):
(JSC::FrameWalker::resetAtMachineFrame):
(JSC::FrameWalker::isValidFramePointer):
(JSC::FrameWalker::isValidCodeBlock):
(JSC::FrameWalker::tryToGetExecutableFromCallee):
The FrameWalker class is used to walk the stack in a safe
manner. It doesn't do anything that would deadlock, and it
validates all pointers that it sees.

(JSC::SamplingProfiler::SamplingProfiler):
(JSC::SamplingProfiler::~SamplingProfiler):
(JSC::SamplingProfiler::visit):
(JSC::SamplingProfiler::shutdown):
(JSC::SamplingProfiler::start):
(JSC::SamplingProfiler::stop):
(JSC::SamplingProfiler::pause):
(JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThread):
(JSC::SamplingProfiler::dispatchIfNecessary):
(JSC::SamplingProfiler::dispatchFunction):
(JSC::SamplingProfiler::noticeJSLockAcquisition):
(JSC::SamplingProfiler::noticeVMEntry):
(JSC::SamplingProfiler::observeStackTrace):
(JSC::SamplingProfiler::clearData):
(JSC::displayName):
(JSC::startLine):
(JSC::startColumn):
(JSC::sourceID):
(JSC::url):
(JSC::SamplingProfiler::stacktracesAsJSON):

  • runtime/SamplingProfiler.h: Added.

(JSC::SamplingProfiler::getLock):
(JSC::SamplingProfiler::setTimingInterval):
(JSC::SamplingProfiler::stackTraces):

  • runtime/VM.cpp:

(JSC::VM::VM):
(JSC::VM::~VM):
(JSC::VM::setLastStackTop):
(JSC::VM::createContextGroup):
(JSC::VM::ensureWatchdog):
(JSC::VM::ensureSamplingProfiler):
(JSC::thunkGeneratorForIntrinsic):

  • runtime/VM.h:

(JSC::VM::watchdog):
(JSC::VM::isSafeToRecurse):
(JSC::VM::lastStackTop):
(JSC::VM::scratchBufferForSize):
(JSC::VM::samplingProfiler):
(JSC::VM::setShouldRewriteConstAsVar):
(JSC::VM::setLastStackTop): Deleted.

  • runtime/VMEntryScope.cpp:

(JSC::VMEntryScope::VMEntryScope):

  • tests/stress/sampling-profiler: Added.
  • tests/stress/sampling-profiler-anonymous-function.js: Added.

(foo):
(baz):

  • tests/stress/sampling-profiler-basic.js: Added.

(bar):
(foo):
(nothing):
(top):
(jaz):
(kaz):
(checkInlining):

  • tests/stress/sampling-profiler-deep-stack.js: Added.

(foo):
(hellaDeep):
(start):

  • tests/stress/sampling-profiler-microtasks.js: Added.

(testResults):
(loop.jaz):
(loop):

  • tests/stress/sampling-profiler/samplingProfiler.js: Added.

(assert):
(let.nodePrototype.makeChildIfNeeded):
(makeNode):
(updateCallingContextTree):
(doesTreeHaveStackTrace):
(makeTree):
(runTest):
(dumpTree):

  • tools/JSDollarVMPrototype.cpp:

(JSC::JSDollarVMPrototype::isInObjectSpace):
(JSC::JSDollarVMPrototype::isInStorageSpace):

  • yarr/YarrJIT.cpp:

(JSC::Yarr::YarrGenerator::generateEnter):
(JSC::Yarr::YarrGenerator::generateReturn):
(JSC::Yarr::YarrGenerator::YarrGenerator):
(JSC::Yarr::YarrGenerator::compile):
(JSC::Yarr::jitCompile):
We now have a boolean that's set to true when
we're executing a RegExp, and to false otherwise.
The boolean lives off of VM.

(JSC::CodeBlock::clearVisitWeaklyHasBeenCalled):
(JSC::CodeBlockSet::mark):

  • dfg/DFGNodeType.h:
  • heap/CodeBlockSet.cpp:

(JSC::CodeBlockSet::add):
(JSC::CodeBlockSet::promoteYoungCodeBlocks):
(JSC::CodeBlockSet::clearMarksForFullCollection):
(JSC::CodeBlockSet::lastChanceToFinalize):
(JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
(JSC::CodeBlockSet::contains):
(JSC::CodeBlockSet::writeBarrierCurrentlyExecutingCodeBlocks):
(JSC::CodeBlockSet::remove): Deleted.

  • heap/CodeBlockSet.h:

(JSC::CodeBlockSet::getLock):
(JSC::CodeBlockSet::iterate):

  • heap/ConservativeRoots.cpp:

(JSC::ConservativeRoots::ConservativeRoots):
(JSC::ConservativeRoots::genericAddPointer):
(JSC::ConservativeRoots::add):
(JSC::CompositeMarkHook::CompositeMarkHook):
(JSC::CompositeMarkHook::mark):

  • heap/ConservativeRoots.h:
  • heap/Heap.cpp:

(JSC::Heap::markRoots):
(JSC::Heap::visitHandleStack):
(JSC::Heap::visitSamplingProfiler):
(JSC::Heap::traceCodeBlocksAndJITStubRoutines):

  • heap/Heap.h:

(JSC::Heap::structureIDTable):
(JSC::Heap::codeBlockSet):

  • heap/HeapInlines.h:

(JSC::Heap::didFreeBlock):
(JSC::Heap::isPointerGCObject):
(JSC::Heap::isValueGCObject):

  • heap/MachineStackMarker.cpp:

(pthreadSignalHandlerSuspendResume):
(JSC::getCurrentPlatformThread):
(JSC::MachineThreads::MachineThreads):
(JSC::MachineThreads::~MachineThreads):
(JSC::MachineThreads::Thread::createForCurrentThread):
(JSC::MachineThreads::Thread::operator==):
(JSC::isThreadInList):
(JSC::MachineThreads::addCurrentThread):
(JSC::MachineThreads::machineThreadForCurrentThread):
(JSC::MachineThreads::removeThread):
(JSC::MachineThreads::gatherFromCurrentThread):
(JSC::MachineThreads::Thread::Thread):
(JSC::MachineThreads::Thread::~Thread):
(JSC::MachineThreads::Thread::suspend):
(JSC::MachineThreads::Thread::resume):
(JSC::MachineThreads::Thread::getRegisters):
(JSC::MachineThreads::Thread::Registers::stackPointer):
(JSC::MachineThreads::Thread::Registers::framePointer):
(JSC::MachineThreads::Thread::Registers::instructionPointer):
(JSC::MachineThreads::Thread::freeRegisters):
(JSC::pthreadSignalHandlerSuspendResume): Deleted.
(JSC::MachineThreads::Thread::operator!=): Deleted.

  • heap/MachineStackMarker.h:

(JSC::MachineThreads::Thread::operator!=):
(JSC::MachineThreads::getLock):
(JSC::MachineThreads::threadsListHead):

  • heap/MarkedBlockSet.h:
  • heap/MarkedSpace.cpp:

(JSC::Free::Free):
(JSC::Free::operator()):
(JSC::FreeOrShrink::FreeOrShrink):
(JSC::FreeOrShrink::operator()):

  • interpreter/CallFrame.h:

(JSC::ExecState::calleeAsValue):
(JSC::ExecState::callee):
(JSC::ExecState::unsafeCallee):
(JSC::ExecState::codeBlock):
(JSC::ExecState::scope):

  • jit/ExecutableAllocator.cpp:

(JSC::ExecutableAllocator::dumpProfile):
(JSC::ExecutableAllocator::getLock):
(JSC::ExecutableAllocator::isValidExecutableMemory):

  • jit/ExecutableAllocator.h:
  • jit/ExecutableAllocatorFixedVMPool.cpp:

(JSC::ExecutableAllocator::allocate):
(JSC::ExecutableAllocator::isValidExecutableMemory):
(JSC::ExecutableAllocator::getLock):
(JSC::ExecutableAllocator::committedByteCount):

  • jsc.cpp:

(GlobalObject::finishCreation):
(functionCheckModuleSyntax):
(functionPlatformSupportsSamplingProfiler):
(functionStartSamplingProfiler):
(functionSamplingProfilerStackTraces):

  • llint/LLIntPCRanges.h: Added.

(JSC::LLInt::isLLIntPC):

  • offlineasm/asm.rb:
  • runtime/Executable.h:

(JSC::ExecutableBase::isModuleProgramExecutable):
(JSC::ExecutableBase::isExecutableType):
(JSC::ExecutableBase::isHostFunction):

  • runtime/JSLock.cpp:

(JSC::JSLock::didAcquireLock):
(JSC::JSLock::unlock):

  • runtime/Options.h:
  • runtime/SamplingProfiler.cpp: Added.

(JSC::reportStats):
(JSC::FrameWalker::FrameWalker):
(JSC::FrameWalker::walk):
(JSC::FrameWalker::wasValidWalk):
(JSC::FrameWalker::advanceToParentFrame):
(JSC::FrameWalker::isAtTop):
(JSC::FrameWalker::resetAtMachineFrame):
(JSC::FrameWalker::isValidFramePointer):
(JSC::FrameWalker::isValidCodeBlock):
(JSC::SamplingProfiler::SamplingProfiler):
(JSC::SamplingProfiler::~SamplingProfiler):
(JSC::SamplingProfiler::processUnverifiedStackTraces):
(JSC::SamplingProfiler::visit):
(JSC::SamplingProfiler::shutdown):
(JSC::SamplingProfiler::start):
(JSC::SamplingProfiler::stop):
(JSC::SamplingProfiler::pause):
(JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThread):
(JSC::SamplingProfiler::dispatchIfNecessary):
(JSC::SamplingProfiler::dispatchFunction):
(JSC::SamplingProfiler::noticeJSLockAcquisition):
(JSC::SamplingProfiler::noticeVMEntry):
(JSC::SamplingProfiler::clearData):
(JSC::displayName):
(JSC::SamplingProfiler::stacktracesAsJSON):
(WTF::printInternal):

  • runtime/SamplingProfiler.h: Added.

(JSC::SamplingProfiler::StackFrame::StackFrame):
(JSC::SamplingProfiler::getLock):
(JSC::SamplingProfiler::setTimingInterval):
(JSC::SamplingProfiler::stackTraces):

  • runtime/VM.cpp:

(JSC::VM::VM):
(JSC::VM::~VM):
(JSC::VM::setLastStackTop):
(JSC::VM::createContextGroup):
(JSC::VM::ensureWatchdog):
(JSC::VM::ensureSamplingProfiler):
(JSC::thunkGeneratorForIntrinsic):

  • runtime/VM.h:

(JSC::VM::watchdog):
(JSC::VM::samplingProfiler):
(JSC::VM::isSafeToRecurse):
(JSC::VM::lastStackTop):
(JSC::VM::scratchBufferForSize):
(JSC::VM::setLastStackTop): Deleted.

  • runtime/VMEntryScope.cpp:

(JSC::VMEntryScope::VMEntryScope):

  • tests/stress/sampling-profiler: Added.
  • tests/stress/sampling-profiler-anonymous-function.js: Added.

(platformSupportsSamplingProfiler.foo):
(platformSupportsSamplingProfiler.baz):
(platformSupportsSamplingProfiler):

  • tests/stress/sampling-profiler-basic.js: Added.

(platformSupportsSamplingProfiler.bar):
(platformSupportsSamplingProfiler.foo):
(platformSupportsSamplingProfiler.nothing):
(platformSupportsSamplingProfiler.top):
(platformSupportsSamplingProfiler.jaz):
(platformSupportsSamplingProfiler.kaz):
(platformSupportsSamplingProfiler.checkInlining):
(platformSupportsSamplingProfiler):

  • tests/stress/sampling-profiler-deep-stack.js: Added.

(platformSupportsSamplingProfiler.foo):
(platformSupportsSamplingProfiler.let.hellaDeep):
(platformSupportsSamplingProfiler.let.start):
(platformSupportsSamplingProfiler):

  • tests/stress/sampling-profiler-microtasks.js: Added.

(platformSupportsSamplingProfiler.testResults):
(platformSupportsSamplingProfiler):
(platformSupportsSamplingProfiler.loop.jaz):
(platformSupportsSamplingProfiler.loop):

  • tests/stress/sampling-profiler/samplingProfiler.js: Added.

(assert):
(let.nodePrototype.makeChildIfNeeded):
(makeNode):
(updateCallingContextTree):
(doesTreeHaveStackTrace):
(makeTree):
(runTest):
(dumpTree):

  • yarr/YarrJIT.cpp:

(JSC::Yarr::YarrGenerator::generateEnter):
(JSC::Yarr::YarrGenerator::generateReturn):
(JSC::Yarr::YarrGenerator::YarrGenerator):
(JSC::Yarr::YarrGenerator::compile):
(JSC::Yarr::jitCompile):

Source/WTF:

  • wtf/MetaAllocator.cpp:

(WTF::MetaAllocator::decrementPageOccupancy):
(WTF::MetaAllocator::isInAllocatedMemory):
(WTF::MetaAllocator::roundUp):

  • wtf/MetaAllocator.h:

(WTF::MetaAllocator::getLock):

  • wtf/Platform.h:

Tools:

  • Scripts/run-jsc-stress-tests:
9:55 PM Changeset in webkit [194839] by mmaxfield@apple.com
  • 6 edits
    3 adds in trunk

[SVG -> OTF Converter] Parsing failures cause use of incomplete fonts
https://bugs.webkit.org/show_bug.cgi?id=152772
<rdar://problem/24043104>

Reviewed by Simon Fraser.

Source/WebCore:

Originally, if we fail to parse a glyph, we would simply skip the glyph. However, this means that
we will create an incomplete font without all the necessary glyphs. This causes very distressing
text where all the occurances of a particular letter are missing. Instead, we should treat the
entire font as invalid.

Test: fast/text/svg-font-invalid-glyph-path-failure.html

  • css/CSSFontFaceSource.cpp:

(WebCore::CSSFontFaceSource::font):

  • loader/cache/CachedSVGFont.cpp:

(WebCore::CachedSVGFont::ensureCustomFontData):

  • svg/SVGToOTFFontConversion.cpp:

(WebCore::SVGToOTFFontConverter::error):
(WebCore::SVGToOTFFontConverter::transcodeGlyphPaths):
(WebCore::SVGToOTFFontConverter::processGlyphElement):
(WebCore::convertSVGToOTFFont):

  • svg/SVGToOTFFontConversion.h:

LayoutTests:

Make sure the font renders as if its invalid.

  • fast/text/resources/bustedfont.svg: Added.
  • fast/text/svg-font-invalid-glyph-path-failure-expected.html: Added.
  • fast/text/svg-font-invalid-glyph-path-failure.html: Added.
9:54 PM Changeset in webkit [194838] by Yusuke Suzuki
  • 16 edits
    2 copies
    12 adds in trunk

[JSC] Iterating over a Set/Map is too slow
https://bugs.webkit.org/show_bug.cgi?id=152691

Reviewed by Saam Barati.

Source/JavaScriptCore:

Set#forEach and Set & for-of are very slow. There are 2 reasons.

  1. forEach is implemented in C++. And typically, taking JS callback and calling it from C++.

C++ to JS transition seems costly. perf result in Linux machine shows this.

Samples: 23K of event 'cycles', Event count (approx.): 21446074385
34.04% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::Interpreter::execute(JSC::CallFrameClosure&)
20.48% jsc libjavascriptcoregtk-4.0.so.18.3.1 . vmEntryToJavaScript

9.80% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
7.95% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::setProtoFuncForEach(JSC::ExecState*)
5.65% jsc perf-22854.map . 0x00007f5d2c204a6f

Writing forEach in JS eliminates this.

Samples: 23K of event 'cycles', Event count (approx.): 21255691651
62.91% jsc perf-22890.map . 0x00007fd117c0a3b9
24.89% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::privateFuncSetIteratorNext(JSC::ExecState*)

0.29% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::CodeBlock::updateAllPredictionsAndCountLiveness(unsigned int&, unsigned int&)
0.24% jsc [vdso] . 0x00000000000008e8
0.22% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::CodeBlock::predictedMachineCodeSize()
0.16% jsc libjavascriptcoregtk-4.0.so.18.3.1 . WTF::MetaAllocator::currentStatistics()
0.15% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::Lexer<unsigned char>::lex(JSC::JSToken*, unsigned int, bool)

  1. Iterator result object allocation is costly.

Iterator result object allocation is costly. Even if the (1) is solved, when executing Set & for-of, perf result shows very slow performance due to (2).

Samples: 108K of event 'cycles', Event count (approx.): 95529273748
18.02% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::createIteratorResultObject(JSC::ExecState*, JSC::JSValue, bool)
15.68% jsc jsc . JSC::JSObject::putDirect(JSC::VM&, JSC::PropertyName, JSC::JSValue, unsigned int)
14.18% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::PrototypeMap::emptyObjectStructureForPrototype(JSC::JSObject*, unsigned int)
13.40% jsc perf-25420.map . 0x00007fce158006a1

6.79% jsc libjavascriptcoregtk-4.0.so.18.3.1 . JSC::StructureTransitionTable::get(WTF::UniquedStringImpl*, unsigned int) const

In the long term, we should implement SetIterator#next in JS and make the iterator result object allocation written in JS to encourage object allocation elimination in FTL.
But seeing the perf result, we can find the easy to fix bottleneck in the current implementation.
Every time createIteratorResultObject creates the empty object and use putDirect to store properties.
The pre-baked Structure* with done and value properties makes this implementation fast.

After these improvements, the micro benchmark[1] shows the following.

old:

Linked List x 212,776 ops/sec ±0.21% (162 runs sampled)
Array x 376,156 ops/sec ±0.20% (162 runs sampled)
Array forEach x 17,345 ops/sec ±0.99% (137 runs sampled)
Array for-of x 16,518 ops/sec ±0.58% (160 runs sampled)
Set forEach x 13,263 ops/sec ±0.20% (162 runs sampled)
Set for-of x 4,732 ops/sec ±0.34% (123 runs sampled)

new:

Linked List x 210,833 ops/sec ±0.28% (161 runs sampled)
Array x 371,347 ops/sec ±0.36% (162 runs sampled)
Array forEach x 17,460 ops/sec ±0.84% (136 runs sampled)
Array for-of x 16,188 ops/sec ±1.27% (158 runs sampled)
Set forEach x 23,684 ops/sec ±2.46% (139 runs sampled)
Set for-of x 12,176 ops/sec ±0.54% (157 runs sampled)

Set#forEach becomes comparable to Array#forEach. And Set#forEach and Set & for-of are improved (1.79x, and 2.57x).
After this optimizations, they are still much slower than linked list and array.
This should be optimized in the long term.

[1]: https://gist.github.com/Constellation/8db5f5b8f12fe7e283d0

  • CMakeLists.txt:
  • DerivedSources.make:
  • JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
  • JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • builtins/MapPrototype.js: Copied from Source/JavaScriptCore/runtime/IteratorOperations.h.

(forEach):

  • builtins/SetPrototype.js: Copied from Source/JavaScriptCore/runtime/IteratorOperations.h.

(forEach):

  • runtime/CommonIdentifiers.h:
  • runtime/IteratorOperations.cpp:

(JSC::createIteratorResultObjectStructure):
(JSC::createIteratorResultObject):

  • runtime/IteratorOperations.h:
  • runtime/JSGlobalObject.cpp:

(JSC::JSGlobalObject::init):
(JSC::JSGlobalObject::visitChildren):

  • runtime/JSGlobalObject.h:

(JSC::JSGlobalObject::iteratorResultObjectStructure):
(JSC::JSGlobalObject::iteratorResultStructure): Deleted.
(JSC::JSGlobalObject::iteratorResultStructureOffset): Deleted.

  • runtime/MapPrototype.cpp:

(JSC::MapPrototype::getOwnPropertySlot):
(JSC::privateFuncIsMap):
(JSC::privateFuncMapIterator):
(JSC::privateFuncMapIteratorNext):
(JSC::MapPrototype::finishCreation): Deleted.
(JSC::mapProtoFuncForEach): Deleted.

  • runtime/MapPrototype.h:
  • runtime/SetPrototype.cpp:

(JSC::SetPrototype::getOwnPropertySlot):
(JSC::privateFuncIsSet):
(JSC::privateFuncSetIterator):
(JSC::privateFuncSetIteratorNext):
(JSC::SetPrototype::finishCreation): Deleted.
(JSC::setProtoFuncForEach): Deleted.

  • runtime/SetPrototype.h:

LayoutTests:

Add regress tests.

  • js/regress/map-for-each-expected.txt: Added.
  • js/regress/map-for-each.html: Added.
  • js/regress/map-for-of-expected.txt: Added.
  • js/regress/map-for-of.html: Added.
  • js/regress/script-tests/map-for-each.js: Added.

(createMap):
(i.map.forEach):

  • js/regress/script-tests/map-for-of.js: Added.

(createMap):

  • js/regress/script-tests/set-for-each.js: Added.

(set forEach):
(set createSet):

  • js/regress/script-tests/set-for-of.js: Added.
  • js/regress/set-for-each-expected.txt: Added.
  • js/regress/set-for-each.html: Added.
  • js/regress/set-for-of-expected.txt: Added.
  • js/regress/set-for-of.html: Added.
7:44 PM Changeset in webkit [194837] by fpizlo@apple.com
  • 2 edits in trunk/Source/JavaScriptCore

Unreviewed, fix ARM64 build.

  • b3/air/AirOpcode.opcodes:
7:25 PM Changeset in webkit [194836] by fpizlo@apple.com
  • 3 edits in trunk/Source/JavaScriptCore

B3 should reduce Trunc(BitOr(value, constant)) where !(constant & 0xffffffff) to Trunc(value)
https://bugs.webkit.org/show_bug.cgi?id=152955

Reviewed by Saam Barati.

This happens when we box an int32 and then immediately unbox it.

This makes an enormous difference on AsmBench/FloatMM. It's a 2x speed-up on that
benchmark. It's neutral elsewhere.

  • b3/B3ReduceStrength.cpp:
  • b3/testb3.cpp:

(JSC::B3::testPowDoubleByIntegerLoop):
(JSC::B3::testTruncOrHigh):
(JSC::B3::testTruncOrLow):
(JSC::B3::testBitAndOrHigh):
(JSC::B3::testBitAndOrLow):
(JSC::B3::zero):
(JSC::B3::run):

5:38 PM Changeset in webkit [194835] by commit-queue@webkit.org
  • 21 edits
    2 deletes in trunk/Source/JavaScriptCore

[ES6] Arrow function syntax. Get rid of JSArrowFunction and use standard JSFunction class
https://bugs.webkit.org/show_bug.cgi?id=149855

Patch by Skachkov Oleksandr <gskachkov@gmail.com> on 2016-01-10
Reviewed by Saam Barati.

JSArrowFunction.h/cpp were removed from JavaScriptCore, because now is used new approach for storing
'this', 'arguments' and 'super'

(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileNewFunction):

  • dfg/DFGStructureRegistrationPhase.cpp:

(JSC::DFG::StructureRegistrationPhase::run):

  • ftl/FTLAbstractHeapRepository.cpp:
  • ftl/FTLAbstractHeapRepository.h:
  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction):

  • interpreter/Interpreter.cpp:
  • interpreter/Interpreter.h:
  • jit/JITOpcodes.cpp:
  • jit/JITOpcodes32_64.cpp:
  • jit/JITOperations.cpp:
  • jit/JITOperations.h:
  • llint/LLIntOffsetsExtractor.cpp:
  • llint/LLIntSlowPaths.cpp:
  • runtime/JSArrowFunction.cpp: Removed.
  • runtime/JSArrowFunction.h: Removed.
  • runtime/JSGlobalObject.cpp:
  • runtime/JSGlobalObject.h:
4:58 PM Changeset in webkit [194834] by fpizlo@apple.com
  • 9 edits in trunk/Source

It should be possible to run liveness over registers without also tracking Tmps
https://bugs.webkit.org/show_bug.cgi?id=152963

Reviewed by Saam Barati.

Source/JavaScriptCore:

This adds a RegLivenessAdapter so that we can run Liveness over registers. This makes it
easier to write certain kinds of phases, like ReportUsedRegisters. I anticipate writing more
code like that for handling cold function calls. It also makes code like that somewhat more
scalable, since we're no longer using HashSets.

Currently, the way we track sets of registers is with a BitVector. Normally, we use the
RegisterSet class, which wraps BitVector, so that we can add()/contains() on Reg's. But in
the liveness analysis, everything gets turned into an index. So, we want to use BitVector
directly. To do that, I needed to make the BitVector API look a bit more like a set API. I
think that this is good, because the lack of set methods (add/remove/contains) has caused
bugs in the past. This makes BitVector have methods both for set operations on bits and array
operations on bits. I think that's good, since BitVector gets used in both contexts.

  • b3/B3IndexSet.h:

(JSC::B3::IndexSet::Iterable::iterator::iterator):
(JSC::B3::IndexSet::Iterable::begin):
(JSC::B3::IndexSet::dump):

  • b3/air/AirInstInlines.h:

(JSC::B3::Air::ForEach<Tmp>::forEach):
(JSC::B3::Air::ForEach<Arg>::forEach):
(JSC::B3::Air::ForEach<Reg>::forEach):
(JSC::B3::Air::Inst::forEach):

  • b3/air/AirLiveness.h:

(JSC::B3::Air::RegLivenessAdapter::RegLivenessAdapter):
(JSC::B3::Air::RegLivenessAdapter::maxIndex):
(JSC::B3::Air::RegLivenessAdapter::acceptsType):
(JSC::B3::Air::RegLivenessAdapter::valueToIndex):
(JSC::B3::Air::RegLivenessAdapter::indexToValue):

  • b3/air/AirReportUsedRegisters.cpp:

(JSC::B3::Air::reportUsedRegisters):

  • jit/Reg.h:

(JSC::Reg::next):
(JSC::Reg::index):
(JSC::Reg::maxIndex):
(JSC::Reg::isSet):
(JSC::Reg::operator bool):

  • jit/RegisterSet.h:

(JSC::RegisterSet::forEach):

Source/WTF:

Add set methods (add/contains/remove) to BitVector, since it gets used as a set in a lot of
places. This also makes BitVector a drop-in replacement for HashSet<unsigned> in a lot of
places.

Also made the iterator methods of BitVector live on BitVector directly rather than behind the
thing returned from setBits(). This makes sense since that makes BitVector even more of a
drop-in for HashSet. It's not harmful since we've never added any other mode of iterating a
BitVector other than this, so it doesn't make sense to make it harder to access.

  • wtf/BitVector.h:

(WTF::BitVector::get):
(WTF::BitVector::contains):
(WTF::BitVector::set):
(WTF::BitVector::add):
(WTF::BitVector::ensureSizeAndSet):
(WTF::BitVector::clear):
(WTF::BitVector::remove):
(WTF::BitVector::hash):
(WTF::BitVector::iterator::iterator):
(WTF::BitVector::iterator::operator*):
(WTF::BitVector::iterator::operator++):
(WTF::BitVector::iterator::operator==):
(WTF::BitVector::iterator::operator!=):
(WTF::BitVector::begin):
(WTF::BitVector::end):
(WTF::BitVector::bitsInPointer):
(WTF::BitVector::SetBitsIterable::SetBitsIterable): Deleted.
(WTF::BitVector::SetBitsIterable::iterator::iterator): Deleted.
(WTF::BitVector::SetBitsIterable::iterator::operator*): Deleted.
(WTF::BitVector::SetBitsIterable::iterator::operator++): Deleted.
(WTF::BitVector::SetBitsIterable::iterator::operator==): Deleted.
(WTF::BitVector::SetBitsIterable::iterator::operator!=): Deleted.
(WTF::BitVector::SetBitsIterable::begin): Deleted.
(WTF::BitVector::SetBitsIterable::end): Deleted.
(WTF::BitVector::setBits): Deleted.

2:33 PM Changeset in webkit [194833] by commit-queue@webkit.org
  • 6 edits in trunk/Source/JavaScriptCore

[JSC] Make branchMul functional in ARM B3 and minor fixes
https://bugs.webkit.org/show_bug.cgi?id=152889

Patch by Benjamin Poulain <bpoulain@apple.com> on 2016-01-10
Reviewed by Mark Lam.

ARM64 does not have a "S" version of MUL setting the flags.
What we do is abstract that in the MacroAssembler. The problem
is that form requires scratch registers.

For simplicity, I just exposed the two scratch registers
for Air. Filip already added the concept of Scratch role,
all I needed was to expose it for opcodes.

  • assembler/MacroAssemblerARM64.h:

(JSC::MacroAssemblerARM64::branchMul32):
(JSC::MacroAssemblerARM64::branchMul64):
Expose a version with the scratch registers as arguments.

  • b3/B3LowerToAir.cpp:

(JSC::B3::Air::LowerToAir::lower):
Add the new form of CheckMul lowering.

  • b3/air/AirOpcode.opcodes:

Expose the new BranchMuls.
Remove all the Test variants that use immediates
since Air can't handle those immediates correctly yet.

  • b3/air/opcode_generator.rb:

Expose the Scratch role.

  • b3/testb3.cpp:

(JSC::B3::testPatchpointLotsOfLateAnys):
Ooops, the scratch registers were not clobbered. We were just lucky
on x86.

1:56 PM Changeset in webkit [194832] by commit-queue@webkit.org
  • 2 edits in trunk/Tools

[webkitdirs] Try arch and uname commands on non-windows OS
https://bugs.webkit.org/show_bug.cgi?id=152958

Patch by Konstantin Tokarev <Konstantin Tokarev> on 2016-01-10
Reviewed by Michael Catanzaro.

Right now, determineArchitecture() uses arch and uname -m

commands to determine architecture in case of condition (isGtk() isAppleMacWebKit()
isEfl()) is true. This should be !anyWindows()

instead, because this code is applicable to any non-windows OS WebKit
supports (even Haiku which once was supported is moderately
POSIX-compliant and has uname command).

  • Scripts/webkitdirs.pm:

(determineArchitecture):

1:42 PM Changeset in webkit [194831] by commit-queue@webkit.org
  • 2 edits in trunk/Source/JavaScriptCore

[JSC] B3 is unable to do function calls on ARM64
https://bugs.webkit.org/show_bug.cgi?id=152895

Patch by Benjamin Poulain <bpoulain@apple.com> on 2016-01-10
Reviewed by Mark Lam.

Apparently iOS does not follow the ARM64 ABI for function calls.
Instead of giving each value a 8 bytes slot, it must be packed
while preserving alignment.

This patch adds a #ifdef to make function calls functional.

  • b3/B3LowerToAir.cpp:

(JSC::B3::Air::LowerToAir::marshallCCallArgument):
(JSC::B3::Air::LowerToAir::lower):

12:28 PM Changeset in webkit [194830] by commit-queue@webkit.org
  • 2 edits in trunk/Source/WebInspectorUI

Web Inspector: Uncaught Exception selecting IndexedDB host folder in Storage tab
https://bugs.webkit.org/show_bug.cgi?id=152943

Patch by Joseph Pecoraro <Joseph Pecoraro> on 2016-01-10
Reviewed by Brian Burg.

  • UserInterface/Views/NavigationSidebarPanel.js:

(WebInspector.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject):
Another type of specialized folder tree element.

12:25 PM Changeset in webkit [194829] by commit-queue@webkit.org
  • 2 edits in trunk/Source/WebInspectorUI

Uncaught Exception: TypeError: undefined is not an object (evaluating 'this._scopeChain[i].object.deprecatedGetAllProperties')
https://bugs.webkit.org/show_bug.cgi?id=152944
<rdar://problem/24119827>

Patch by Joseph Pecoraro <Joseph Pecoraro> on 2016-01-10
Reviewed by Brian Burg.

  • UserInterface/Models/CallFrame.js:

(WebInspector.CallFrame.prototype.collectScopeChainVariableNames):
Missed one place where object needed to change to objects.
Here the list will always contain a single object, only UI
generated scopes for the sidebar may have multiple objects.

12:24 PM Changeset in webkit [194828] by commit-queue@webkit.org
  • 2 edits in trunk/Source/WebInspectorUI

Web Inspector: Dashboard log message count doesn't include console.time messages
https://bugs.webkit.org/show_bug.cgi?id=151280

Patch by Johan K. Jensen <jj@johanjensen.dk> on 2016-01-10
Reviewed by Brian Burg.

  • UserInterface/Models/DefaultDashboard.js:

(WebInspector.DefaultDashboard.prototype._incrementConsoleMessageType):
Make Info and Debug levels increment the log count.

10:51 AM Changeset in webkit [194827] by mitz@apple.com
  • 2 edits in trunk/Source/WebKit2

[Cocoa] Disable header postprocessing when building for El Capitan
https://bugs.webkit.org/show_bug.cgi?id=152962

Reviewed by Anders Carlsson.

  • Configurations/WebKit.xcconfig:
5:27 AM Changeset in webkit [194826] by akling@apple.com
  • 21 edits in trunk/Source

Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL cont'd
<https://webkit.org/b/152902>

Reviewed by Andy Estes.

Source/WebCore:

Convert some more of the remaining clients to use NeverDestroyed.

  • html/track/VTTRegion.cpp:

(WebCore::VTTRegion::textTrackCueContainerShadowPseudoId):
(WebCore::VTTRegion::textTrackRegionShadowPseudoId):

  • svg/properties/SVGAnimatedPropertyMacros.h:

Source/WebKit:

  • Storage/StorageThread.cpp:

(WebCore::activeStorageThreads):

Source/WebKit/ios:

  • WebCoreSupport/WebFixedPositionContent.mm:

(WebFixedPositionContentDataLock):

Source/WebKit/mac:

Convert some more of the remaining clients to use NeverDestroyed.

  • History/WebBackForwardList.mm:

(backForwardLists):

  • History/WebHistoryItem.mm:

(historyItemWrappers):

  • Misc/WebNSPasteboardExtras.mm:

(+[NSPasteboard _web_writableTypesForURL]):
(_writableTypesForImageWithoutArchive):
(_writableTypesForImageWithArchive):

  • Plugins/Hosted/NetscapePluginHostManager.mm:

(WebKit::NetscapePluginHostManager::singleton):

  • Plugins/Hosted/NetscapePluginHostProxy.mm:

(WebKit::pluginProxyMap):

  • Plugins/Hosted/NetscapePluginInstanceProxy.mm:

(WebKit::globalExceptionString):

  • Plugins/Hosted/ProxyInstance.mm:

(WebKit::proxyClass):

  • Plugins/WebNetscapePluginStream.mm:

(streams):

  • Storage/WebDatabaseManager.mm:

(transactionBackgroundTaskIdentifierLock):

  • WebCoreSupport/WebUserMediaClient.mm:

(userMediaCheckMap):

  • WebView/WebHTMLRepresentation.mm:

(regExpForLabels):

  • WebView/WebView.mm:

(aeDescFromJSValue):

Jan 9, 2016:

10:39 PM Changeset in webkit [194825] by Simon Fraser
  • 13 edits in trunk/Source/WebCore

Hook up display-list drawing in GraphicsLayerCA
https://bugs.webkit.org/show_bug.cgi?id=152946

Reviewed by Zalan Bujtas.

Have GraphicsLayerCA hold a DisplayList. If enabled, do a display-list record
in GraphicsLayerCA::recursiveCommitChanges(), and a playback in GraphicsLayerCA::platformCALayerPaintContents().

GraphicsLayerCA needs to maintain a m_hasEverPainted flag to know to do a full record
at first paint (when there are no dirty rects).

Plumb 'isUsingDisplayListDrawing' through to TileGrid via PlatformCALayer{Client}
so that we can decorate the tile paint counters with an outline.

Have RenderLayerCompositor push the displayListDrawingEnabled state down through
RenderLayerBackings to GraphicsLayers.

Convert RenderLayerCompositor to use initializers.

  • platform/graphics/GraphicsLayer.cpp:

(WebCore::GraphicsLayer::GraphicsLayer):

  • platform/graphics/GraphicsLayer.h:

(WebCore::GraphicsLayer::usesDisplayListDrawing):
(WebCore::GraphicsLayer::setUsesDisplayListDrawing):

  • platform/graphics/ca/GraphicsLayerCA.cpp:

(WebCore::GraphicsLayerCA::GraphicsLayerCA):
(WebCore::GraphicsLayerCA::setUsesDisplayListDrawing):
(WebCore::GraphicsLayerCA::recursiveCommitChanges):
(WebCore::GraphicsLayerCA::platformCALayerPaintContents):
(WebCore::GraphicsLayerCA::updateDrawsContent):
(WebCore::GraphicsLayerCA::dumpAdditionalProperties):

  • platform/graphics/ca/GraphicsLayerCA.h:
  • platform/graphics/ca/PlatformCALayer.cpp:

(WebCore::PlatformCALayer::drawRepaintIndicator):

  • platform/graphics/ca/PlatformCALayerClient.h:

(WebCore::PlatformCALayerClient::isUsingDisplayListDrawing):

  • platform/graphics/ca/TileGrid.cpp:

(WebCore::TileGrid::platformCALayerShowRepaintCounter):
(WebCore::TileGrid::isUsingDisplayListDrawing):

  • platform/graphics/ca/TileGrid.h:
  • platform/graphics/displaylists/DisplayList.h: Sadly need to include DisplayListItems.h

to get things to compile. I wasn't able to avoid this even when making functions non-inline.

  • rendering/RenderLayerBacking.cpp:

(WebCore::RenderLayerBacking::createGraphicsLayer):

  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::RenderLayerCompositor):
(WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):

  • rendering/RenderLayerCompositor.h:
8:15 PM Changeset in webkit [194824] by fpizlo@apple.com
  • 4 edits in trunk/Source/JavaScriptCore

Air should support Branch64 with immediates
https://bugs.webkit.org/show_bug.cgi?id=152951

Reviewed by Oliver Hunt.

This doesn't significantly improve performance on any benchmarks, but it's great to get this
obvious omission out of the way.

  • assembler/MacroAssemblerX86_64.h:

(JSC::MacroAssemblerX86_64::branch64):

  • b3/air/AirOpcode.opcodes:
  • b3/testb3.cpp:

(JSC::B3::testPowDoubleByIntegerLoop):
(JSC::B3::testBranch64Equal):
(JSC::B3::testBranch64EqualImm):
(JSC::B3::testBranch64EqualMem):
(JSC::B3::testBranch64EqualMemImm):
(JSC::B3::zero):
(JSC::B3::run):

4:38 PM Changeset in webkit [194823] by Alan Bujtas
  • 3 edits
    2 adds in trunk

REGRESSION (r194426): First email field is not autofilled on amazon.com
https://bugs.webkit.org/show_bug.cgi?id=152945
<rdar://problem/24082914>

Reviewed by Simon Fraser.

r194426 missed marking the m_layoutRoot for layout while converting to full layout (it only marked the new layout root).

Source/WebCore:

Test: fast/forms/multiple-subtree-layout-failure.html

  • page/FrameView.cpp:

(WebCore::FrameView::scheduleRelayoutOfSubtree):

LayoutTests:

  • fast/forms/multiple-subtree-layout-failure-expected.html: Added.
  • fast/forms/multiple-subtree-layout-failure.html: Added.
3:29 PM Changeset in webkit [194822] by Michael Catanzaro
  • 2 edits in trunk/Source/WebCore/platform/gtk/po

[l10n] Updated Turkish translation of WebKitGTK+
https://bugs.webkit.org/show_bug.cgi?id=152948

"Reviewed" by Michael Catanzaro.

Patch by Muhammet Kara <muhammetk@gmail.com> on 2016-01-09

  • tr.po:
12:13 PM Changeset in webkit [194821] by mitz@apple.com
  • 23 edits in trunk/Source

[Cocoa] Allow overriding the frameworks directory independently of using a staging install path
https://bugs.webkit.org/show_bug.cgi?id=152926

Reviewed by Tim Horton.

Introduce a new build setting, WK_OVERRIDE_FRAMEWORKS_DIR. When not empty, it determines
where the frameworks are installed. Setting USE_STAGING_INSTALL_PATH to YES sets
WK_OVERRIDE_FRAMEWORKS_DIR to $(SYSTEM_LIBRARY_DIR)/StagedFrameworks/Safari.

Account for the possibility of WK_OVERRIDE_FRAMEWORKS_DIR containing spaces.

Source/JavaScriptCore:

  • Configurations/Base.xcconfig:
  • Replace STAGED_FRAMEWORKS_SEARCH_PATH in FRAMEWORK_SEARCH_PATHS with WK_OVERRIDE_FRAMEWORKS_DIR and add quotes to account for spaces.
  • Define JAVASCRIPTCORE_FRAMEWORKS_DIR based on WK_OVERRIDE_FRAMEWORKS_DIR.
  • Configurations/JSC.xcconfig: Add quotes to account for spaces.
  • Configurations/ToolExecutable.xcconfig: Ditto.
  • postprocess-headers.sh: Ditto.

Source/ThirdParty:

  • gtest/xcode/Config/General.xcconfig: Add quotes to account for spaces.
  • gtest/xcode/Config/ProductionProject.xcconfig:
  • Replace STAGED_FRAMEWORKS_SEARCH_PATH in FRAMEWORK_SEARCH_PATHS with WK_OVERRIDE_FRAMEWORKS_DIR and add quotes to account for spaces.
  • Define WEBCORE_FRAMEWORKS_DIR based on WK_OVERRIDE_FRAMEWORKS_DIR.

Source/WebCore:

  • Configurations/WebCore.xcconfig:
  • Replace STAGED_FRAMEWORKS_SEARCH_PATH in FRAMEWORK_SEARCH_PATHS with WK_OVERRIDE_FRAMEWORKS_DIR and add quotes to account for spaces.
  • Define WEBCORE_FRAMEWORKS_DIR and PRODUCTION_FRAMEWORKS_DIR based on WK_OVERRIDE_FRAMEWORKS_DIR.
  • WebCore.xcodeproj/project.pbxproj: Work around make’s inability to handle spaces in paths by creating a symlink to JAVASCRIPTCORE_PRIVATE_HEADERS_DIR under BUILT_PRODUCTS_DIR and using the symlink as the value of JavaScriptCore_SCRIPTS_DIR.

Source/WebInspectorUI:

  • Configurations/Base.xcconfig:
  • Replace STAGED_FRAMEWORKS_SEARCH_PATH in FRAMEWORK_SEARCH_PATHS with WK_OVERRIDE_FRAMEWORKS_DIR and add quotes to account for spaces.
  • Configurations/WebInspectorUIFramework.xcconfig:
  • Define INSTALL_PATH and PRODUCTION_FRAMEWORKS_DIR based on WK_OVERRIDE_FRAMEWORKS_DIR.

Source/WebKit/mac:

  • Configurations/WebKitLegacy.xcconfig:
  • Replace STAGED_FRAMEWORKS_SEARCH_PATH in FRAMEWORK_SEARCH_PATHS with WK_OVERRIDE_FRAMEWORKS_DIR and add quotes to account for spaces.
  • Define WEBKIT_LEGACY_FRAMEWORKS_DIR, PRODUCTION_FRAMEWORKS_DIR, and WEBCORE_PRIVATE_HEADERS_DIR based on WK_OVERRIDE_FRAMEWORKS_DIR.
  • MigrateHeaders.make: Use a symlink under BUILT_PRODUCTS_DIR to the WebCore Private Headers. Use a BUILT_PRODUCTS_DIR-based path to the framework instead of a TARGET_BUILD_DIR-based one in order to avoid spaces.
  • migrate-headers.sh: Make the symlink to WEBCORE_PRIVATE_HEADERS_DIR that the makefile now uses.

Source/WebKit2:

  • Configurations/BaseTarget.xcconfig:
  • Add quotes to account for spaces.
  • Define WEBKIT_FRAMEWORKS_DIR and UMBRELLA_FRAMEWORKS_DIR based on WK_OVERRIDE_FRAMEWORKS_DIR.
  • WebKit2.xcodeproj/project.pbxproj:
  • In the Migrate WebKitLegacy Headers build phase, work around make’s inability to handle spaces in paths by creating a symlink to WEBKIT_LEGACY_PRIVATE_HEADERS_DIR under BUILT_PRODUCTS_DIR and using the symlink as the value of WEBKIT_LEGACY_PRIVATE_HEADERS_DIR.
  • In the Postprocess WKBase.h and Postprocess WKFoundation.h build phases, add quotes to account for spaces.
  • mac/MigrateHeadersFromWebKitLegacy.make: Use a BUILT_PRODUCTS_DIR-based path to the framework instead of a TARGET_BUILD_DIR-based one in order to avoid spaces.
  • mac/postprocess-framework-headers.sh: Add quotes to account for spaces.
7:23 AM Changeset in webkit [194820] by mark.lam@apple.com
  • 5 edits in trunk/Source/JavaScriptCore

The FTL allocated spill slots for BinaryOps is sometimes inaccurate.
https://bugs.webkit.org/show_bug.cgi?id=152918

Reviewed by Filip Pizlo and Saam Barati.

  • ftl/FTLCompile.cpp:
  • Updated a comment.
  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::DFG::LowerDFGToLLVM::lower):

  • The code to compute maxNumberOfCatchSpills was unnecessarily allocating an extra slot for BinaryOps that don't have Untyped operands, and failing to allocate that extra slot for some binary ops. This is now fixed.
  • tests/stress/ftl-shr-exception.js:
  • tests/stress/ftl-xor-exception.js:
  • Un-skipped these tests. They now pass with this patch.
5:13 AM Changeset in webkit [194819] by akling@apple.com
  • 176 edits in trunk/Source

Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL
<https://webkit.org/b/152902>

Reviewed by Anders Carlsson.

Source/JavaScriptCore:

Mostly mechanical conversion to NeverDestroyed throughout JavaScriptCore.

  • API/JSAPIWrapperObject.mm:

(jsAPIWrapperObjectHandleOwner):

  • API/JSManagedValue.mm:

(managedValueHandleOwner):

  • inspector/agents/InspectorDebuggerAgent.cpp:

(Inspector::objectGroupForBreakpointAction):

  • jit/ExecutableAllocator.cpp:

(JSC::DemandExecutableAllocator::allocators):

Source/WebCore:

Mostly mechanical conversion to NeverDestroyed throughout WebCore.

  • Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:

(WebCore::stringForPlaybackTargetAvailability):

  • Modules/indexeddb/IDBCursor.cpp:

(WebCore::IDBCursor::directionNext):
(WebCore::IDBCursor::directionNextUnique):
(WebCore::IDBCursor::directionPrev):
(WebCore::IDBCursor::directionPrevUnique):

  • Modules/indexeddb/IDBTransaction.cpp:

(WebCore::IDBTransaction::modeReadOnly):
(WebCore::IDBTransaction::modeReadWrite):
(WebCore::IDBTransaction::modeVersionChange):
(WebCore::IDBTransaction::modeReadOnlyLegacy):
(WebCore::IDBTransaction::modeReadWriteLegacy):

  • Modules/indexeddb/legacy/LegacyRequest.cpp:

(WebCore::LegacyRequest::readyState):

  • Modules/mediacontrols/MediaControlsHost.cpp:

(WebCore::MediaControlsHost::automaticKeyword):
(WebCore::MediaControlsHost::forcedOnlyKeyword):
(WebCore::MediaControlsHost::alwaysOnKeyword):
(WebCore::MediaControlsHost::externalDeviceType):

  • Modules/mediasource/MediaSource.cpp:

(WebCore::MediaSource::openKeyword):
(WebCore::MediaSource::closedKeyword):
(WebCore::MediaSource::endedKeyword):
(WebCore::MediaSource::streamEndedWithError):

  • Modules/plugins/QuickTimePluginReplacement.mm:

(WebCore::quickTimePluginReplacementScript):
(WebCore::QuickTimePluginReplacement::supportsMimeType):
(WebCore::QuickTimePluginReplacement::supportsFileExtension):

  • Modules/speech/SpeechSynthesis.cpp:

(WebCore::SpeechSynthesis::boundaryEventOccurred):

  • bindings/js/JSCSSStyleDeclarationCustom.cpp:

(WebCore::cssPropertyIDForJSCSSPropertyName):

  • bridge/c/c_instance.cpp:

(JSC::Bindings::globalExceptionString):

  • css/MediaList.cpp:

(WebCore::addResolutionWarningMessageToConsole):

  • css/StyleSheetContents.cpp:

(WebCore::StyleSheetContents::parseAuthorStyleSheet):

  • dom/ChildListMutationScope.cpp:

(WebCore::accumulatorMap):

  • dom/DOMImplementation.cpp:

(WebCore::isSupportedSVG10Feature):
(WebCore::isSupportedSVG11Feature):

  • dom/Document.cpp:

(WebCore::Document::readyState):

  • dom/Element.cpp:

(WebCore::Element::webkitRegionOverset):

  • dom/EventDispatcher.cpp:

(WebCore::EventDispatcher::dispatchSimulatedClick):

  • dom/InlineStyleSheetOwner.cpp:

(WebCore::isValidCSSContentType):

  • dom/MutationObserver.cpp:

(WebCore::activeMutationObservers):
(WebCore::suspendedMutationObservers):

  • dom/MutationRecord.cpp:
  • dom/PseudoElement.cpp:

(WebCore::pseudoElementTagName):
(WebCore::PseudoElement::pseudoElementNameForEvents):

  • dom/QualifiedName.cpp:

(WebCore::qualifiedNameCache):
(WebCore::nullQName):

  • dom/ScriptElement.cpp:

(WebCore::isLegacySupportedJavaScriptLanguage):
(WebCore::ScriptElement::notifyFinished):

  • editing/ApplyStyleCommand.cpp:

(WebCore::styleSpanClassString):

  • editing/MarkupAccumulator.cpp:

(WebCore::MarkupAccumulator::shouldAddNamespaceElement):

  • editing/ReplaceSelectionCommand.cpp:

(WebCore::isInterchangeNewlineNode):
(WebCore::isInterchangeConvertedSpaceSpan):

  • editing/htmlediting.cpp:

(WebCore::nonBreakingSpaceString):

  • editing/markup.cpp:

(WebCore::StyledMarkupAccumulator::styleNodeCloseTag):
(WebCore::createMarkupInternal):

  • fileapi/Blob.cpp:

(WebCore::BlobURLRegistry::registry):

  • html/BaseChooserOnlyDateAndTimeInputType.cpp:

(WebCore::BaseChooserOnlyDateAndTimeInputType::createShadowSubtree):

  • html/DateInputType.cpp:

(WebCore::DateInputType::createStepRange):

  • html/DateTimeInputType.cpp:

(WebCore::DateTimeInputType::createStepRange):

  • html/DateTimeLocalInputType.cpp:

(WebCore::DateTimeLocalInputType::createStepRange):

  • html/EmailInputType.cpp:

(WebCore::isValidEmailAddress):

  • html/FormController.cpp:

(WebCore::FormKeyGenerator::formKey):
(WebCore::formStateSignature):

  • html/HTMLAnchorElement.cpp:

(WebCore::rootEditableElementMap):

  • html/HTMLButtonElement.cpp:

(WebCore::HTMLButtonElement::formControlType):

  • html/HTMLFieldSetElement.cpp:

(WebCore::HTMLFieldSetElement::formControlType):

  • html/HTMLFrameOwnerElement.h:

(WebCore::SubframeLoadingDisabler::disabledSubtreeRoots):

  • html/HTMLKeygenElement.cpp:

(WebCore::HTMLKeygenElement::formControlType):

  • html/HTMLLinkElement.cpp:

(WebCore::linkLoadEventSender):

  • html/HTMLMediaElement.cpp:

(WebCore::documentToElementSetMap):

  • html/HTMLObjectElement.cpp:

(WebCore::isRecognizedTagName):

  • html/HTMLOptGroupElement.cpp:

(WebCore::HTMLOptGroupElement::formControlType):

  • html/HTMLOutputElement.cpp:

(WebCore::HTMLOutputElement::formControlType):

  • html/HTMLPlugInElement.cpp:

(WebCore::registeredPluginReplacements):

  • html/HTMLPlugInImageElement.cpp:

(WebCore::titleText):
(WebCore::subtitleText):
(WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay):

  • html/HTMLSelectElement.cpp:

(WebCore::HTMLSelectElement::formControlType):

  • html/HTMLStyleElement.cpp:

(WebCore::styleLoadEventSender):

  • html/HTMLTextAreaElement.cpp:

(WebCore::HTMLTextAreaElement::formControlType):

  • html/HTMLTextFormControlElement.cpp:

(WebCore::directionString):

  • html/ImageInputType.cpp:

(WebCore::ImageInputType::appendFormData):

  • html/InputTypeNames.cpp:

(WebCore::InputTypeNames::button):
(WebCore::InputTypeNames::checkbox):
(WebCore::InputTypeNames::color):
(WebCore::InputTypeNames::date):
(WebCore::InputTypeNames::datetime):
(WebCore::InputTypeNames::datetimelocal):
(WebCore::InputTypeNames::email):
(WebCore::InputTypeNames::file):
(WebCore::InputTypeNames::hidden):
(WebCore::InputTypeNames::image):
(WebCore::InputTypeNames::month):
(WebCore::InputTypeNames::number):
(WebCore::InputTypeNames::password):
(WebCore::InputTypeNames::radio):
(WebCore::InputTypeNames::range):
(WebCore::InputTypeNames::reset):
(WebCore::InputTypeNames::search):
(WebCore::InputTypeNames::submit):
(WebCore::InputTypeNames::telephone):
(WebCore::InputTypeNames::text):
(WebCore::InputTypeNames::time):
(WebCore::InputTypeNames::url):
(WebCore::InputTypeNames::week):

  • html/MediaController.cpp:

(playbackStateWaiting):
(playbackStatePlaying):
(playbackStateEnded):

  • html/MonthInputType.cpp:

(WebCore::MonthInputType::createStepRange):

  • html/NumberInputType.cpp:

(WebCore::NumberInputType::createStepRange):

  • html/RangeInputType.cpp:

(WebCore::RangeInputType::createStepRange):

  • html/StepRange.cpp:

(WebCore::StepRange::acceptableError):
(WebCore::StepRange::alignValueForStep):
(WebCore::StepRange::stepMismatch):

  • html/TimeInputType.cpp:

(WebCore::TimeInputType::createStepRange):

  • html/WeekInputType.cpp:

(WebCore::WeekInputType::createStepRange):

  • html/canvas/CanvasRenderingContext2D.cpp:

(WebCore::CanvasRenderingContext2D::getImageData):

  • html/parser/XSSAuditor.cpp:

(WebCore::XSSAuditor::init):
(WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):

  • html/shadow/MediaControlElements.cpp:

(WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
(WebCore::getMediaControlTimeRemainingDisplayElementShadowPseudoId):
(WebCore::getMediaControlCurrentTimeDisplayElementShadowPseudoId):

  • html/shadow/MeterShadowElement.cpp:

(WebCore::MeterInnerElement::MeterInnerElement):
(WebCore::MeterValueElement::valuePseudoId):

  • html/shadow/MeterShadowElement.h:
  • html/shadow/SliderThumbElement.cpp:

(WebCore::sliderThumbShadowPseudoId):
(WebCore::mediaSliderThumbShadowPseudoId):
(WebCore::SliderContainerElement::shadowPseudoId):

  • html/track/AudioTrack.cpp:

(WebCore::AudioTrack::alternativeKeyword):
(WebCore::AudioTrack::descriptionKeyword):
(WebCore::AudioTrack::mainKeyword):
(WebCore::AudioTrack::mainDescKeyword):
(WebCore::AudioTrack::translationKeyword):
(WebCore::AudioTrack::commentaryKeyword):

  • html/track/TextTrack.cpp:

(WebCore::TextTrack::subtitlesKeyword):
(WebCore::TextTrack::captionsKeyword):
(WebCore::TextTrack::descriptionsKeyword):
(WebCore::TextTrack::chaptersKeyword):
(WebCore::TextTrack::metadataKeyword):
(WebCore::TextTrack::forcedKeyword):
(WebCore::TextTrack::disabledKeyword):
(WebCore::TextTrack::hiddenKeyword):
(WebCore::TextTrack::showingKeyword):

  • html/track/TextTrackCue.h:

(WebCore::TextTrackCue::cueShadowPseudoId):

  • html/track/VTTCue.cpp:

(WebCore::startKeyword):
(WebCore::middleKeyword):
(WebCore::endKeyword):
(WebCore::leftKeyword):
(WebCore::rightKeyword):
(WebCore::verticalGrowingLeftKeyword):
(WebCore::verticalGrowingRightKeyword):
(WebCore::VTTCueBox::vttCueBoxShadowPseudoId):
(WebCore::VTTCue::cueBackdropShadowPseudoId):
(WebCore::VTTCue::determineTextDirection):
(WebCore::VTTCue::markFutureAndPastNodes):

  • html/track/VTTRegion.cpp:

(WebCore::VTTRegion::scroll):
(WebCore::VTTRegion::setScroll):
(WebCore::VTTRegion::parseSettingValue):
(WebCore::VTTRegion::textTrackCueContainerScrollingClass):

  • html/track/VideoTrack.cpp:

(WebCore::VideoTrack::alternativeKeyword):
(WebCore::VideoTrack::captionsKeyword):
(WebCore::VideoTrack::mainKeyword):
(WebCore::VideoTrack::signKeyword):
(WebCore::VideoTrack::subtitlesKeyword):
(WebCore::VideoTrack::commentaryKeyword):

  • html/track/WebVTTElement.cpp:

(WebCore::nodeTypeToTagName):

  • html/track/WebVTTElement.h:
  • html/track/WebVTTParser.cpp:

(WebCore::WebVTTParser::collectMetadataHeader):

  • inspector/InspectorCSSAgent.cpp:

(WebCore::computePseudoClassMask):

  • inspector/InspectorPageAgent.cpp:

(WebCore::InspectorPageAgent::sourceMapURLForResource):

  • inspector/InspectorStyleSheet.cpp:

(WebCore::selectorsFromSource):

  • inspector/PageDebuggerAgent.cpp:

(WebCore::PageDebuggerAgent::sourceMapURLForScript):

  • loader/ImageLoader.cpp:

(WebCore::ImageLoader::notifyFinished):

  • loader/TextTrackLoader.cpp:

(WebCore::TextTrackLoader::corsPolicyPreventedLoad):

  • loader/cache/CachedResourceRequest.cpp:

(WebCore::CachedResourceRequest::initiatorName):

  • loader/icon/IconDatabase.cpp:

(WebCore::IconDatabase::defaultDatabaseFilename):

  • page/CaptionUserPreferences.cpp:

(WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride):

  • page/CaptionUserPreferencesMediaAF.cpp:

(WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS):
(WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS):

  • page/ContentSecurityPolicy.cpp:

(WebCore::CSPDirectiveList::allowJavaScriptURLs):
(WebCore::CSPDirectiveList::allowInlineEventHandlers):
(WebCore::CSPDirectiveList::allowInlineScript):
(WebCore::CSPDirectiveList::allowInlineStyle):
(WebCore::CSPDirectiveList::allowEval):
(WebCore::ContentSecurityPolicy::reportUnsupportedDirective):

  • page/DOMWindow.cpp:

(WebCore::windowsWithUnloadEventListeners):
(WebCore::windowsWithBeforeUnloadEventListeners):

  • page/EventHandler.cpp:

(WebCore::EventHandler::dragState):
(WebCore::focusDirectionForKey):

  • page/Frame.cpp:

(WebCore::createRegExpForLabels):

  • page/NavigatorBase.cpp:

(WebCore::NavigatorBase::platform):

  • page/PageVisibilityState.cpp:

(WebCore::pageVisibilityStateString):

  • page/SecurityPolicy.cpp:

(WebCore::originAccessMap):

  • page/UserContentURLPattern.cpp:

(WebCore::UserContentURLPattern::parse):

  • page/animation/CSSPropertyAnimation.cpp:

(WebCore::shadowForBlending):

  • page/animation/CompositeAnimation.cpp:

(WebCore::CompositeAnimation::updateKeyframeAnimations):

  • platform/Cursor.cpp:

(WebCore::pointerCursor):
(WebCore::crossCursor):
(WebCore::handCursor):
(WebCore::moveCursor):
(WebCore::verticalTextCursor):
(WebCore::cellCursor):
(WebCore::contextMenuCursor):
(WebCore::aliasCursor):
(WebCore::zoomInCursor):
(WebCore::zoomOutCursor):
(WebCore::copyCursor):
(WebCore::noneCursor):
(WebCore::progressCursor):
(WebCore::noDropCursor):
(WebCore::notAllowedCursor):
(WebCore::iBeamCursor):
(WebCore::waitCursor):
(WebCore::helpCursor):
(WebCore::eastResizeCursor):
(WebCore::northResizeCursor):
(WebCore::northEastResizeCursor):
(WebCore::northWestResizeCursor):
(WebCore::southResizeCursor):
(WebCore::southEastResizeCursor):
(WebCore::southWestResizeCursor):
(WebCore::westResizeCursor):
(WebCore::northSouthResizeCursor):
(WebCore::eastWestResizeCursor):
(WebCore::northEastSouthWestResizeCursor):
(WebCore::northWestSouthEastResizeCursor):
(WebCore::columnResizeCursor):
(WebCore::rowResizeCursor):
(WebCore::middlePanningCursor):
(WebCore::eastPanningCursor):
(WebCore::northPanningCursor):
(WebCore::northEastPanningCursor):
(WebCore::northWestPanningCursor):
(WebCore::southPanningCursor):
(WebCore::southEastPanningCursor):
(WebCore::southWestPanningCursor):
(WebCore::westPanningCursor):
(WebCore::grabCursor):
(WebCore::grabbingCursor):

  • platform/Language.cpp:

(WebCore::preferredLanguagesOverride):

  • platform/LocalizedStrings.cpp:

(WebCore::truncatedStringForLookupMenuItem):

  • platform/MIMETypeRegistry.cpp:

(WebCore::mediaMIMETypeMap):
(WebCore::defaultMIMEType):

  • platform/SchemeRegistry.cpp:

(WebCore::localURLSchemes):
(WebCore::displayIsolatedURLSchemes):
(WebCore::secureSchemes):
(WebCore::schemesWithUniqueOrigins):
(WebCore::emptyDocumentSchemes):
(WebCore::schemesForbiddenFromDomainRelaxation):
(WebCore::canDisplayOnlyIfCanRequestSchemes):
(WebCore::notAllowingJavascriptURLsSchemes):
(WebCore::schemesAllowingLocalStorageAccessInPrivateBrowsing):
(WebCore::schemesAllowingDatabaseAccessInPrivateBrowsing):
(WebCore::CORSEnabledSchemes):
(WebCore::ContentSecurityPolicyBypassingSchemes):

  • platform/ScrollbarTheme.cpp:

(WebCore::ScrollbarTheme::theme):

  • platform/URL.cpp:

(WebCore::blankURL):

  • platform/animation/Animation.cpp:

(WebCore::Animation::initialName):

  • platform/audio/AudioSession.cpp:

(WebCore::AudioSession::sharedSession):

  • platform/audio/AudioSession.h:
  • platform/audio/HRTFElevation.cpp:

(WebCore::getConcatenatedImpulseResponsesForSubject):

  • platform/audio/ios/AudioDestinationIOS.cpp:

(WebCore::audioDestinations):

  • platform/graphics/GraphicsLayer.cpp:

(WebCore::repaintRectMap):

  • platform/graphics/ImageBuffer.cpp:

(WebCore::ImageBuffer::transformColorSpace):

  • platform/graphics/MediaPlayer.cpp:

(WebCore::applicationOctetStream):
(WebCore::textPlain):
(WebCore::codecs):

  • platform/graphics/ShadowBlur.cpp:

(WebCore::ScratchBuffer::singleton):

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::playerToPrivateMap):

  • platform/graphics/filters/SourceAlpha.cpp:

(WebCore::SourceAlpha::effectName):

  • platform/graphics/filters/SourceGraphic.cpp:

(WebCore::SourceGraphic::effectName):

  • platform/graphics/mac/MediaPlayerPrivateQTKit.mm:

(WebCore::mimeCommonTypesCache):
(WebCore::mimeModernTypesCache):

  • platform/ios/CursorIOS.cpp:

(WebCore::cursor):

  • platform/ios/TileControllerMemoryHandlerIOS.cpp:

(WebCore::tileControllerMemoryHandler):

  • platform/ios/WebCoreMotionManager.mm:

(+[WebCoreMotionManager sharedManager]):

  • platform/ios/WebVideoFullscreenModelVideoElement.mm:

(WebVideoFullscreenModelVideoElement::updateForEventName):

  • platform/ios/wak/WKContentObservation.cpp:

(WebThreadGetObservedContentModifiers):

  • platform/mac/DragImageMac.mm:

(WebCore::fontFromNSFont):

  • platform/mac/ThemeMac.mm:

(WebCore::platformTheme):

  • platform/mac/ThreadCheck.mm:

(WebCoreReportThreadViolation):

  • platform/mediastream/mac/AVCaptureDeviceManager.h:
  • platform/mediastream/mac/AVCaptureDeviceManager.mm:

(WebCore::AVCaptureDeviceManager::singleton):

  • platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:

(WebCore::RealtimeMediaSourceCenter::platformCenter):

  • platform/mock/mediasource/MockBox.cpp:

(WebCore::MockTrackBox::type):
(WebCore::MockInitializationBox::type):
(WebCore::MockSampleBox::type):

  • platform/network/HTTPParsers.cpp:

(WebCore::parseXSSProtectionHeader):

  • platform/network/ResourceHandle.cpp:

(WebCore::builtinResourceHandleConstructorMap):
(WebCore::builtinResourceHandleSynchronousLoaderMap):

  • platform/network/cf/ResourceHandleCFNet.cpp:

(WebCore::allowsAnyHTTPSCertificateHosts):
(WebCore::clientCerts):

  • platform/text/AtomicStringKeyedMRUCache.h:

(WebCore::AtomicStringKeyedMRUCache::get):

  • platform/text/cf/HyphenationCF.cpp:

(WebCore::cfLocaleCache):

  • rendering/RenderBlock.cpp:

(WebCore::continuationOutlineTable):

  • rendering/RenderCounter.cpp:

(WebCore::counterMaps):

  • rendering/RenderDeprecatedFlexibleBox.cpp:

(WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):

  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::drawPlatformResizerImage):

  • rendering/RenderScrollbarTheme.cpp:

(WebCore::RenderScrollbarTheme::renderScrollbarTheme):

  • rendering/RenderTheme.cpp:

(WebCore::customFocusRingColor):

  • rendering/RenderWidget.cpp:

(WebCore::WidgetHierarchyUpdatesSuspensionScope::widgetNewParentMap):

  • rendering/shapes/ShapeOutsideInfo.h:
  • rendering/style/RenderStyle.cpp:

(WebCore::RenderStyle::hyphenString):
(WebCore::RenderStyle::textEmphasisMarkString):
(WebCore::RenderStyle::initialDashboardRegions):
(WebCore::RenderStyle::noneDashboardRegions):

  • rendering/style/RenderStyle.h:
  • rendering/svg/RenderSVGPath.cpp:

(WebCore::RenderSVGPath::zeroLengthLinecapPath):

  • rendering/svg/RenderSVGShape.cpp:

(WebCore::RenderSVGShape::nonScalingStrokePath):

  • rendering/svg/SVGRenderingContext.cpp:

(WebCore::currentContentTransformation):

  • rendering/svg/SVGResources.cpp:

(WebCore::clipperFilterMaskerTags):
(WebCore::markerTags):
(WebCore::fillAndStrokeTags):
(WebCore::chainableResourceTags):

  • svg/SVGAngle.cpp:

(WebCore::SVGAngle::valueAsString):

  • svg/SVGAnimateColorElement.cpp:

(WebCore::attributeValueIsCurrentColor):

  • svg/SVGAnimateMotionElement.cpp:

(WebCore::SVGAnimateMotionElement::rotateMode):

  • svg/SVGAnimationElement.cpp:

(WebCore::SVGAnimationElement::setCalcMode):
(WebCore::SVGAnimationElement::setAttributeType):
(WebCore::SVGAnimationElement::isAdditive):
(WebCore::SVGAnimationElement::isAccumulated):
(WebCore::inheritsFromProperty):

  • svg/SVGFEConvolveMatrixElement.cpp:

(WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthXIdentifier):
(WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthYIdentifier):
(WebCore::SVGFEConvolveMatrixElement::orderXIdentifier):
(WebCore::SVGFEConvolveMatrixElement::orderYIdentifier):

  • svg/SVGFEDiffuseLightingElement.cpp:

(WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthXIdentifier):
(WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthYIdentifier):

  • svg/SVGFEDropShadowElement.cpp:

(WebCore::SVGFEDropShadowElement::stdDeviationXIdentifier):
(WebCore::SVGFEDropShadowElement::stdDeviationYIdentifier):

  • svg/SVGFEGaussianBlurElement.cpp:

(WebCore::SVGFEGaussianBlurElement::stdDeviationXIdentifier):
(WebCore::SVGFEGaussianBlurElement::stdDeviationYIdentifier):

  • svg/SVGFEMorphologyElement.cpp:

(WebCore::SVGFEMorphologyElement::radiusXIdentifier):
(WebCore::SVGFEMorphologyElement::radiusYIdentifier):

  • svg/SVGFESpecularLightingElement.cpp:

(WebCore::SVGFESpecularLightingElement::kernelUnitLengthXIdentifier):
(WebCore::SVGFESpecularLightingElement::kernelUnitLengthYIdentifier):

  • svg/SVGFETurbulenceElement.cpp:

(WebCore::SVGFETurbulenceElement::baseFrequencyXIdentifier):
(WebCore::SVGFETurbulenceElement::baseFrequencyYIdentifier):

  • svg/SVGFilterElement.cpp:

(WebCore::SVGFilterElement::filterResXIdentifier):
(WebCore::SVGFilterElement::filterResYIdentifier):

  • svg/SVGGlyphMap.h:

(WebCore::SVGGlyphMap::svgGlyphForGlyph):

  • svg/SVGLangSpace.cpp:

(WebCore::SVGLangSpace::xmlspace):
(WebCore::SVGLangSpace::addSupportedAttributes):

  • svg/SVGMarkerElement.cpp:

(WebCore::SVGMarkerElement::orientTypeIdentifier):
(WebCore::SVGMarkerElement::orientAngleIdentifier):
(WebCore::SVGMarkerElement::synchronizeOrientType):

  • svg/SVGStyleElement.cpp:

(WebCore::SVGStyleElement::type):
(WebCore::SVGStyleElement::media):

  • svg/SVGTransform.cpp:

(WebCore::SVGTransform::transformTypePrefixForParsing):

  • svg/SVGViewSpec.cpp:

(WebCore::SVGViewSpec::viewBoxIdentifier):
(WebCore::SVGViewSpec::preserveAspectRatioIdentifier):
(WebCore::SVGViewSpec::transformIdentifier):

  • svg/animation/SVGSMILElement.cpp:

(WebCore::SVGSMILElement::parseClockValue):
(WebCore::SVGSMILElement::isSupportedAttribute):
(WebCore::SVGSMILElement::restart):
(WebCore::SVGSMILElement::fill):
(WebCore::SVGSMILElement::repeatCount):
(WebCore::SVGSMILElement::notifyDependentsIntervalChanged):

Source/WTF:

Mostly mechanical conversion to NeverDestroyed throughout WTF.

  • wtf/RunLoop.cpp:

(WTF::RunLoop::current):

  • wtf/ThreadingPthreads.cpp:

(WTF::threadMapMutex):
(WTF::threadMap):

Note: See TracTimeline for information about the timeline view.