Clean wrong comment about compositing on the UI process.
[WebKit-https.git] / Source / WTF / ChangeLog
1 2016-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>
2
3         Clean wrong comment about compositing on the UI process.
4         https://bugs.webkit.org/show_bug.cgi?id=164339
5
6         Reviewed by Michael Catanzaro.
7
8         * wtf/Platform.h: The comment about compositing on the UI process
9         was added on r109302 but was not removed properly when the Qt port
10         was removed from trunk.
11         USE_PROTECTION_SPACE_AUTH_CALLBACK has nothing to do with it.
12
13 2016-11-02  Alex Christensen  <achristensen@webkit.org>
14
15         Remove Battery Status API from the tree
16         https://bugs.webkit.org/show_bug.cgi?id=164213
17
18         Reviewed by Sam Weinig.
19
20         * wtf/FeatureDefines.h:
21
22 2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>
23
24         [Readable Streams API] Enable creation of ReadableByteStreamController
25         https://bugs.webkit.org/show_bug.cgi?id=164014
26
27         Reviewed by Youenn Fablet.
28
29         Added flag for the byte stream part of Readable Streams API.
30
31         * wtf/FeatureDefines.h:
32
33 2016-11-02  Per Arne Vollan  <pvollan@apple.com>
34
35         [Win] Copy build results to AAS 'Program Files' folder.
36         https://bugs.webkit.org/show_bug.cgi?id=164273
37
38         Reviewed by Brent Fulgham.
39
40         The preferred location for the binaries is the AAS 'Program Files' folder.
41
42         * WTF.vcxproj/WTF.proj:
43
44 2016-10-29  Filip Pizlo  <fpizlo@apple.com>
45
46         JSC should support SharedArrayBuffer
47         https://bugs.webkit.org/show_bug.cgi?id=163986
48
49         Reviewed by Keith Miller.
50         
51         Adds some small things we need for SharedArrayBuffer.
52         
53         * wtf/Atomics.h:
54         (WTF::Atomic::compareExchangeWeakRelaxed):
55         (WTF::Atomic::exchangeAdd):
56         (WTF::Atomic::exchangeAnd):
57         (WTF::Atomic::exchangeOr):
58         (WTF::Atomic::exchangeSub):
59         (WTF::Atomic::exchangeXor):
60         (WTF::atomicLoad):
61         (WTF::atomicStore):
62         (WTF::atomicCompareExchangeWeak):
63         (WTF::atomicCompareExchangeWeakRelaxed):
64         (WTF::atomicCompareExchangeStrong):
65         (WTF::atomicExchangeAdd):
66         (WTF::atomicExchangeAnd):
67         (WTF::atomicExchangeOr):
68         (WTF::atomicExchangeSub):
69         (WTF::atomicExchangeXor):
70         (WTF::atomicExchange):
71         (WTF::Atomic::exchangeAndAdd): Deleted.
72         (WTF::weakCompareAndSwap): Deleted.
73         We need to be able to do atomics operations on naked pointers. We also need to be able to do
74         all of the things that std::atomic does. This adds those things and renames
75         weakCompareAndSwap to atomicCompareExchangeWeakRelaxed so that we're using consistent
76         terminology.
77         
78         * wtf/Bitmap.h:
79         (WTF::WordType>::concurrentTestAndSet): Renamed weakCompareAndSwap.
80         (WTF::WordType>::concurrentTestAndClear): Renamed weakCompareAndSwap.
81         * wtf/FastBitVector.h:
82         (WTF::FastBitVector::atomicSetAndCheck): Renamed weakCompareAndSwap.
83         * wtf/ParkingLot.cpp:
84         (WTF::ParkingLot::unparkOne):
85         (WTF::ParkingLot::unparkCount):
86         * wtf/ParkingLot.h:
87         Added unparkCount(), which lets you unpark some bounded number of threads and returns the
88         number of threads unparked. This is just a modest extension of unparkAll(). unparkAll() now
89         just calls unparkCount(ptr, UINT_MAX).
90
91 2016-10-30  Frederic Wang  <fwang@igalia.com>
92
93         Use HarfBuzz ot-math API to parse the OpenType MATH table
94         https://bugs.webkit.org/show_bug.cgi?id=162671
95
96         Reviewed by Michael Catanzaro.
97
98         * wtf/Platform.h: By default, do not enable internal OpenType MATH parsing on GTK.
99
100 2016-10-25  Mark Lam  <mark.lam@apple.com>
101
102         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
103         https://bugs.webkit.org/show_bug.cgi?id=163996
104         <rdar://problem/28263117>
105
106         Reviewed by Geoffrey Garen.
107
108         * wtf/Vector.h:
109         (WTF::minCapacity>::tryConstructAndAppend):
110         (WTF::minCapacity>::tryConstructAndAppendSlowCase):
111         - Added try versions of constructAndAppend() so that we can handle the failure
112           to allocate more gracefully.
113
114 2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>
115
116         Non-specialized version of deleteObject should not have template argument
117         https://bugs.webkit.org/show_bug.cgi?id=163943
118
119         Reviewed by Anders Carlsson.
120
121         Fixes compilation of GDIObject.h with MinGW
122
123         * wtf/win/GDIObject.h:
124         (WTF::deleteObject):
125
126 2016-10-24  Per Arne Vollan  <pvollan@apple.com>
127
128         [Win] CMake build type is not set.
129         https://bugs.webkit.org/show_bug.cgi?id=163917
130
131         Reviewed by Alex Christensen.
132
133         The CMAKE_BUILD_TYPE variable should be set to Debug or Release.
134
135         * WTF.vcxproj/WTF.proj:
136
137 2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>
138
139         [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
140         https://bugs.webkit.org/show_bug.cgi?id=163657
141
142         Reviewed by Saam Barati.
143
144         Simplify nonEmptyRangesOverlap.
145
146         * wtf/MathExtras.h:
147         (WTF::nonEmptyRangesOverlap):
148
149 2016-10-23  Chris Dumez  <cdumez@apple.com>
150
151         Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
152         <rdar://problem/28902292>
153
154         Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.
155
156         * wtf/Platform.h:
157
158 2016-10-20  Keith Miller  <keith_miller@apple.com>
159
160         Add support for WASM calls
161         https://bugs.webkit.org/show_bug.cgi?id=161727
162
163         Reviewed by Filip Pizlo and Michael Saboff.
164
165         Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace.
166
167         * wtf/LEBDecoder.h:
168         (WTF::LEBDecoder::decodeUInt):
169         (WTF::LEBDecoder::decodeUInt32):
170         (WTF::LEBDecoder::decodeUInt64):
171         (WTF::LEBDecoder::decodeInt32):
172         (decodeUInt32): Deleted.
173         (decodeInt32): Deleted.
174
175 2016-10-20  Filip Pizlo  <fpizlo@apple.com>
176
177         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
178         https://bugs.webkit.org/show_bug.cgi?id=163738
179
180         Reviewed by Geoffrey Garen.
181         
182         There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing
183         should know about this.
184
185         * wtf/MainThread.cpp:
186         (WTF::initializeGCThreads):
187         (WTF::registerGCThread):
188         (WTF::mayBeGCThread):
189         * wtf/MainThread.h:
190
191 2016-10-19  Sam Weinig  <sam@webkit.org>
192
193         Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
194         https://bugs.webkit.org/show_bug.cgi?id=163713
195
196         Reviewed by Dan Bernstein.
197
198         - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following
199           way:
200                 WTF::visit(WTF::makeVisitor(...), variant)
201
202         * wtf/Variant.h:
203         (WTF::switchOn):
204
205 2016-10-19  Alex Christensen  <achristensen@webkit.org>
206
207         Revert r207151
208         https://bugs.webkit.org/show_bug.cgi?id=163675
209
210         Reviewed by Brent Fulgham.
211
212         * wtf/Platform.h:
213         * wtf/SchedulePair.h:
214         * wtf/SchedulePairMac.mm:
215
216 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
217
218         REGRESSION (r207480): 3 Dromaeo tests failing
219         https://bugs.webkit.org/show_bug.cgi?id=163633
220
221         Reviewed by Mark Lam.
222         
223         It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking
224         thread will clear our address eventually - but not immediately. This causes a nasty
225         assertion failure. The tricky thing is that when we detect this, we need to wait until that
226         unparking thread does the deed. Otherwise, they will still do it at some later time.
227         
228         Alternatively, we could use some kind of versioning to detect this - increment the version
229         when you park, so that unparking threads will know if they are time travelers. That seems
230         more yucky.
231         
232         I don't think it matters too much what we do here, so long as it's simple and correct, since
233         this requires a race that is rare enough that it didn't happen once in my testing, and I was
234         pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is
235         rare because it requires the timeout to happen right as someone else is unparking. Since
236         it's so rare, its probably OK that the unparked thread waits just a tiny moment until the
237         unparking thread is done.
238
239         * wtf/ParkingLot.cpp:
240         (WTF::ParkingLot::parkConditionallyImpl):
241         (WTF::ParkingLot::unparkOneImpl):
242
243 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
244
245         Baseline JIT should use AutomaticThread
246         https://bugs.webkit.org/show_bug.cgi?id=163686
247
248         Reviewed by Geoffrey Garen.
249         
250         Added a AutomaticThreadCondition::wait() method, so that if you really want to use one
251         common condition for your thread and something else, you can do it. This trivially works
252         if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's
253         dangerous, since you don't know who will wake up).
254         
255         The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an
256         optimal way: there are just two threads talking to each other, so it wakes up at most one
257         thread and that thread is exactly the one you want woken up. Adding wait() means that I did
258         not have to change that code.
259
260         * wtf/AutomaticThread.cpp:
261         (WTF::AutomaticThreadCondition::wait):
262         * wtf/AutomaticThread.h:
263
264 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
265
266         DFG worklist should use AutomaticThread
267         https://bugs.webkit.org/show_bug.cgi?id=163615
268
269         Reviewed by Mark Lam.
270         
271         This adds new functionality to AutomaticThread to support DFG::Worklist:
272         
273         - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end
274           of a thread's lifetime. This allows Worklist to tie some resources to the life of the
275           thread, and also means that now those resources will naturally free up when the Worklist is
276           not in use.
277         
278         - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We
279           need to know if the Condition woke up anyone. If it didn't, then we need to launch one of
280           our threads.
281
282         * wtf/AutomaticThread.cpp:
283         (WTF::AutomaticThreadCondition::notifyOne):
284         (WTF::AutomaticThread::ThreadScope::ThreadScope):
285         (WTF::AutomaticThread::ThreadScope::~ThreadScope):
286         (WTF::AutomaticThread::start):
287         (WTF::AutomaticThread::threadDidStart):
288         (WTF::AutomaticThread::threadWillStop):
289         * wtf/AutomaticThread.h:
290         * wtf/Condition.h:
291         (WTF::ConditionBase::notifyOne):
292
293 2016-10-18  Sam Weinig  <sam@webkit.org>
294
295         Replace std::experimental::variant with WTF::Variant (or similar)
296         https://bugs.webkit.org/show_bug.cgi?id=163626
297
298         Reviewed by Chris Dumez.
299
300         Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
301         into the WTF namespace.
302
303         * wtf/Forward.h:
304         * wtf/Variant.h:
305
306 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
307
308         WTF should make it easier to create threads that die automatically after inactivity
309         https://bugs.webkit.org/show_bug.cgi?id=163576
310
311         Reviewed by Andreas Kling.
312         
313         For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel
314         guilty because those threads don't shut down when they are inactive. For example, in bug
315         163562, I need to add a new GC thread. There will be one of them per VM. This means that a
316         JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's
317         good.
318         
319         A common pattern for all of these threads is that they have some well-defined trigger that
320         causes them to run. This trigger has a lock, a condition variable, some logic that determines
321         if there is work to do, and then of course the logic for the thread's actual work. The thread
322         bodies usually look like this:
323         
324         void Thingy::runThread()
325         {
326             for (;;) {
327                 Work work;
328                 {
329                     LockHolder locker(m_lock);
330                     while (!hasWork())
331                         m_cond.wait(m_lock);
332                     work = takeWork();
333                 }
334                 doWork(work);
335             }
336         }
337         
338         If you look at ParallelHelperPool (the GC's threads) and DFG::Worklist (some of the JIT's
339         threads), you will see this pattern.
340         
341         This change adds a new kind of thread, called AutomaticThread, that lets you write threads to
342         this pattern while getting automatic thread shutdown for free: instead of just waiting on a
343         condition variable, AutomaticThread will have a timeout that causes the thread to die. The
344         condition variable associated with AutomaticThread, called AutomaticThreadCondition, is smart
345         enough to restart any threads that have decided to stop due to inactivity. The inactivity
346         threshold is current just 1 second.
347         
348         In this patch I only adopt AutomaticThread for ParallelHelperPool. I plan to adopt it in more
349         places soon.
350
351         * WTF.xcodeproj/project.pbxproj:
352         * wtf/AutomaticThread.cpp: Added.
353         (WTF::AutomaticThreadCondition::create):
354         (WTF::AutomaticThreadCondition::AutomaticThreadCondition):
355         (WTF::AutomaticThreadCondition::~AutomaticThreadCondition):
356         (WTF::AutomaticThreadCondition::notifyAll):
357         (WTF::AutomaticThreadCondition::add):
358         (WTF::AutomaticThreadCondition::remove):
359         (WTF::AutomaticThreadCondition::contains):
360         (WTF::AutomaticThread::AutomaticThread):
361         (WTF::AutomaticThread::~AutomaticThread):
362         (WTF::AutomaticThread::join):
363         (WTF::AutomaticThread::start):
364         * wtf/AutomaticThread.h: Added.
365         * wtf/CMakeLists.txt:
366         * wtf/ParallelHelperPool.cpp:
367         (WTF::ParallelHelperClient::ParallelHelperClient):
368         (WTF::ParallelHelperClient::~ParallelHelperClient):
369         (WTF::ParallelHelperClient::setTask):
370         (WTF::ParallelHelperClient::finish):
371         (WTF::ParallelHelperClient::doSomeHelping):
372         (WTF::ParallelHelperClient::runTask):
373         (WTF::ParallelHelperPool::ParallelHelperPool):
374         (WTF::ParallelHelperPool::~ParallelHelperPool):
375         (WTF::ParallelHelperPool::ensureThreads):
376         (WTF::ParallelHelperPool::doSomeHelping):
377         (WTF::ParallelHelperPool::Thread::Thread):
378         (WTF::ParallelHelperPool::didMakeWorkAvailable):
379         (WTF::ParallelHelperPool::helperThreadBody): Deleted.
380         (WTF::ParallelHelperPool::waitForClientWithTask): Deleted.
381         * wtf/ParallelHelperPool.h:
382
383 2016-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
384
385         SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property
386         https://bugs.webkit.org/show_bug.cgi?id=116470
387
388         Reviewed by Simon Fraser.
389
390         * wtf/TemporaryChange.h:
391         (WTF::TemporaryChange::TemporaryChange):
392         Add a new constructor to make TemporaryChange work as a restorer. The
393         temporary change will happen after we construct the object.
394
395 2016-10-17  Simon Fraser  <simon.fraser@apple.com>
396
397         Implement DOMRect/DOMRectReadOnly
398         https://bugs.webkit.org/show_bug.cgi?id=163464
399
400         Reviewed by Darin Adler.
401         
402         Implement min()/max() in a way that follows Math.min/Math.max, which return
403         NaN if either argument is NaN.
404
405         * wtf/MathExtras.h:
406         (WTF::nanPropagatingMin):
407         (WTF::nanPropagatingMax):
408
409 2016-10-15  Sam Weinig  <sam@webkit.org>
410
411         MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget?
412         https://bugs.webkit.org/show_bug.cgi?id=163475
413
414         Reviewed by Simon Fraser.
415
416         * wtf/Variant.h:
417         Add missing return statement that was tripping up some compilers.
418
419 2016-10-12  Ryan Haddad  <ryanhaddad@apple.com>
420
421         Unreviewed, rolling out r207225.
422
423         This change causes debug tests to exit early with crashes.
424
425         Reverted changeset:
426
427         "Optional's move-constructor and move-assignment operator
428         don't disengage the value being moved from"
429         https://bugs.webkit.org/show_bug.cgi?id=163309
430         http://trac.webkit.org/changeset/207225
431
432 2016-10-11  Sam Weinig  <sam@webkit.org>
433
434         Optional's move-constructor and move-assignment operator don't disengage the value being moved from
435         https://bugs.webkit.org/show_bug.cgi?id=163309
436
437         Reviewed by Anders Carlsson.
438
439         * wtf/Optional.h:
440         (WTF::Optional::Optional):
441         (WTF::Optional::operator=):
442         Disengage 'other' on move-construction and move-assignment.
443
444 2016-10-08  Filip Pizlo  <fpizlo@apple.com>
445
446         MarkedBlock should know what objects are live during marking
447         https://bugs.webkit.org/show_bug.cgi?id=162309
448
449         Reviewed by Geoffrey Garen.
450         
451         This removes the atomicity mode, because it's not really used: it only affects the
452         concurrentBlah methods, but their only users turn on atomicity. This was useful because
453         previously, some binary Bitmap methods (like merge(const Bitmap&)) couldn't be used
454         effectively in the GC because some of the GC's bitmaps set the atomic mode and some didn't.
455         Removing this useless mode is the best solution.
456         
457         Also added some new binary Bitmap methods: mergeAndClear(Bitmap& other) and
458         setAndClear(Bitmap& other). They perform their action on 'this' (either merge or set,
459         respectively) while also clearing the contents of 'other'. This is great for one of the GC
460         hot paths.
461
462         * wtf/Bitmap.h:
463         (WTF::WordType>::Bitmap):
464         (WTF::WordType>::get):
465         (WTF::WordType>::set):
466         (WTF::WordType>::testAndSet):
467         (WTF::WordType>::testAndClear):
468         (WTF::WordType>::concurrentTestAndSet):
469         (WTF::WordType>::concurrentTestAndClear):
470         (WTF::WordType>::clear):
471         (WTF::WordType>::clearAll):
472         (WTF::WordType>::nextPossiblyUnset):
473         (WTF::WordType>::findRunOfZeros):
474         (WTF::WordType>::count):
475         (WTF::WordType>::isEmpty):
476         (WTF::WordType>::isFull):
477         (WTF::WordType>::merge):
478         (WTF::WordType>::filter):
479         (WTF::WordType>::exclude):
480         (WTF::WordType>::forEachSetBit):
481         (WTF::WordType>::mergeAndClear):
482         (WTF::WordType>::setAndClear):
483         (WTF::=):
484         (WTF::WordType>::hash):
485
486 2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>
487
488         Add SynchronizedFixedQueue class
489         https://bugs.webkit.org/show_bug.cgi?id=162478
490
491         Reviewed by Geoffrey Garen.
492
493         This class represents a simple producer/consumer worker. It facilitates
494         synchronizing enqueuing to and dequeuing from a fixed size-queue. It uses
495         a single lock and a single condition to synchronize all its members among
496         the working threads. This means a single thread is active at any time and
497         and the other threads are blocked waiting for the lock to be released. Or
498         they are sleeping waiting for the condition to be satisfied.
499
500         * WTF.xcodeproj/project.pbxproj:
501         * wtf/SynchronizedFixedQueue.h: Added.
502         (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue):
503         (WTF::SynchronizedFixedQueue::open): Restore the queue to its original state.
504         (WTF::SynchronizedFixedQueue::close): Wake all the sleeping threads with a closing state.
505         (WTF::SynchronizedFixedQueue::isOpen): Does the queue accept new items?
506         (WTF::SynchronizedFixedQueue::enqueue): Enqueue an item into the queue.
507         (WTF::SynchronizedFixedQueue::dequeue): Dequeue an item form the queue.
508
509 2016-10-11  Alex Christensen  <achristensen@webkit.org>
510
511         Remove dead networking code
512         https://bugs.webkit.org/show_bug.cgi?id=163263
513
514         Reviewed by Daniel Bates.
515
516         * wtf/Platform.h:
517         * wtf/SchedulePair.h:
518         * wtf/SchedulePairMac.mm:
519
520 2016-10-10  Zan Dobersek  <zdobersek@igalia.com>
521
522         Add ENABLE_ENCRYPTED_MEDIA configuration option
523         https://bugs.webkit.org/show_bug.cgi?id=163219
524
525         Reviewed by Darin Adler.
526
527         * wtf/FeatureDefines.h:
528         If undefined, define the ENABLE_ENCRYPTED_MEDIA option to 0.
529
530 2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>
531
532         [DOMJIT] Implement Node accessors in DOMJIT
533         https://bugs.webkit.org/show_bug.cgi?id=163005
534
535         Reviewed by Filip Pizlo.
536
537         Add CAST_OFFSET. It is not necessary for JSCell thingy
538         since we don't use virtual member functions. However, it
539         is not true for WebCore DOM wrapped objects.
540
541         * wtf/StdLibExtras.h:
542
543 2016-10-07  Chris Dumez  <cdumez@apple.com>
544
545         window.navigator.language incorrectly returns all lowercase string
546         https://bugs.webkit.org/show_bug.cgi?id=163096
547
548         Reviewed by Darin Adler.
549
550         Update platformUserPreferredLanguages() so that it no longer lowercases
551         the string it returns. On Mac, we rely on CFLocale which returns
552         BCP-47 language tags as per:
553         - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc
554
555         * wtf/PlatformUserPreferredLanguagesMac.mm:
556         (WTF::httpStyleLanguageCode):
557         * wtf/PlatformUserPreferredLanguagesUnix.cpp:
558         (WTF::platformLanguage):
559
560 2016-10-06  Brent Fulgham  <bfulgham@apple.com>
561
562         [Win][Direct2D] Add Direct2D CMake rules
563         https://bugs.webkit.org/show_bug.cgi?id=162925
564
565         Reviewed by Brent Fulgham.
566
567         * wtf/Platform.h: Don't USE(CA) or USE(CG) if building
568         with Direct2D.
569
570 2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>
571
572         [DOMJIT] Add initial CheckDOM and CallDOM implementations
573         https://bugs.webkit.org/show_bug.cgi?id=162941
574
575         Reviewed by Filip Pizlo.
576
577         * wtf/Box.h:
578         (WTF::Box::Box):
579
580 2016-10-05  Zan Dobersek  <zdobersek@igalia.com>
581
582         Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
583         https://bugs.webkit.org/show_bug.cgi?id=162903
584
585         Reviewed by Alex Christensen.
586
587         Rename build guards for the remaining implementation of the legacy EME API
588         to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
589         of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.
590
591         * wtf/FeatureDefines.h:
592
593 2016-10-04  Saam Barati  <sbarati@apple.com>
594
595         String.prototype.toLowerCase should be a DFG/FTL intrinsic
596         https://bugs.webkit.org/show_bug.cgi?id=162887
597
598         Reviewed by Filip Pizlo and Yusuke Suzuki.
599
600         This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit
601         which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale
602         into a helper function. I decided to extract this into its own function because
603         it may be the case that JSCs JITs will want to continue the operation
604         after it has already ensured that part of an 8-bit string is lower case.
605
606         * wtf/text/StringImpl.cpp:
607         (WTF::StringImpl::convertToLowercaseWithoutLocale):
608         (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
609         * wtf/text/StringImpl.h:
610         * wtf/text/WTFString.cpp:
611         (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
612         * wtf/text/WTFString.h:
613
614 2016-10-04  Chris Dumez  <cdumez@apple.com>
615
616         Implement KeyboardEvent.code from the UI Event spec
617         https://bugs.webkit.org/show_bug.cgi?id=149584
618
619         Reviewed by Darin Adler.
620
621         Add build time flag to toggle support for the code attribute on
622         KeyboardEvent and only enable it on Mac for now, given that the
623         implementation is missing on other platforms.
624
625         * wtf/FeatureDefines.h:
626
627 2016-10-03  Chris Dumez  <cdumez@apple.com>
628
629         Add support for KeyboardEvent.key attribute
630         https://bugs.webkit.org/show_bug.cgi?id=36267
631
632         Reviewed by Darin Adler.
633
634         Add compile time flag for the key attribute on KeyboardEvent and enable
635         it on Cocoa only.
636
637         * wtf/FeatureDefines.h:
638
639 2016-09-29  Sam Weinig  <sam@webkit.org>
640
641         Add initial support for IDL union conversion
642         https://bugs.webkit.org/show_bug.cgi?id=161576
643
644         Reviewed by Chris Dumez.
645
646         * WTF.xcodeproj/project.pbxproj:
647         * wtf/CMakeLists.txt:
648         Add Brigand.h
649
650         * wtf/Brigand.h: Added.
651         Import a standalone copy of Edouard Alligand and Joel Falcou's 
652         Brigand library for help with for help with list based meta programming
653
654         * wtf/StdLibExtras.h:
655         Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference.
656         - IsTemplate acts like std::is_class, but works with a generic base.
657         - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base.
658         - RemoveCVAndReference combines std::remove_cv and std::remove_reference.
659
660 2016-09-30  Filip Pizlo  <fpizlo@apple.com>
661
662         B3::moveConstants should be able to edit code to minimize the number of constants
663         https://bugs.webkit.org/show_bug.cgi?id=162764
664
665         Reviewed by Saam Barati.
666         
667         I thought it would be a good idea to document the fact that dominator traversal happens in a
668         particular order for a reason.
669
670         * wtf/Dominators.h:
671
672 2016-09-29  Filip Pizlo  <fpizlo@apple.com>
673
674         Air should have a way of expressing additional instruction flags
675         https://bugs.webkit.org/show_bug.cgi?id=162699
676
677         Reviewed by Mark Lam.
678
679         * wtf/CommaPrinter.h:
680         (WTF::CommaPrinter::CommaPrinter):
681         (WTF::CommaPrinter::dump):
682         (WTF::CommaPrinter::didPrint):
683
684 2016-09-30  Youenn Fablet  <youenn@apple.com>
685
686         Add a way to go from a RefPtr<T> to Ref<const T>
687         https://bugs.webkit.org/show_bug.cgi?id=162683
688
689         Reviewed by Alex Christensen.
690
691         * wtf/RefPtr.h:
692         (WTF::RefPtr::releaseConstNonNull): Added.
693
694 2016-09-29  Mark Lam  <mark.lam@apple.com>
695
696         Re-enable StringView life-cycle checking.
697         https://bugs.webkit.org/show_bug.cgi?id=160384
698         <rdar://problem/28479434>
699
700         Reviewed by Saam Barati.
701
702         Re-landing after slow running tests have been resolved.
703
704         * wtf/text/StringView.h:
705
706 2016-09-29  Commit Queue  <commit-queue@webkit.org>
707
708         Unreviewed, rolling out r206563.
709         https://bugs.webkit.org/show_bug.cgi?id=162732
710
711         Caused stress/op_*.js.ftl-no-cjit tests to time out (Requested
712         by ryanhaddad on #webkit).
713
714         Reverted changeset:
715
716         "Re-enable StringView life-cycle checking."
717         https://bugs.webkit.org/show_bug.cgi?id=160384
718         http://trac.webkit.org/changeset/206563
719
720 2016-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>
721
722         Clang 3.9 reports a compilation warning about ENABLE_EXCEPTION_SCOPE_VERIFICATION
723         https://bugs.webkit.org/show_bug.cgi?id=162718
724
725         Reviewed by Alex Christensen.
726
727         Clang 3.9 reports a following compilation warning:
728           Source/JavaScriptCore/runtime/VM.h:656:5: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
729
730         * wtf/Platform.h: Changed the definition of ENABLE_EXCEPTION_SCOPE_VERIFICATION not to use 'defined'.
731
732 2016-09-28  Mark Lam  <mark.lam@apple.com>
733
734         Re-enable StringView life-cycle checking.
735         https://bugs.webkit.org/show_bug.cgi?id=160384
736         <rdar://problem/28479434>
737
738         Reviewed by Saam Barati.
739
740         * wtf/text/StringView.h:
741
742 2016-09-28  Filip Pizlo  <fpizlo@apple.com>
743
744         The write barrier should be down with TSO
745         https://bugs.webkit.org/show_bug.cgi?id=162316
746
747         Reviewed by Geoffrey Garen.
748         
749         Added clearRange(), which quickly clears a range of bits. This turned out to be useful for
750         a DFG optimization pass.
751
752         * wtf/FastBitVector.cpp:
753         (WTF::FastBitVector::clearRange):
754         * wtf/FastBitVector.h:
755
756 2016-09-28  Mark Lam  <mark.lam@apple.com>
757
758         Fix race condition in StringView's UnderlyingString lifecycle management.
759         https://bugs.webkit.org/show_bug.cgi?id=162702
760
761         Reviewed by Geoffrey Garen.
762
763         There 2 relevant functions at play:
764
765         void StringView::setUnderlyingString(const StringImpl* string)
766         {
767             UnderlyingString* underlyingString;
768             if (!string)
769                 underlyingString = nullptr;
770             else {
771                 std::lock_guard<StaticLock> lock(underlyingStringsMutex);
772                 auto result = underlyingStrings().add(string, nullptr);
773                 if (result.isNewEntry)
774                     result.iterator->value = new UnderlyingString(*string);
775                 else
776                     ++result.iterator->value->refCount;
777                 underlyingString = result.iterator->value; // Point P2.
778             }
779             adoptUnderlyingString(underlyingString); // Point P5.
780         }
781
782         ... and ...
783
784         void StringView::adoptUnderlyingString(UnderlyingString* underlyingString)
785         {
786             if (m_underlyingString) {
787                 // Point P0.
788                 if (!--m_underlyingString->refCount) {
789                     if (m_underlyingString->isValid) { // Point P1.
790                         std::lock_guard<StaticLock> lock(underlyingStringsMutex);
791                         underlyingStrings().remove(&m_underlyingString->string); // Point P3.
792                     }
793                     delete m_underlyingString; // Point P4.
794                 }
795             }
796             m_underlyingString = underlyingString;
797         }
798
799         Imagine the following scenario:
800
801         1. Thread T1 has been using an UnderlyingString U1, and is now done with it.
802            T1 runs up to point P1 in adoptUnderlyingString(), and is blocked waiting for
803            the underlyingStringsMutex (which is currently being held by Thread T2).
804         2. Context switch to Thread T2.
805            T2 wants to use UnderlyingString U1, and runs up to point P2 in setUnderlyingString()
806            and releases the underlyingStringsMutex.
807            Note: T2 thinks it has successfully refCounted U1, and therefore U1 is safe to use.
808         3. Context switch to Thread T1.
809            T1 acquires the underlyingStringsMutex, and proceeds to remove it from the
810            underlyingStrings() map (see Point P3).  It thinks it has successfully done so
811            and proceeds to delete U1 (see Point P4).
812         4. Context switch to Thread T2.
813            T2 proceeds to use U1 (see Point P5 in setUnderlyingString()).
814            Note: U1 has already been freed.  This is a use after free.
815
816         The fix is to acquire the underlyingStringsMutex at Point P0 in adoptUnderlyingString()
817         instead of after P1.  This ensures that the decrementing of the UnderlyingString
818         refCount and its removal from the underlyingStrings() map is done as an atomic unit.
819
820         Note: If you look in StringView.cpp, you see another setUnderlyingString() which
821         takes a StringView otherString.  This version of setUnderlyingString() can only
822         be called from within the same thread that created the other StringView.  As a
823         result, here, we are guaranteed that the UnderlyingString refCount is never zero,
824         and there's no other threat of another thread trying to delete the UnderlyingString
825         while we adopt it.  Hence, we don't need to acquire the underlyingStringsMutex
826         here.
827
828         This race condition was found when running layout tests fetch/fetch-worker-crash.html
829         and storage/indexeddb/modern/opendatabase-versions.html when CHECK_STRINGVIEW_LIFETIME
830         is enabled.  This issue resulted in those tests crashing due to a use-after-free.
831
832         * wtf/text/StringView.cpp:
833         (WTF::StringView::adoptUnderlyingString):
834         (WTF::StringView::setUnderlyingString):
835
836 2016-09-28  Brent Fulgham  <bfulgham@apple.com>
837
838         Correct 'safeCast' implementation
839         https://bugs.webkit.org/show_bug.cgi?id=162679
840         <rdar://problem/28518189>
841
842         Reviewed by Zalan Bujtas.
843
844         * wtf/StdLibExtras.h:
845         (WTF::safeCast): Use a RELEASE_ASSERT.
846
847 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
848
849         [CMake] Add HAVE_LOCALTIME_R definition
850         https://bugs.webkit.org/show_bug.cgi?id=162636
851
852         Reviewed by Alex Christensen.
853
854         * wtf/DateMath.cpp:
855         (WTF::getLocalTime):
856         * wtf/GregorianDateTime.cpp:
857         (WTF::GregorianDateTime::setToCurrentLocalTime):
858         * wtf/Platform.h:
859
860 2016-09-27  JF Bastien  <jfbastien@apple.com>
861
862         Speed up Heap::isMarkedConcurrently
863         https://bugs.webkit.org/show_bug.cgi?id=162095
864
865         Reviewed by Filip Pizlo.
866
867         Heap::isMarkedConcurrently had a load-load fence which is expensive on weak memory ISAs such as ARM.
868
869         This patch is fairly perf-neutral overall, but the GC's instrumentation reports:
870           GC:Eden is 93% average runtime after change
871           GC:Full is 76% average runtime after change
872
873         The fence was there because:
874          1. If the read of m_markingVersion in MarkedBlock::areMarksStale isn't what's expected then;
875          2. The read of m_marks in MarkedBlock::isMarked needs to observe the value that was stored *before* m_markingVersion was stored.
876
877         This ordering isn't guaranteed on ARM, which has a weak memory model.
878
879         There are 3 ways to guarantee this ordering:
880          A. Use a barrier instruction.
881          B. Use a load-acquire (new in ARMv8).
882          C. use ARM's address dependency rule, which C++ calls memory_order_consume.
883
884         In general:
885          A. is slow but orders all of memory in an intuitive manner.
886          B. is faster-ish and has the same property-ish.
887          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).
888
889         ARM explains the address dependency rule in their document "barrier litmus tests and cookbook":
890
891         > *Resolving by the use of barriers and address dependency*
892         >
893         > There is a rule within the ARM architecture that:
894         > 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).
895         > 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.
896         > Where both a control and address dependency exist, the ordering behaviour is consistent with the address dependency.
897
898         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
899
900         * wtf/Atomics.h:
901         (WTF::zeroWithConsumeDependency): a 0 which carries a dependency
902         (WTF::consumeLoad): pixie magic
903
904 2016-09-27  JF Bastien  <jfbastien@apple.com>
905
906         Atomics.h on Windows: remove seq_cst hack
907         https://bugs.webkit.org/show_bug.cgi?id=162022
908
909         Reviewed by Mark Lam.
910
911         No need to force access to seq_cst, always inlining fixes the MSVC warning.
912
913         * wtf/Atomics.h:
914         (WTF::Atomic::compareExchangeWeak): remove seq_cst hack
915         (WTF::Atomic::compareExchangeStrong): remove seq_cst hack
916         (WTF::Atomic::exchangeAndAdd): remove seq_cst hack
917         (WTF::Atomic::exchange): remove seq_cst hack
918
919 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
920
921         [CMake] Use CMake to determine HAVE_* defines
922         https://bugs.webkit.org/show_bug.cgi?id=162368
923
924         Reviewed by Alex Christensen.
925
926         * wtf/Platform.h:
927
928 2016-09-20  Anders Carlsson  <andersca@apple.com>
929
930         PlatformEvent::m_modifiers should be an OptionSet
931         https://bugs.webkit.org/show_bug.cgi?id=162326
932
933         Reviewed by Daniel Bates.
934
935         * wtf/OptionSet.h:
936         (WTF::OptionSet::operator!=):
937         (WTF::OptionSet::operator-):
938
939 2016-09-27  Jer Noble  <jer.noble@apple.com>
940
941         Remove deprecated ENCRYPTED_MEDIA implementation.
942         https://bugs.webkit.org/show_bug.cgi?id=161010
943
944         Reviewed by Eric Carlson.
945
946         Remove ENABLE_ENCRYPTED_MEDIA.
947
948         * wtf/FeatureDefines.h:
949
950 2016-09-27  Youenn Fablet  <youenn@apple.com>
951
952         [Fetch API] Use Ref<const T> in FetchBody::m_data variant
953         https://bugs.webkit.org/show_bug.cgi?id=162599
954
955         Reviewed by Alex Christensen.
956
957         Enabling to use DeferrableRefCounted<const T> by making m_refCount mutable.
958
959         * wtf/DeferrableRefCounted.h:
960         (WTF::DeferrableRefCountedBase::ref):
961         (WTF::DeferrableRefCountedBase::derefBase):
962         (WTF::DeferrableRefCounted::deref):
963
964 2016-09-26  Daniel Bates  <dabates@apple.com>
965
966         Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
967         https://bugs.webkit.org/show_bug.cgi?id=162365
968
969         Reviewed by Simon Fraser.
970
971         * wtf/FeatureDefines.h:
972
973 2016-09-26  Benjamin Poulain  <benjamin@webkit.org>
974
975         [JSC] Shrink the Math inline caches some more
976         https://bugs.webkit.org/show_bug.cgi?id=162485
977
978         Reviewed by Saam Barati.
979
980         * wtf/Bag.h:
981         Don't copy the arguments before initializing the nodes.
982
983 2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>
984
985         std::unique_ptr deleter functions should not check if pointer is null
986         https://bugs.webkit.org/show_bug.cgi?id=162558
987
988         Reviewed by Alex Christensen.
989
990         std::unique_ptr already does this before calling the deleter.
991
992         * wtf/efl/UniquePtrEfl.h:
993         * wtf/glib/GUniquePtr.h:
994
995 == Rolled over to ChangeLog-2016-09-26 ==