| 2016-10-25 Mark Lam <mark.lam@apple.com> |
| |
| String.prototype.replace() should throw an OutOfMemoryError when using too much memory. |
| https://bugs.webkit.org/show_bug.cgi?id=163996 |
| <rdar://problem/28263117> |
| |
| Reviewed by Geoffrey Garen. |
| |
| * wtf/Vector.h: |
| (WTF::minCapacity>::tryConstructAndAppend): |
| (WTF::minCapacity>::tryConstructAndAppendSlowCase): |
| - Added try versions of constructAndAppend() so that we can handle the failure |
| to allocate more gracefully. |
| |
| 2016-10-25 Konstantin Tokarev <annulen@yandex.ru> |
| |
| Non-specialized version of deleteObject should not have template argument |
| https://bugs.webkit.org/show_bug.cgi?id=163943 |
| |
| Reviewed by Anders Carlsson. |
| |
| Fixes compilation of GDIObject.h with MinGW |
| |
| * wtf/win/GDIObject.h: |
| (WTF::deleteObject): |
| |
| 2016-10-24 Per Arne Vollan <pvollan@apple.com> |
| |
| [Win] CMake build type is not set. |
| https://bugs.webkit.org/show_bug.cgi?id=163917 |
| |
| Reviewed by Alex Christensen. |
| |
| The CMAKE_BUILD_TYPE variable should be set to Debug or Release. |
| |
| * WTF.vcxproj/WTF.proj: |
| |
| 2016-10-23 Yusuke Suzuki <utatane.tea@gmail.com> |
| |
| [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects |
| https://bugs.webkit.org/show_bug.cgi?id=163657 |
| |
| Reviewed by Saam Barati. |
| |
| Simplify nonEmptyRangesOverlap. |
| |
| * wtf/MathExtras.h: |
| (WTF::nonEmptyRangesOverlap): |
| |
| 2016-10-23 Chris Dumez <cdumez@apple.com> |
| |
| Another unreviewed attempt to fix the WatchOS / TvOS build after r207585. |
| <rdar://problem/28902292> |
| |
| Disable USE_CFURLCONNECTION on newer WatchOS / TvOS. |
| |
| * wtf/Platform.h: |
| |
| 2016-10-20 Keith Miller <keith_miller@apple.com> |
| |
| Add support for WASM calls |
| https://bugs.webkit.org/show_bug.cgi?id=161727 |
| |
| Reviewed by Filip Pizlo and Michael Saboff. |
| |
| Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace. |
| |
| * wtf/LEBDecoder.h: |
| (WTF::LEBDecoder::decodeUInt): |
| (WTF::LEBDecoder::decodeUInt32): |
| (WTF::LEBDecoder::decodeUInt64): |
| (WTF::LEBDecoder::decodeInt32): |
| (decodeUInt32): Deleted. |
| (decodeInt32): Deleted. |
| |
| 2016-10-20 Filip Pizlo <fpizlo@apple.com> |
| |
| The tracking of the coarse-grain Heap state (allocating or not, collector or not, eden vs full) should respect the orthogonality between allocating and collecting |
| https://bugs.webkit.org/show_bug.cgi?id=163738 |
| |
| Reviewed by Geoffrey Garen. |
| |
| There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing |
| should know about this. |
| |
| * wtf/MainThread.cpp: |
| (WTF::initializeGCThreads): |
| (WTF::registerGCThread): |
| (WTF::mayBeGCThread): |
| * wtf/MainThread.h: |
| |
| 2016-10-19 Sam Weinig <sam@webkit.org> |
| |
| Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...) |
| https://bugs.webkit.org/show_bug.cgi?id=163713 |
| |
| Reviewed by Dan Bernstein. |
| |
| - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following |
| way: |
| WTF::visit(WTF::makeVisitor(...), variant) |
| |
| * wtf/Variant.h: |
| (WTF::switchOn): |
| |
| 2016-10-19 Alex Christensen <achristensen@webkit.org> |
| |
| Revert r207151 |
| https://bugs.webkit.org/show_bug.cgi?id=163675 |
| |
| Reviewed by Brent Fulgham. |
| |
| * wtf/Platform.h: |
| * wtf/SchedulePair.h: |
| * wtf/SchedulePairMac.mm: |
| |
| 2016-10-19 Filip Pizlo <fpizlo@apple.com> |
| |
| REGRESSION (r207480): 3 Dromaeo tests failing |
| https://bugs.webkit.org/show_bug.cgi?id=163633 |
| |
| Reviewed by Mark Lam. |
| |
| It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking |
| thread will clear our address eventually - but not immediately. This causes a nasty |
| assertion failure. The tricky thing is that when we detect this, we need to wait until that |
| unparking thread does the deed. Otherwise, they will still do it at some later time. |
| |
| Alternatively, we could use some kind of versioning to detect this - increment the version |
| when you park, so that unparking threads will know if they are time travelers. That seems |
| more yucky. |
| |
| I don't think it matters too much what we do here, so long as it's simple and correct, since |
| this requires a race that is rare enough that it didn't happen once in my testing, and I was |
| pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is |
| rare because it requires the timeout to happen right as someone else is unparking. Since |
| it's so rare, its probably OK that the unparked thread waits just a tiny moment until the |
| unparking thread is done. |
| |
| * wtf/ParkingLot.cpp: |
| (WTF::ParkingLot::parkConditionallyImpl): |
| (WTF::ParkingLot::unparkOneImpl): |
| |
| 2016-10-19 Filip Pizlo <fpizlo@apple.com> |
| |
| Baseline JIT should use AutomaticThread |
| https://bugs.webkit.org/show_bug.cgi?id=163686 |
| |
| Reviewed by Geoffrey Garen. |
| |
| Added a AutomaticThreadCondition::wait() method, so that if you really want to use one |
| common condition for your thread and something else, you can do it. This trivially works |
| if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's |
| dangerous, since you don't know who will wake up). |
| |
| The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an |
| optimal way: there are just two threads talking to each other, so it wakes up at most one |
| thread and that thread is exactly the one you want woken up. Adding wait() means that I did |
| not have to change that code. |
| |
| * wtf/AutomaticThread.cpp: |
| (WTF::AutomaticThreadCondition::wait): |
| * wtf/AutomaticThread.h: |
| |
| 2016-10-18 Filip Pizlo <fpizlo@apple.com> |
| |
| DFG worklist should use AutomaticThread |
| https://bugs.webkit.org/show_bug.cgi?id=163615 |
| |
| Reviewed by Mark Lam. |
| |
| This adds new functionality to AutomaticThread to support DFG::Worklist: |
| |
| - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end |
| of a thread's lifetime. This allows Worklist to tie some resources to the life of the |
| thread, and also means that now those resources will naturally free up when the Worklist is |
| not in use. |
| |
| - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We |
| need to know if the Condition woke up anyone. If it didn't, then we need to launch one of |
| our threads. |
| |
| * wtf/AutomaticThread.cpp: |
| (WTF::AutomaticThreadCondition::notifyOne): |
| (WTF::AutomaticThread::ThreadScope::ThreadScope): |
| (WTF::AutomaticThread::ThreadScope::~ThreadScope): |
| (WTF::AutomaticThread::start): |
| (WTF::AutomaticThread::threadDidStart): |
| (WTF::AutomaticThread::threadWillStop): |
| * wtf/AutomaticThread.h: |
| * wtf/Condition.h: |
| (WTF::ConditionBase::notifyOne): |
| |
| 2016-10-18 Sam Weinig <sam@webkit.org> |
| |
| Replace std::experimental::variant with WTF::Variant (or similar) |
| https://bugs.webkit.org/show_bug.cgi?id=163626 |
| |
| Reviewed by Chris Dumez. |
| |
| Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc. |
| into the WTF namespace. |
| |
| * wtf/Forward.h: |
| * wtf/Variant.h: |
| |
| 2016-10-18 Filip Pizlo <fpizlo@apple.com> |
| |
| WTF should make it easier to create threads that die automatically after inactivity |
| https://bugs.webkit.org/show_bug.cgi?id=163576 |
| |
| Reviewed by Andreas Kling. |
| |
| For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel |
| guilty because those threads don't shut down when they are inactive. For example, in bug |
| 163562, I need to add a new GC thread. There will be one of them per VM. This means that a |
| JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's |
| good. |
| |
| A common pattern for all of these threads is that they have some well-defined trigger that |
| causes them to run. This trigger has a lock, a condition variable, some logic that determines |
| if there is work to do, and then of course the logic for the thread's actual work. The thread |
| bodies usually look like this: |
| |
| void Thingy::runThread() |
| { |
| for (;;) { |
| Work work; |
| { |
| LockHolder locker(m_lock); |
| while (!hasWork()) |
| m_cond.wait(m_lock); |
| work = takeWork(); |
| } |
| doWork(work); |
| } |
| } |
| |
| If you look at ParallelHelperPool (the GC's threads) and DFG::Worklist (some of the JIT's |
| threads), you will see this pattern. |
| |
| This change adds a new kind of thread, called AutomaticThread, that lets you write threads to |
| this pattern while getting automatic thread shutdown for free: instead of just waiting on a |
| condition variable, AutomaticThread will have a timeout that causes the thread to die. The |
| condition variable associated with AutomaticThread, called AutomaticThreadCondition, is smart |
| enough to restart any threads that have decided to stop due to inactivity. The inactivity |
| threshold is current just 1 second. |
| |
| In this patch I only adopt AutomaticThread for ParallelHelperPool. I plan to adopt it in more |
| places soon. |
| |
| * WTF.xcodeproj/project.pbxproj: |
| * wtf/AutomaticThread.cpp: Added. |
| (WTF::AutomaticThreadCondition::create): |
| (WTF::AutomaticThreadCondition::AutomaticThreadCondition): |
| (WTF::AutomaticThreadCondition::~AutomaticThreadCondition): |
| (WTF::AutomaticThreadCondition::notifyAll): |
| (WTF::AutomaticThreadCondition::add): |
| (WTF::AutomaticThreadCondition::remove): |
| (WTF::AutomaticThreadCondition::contains): |
| (WTF::AutomaticThread::AutomaticThread): |
| (WTF::AutomaticThread::~AutomaticThread): |
| (WTF::AutomaticThread::join): |
| (WTF::AutomaticThread::start): |
| * wtf/AutomaticThread.h: Added. |
| * wtf/CMakeLists.txt: |
| * wtf/ParallelHelperPool.cpp: |
| (WTF::ParallelHelperClient::ParallelHelperClient): |
| (WTF::ParallelHelperClient::~ParallelHelperClient): |
| (WTF::ParallelHelperClient::setTask): |
| (WTF::ParallelHelperClient::finish): |
| (WTF::ParallelHelperClient::doSomeHelping): |
| (WTF::ParallelHelperClient::runTask): |
| (WTF::ParallelHelperPool::ParallelHelperPool): |
| (WTF::ParallelHelperPool::~ParallelHelperPool): |
| (WTF::ParallelHelperPool::ensureThreads): |
| (WTF::ParallelHelperPool::doSomeHelping): |
| (WTF::ParallelHelperPool::Thread::Thread): |
| (WTF::ParallelHelperPool::didMakeWorkAvailable): |
| (WTF::ParallelHelperPool::helperThreadBody): Deleted. |
| (WTF::ParallelHelperPool::waitForClientWithTask): Deleted. |
| * wtf/ParallelHelperPool.h: |
| |
| 2016-10-18 Said Abou-Hallawa <sabouhallawa@apple.com> |
| |
| SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property |
| https://bugs.webkit.org/show_bug.cgi?id=116470 |
| |
| Reviewed by Simon Fraser. |
| |
| * wtf/TemporaryChange.h: |
| (WTF::TemporaryChange::TemporaryChange): |
| Add a new constructor to make TemporaryChange work as a restorer. The |
| temporary change will happen after we construct the object. |
| |
| 2016-10-17 Simon Fraser <simon.fraser@apple.com> |
| |
| Implement DOMRect/DOMRectReadOnly |
| https://bugs.webkit.org/show_bug.cgi?id=163464 |
| |
| Reviewed by Darin Adler. |
| |
| Implement min()/max() in a way that follows Math.min/Math.max, which return |
| NaN if either argument is NaN. |
| |
| * wtf/MathExtras.h: |
| (WTF::nanPropagatingMin): |
| (WTF::nanPropagatingMax): |
| |
| 2016-10-15 Sam Weinig <sam@webkit.org> |
| |
| MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget? |
| https://bugs.webkit.org/show_bug.cgi?id=163475 |
| |
| Reviewed by Simon Fraser. |
| |
| * wtf/Variant.h: |
| Add missing return statement that was tripping up some compilers. |
| |
| 2016-10-12 Ryan Haddad <ryanhaddad@apple.com> |
| |
| Unreviewed, rolling out r207225. |
| |
| This change causes debug tests to exit early with crashes. |
| |
| Reverted changeset: |
| |
| "Optional's move-constructor and move-assignment operator |
| don't disengage the value being moved from" |
| https://bugs.webkit.org/show_bug.cgi?id=163309 |
| http://trac.webkit.org/changeset/207225 |
| |
| 2016-10-11 Sam Weinig <sam@webkit.org> |
| |
| Optional's move-constructor and move-assignment operator don't disengage the value being moved from |
| https://bugs.webkit.org/show_bug.cgi?id=163309 |
| |
| Reviewed by Anders Carlsson. |
| |
| * wtf/Optional.h: |
| (WTF::Optional::Optional): |
| (WTF::Optional::operator=): |
| Disengage 'other' on move-construction and move-assignment. |
| |
| 2016-10-08 Filip Pizlo <fpizlo@apple.com> |
| |
| MarkedBlock should know what objects are live during marking |
| https://bugs.webkit.org/show_bug.cgi?id=162309 |
| |
| Reviewed by Geoffrey Garen. |
| |
| This removes the atomicity mode, because it's not really used: it only affects the |
| concurrentBlah methods, but their only users turn on atomicity. This was useful because |
| previously, some binary Bitmap methods (like merge(const Bitmap&)) couldn't be used |
| effectively in the GC because some of the GC's bitmaps set the atomic mode and some didn't. |
| Removing this useless mode is the best solution. |
| |
| Also added some new binary Bitmap methods: mergeAndClear(Bitmap& other) and |
| setAndClear(Bitmap& other). They perform their action on 'this' (either merge or set, |
| respectively) while also clearing the contents of 'other'. This is great for one of the GC |
| hot paths. |
| |
| * wtf/Bitmap.h: |
| (WTF::WordType>::Bitmap): |
| (WTF::WordType>::get): |
| (WTF::WordType>::set): |
| (WTF::WordType>::testAndSet): |
| (WTF::WordType>::testAndClear): |
| (WTF::WordType>::concurrentTestAndSet): |
| (WTF::WordType>::concurrentTestAndClear): |
| (WTF::WordType>::clear): |
| (WTF::WordType>::clearAll): |
| (WTF::WordType>::nextPossiblyUnset): |
| (WTF::WordType>::findRunOfZeros): |
| (WTF::WordType>::count): |
| (WTF::WordType>::isEmpty): |
| (WTF::WordType>::isFull): |
| (WTF::WordType>::merge): |
| (WTF::WordType>::filter): |
| (WTF::WordType>::exclude): |
| (WTF::WordType>::forEachSetBit): |
| (WTF::WordType>::mergeAndClear): |
| (WTF::WordType>::setAndClear): |
| (WTF::=): |
| (WTF::WordType>::hash): |
| |
| 2016-10-11 Said Abou-Hallawa <sabouhallawa@apple.com> |
| |
| Add SynchronizedFixedQueue class |
| https://bugs.webkit.org/show_bug.cgi?id=162478 |
| |
| Reviewed by Geoffrey Garen. |
| |
| This class represents a simple producer/consumer worker. It facilitates |
| synchronizing enqueuing to and dequeuing from a fixed size-queue. It uses |
| a single lock and a single condition to synchronize all its members among |
| the working threads. This means a single thread is active at any time and |
| and the other threads are blocked waiting for the lock to be released. Or |
| they are sleeping waiting for the condition to be satisfied. |
| |
| * WTF.xcodeproj/project.pbxproj: |
| * wtf/SynchronizedFixedQueue.h: Added. |
| (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue): |
| (WTF::SynchronizedFixedQueue::open): Restore the queue to its original state. |
| (WTF::SynchronizedFixedQueue::close): Wake all the sleeping threads with a closing state. |
| (WTF::SynchronizedFixedQueue::isOpen): Does the queue accept new items? |
| (WTF::SynchronizedFixedQueue::enqueue): Enqueue an item into the queue. |
| (WTF::SynchronizedFixedQueue::dequeue): Dequeue an item form the queue. |
| |
| 2016-10-11 Alex Christensen <achristensen@webkit.org> |
| |
| Remove dead networking code |
| https://bugs.webkit.org/show_bug.cgi?id=163263 |
| |
| Reviewed by Daniel Bates. |
| |
| * wtf/Platform.h: |
| * wtf/SchedulePair.h: |
| * wtf/SchedulePairMac.mm: |
| |
| 2016-10-10 Zan Dobersek <zdobersek@igalia.com> |
| |
| Add ENABLE_ENCRYPTED_MEDIA configuration option |
| https://bugs.webkit.org/show_bug.cgi?id=163219 |
| |
| Reviewed by Darin Adler. |
| |
| * wtf/FeatureDefines.h: |
| If undefined, define the ENABLE_ENCRYPTED_MEDIA option to 0. |
| |
| 2016-10-10 Yusuke Suzuki <utatane.tea@gmail.com> |
| |
| [DOMJIT] Implement Node accessors in DOMJIT |
| https://bugs.webkit.org/show_bug.cgi?id=163005 |
| |
| Reviewed by Filip Pizlo. |
| |
| Add CAST_OFFSET. It is not necessary for JSCell thingy |
| since we don't use virtual member functions. However, it |
| is not true for WebCore DOM wrapped objects. |
| |
| * wtf/StdLibExtras.h: |
| |
| 2016-10-07 Chris Dumez <cdumez@apple.com> |
| |
| window.navigator.language incorrectly returns all lowercase string |
| https://bugs.webkit.org/show_bug.cgi?id=163096 |
| |
| Reviewed by Darin Adler. |
| |
| Update platformUserPreferredLanguages() so that it no longer lowercases |
| the string it returns. On Mac, we rely on CFLocale which returns |
| BCP-47 language tags as per: |
| - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc |
| |
| * wtf/PlatformUserPreferredLanguagesMac.mm: |
| (WTF::httpStyleLanguageCode): |
| * wtf/PlatformUserPreferredLanguagesUnix.cpp: |
| (WTF::platformLanguage): |
| |
| 2016-10-06 Brent Fulgham <bfulgham@apple.com> |
| |
| [Win][Direct2D] Add Direct2D CMake rules |
| https://bugs.webkit.org/show_bug.cgi?id=162925 |
| |
| Reviewed by Brent Fulgham. |
| |
| * wtf/Platform.h: Don't USE(CA) or USE(CG) if building |
| with Direct2D. |
| |
| 2016-10-05 Yusuke Suzuki <utatane.tea@gmail.com> |
| |
| [DOMJIT] Add initial CheckDOM and CallDOM implementations |
| https://bugs.webkit.org/show_bug.cgi?id=162941 |
| |
| Reviewed by Filip Pizlo. |
| |
| * wtf/Box.h: |
| (WTF::Box::Box): |
| |
| 2016-10-05 Zan Dobersek <zdobersek@igalia.com> |
| |
| Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA |
| https://bugs.webkit.org/show_bug.cgi?id=162903 |
| |
| Reviewed by Alex Christensen. |
| |
| Rename build guards for the remaining implementation of the legacy EME API |
| to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation |
| of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards. |
| |
| * wtf/FeatureDefines.h: |
| |
| 2016-10-04 Saam Barati <sbarati@apple.com> |
| |
| String.prototype.toLowerCase should be a DFG/FTL intrinsic |
| https://bugs.webkit.org/show_bug.cgi?id=162887 |
| |
| Reviewed by Filip Pizlo and Yusuke Suzuki. |
| |
| This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit |
| which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale |
| into a helper function. I decided to extract this into its own function because |
| it may be the case that JSCs JITs will want to continue the operation |
| after it has already ensured that part of an 8-bit string is lower case. |
| |
| * wtf/text/StringImpl.cpp: |
| (WTF::StringImpl::convertToLowercaseWithoutLocale): |
| (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit): |
| * wtf/text/StringImpl.h: |
| * wtf/text/WTFString.cpp: |
| (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit): |
| * wtf/text/WTFString.h: |
| |
| 2016-10-04 Chris Dumez <cdumez@apple.com> |
| |
| Implement KeyboardEvent.code from the UI Event spec |
| https://bugs.webkit.org/show_bug.cgi?id=149584 |
| |
| Reviewed by Darin Adler. |
| |
| Add build time flag to toggle support for the code attribute on |
| KeyboardEvent and only enable it on Mac for now, given that the |
| implementation is missing on other platforms. |
| |
| * wtf/FeatureDefines.h: |
| |
| 2016-10-03 Chris Dumez <cdumez@apple.com> |
| |
| Add support for KeyboardEvent.key attribute |
| https://bugs.webkit.org/show_bug.cgi?id=36267 |
| |
| Reviewed by Darin Adler. |
| |
| Add compile time flag for the key attribute on KeyboardEvent and enable |
| it on Cocoa only. |
| |
| * wtf/FeatureDefines.h: |
| |
| 2016-09-29 Sam Weinig <sam@webkit.org> |
| |
| Add initial support for IDL union conversion |
| https://bugs.webkit.org/show_bug.cgi?id=161576 |
| |
| Reviewed by Chris Dumez. |
| |
| * WTF.xcodeproj/project.pbxproj: |
| * wtf/CMakeLists.txt: |
| Add Brigand.h |
| |
| * wtf/Brigand.h: Added. |
| Import a standalone copy of Edouard Alligand and Joel Falcou's |
| Brigand library for help with for help with list based meta programming |
| |
| * wtf/StdLibExtras.h: |
| Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference. |
| - IsTemplate acts like std::is_class, but works with a generic base. |
| - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base. |
| - RemoveCVAndReference combines std::remove_cv and std::remove_reference. |
| |
| 2016-09-30 Filip Pizlo <fpizlo@apple.com> |
| |
| B3::moveConstants should be able to edit code to minimize the number of constants |
| https://bugs.webkit.org/show_bug.cgi?id=162764 |
| |
| Reviewed by Saam Barati. |
| |
| I thought it would be a good idea to document the fact that dominator traversal happens in a |
| particular order for a reason. |
| |
| * wtf/Dominators.h: |
| |
| 2016-09-29 Filip Pizlo <fpizlo@apple.com> |
| |
| Air should have a way of expressing additional instruction flags |
| https://bugs.webkit.org/show_bug.cgi?id=162699 |
| |
| Reviewed by Mark Lam. |
| |
| * wtf/CommaPrinter.h: |
| (WTF::CommaPrinter::CommaPrinter): |
| (WTF::CommaPrinter::dump): |
| (WTF::CommaPrinter::didPrint): |
| |
| 2016-09-30 Youenn Fablet <youenn@apple.com> |
| |
| Add a way to go from a RefPtr<T> to Ref<const T> |
| https://bugs.webkit.org/show_bug.cgi?id=162683 |
| |
| Reviewed by Alex Christensen. |
| |
| * wtf/RefPtr.h: |
| (WTF::RefPtr::releaseConstNonNull): Added. |
| |
| 2016-09-29 Mark Lam <mark.lam@apple.com> |
| |
| Re-enable StringView life-cycle checking. |
| https://bugs.webkit.org/show_bug.cgi?id=160384 |
| <rdar://problem/28479434> |
| |
| Reviewed by Saam Barati. |
| |
| Re-landing after slow running tests have been resolved. |
| |
| * wtf/text/StringView.h: |
| |
| 2016-09-29 Commit Queue <commit-queue@webkit.org> |
| |
| Unreviewed, rolling out r206563. |
| https://bugs.webkit.org/show_bug.cgi?id=162732 |
| |
| Caused stress/op_*.js.ftl-no-cjit tests to time out (Requested |
| by ryanhaddad on #webkit). |
| |
| Reverted changeset: |
| |
| "Re-enable StringView life-cycle checking." |
| https://bugs.webkit.org/show_bug.cgi?id=160384 |
| http://trac.webkit.org/changeset/206563 |
| |
| 2016-09-29 Fujii Hironori <Hironori.Fujii@sony.com> |
| |
| Clang 3.9 reports a compilation warning about ENABLE_EXCEPTION_SCOPE_VERIFICATION |
| https://bugs.webkit.org/show_bug.cgi?id=162718 |
| |
| Reviewed by Alex Christensen. |
| |
| Clang 3.9 reports a following compilation warning: |
| Source/JavaScriptCore/runtime/VM.h:656:5: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined] |
| |
| * wtf/Platform.h: Changed the definition of ENABLE_EXCEPTION_SCOPE_VERIFICATION not to use 'defined'. |
| |
| 2016-09-28 Mark Lam <mark.lam@apple.com> |
| |
| Re-enable StringView life-cycle checking. |
| https://bugs.webkit.org/show_bug.cgi?id=160384 |
| <rdar://problem/28479434> |
| |
| Reviewed by Saam Barati. |
| |
| * wtf/text/StringView.h: |
| |
| 2016-09-28 Filip Pizlo <fpizlo@apple.com> |
| |
| The write barrier should be down with TSO |
| https://bugs.webkit.org/show_bug.cgi?id=162316 |
| |
| Reviewed by Geoffrey Garen. |
| |
| Added clearRange(), which quickly clears a range of bits. This turned out to be useful for |
| a DFG optimization pass. |
| |
| * wtf/FastBitVector.cpp: |
| (WTF::FastBitVector::clearRange): |
| * wtf/FastBitVector.h: |
| |
| 2016-09-28 Mark Lam <mark.lam@apple.com> |
| |
| Fix race condition in StringView's UnderlyingString lifecycle management. |
| https://bugs.webkit.org/show_bug.cgi?id=162702 |
| |
| Reviewed by Geoffrey Garen. |
| |
| There 2 relevant functions at play: |
| |
| void StringView::setUnderlyingString(const StringImpl* string) |
| { |
| UnderlyingString* underlyingString; |
| if (!string) |
| underlyingString = nullptr; |
| else { |
| std::lock_guard<StaticLock> lock(underlyingStringsMutex); |
| auto result = underlyingStrings().add(string, nullptr); |
| if (result.isNewEntry) |
| result.iterator->value = new UnderlyingString(*string); |
| else |
| ++result.iterator->value->refCount; |
| underlyingString = result.iterator->value; // Point P2. |
| } |
| adoptUnderlyingString(underlyingString); // Point P5. |
| } |
| |
| ... and ... |
| |
| void StringView::adoptUnderlyingString(UnderlyingString* underlyingString) |
| { |
| if (m_underlyingString) { |
| // Point P0. |
| if (!--m_underlyingString->refCount) { |
| if (m_underlyingString->isValid) { // Point P1. |
| std::lock_guard<StaticLock> lock(underlyingStringsMutex); |
| underlyingStrings().remove(&m_underlyingString->string); // Point P3. |
| } |
| delete m_underlyingString; // Point P4. |
| } |
| } |
| m_underlyingString = underlyingString; |
| } |
| |
| Imagine the following scenario: |
| |
| 1. Thread T1 has been using an UnderlyingString U1, and is now done with it. |
| T1 runs up to point P1 in adoptUnderlyingString(), and is blocked waiting for |
| the underlyingStringsMutex (which is currently being held by Thread T2). |
| 2. Context switch to Thread T2. |
| T2 wants to use UnderlyingString U1, and runs up to point P2 in setUnderlyingString() |
| and releases the underlyingStringsMutex. |
| Note: T2 thinks it has successfully refCounted U1, and therefore U1 is safe to use. |
| 3. Context switch to Thread T1. |
| T1 acquires the underlyingStringsMutex, and proceeds to remove it from the |
| underlyingStrings() map (see Point P3). It thinks it has successfully done so |
| and proceeds to delete U1 (see Point P4). |
| 4. Context switch to Thread T2. |
| T2 proceeds to use U1 (see Point P5 in setUnderlyingString()). |
| Note: U1 has already been freed. This is a use after free. |
| |
| The fix is to acquire the underlyingStringsMutex at Point P0 in adoptUnderlyingString() |
| instead of after P1. This ensures that the decrementing of the UnderlyingString |
| refCount and its removal from the underlyingStrings() map is done as an atomic unit. |
| |
| Note: If you look in StringView.cpp, you see another setUnderlyingString() which |
| takes a StringView otherString. This version of setUnderlyingString() can only |
| be called from within the same thread that created the other StringView. As a |
| result, here, we are guaranteed that the UnderlyingString refCount is never zero, |
| and there's no other threat of another thread trying to delete the UnderlyingString |
| while we adopt it. Hence, we don't need to acquire the underlyingStringsMutex |
| here. |
| |
| This race condition was found when running layout tests fetch/fetch-worker-crash.html |
| and storage/indexeddb/modern/opendatabase-versions.html when CHECK_STRINGVIEW_LIFETIME |
| is enabled. This issue resulted in those tests crashing due to a use-after-free. |
| |
| * wtf/text/StringView.cpp: |
| (WTF::StringView::adoptUnderlyingString): |
| (WTF::StringView::setUnderlyingString): |
| |
| 2016-09-28 Brent Fulgham <bfulgham@apple.com> |
| |
| Correct 'safeCast' implementation |
| https://bugs.webkit.org/show_bug.cgi?id=162679 |
| <rdar://problem/28518189> |
| |
| Reviewed by Zalan Bujtas. |
| |
| * wtf/StdLibExtras.h: |
| (WTF::safeCast): Use a RELEASE_ASSERT. |
| |
| 2016-09-27 Don Olmstead <don.olmstead@am.sony.com> |
| |
| [CMake] Add HAVE_LOCALTIME_R definition |
| https://bugs.webkit.org/show_bug.cgi?id=162636 |
| |
| Reviewed by Alex Christensen. |
| |
| * wtf/DateMath.cpp: |
| (WTF::getLocalTime): |
| * wtf/GregorianDateTime.cpp: |
| (WTF::GregorianDateTime::setToCurrentLocalTime): |
| * wtf/Platform.h: |
| |
| 2016-09-27 JF Bastien <jfbastien@apple.com> |
| |
| Speed up Heap::isMarkedConcurrently |
| https://bugs.webkit.org/show_bug.cgi?id=162095 |
| |
| Reviewed by Filip Pizlo. |
| |
| Heap::isMarkedConcurrently had a load-load fence which is expensive on weak memory ISAs such as ARM. |
| |
| This patch is fairly perf-neutral overall, but the GC's instrumentation reports: |
| GC:Eden is 93% average runtime after change |
| GC:Full is 76% average runtime after change |
| |
| The fence was there because: |
| 1. If the read of m_markingVersion in MarkedBlock::areMarksStale isn't what's expected then; |
| 2. The read of m_marks in MarkedBlock::isMarked needs to observe the value that was stored *before* m_markingVersion was stored. |
| |
| This ordering isn't guaranteed on ARM, which has a weak memory model. |
| |
| There are 3 ways to guarantee this ordering: |
| A. Use a barrier instruction. |
| B. Use a load-acquire (new in ARMv8). |
| C. use ARM's address dependency rule, which C++ calls memory_order_consume. |
| |
| In general: |
| A. is slow but orders all of memory in an intuitive manner. |
| B. is faster-ish and has the same property-ish. |
| C. should be faster still, but *only orders dependent loads*. This last part is critical! Consume isn't an all-out replacement for acquire (acquire is rather a superset of consume). |
| |
| ARM explains the address dependency rule in their document "barrier litmus tests and cookbook": |
| |
| > *Resolving by the use of barriers and address dependency* |
| > |
| > There is a rule within the ARM architecture that: |
| > Where the value returned by a read is used to compute the virtual address of a subsequent read or write (this is known as an address dependency), then these two memory accesses will be observed in program order. An address dependency exists even if the value read by the first read has no effect in changing the virtual address (as might be the case if the value returned is masked off before it is used, or if it had no effect on changing a predicted address value). |
| > This restriction applies only when the data value returned from one read is used as a data value to calculate the address of a subsequent read or write. This does not apply if the data value returned from one read is used to determine the condition code flags, and the values of the flags are used for condition code evaluation to determine the address of a subsequent reads, either through conditional execution or the evaluation of a branch. This is known as a control dependency. |
| > Where both a control and address dependency exist, the ordering behaviour is consistent with the address dependency. |
| |
| C++'s memory_order_consume is unfortunately unimplemented by C++ compilers, and maybe unimplementable as spec'd. I'm working with interested folks in the committee to fix this situation: http://wg21.link/p0190r2 |
| |
| * wtf/Atomics.h: |
| (WTF::zeroWithConsumeDependency): a 0 which carries a dependency |
| (WTF::consumeLoad): pixie magic |
| |
| 2016-09-27 JF Bastien <jfbastien@apple.com> |
| |
| Atomics.h on Windows: remove seq_cst hack |
| https://bugs.webkit.org/show_bug.cgi?id=162022 |
| |
| Reviewed by Mark Lam. |
| |
| No need to force access to seq_cst, always inlining fixes the MSVC warning. |
| |
| * wtf/Atomics.h: |
| (WTF::Atomic::compareExchangeWeak): remove seq_cst hack |
| (WTF::Atomic::compareExchangeStrong): remove seq_cst hack |
| (WTF::Atomic::exchangeAndAdd): remove seq_cst hack |
| (WTF::Atomic::exchange): remove seq_cst hack |
| |
| 2016-09-27 Don Olmstead <don.olmstead@am.sony.com> |
| |
| [CMake] Use CMake to determine HAVE_* defines |
| https://bugs.webkit.org/show_bug.cgi?id=162368 |
| |
| Reviewed by Alex Christensen. |
| |
| * wtf/Platform.h: |
| |
| 2016-09-20 Anders Carlsson <andersca@apple.com> |
| |
| PlatformEvent::m_modifiers should be an OptionSet |
| https://bugs.webkit.org/show_bug.cgi?id=162326 |
| |
| Reviewed by Daniel Bates. |
| |
| * wtf/OptionSet.h: |
| (WTF::OptionSet::operator!=): |
| (WTF::OptionSet::operator-): |
| |
| 2016-09-27 Jer Noble <jer.noble@apple.com> |
| |
| Remove deprecated ENCRYPTED_MEDIA implementation. |
| https://bugs.webkit.org/show_bug.cgi?id=161010 |
| |
| Reviewed by Eric Carlson. |
| |
| Remove ENABLE_ENCRYPTED_MEDIA. |
| |
| * wtf/FeatureDefines.h: |
| |
| 2016-09-27 Youenn Fablet <youenn@apple.com> |
| |
| [Fetch API] Use Ref<const T> in FetchBody::m_data variant |
| https://bugs.webkit.org/show_bug.cgi?id=162599 |
| |
| Reviewed by Alex Christensen. |
| |
| Enabling to use DeferrableRefCounted<const T> by making m_refCount mutable. |
| |
| * wtf/DeferrableRefCounted.h: |
| (WTF::DeferrableRefCountedBase::ref): |
| (WTF::DeferrableRefCountedBase::derefBase): |
| (WTF::DeferrableRefCounted::deref): |
| |
| 2016-09-26 Daniel Bates <dabates@apple.com> |
| |
| Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING |
| https://bugs.webkit.org/show_bug.cgi?id=162365 |
| |
| Reviewed by Simon Fraser. |
| |
| * wtf/FeatureDefines.h: |
| |
| 2016-09-26 Benjamin Poulain <benjamin@webkit.org> |
| |
| [JSC] Shrink the Math inline caches some more |
| https://bugs.webkit.org/show_bug.cgi?id=162485 |
| |
| Reviewed by Saam Barati. |
| |
| * wtf/Bag.h: |
| Don't copy the arguments before initializing the nodes. |
| |
| 2016-09-26 Michael Catanzaro <mcatanzaro@igalia.com> |
| |
| std::unique_ptr deleter functions should not check if pointer is null |
| https://bugs.webkit.org/show_bug.cgi?id=162558 |
| |
| Reviewed by Alex Christensen. |
| |
| std::unique_ptr already does this before calling the deleter. |
| |
| * wtf/efl/UniquePtrEfl.h: |
| * wtf/glib/GUniquePtr.h: |
| |
| == Rolled over to ChangeLog-2016-09-26 == |