HTMLElement::nodeName should not upper case non-ASCII characters
[WebKit.git] / Source / WTF / ChangeLog
1 2016-01-20  Ryosuke Niwa  <rniwa@webkit.org>
2
3         HTMLElement::nodeName should not upper case non-ASCII characters
4         https://bugs.webkit.org/show_bug.cgi?id=153231
5
6         Reviewed by Darin Adler.
7
8         Added convertToASCIIUppercase to AtomicString, String, and StringImpl. 
9
10         * wtf/text/AtomicString.cpp:
11         (WTF::AtomicString::convertASCIICase): Generalized from convertToASCIILowercase.
12         (WTF::AtomicString::convertToASCIILowercase):
13         (WTF::AtomicString::convertToASCIIUppercase):
14         * wtf/text/AtomicString.h:
15         * wtf/text/StringImpl.cpp:
16         (WTF::StringImpl::convertASCIICase): Generalized from convertToASCIILowercase.
17         (WTF::StringImpl::convertToASCIILowercase):
18         (WTF::StringImpl::convertToASCIIUppercase):
19         * wtf/text/StringImpl.h:
20         * wtf/text/WTFString.cpp:
21         (WTF::String::convertToASCIIUppercase): Added.
22         * wtf/text/WTFString.h:
23
24 2016-01-22  Chris Dumez  <cdumez@apple.com>
25
26         Unreviewed attempt to fix the Windows build after r195452.
27
28         * wtf/text/WTFString.h:
29
30 2016-01-22  Darin Adler  <darin@apple.com>
31
32         Reduce use of equalIgnoringCase to just ignore ASCII case
33         https://bugs.webkit.org/show_bug.cgi?id=153266
34
35         Reviewed by Ryosuke Niwa.
36
37         * wtf/ASCIICType.h:
38         (WTF::isASCIIAlphaCaselessEqual): Loosened the assertion in this function
39         so it can work with ASCII spaces, numeric digits, and some punctuation.
40         Commented that we might want to change its name later.
41
42         * wtf/Assertions.cpp:
43         (WTFInitializeLogChannelStatesFromString): Use equalLettersIgnoringASCIICase.
44
45         * wtf/text/AtomicString.h:
46         (WTF::equalLettersIgnoringASCIICase): Added. Calls the version that takes a String.
47
48         * wtf/text/StringCommon.h:
49         (WTF::equalLettersIgnoringASCIICase): Added. Takes a pointer to characters.
50         (WTF::equalLettersIgnoringASCIICaseCommonWithoutLength): Added.
51         (WTF::equalLettersIgnoringASCIICaseCommon): Added.
52
53         * wtf/text/StringImpl.h:
54         (WTF::equalLettersIgnoringASCIICase): Added. Calls equalLettersIgnoringASCIICaseCommon.
55
56         * wtf/text/StringView.h:
57         (WTF::equalLettersIgnoringASCIICase): Added. Calls equalLettersIgnoringASCIICaseCommon.
58
59         * wtf/text/WTFString.h: Reordered/reformatted a little.
60         (WTF::equalIgnoringASCIICase): Added. Calls the version that takes a StringImpl.
61
62 2016-01-22  Csaba Osztrogonác  <ossy@webkit.org>
63
64         Buildfix for older GCCs after r195142
65         https://bugs.webkit.org/show_bug.cgi?id=153351
66
67         Unreviewed buildfix.
68
69         * wtf/SystemTracing.h:
70
71 2016-01-21  Filip Pizlo  <fpizlo@apple.com>
72
73         REGRESSION(r195417): many tests crash
74         https://bugs.webkit.org/show_bug.cgi?id=153316
75
76         Reviewed by Saam Barati.
77
78         This rolls out the StdLibExtras.h change, and simplifies RangeSet to not use binary search.
79         That's fine for now, since B3 doesn't stress RangeSet enough right now.
80
81         * wtf/RangeSet.h:
82         (WTF::RangeSet::contains):
83         (WTF::RangeSet::overlaps):
84         (WTF::RangeSet::clear):
85         (WTF::RangeSet::findRange):
86         * wtf/StdLibExtras.h:
87         (WTF::binarySearchImpl):
88         (WTF::binarySearch):
89         (WTF::tryBinarySearch):
90         (WTF::approximateBinarySearch):
91
92 2016-01-21  Filip Pizlo  <fpizlo@apple.com>
93
94         B3 should have load elimination
95         https://bugs.webkit.org/show_bug.cgi?id=153288
96
97         Reviewed by Geoffrey Garen.
98
99         I needed a way to track sets of ranges, where there is a high likelihood that all of the
100         ranges overlap. So I created RangeSet. It's a usually-sorted list of coalesced ranges.
101         Practically this means that right now, FTL B3 will end up with two kinds of range sets: a set
102         that just contains top and a set that contains nothing. In the future, most sets will either
103         be top of empty but some of them will contain a handful of other things.
104
105         * WTF.xcodeproj/project.pbxproj:
106         * wtf/CMakeLists.txt:
107         * wtf/MathExtras.h:
108         (WTF::leftShiftWithSaturation):
109         (WTF::nonEmptyRangesOverlap):
110         (WTF::rangesOverlap):
111         * wtf/RangeSet.h: Added.
112         (WTF::RangeSet::RangeSet):
113         (WTF::RangeSet::~RangeSet):
114         (WTF::RangeSet::add):
115         (WTF::RangeSet::contains):
116         (WTF::RangeSet::overlaps):
117         (WTF::RangeSet::clear):
118         (WTF::RangeSet::dump):
119         (WTF::RangeSet::dumpRaw):
120         (WTF::RangeSet::compact):
121         (WTF::RangeSet::overlapsNonEmpty):
122         (WTF::RangeSet::subsumesNonEmpty):
123         (WTF::RangeSet::findRange):
124         * wtf/StdLibExtras.h:
125         (WTF::binarySearchImpl):
126         (WTF::binarySearch):
127         (WTF::tryBinarySearch):
128         (WTF::approximateBinarySearch):
129
130 2016-01-19  Ada Chan  <adachan@apple.com>
131
132         Make it possible to enable VIDEO_PRESENTATION_MODE on other Cocoa platforms.
133         https://bugs.webkit.org/show_bug.cgi?id=153218
134
135         Reviewed by Eric Carlson.
136
137         * wtf/Platform.h:
138
139 2016-01-19  Filip Pizlo  <fpizlo@apple.com>
140
141         B3 should have basic path specialization
142         https://bugs.webkit.org/show_bug.cgi?id=153200
143
144         Reviewed by Benjamin Poulain.
145
146         * wtf/GraphNodeWorklist.h:
147         (WTF::GraphNodeWorklist::push):
148         (WTF::GraphNodeWorklist::pushAll):
149         (WTF::GraphNodeWorklist::isEmpty):
150         (WTF::GraphNodeWorklist::notEmpty):
151
152 2016-01-20  Said Abou-Hallawa  <sabouhallawa@apple.com>
153
154         Refactor AtomicStringKeyedMRUCache to be a generic LRU cache
155         https://bugs.webkit.org/show_bug.cgi?id=153109
156
157         Reviewed by Darin Adler.
158
159         Refactor AtomicStringKeyedMRUCache, move it to WTF project and rename it
160         to be TinyLRUCache. Define another template and call it TinyLRUCachePolicy.
161         This one can be overridden for different keys and values. Its function is 
162         creating the cached values.
163
164         * WTF.xcodeproj/project.pbxproj:
165         * wtf/TinyLRUCache.h: Added.
166         (WebCore::TinyLRUCachePolicy::isKeyNull):
167         (WebCore::TinyLRUCachePolicy::createValueForNullKey):
168         (WebCore::TinyLRUCachePolicy::createValueForKey):
169         (WebCore::TinyLRUCache::get):
170
171 2016-01-19  Saam barati  <sbarati@apple.com>
172
173         WTF::Bag should be non-copyable
174         https://bugs.webkit.org/show_bug.cgi?id=153253
175
176         Reviewed by Filip Pizlo.
177
178         * wtf/Bag.h:
179         * wtf/SegmentedVector.h:
180         (WTF::SegmentedVector::append):
181         (WTF::SegmentedVector::alloc):
182
183 2016-01-19  Enrica Casucci  <enrica@apple.com>
184
185         Add support for DataDetectors in WK (iOS).
186         https://bugs.webkit.org/show_bug.cgi?id=152989
187         rdar://problem/22855960
188
189         Reviewed by Tim Horton.
190
191         Adding feature definition for data detection.
192
193         * wtf/FeatureDefines.h:
194
195 2016-01-19  Commit Queue  <commit-queue@webkit.org>
196
197         Unreviewed, rolling out r195300.
198         https://bugs.webkit.org/show_bug.cgi?id=153244
199
200         enrica wants more time to fix Windows (Requested by thorton on
201         #webkit).
202
203         Reverted changeset:
204
205         "Add support for DataDetectors in WK (iOS)."
206         https://bugs.webkit.org/show_bug.cgi?id=152989
207         http://trac.webkit.org/changeset/195300
208
209 2016-01-19  Chris Dumez  <cdumez@apple.com>
210
211         Unreviewed, rolling out r195141.
212
213         Seems to cause crashes on iOS9 64bit
214
215         Reverted changeset:
216
217         "Fragmentation-free allocator for timeless and/or coupled
218         allocations."
219         https://bugs.webkit.org/show_bug.cgi?id=152696
220         http://trac.webkit.org/changeset/195141
221
222 2016-01-19  Enrica Casucci  <enrica@apple.com>
223
224         Add support for DataDetectors in WK (iOS).
225         https://bugs.webkit.org/show_bug.cgi?id=152989
226         rdar://problem/22855960
227
228         Reviewed by Tim Horton.
229
230         Adding feature definition for data detection.
231
232         * wtf/FeatureDefines.h:
233
234 2016-01-17  Filip Pizlo  <fpizlo@apple.com>
235
236         FTL B3 should be just as fast as FTL LLVM on Octane/crypto
237         https://bugs.webkit.org/show_bug.cgi?id=153113
238
239         Reviewed by Saam Barati.
240
241         * wtf/IndexSparseSet.h:
242         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
243         (WTF::IndexSparseSet<OverflowHandler>::add):
244         (WTF::IndexSparseSet<OverflowHandler>::remove):
245         * wtf/StringPrintStream.h:
246         (WTF::StringPrintStream::length):
247
248 2016-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>
249
250         [CMake] Do not build bmalloc when USE_SYSTEM_MALLOC is ON
251         https://bugs.webkit.org/show_bug.cgi?id=153190
252
253         Reviewed by Csaba Osztrogonác.
254
255         Build bmalloc when NOT USE_SYSTEM_MALLOC rather than when NOT WIN32.
256
257         * wtf/CMakeLists.txt:
258
259 2016-01-15  Simon Fraser  <simon.fraser@apple.com>
260
261         Add kdebug_trace signposts for a few WebCore operations
262         https://bugs.webkit.org/show_bug.cgi?id=153136
263         rdar://problem/24208487
264
265         Reviewed by Sam Weinig.
266         
267         New header with the reserved WebKit component code, trace point codes, and
268         a stack-based helper that traces scope entry and exit.
269         
270         The available range of trace point codes is arbitrarily segmented into WTF, JSC,
271         WebCore, WebKit and WebKit2.
272
273         * WTF.xcodeproj/project.pbxproj:
274         * wtf/CMakeLists.txt:
275         * wtf/SystemTracing.h: Added.
276         (WTF::TraceScope::TraceScope):
277         (WTF::TraceScope::~TraceScope):
278
279 2016-01-15  Andreas Kling  <akling@apple.com>
280
281         Fragmentation-free allocator for timeless and/or coupled allocations.
282         <https://webkit.org/b/152696>
283
284         Reviewed by Antti Koivisto.
285
286         Introduce BumpArena, a space-efficient memory allocator for situations where
287         you feel pretty confident betting on allocation lifetimes.
288
289         Basic design:
290
291             - Reserves 128MB range of memory at startup.
292             - Allocates 4kB-aligned blocks of 4kB from VM at a time.
293             - Bump-pointer allocates out of a block until it reaches end.
294             - Each allocation increments the ref-count of its block.
295             - Each deallocation decrements the ref-count of its block.
296             - Transparently falls back to fastMalloc()/fastFree() when needed.
297
298         Interface:
299
300             - BumpArena::create()
301
302                 Create your very own BumpArena!
303
304             - BumpArena::allocate(BumpArena* arena, size_t size)
305
306                 Allocates 'size' bytes of memory from 'arena'.
307                 If 'arena' is null, falls back to fastMalloc().
308
309             - BumpArena::deallocate(void* ptr)
310
311                 If 'ptr' is BumpArena allocation, decrements block ref-count.
312                 If 'ptr' is FastMalloc allocation, calls fastFree() on it.
313
314             - WTF_MAKE_BUMPARENA_ALLOCATED;
315
316                 Macro that gives a class or struct custom operators new and delete
317                 for allocation out of BumpArena. Just like WTF_MAKE_FAST_ALLOCATED;
318
319         Note that while the name of this patch says "fragmentation-free allocator"
320         it will only be fragmentation-free when used for appropriate things.
321         This is not meant to be a general-purpose allocator. Only use it for sets of
322         allocations that are known to die roughly at the same time.
323
324         BumpArena will never resume allocating from a block that has been filled,
325         so it's even more important than usual that everything gets deallocated.
326
327         BumpArena redirects allocations to FastMalloc in three cases:
328
329             - When invoked with a null BumpArena*
330             - When allocation request is larger than BumpArena's block size (4kB)
331             - When BumpArena has exhausted all of its pre-reserved VM. (128MB)
332
333         The VM allocator will eagerly return blocks of VM to the kernel by calling
334         madvise(). Average time spent in madvise is around 0.007ms on my box.
335
336         * WTF.vcxproj/WTF.vcxproj:
337         * WTF.vcxproj/WTF.vcxproj.filters:
338         * WTF.xcodeproj/project.pbxproj:
339         * wtf/BumpArena.cpp: Added.
340         (WTF::BumpArena::Block::capacity):
341         (WTF::BumpArena::Block::arena):
342         (WTF::BumpArena::Block::payloadStart):
343         (WTF::arenas):
344         (WTF::BumpArena::Block::Block):
345         (WTF::BumpArena::Block::~Block):
346         (WTF::BumpArena::Block::ref):
347         (WTF::BlockAllocator::BlockAllocator):
348         (WTF::BlockAllocator::isAllocation):
349         (WTF::blockAllocator):
350         (WTF::BlockAllocator::allocateBlock):
351         (WTF::BlockAllocator::deallocateBlock):
352         (WTF::BumpArena::Block::deref):
353         (WTF::BumpArena::Block::create):
354         (WTF::BumpArena::Block::dump):
355         (WTF::BumpArena::dump):
356         (WTF::BumpArena::create):
357         (WTF::BumpArena::BumpArena):
358         (WTF::BumpArena::~BumpArena):
359         (WTF::BumpArena::allocateSlow):
360         (WTF::BumpArena::allocate):
361         (WTF::BumpArena::deallocate):
362         (WTF::BumpArena::Block::blockFor):
363         (WTF::BumpArena::arenaFor):
364         * wtf/BumpArena.h: Added.
365         * wtf/CMakeLists.txt:
366
367 2016-01-15  Konstantin Tokarev  <annulen@yandex.ru>
368
369         [EFL] WorkQueue methods should be defined inside WTF namespace.
370         https://bugs.webkit.org/show_bug.cgi?id=153097
371
372         Reviewed by Gyuyoung Kim.
373
374         * wtf/efl/WorkQueueEfl.cpp:
375
376 2016-01-14  Chris Dumez  <cdumez@apple.com>
377
378         Unreviewed, rolling out r195035.
379
380         Caused 1-3% PLT regression on iOS
381
382         Reverted changeset:
383
384         "Part 2/2: Stop using USE(CFNETWORK) path on iOS"
385         https://bugs.webkit.org/show_bug.cgi?id=142540
386         http://trac.webkit.org/changeset/195035
387
388 2016-01-14  David Kilzer  <ddkilzer@apple.com>
389
390         Part 2/2: Stop using USE(CFNETWORK) path on iOS
391         <https://webkit.org/b/142540>
392
393         Original patch by Antti Koivisto <antti@apple.com> on 2015-03-10
394         Reviewed by Chris Dumez.
395
396         * wtf/Platform.h: Turn off USE(CFNETWORK) for PLATFORM(IOS).
397
398 2016-01-14  Per Arne Vollan  <peavo@outlook.com>
399
400         [Win] Remove workarounds for fixed bugs in fmod and pow.
401         https://bugs.webkit.org/show_bug.cgi?id=153071
402
403         Reviewed by Brent Fulgham.
404
405         The bugs have been fixed in the MSVC CRT, and we can remove the workarounds.
406
407         * wtf/MathExtras.h:
408         (wtf_fmod): Deleted.
409         (wtf_pow): Deleted.
410
411 2016-01-13  Commit Queue  <commit-queue@webkit.org>
412
413         Unreviewed, rolling out r194963.
414         https://bugs.webkit.org/show_bug.cgi?id=153079
415
416         This change causes ASan tests to crash and exit early
417         (Requested by ryanhaddad on #webkit).
418
419         Reverted changeset:
420
421         "Fragmentation-free allocator for timeless and/or coupled
422         allocations."
423         https://bugs.webkit.org/show_bug.cgi?id=152696
424         http://trac.webkit.org/changeset/194963
425
426 2016-01-13  Andreas Kling  <akling@apple.com>
427
428         Fragmentation-free allocator for timeless and/or coupled allocations.
429         <https://webkit.org/b/152696>
430
431         Reviewed by Antti Koivisto.
432
433         Introduce BumpArena, a space-efficient memory allocator for situations where
434         you feel pretty confident betting on allocation lifetimes.
435
436         Basic design:
437
438             - Allocates 4kB-aligned blocks of 4kB from bmalloc at a time.
439             - Bump-pointer allocates out of a block until it reaches end.
440             - Each allocation increments the ref-count of its block.
441             - Each deallocation decrements the ref-count of its block.
442
443         Interface:
444
445             - BumpArena::create()
446
447                 Create your very own BumpArena!
448
449             - BumpArena::allocate(BumpArena* arena, size_t size)
450
451                 Allocates 'size' bytes of memory from 'arena'.
452                 If 'arena' is null, allocation comes out of the shared global BumpArena.
453
454             - BumpArena::deallocate(void* ptr)
455
456                 Deallocates 'ptr', decrementing the ref-count of its block.
457
458             - WTF_MAKE_BUMPARENA_ALLOCATED;
459
460                 Macro that gives a class or struct custom operators new and delete
461                 for allocation out of BumpArena. Just like WTF_MAKE_FAST_ALLOCATED;
462
463         Note that while the name of this patch says "fragmentation-free allocator"
464         it will only be fragmentation-free when used for appropriate things.
465         This is not meant to be a general-purpose allocator. Only use it for sets of
466         allocations that are known to die roughly at the same time.
467
468         BumpArena will never resume allocating from a block that has been filled,
469         so it's even more important than usual that everything gets deallocated.
470
471         As noted above, calling allocate() with a null BumpArena will allocate out
472         of a global shared arena. Ideally you're always allocating out of a specific,
473         controlled arena, but there are situations where you may not have one.
474
475         * WTF.vcxproj/WTF.vcxproj:
476         * WTF.vcxproj/WTF.vcxproj.filters:
477         * WTF.xcodeproj/project.pbxproj:
478         * wtf/BumpArena.cpp: Added.
479         (WTF::BumpArena::Block::defaultCapacity):
480         (WTF::BumpArena::Block::arena):
481         (WTF::BumpArena::Block::payloadStart):
482         (WTF::globalArena):
483         (WTF::arenas):
484         (WTF::BumpArena::Block::Block):
485         (WTF::BumpArena::Block::~Block):
486         (WTF::BumpArena::Block::ref):
487         (WTF::BumpArena::Block::deref):
488         (WTF::BumpArena::Block::create):
489         (WTF::BumpArena::Block::dump):
490         (WTF::BumpArena::dump):
491         (WTF::BumpArena::create):
492         (WTF::BumpArena::BumpArena):
493         (WTF::BumpArena::~BumpArena):
494         (WTF::BumpArena::allocateSlow):
495         (WTF::BumpArena::allocate):
496         (WTF::BumpArena::deallocate):
497         (WTF::BumpArena::Block::blockFor):
498         (WTF::BumpArena::arenaFor):
499         * wtf/BumpArena.h: Added.
500         * wtf/CMakeLists.txt:
501
502 2016-01-08  Andy Estes  <aestes@apple.com>
503
504         [Content Filtering] Lazily load platform frameworks
505         https://bugs.webkit.org/show_bug.cgi?id=152881
506         rdar://problem/23270886
507
508         Reviewed by Brady Eidson.
509
510         * wtf/Platform.h: Moved definition of HAVE_NETWORK_EXTENSION to here from WebCore/platform/cocoa/NetworkExtensionContentFilter.h.
511
512 2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>
513
514         Add a build flag for custom element
515         https://bugs.webkit.org/show_bug.cgi?id=153005
516
517         Reviewed by Alex Christensen.
518
519         * wtf/FeatureDefines.h:
520
521 2016-01-11  Andreas Kling  <akling@apple.com>
522
523         NeverDestroyed should relax adoption requirements on all RefCountedBase subclasses.
524         <https://webkit.org/b/152960>
525
526         Reviewed by Antti Koivisto.
527
528         Instead of relaxing on subclasses of RefCounted<T>, relax on subclasses of RefCountedBase.
529         This allows e.g NeverDestroyed<CSSPrimitiveValue> to relax its pointee despite the class
530         hierarchy starting with RefCounted<CSSValue> (not RefCounted<CSSPrimitiveValue>.)
531
532         * wtf/NeverDestroyed.h:
533
534 2016-01-10  Saam barati  <sbarati@apple.com>
535
536         Implement a sampling profiler
537         https://bugs.webkit.org/show_bug.cgi?id=151713
538
539         Reviewed by Filip Pizlo.
540
541         * wtf/MetaAllocator.cpp:
542         (WTF::MetaAllocator::decrementPageOccupancy):
543         (WTF::MetaAllocator::isInAllocatedMemory):
544         (WTF::MetaAllocator::roundUp):
545         * wtf/MetaAllocator.h:
546         (WTF::MetaAllocator::getLock):
547         * wtf/Platform.h:
548
549 2016-01-10  Filip Pizlo  <fpizlo@apple.com>
550
551         It should be possible to run liveness over registers without also tracking Tmps
552         https://bugs.webkit.org/show_bug.cgi?id=152963
553
554         Reviewed by Saam Barati.
555
556         Add set methods (add/contains/remove) to BitVector, since it gets used as a set in a lot of
557         places. This also makes BitVector a drop-in replacement for HashSet<unsigned> in a lot of
558         places.
559
560         Also made the iterator methods of BitVector live on BitVector directly rather than behind the
561         thing returned from setBits(). This makes sense since that makes BitVector even more of a
562         drop-in for HashSet. It's not harmful since we've never added any other mode of iterating a
563         BitVector other than this, so it doesn't make sense to make it harder to access.
564
565         * wtf/BitVector.h:
566         (WTF::BitVector::get):
567         (WTF::BitVector::contains):
568         (WTF::BitVector::set):
569         (WTF::BitVector::add):
570         (WTF::BitVector::ensureSizeAndSet):
571         (WTF::BitVector::clear):
572         (WTF::BitVector::remove):
573         (WTF::BitVector::hash):
574         (WTF::BitVector::iterator::iterator):
575         (WTF::BitVector::iterator::operator*):
576         (WTF::BitVector::iterator::operator++):
577         (WTF::BitVector::iterator::operator==):
578         (WTF::BitVector::iterator::operator!=):
579         (WTF::BitVector::begin):
580         (WTF::BitVector::end):
581         (WTF::BitVector::bitsInPointer):
582         (WTF::BitVector::SetBitsIterable::SetBitsIterable): Deleted.
583         (WTF::BitVector::SetBitsIterable::iterator::iterator): Deleted.
584         (WTF::BitVector::SetBitsIterable::iterator::operator*): Deleted.
585         (WTF::BitVector::SetBitsIterable::iterator::operator++): Deleted.
586         (WTF::BitVector::SetBitsIterable::iterator::operator==): Deleted.
587         (WTF::BitVector::SetBitsIterable::iterator::operator!=): Deleted.
588         (WTF::BitVector::SetBitsIterable::begin): Deleted.
589         (WTF::BitVector::SetBitsIterable::end): Deleted.
590         (WTF::BitVector::setBits): Deleted.
591
592 2016-01-09  Andreas Kling  <akling@apple.com>
593
594         Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL
595         <https://webkit.org/b/152902>
596
597         Reviewed by Anders Carlsson.
598
599         Mostly mechanical conversion to NeverDestroyed throughout WTF.
600
601         * wtf/RunLoop.cpp:
602         (WTF::RunLoop::current):
603         * wtf/ThreadingPthreads.cpp:
604         (WTF::threadMapMutex):
605         (WTF::threadMap):
606
607 2016-01-08  Anders Carlsson  <andersca@apple.com>
608
609         Nullopt and InPlace should be structs, not enum values
610         https://bugs.webkit.org/show_bug.cgi?id=152915
611
612         Reviewed by Andreas Kling.
613
614         Without this, 
615
616         Optional<int> o = flag ? 1 : Nullopt;
617
618         would cause Nullopt to be treated as an integer, causing o to be initialized to 0,
619         instead of Nullopt. With this change, the above code now causes a compile error.
620
621         Also, get rid of the CONSTEXPR macro since all compilers support constexpr properly,
622         and add a WTF::makeOptional to match the current iteration of std::experimental::optional.
623
624         * wtf/Compiler.h:
625         * wtf/Forward.h:
626         * wtf/Optional.h:
627         (WTF::NulloptTag::NulloptTag):
628         (WTF::makeOptional):
629         * wtf/StdLibExtras.h:
630         (std::literals::chrono_literals::operator _s):
631         (std::literals::chrono_literals::operator _ms):
632         (std::move):
633
634 2016-01-06  Anders Carlsson  <andersca@apple.com>
635
636         Add a smart block pointer
637         https://bugs.webkit.org/show_bug.cgi?id=152799
638
639         Reviewed by Tim Horton.
640
641         Introduce WTF::BlockPtr, a smart block pointer.
642
643         * WTF.xcodeproj/project.pbxproj:
644         * wtf/BlockPtr.h: Added.
645         (WTF::makeBlockPtr):
646
647 2016-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>
648
649         [GTK] Allow to save and restore session
650         https://bugs.webkit.org/show_bug.cgi?id=115600
651
652         Reviewed by Michael Catanzaro.
653
654         Add GVariantIter specialization of GUniquePtr.
655
656         * wtf/glib/GTypedefs.h:
657         * wtf/glib/GUniquePtr.h:
658
659 2016-01-04  Tim Horton  <timothy_horton@apple.com>
660
661         Turn on gesture events when building for Yosemite
662         https://bugs.webkit.org/show_bug.cgi?id=152704
663         rdar://problem/24042472
664
665         Reviewed by Anders Carlsson.
666
667         * wtf/FeatureDefines.h:
668
669 2016-01-04  Benjamin Poulain  <bpoulain@apple.com>
670
671         [JSC] Build B3 by default on iOS ARM64
672         https://bugs.webkit.org/show_bug.cgi?id=152525
673
674         Reviewed by Filip Pizlo.
675
676         * wtf/Platform.h:
677
678 2016-01-03  Andreas Kling  <akling@apple.com>
679
680         Unreviewed, rolling out r194510.
681
682         Broke 2 API tests, no time to investigate right now
683
684         Reverted changeset:
685
686         "StringBuilder often creates two StringImpls."
687         https://bugs.webkit.org/show_bug.cgi?id=152662
688         http://trac.webkit.org/changeset/194510
689
690 2016-01-03  Khem Raj  <raj.khem@gmail.com>
691
692         WebKit fails to build with musl libc library
693         https://bugs.webkit.org/show_bug.cgi?id=152625
694
695         Reviewed by Daniel Bates.
696
697         Disable ctype.h check for musl C library on Linux.
698         Enable backtrace on Linux when using glibc.
699         We don't have backtrace() implemented on non-glibc system
700         C libraries on Linux e.g. musl.
701
702         * wtf/DisallowCType.h: Check for __GLIBC__.
703         * wtf/Assertions.cpp:
704         (WTFGetBacktrace): Check if libc is glibc.
705
706 2016-01-03  Andreas Kling  <akling@apple.com>
707
708         StringBuilder often creates two StringImpls.
709         <https://webkit.org/b/152662>
710
711         Reviewed by Anders Carlsson.
712
713         If StringBuilder didn't manage to guess the exact final length of the
714         string being built, it would still keep the buffer around, and the final
715         build process would then return a substring into that buffer.
716
717         This effectively yielded two StringImpls instead of one, with the substring
718         retaining the longer buffer StringImpl.
719
720         This patch improves the situation by having StringImpl crop the buffer's
721         m_length field to the final built string length. That way we never have to
722         return a substring.
723
724         * wtf/text/StringBuilder.cpp:
725         (WTF::StringBuilder::reifyString):
726         * wtf/text/StringImpl.h:
727
728 2016-01-03  Andreas Kling  <akling@apple.com>
729
730         Remove redundant StringImpl substring creation function.
731         <https://webkit.org/b/152652>
732
733         Reviewed by Daniel Bates.
734
735         Remove StringImpl::createSubstringSharingImpl8() and make the only
736         caller use createSubstringSharingImpl() instead.
737         
738         They do the same thing anyway, the only difference is that the branch
739         on is8Bit() now happens in the callee instead of at the call site.
740
741         * wtf/text/StringImpl.h:
742         (WTF::StringImpl::createSubstringSharingImpl8): Deleted.
743
744 2015-12-31  Andy Estes  <aestes@apple.com>
745
746         Replace WTF::move with WTFMove
747         https://bugs.webkit.org/show_bug.cgi?id=152601
748
749         Reviewed by Brady Eidson.
750
751         This also removes the definition of WTF::move.
752
753         * wtf/Deque.h:
754         * wtf/HashMap.h:
755         * wtf/HashSet.h:
756         * wtf/HashTable.h:
757         (WTF::HashTable::add):
758         (WTF::KeyTraits>::HashTable):
759         * wtf/Insertion.h:
760         (WTF::executeInsertions):
761         * wtf/IteratorAdaptors.h:
762         (WTF::FilterIterator::FilterIterator):
763         (WTF::TransformIterator::TransformIterator):
764         (WTF::makeTransformIterator):
765         * wtf/IteratorRange.h:
766         (WTF::IteratorRange::IteratorRange):
767         * wtf/ListHashSet.h:
768         (WTF::U>::takeFirst):
769         (WTF::U>::takeLast):
770         * wtf/MainThread.cpp:
771         (WTF::callOnMainThread):
772         * wtf/MallocPtr.h:
773         (WTF::MallocPtr::operator=):
774         * wtf/MessageQueue.h:
775         (WTF::MessageQueue<DataType>::append):
776         (WTF::MessageQueue<DataType>::appendAndKill):
777         (WTF::MessageQueue<DataType>::appendAndCheckEmpty):
778         (WTF::MessageQueue<DataType>::prepend):
779         * wtf/NakedPtr.h:
780         (WTF::=):
781         * wtf/OSObjectPtr.h:
782         (WTF::OSObjectPtr::operator=):
783         * wtf/Optional.h:
784         (WTF::Optional::Optional):
785         (WTF::Optional::operator=):
786         * wtf/RefPtr.h:
787         (WTF::=):
788         * wtf/RetainPtr.h:
789         (WTF::=):
790         * wtf/RunLoop.cpp:
791         (WTF::RunLoop::dispatch):
792         * wtf/SharedTask.h:
793         (WTF::createSharedTask):
794         * wtf/StdLibExtras.h:
795         (WTF::move): Deleted.
796         * wtf/Threading.cpp:
797         (WTF::threadEntryPoint):
798         (WTF::createThread):
799         * wtf/Vector.h:
800         (WTF::Vector::takeLast):
801         * wtf/efl/DispatchQueueEfl.cpp:
802         (DispatchQueue::dispatch):
803         (DispatchQueue::setSocketEventHandler):
804         (DispatchQueue::performTimerWork):
805         (DispatchQueue::insertTimerWorkItem):
806         * wtf/efl/DispatchQueueWorkItemEfl.h:
807         (WorkItem::WorkItem):
808         (TimerWorkItem::create):
809         (TimerWorkItem::TimerWorkItem):
810         * wtf/efl/WorkQueueEfl.cpp:
811         (WorkQueue::registerSocketEventHandler):
812         (WorkQueue::dispatch):
813         (WorkQueue::dispatchAfter):
814         * wtf/glib/GRefPtr.h:
815         (WTF::=):
816         * wtf/glib/WorkQueueGLib.cpp:
817         (WTF::DispatchAfterContext::DispatchAfterContext):
818         (WTF::WorkQueue::dispatchAfter):
819         * wtf/text/AtomicString.h:
820         (WTF::AtomicString::AtomicString):
821         (WTF::AtomicString::operator=):
822         * wtf/text/StringConcatenate.h:
823         (WTF::tryMakeString):
824         * wtf/text/WTFString.cpp:
825         (WTF::String::isolatedCopy):
826         * wtf/text/WTFString.h:
827         (WTF::String::String):
828         (WTF::StringCapture::releaseString):
829         * wtf/win/GDIObject.h:
830         (WTF::=):
831
832 2015-12-31  David Kilzer  <ddkilzer@apple.com>
833
834         Stop using USE(CFNETWORK) path on iOS
835         <https://webkit.org/b/142540>
836
837         Step 1/2: Do everything but turn off USE(CFNETWORK) internally.
838
839         Original patch by Antti Koivisto <antti@apple.com> on 2015-03-10
840         Reviewed by Daniel Bates.
841
842         * wtf/SchedulePair.h: Update macros to match WebCore.
843
844 2015-12-31  Andy Estes  <aestes@apple.com>
845
846         Rename WTF_MOVE to WTFMove
847         https://bugs.webkit.org/show_bug.cgi?id=152601
848
849         Reviewed by Daniel Bates.
850
851         Our coding style guidelines say that macros that expand to function calls should be named like functions,
852         so WTFMove() is a more appropriate name.
853
854         * wtf/StdLibExtras.h:
855
856 2015-12-30  Andy Estes  <aestes@apple.com>
857
858         Use of WTF::move prevents clang's move diagnostics from warning about several classes of mistakes
859         https://bugs.webkit.org/show_bug.cgi?id=152601
860
861         Reviewed by Brady Eidson.
862
863         Clang has recently added warnings to catch certain classes of mistakes with the use of std::move():
864         -Wpessimizing-move (warns if moving prevents copy elision), -Wredundant-move (warns if a move is redundant),
865         and -Wself-move (warns if moving to self). Enabling these warnings manually (by renaming WTF::move to std::move)
866         have caught numerous mistakes in our codebase (see http://trac.webkit.org/changeset/194428).
867
868         It would be nice to be able to take advantage of these warnings, but doing so requires that we use std::move,
869         not WTF::move. But since WTF::move does provide useful checks for which clang does not yet have warnings,
870         we should write a best-of-both-worlds move function.
871
872         This patch adds a function that satisfies clang's criteria for a move function (in namespace std, named "move",
873         and takes a single argument) but also retains WTF::move's compile-time checks. It also adds a convenience macro
874         called WTF_MOVE for use by callers.
875
876         * wtf/StdLibExtras.h:
877         (std::move):
878
879 2015-12-25  Andy Estes  <aestes@apple.com>
880
881         Stop moving local objects in return statements
882         https://bugs.webkit.org/show_bug.cgi?id=152557
883
884         Reviewed by Brady Eidson.
885
886         * wtf/StdLibExtras.h: Added a FIXME about how using WTF::move() prevents several Clang diagnostics from emitting useful warnings.
887
888 2015-12-22  Filip Pizlo  <fpizlo@apple.com>
889
890         FTL B3 should be able to run richards
891         https://bugs.webkit.org/show_bug.cgi?id=152514
892
893         Reviewed by Michael Saboff.
894
895         Change the list dumping helpers to work with a broader set of list kinds.
896
897         * wtf/ListDump.h:
898         (WTF::ListDump::dump):
899         (WTF::MapDump::dump):
900         (WTF::sortedMapDump):
901         (WTF::ListDumpInContext::dump):
902
903 2015-12-22  Filip Pizlo  <fpizlo@apple.com>
904
905         FTL B3 does not logicalNot correctly
906         https://bugs.webkit.org/show_bug.cgi?id=152512
907
908         Reviewed by Saam Barati.
909
910         This change introduces yet another use of SharedTask in JSC. While doing this, I noticed that
911         SharedTask::run() always demands that whatever arguments the callback takes, they must be
912         passed as rvalue references. This was a clear misuse of perfect forwarding. This change makes
913         SharedTask's approach to forwarding match what we were already doing in ScopedLambda.
914
915         * wtf/SharedTask.h:
916
917 2015-12-20  Michael Catanzaro  <mcatanzaro@igalia.com>
918
919         [SOUP] Performs DNS prefetch when a proxy is configured (information leak)
920         https://bugs.webkit.org/show_bug.cgi?id=145542
921
922         Reviewed by Darin Adler.
923
924         Specialize GUniquePtr<char*>, using g_strfreev.
925
926         * wtf/glib/GUniquePtr.h:
927
928 2015-12-19  Dan Bernstein  <mitz@apple.com>
929
930         [Mac] WebKit contains dead source code for OS X Mavericks and earlier
931         https://bugs.webkit.org/show_bug.cgi?id=152462
932
933         Reviewed by Alexey Proskuryakov.
934
935         * Configurations/DebugRelease.xcconfig: Removed definition of MACOSX_DEPLOYMENT_TARGET for
936           OS X 10.9.
937
938         - Simplified expressions involving __MAC_OS_X_VERSION_MIN_REQUIRED and removed code that was
939           never getting compiled:
940
941         * wtf/FeatureDefines.h:
942         * wtf/MainThread.h:
943         * wtf/OSObjectPtr.h:
944         * wtf/Platform.h:
945         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
946         * wtf/spi/darwin/XPCSPI.h:
947
948 2015-12-17  Sukolsak Sakshuwong  <sukolsak@gmail.com>
949
950         [INTL] Implement Collator Compare Functions
951         https://bugs.webkit.org/show_bug.cgi?id=147604
952
953         Reviewed by Darin Adler.
954
955         * wtf/unicode/Collator.h:
956
957 2015-12-16  Andreas Kling  <akling@apple.com>
958
959         Give kernel VM some hints about non-live memory-cached resources.
960         <https://webkit.org/b/152362>
961
962         Reviewed by Geoffrey Garen.
963
964         Add an API to OSAllocator for hinting to the OS that a range of memory
965         is not expected to be used anytime soon.
966
967         * wtf/OSAllocator.h:
968         * wtf/OSAllocatorPosix.cpp:
969         (WTF::OSAllocator::hintMemoryNotNeededSoon):
970         * wtf/OSAllocatorWin.cpp:
971         (WTF::OSAllocator::hintMemoryNotNeededSoon):
972         * wtf/Platform.h:
973
974 2015-12-16  Alex Christensen  <achristensen@webkit.org>
975
976         Fix internal Windows build
977         https://bugs.webkit.org/show_bug.cgi?id=152364
978         rdar://problem/23928759
979
980         Reviewed by Tim Horton.
981
982         * WTF.vcxproj/WTF.proj:
983
984 2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>
985
986         [Fetch API] Add fetch API compile time flag
987         https://bugs.webkit.org/show_bug.cgi?id=152254
988
989         Reviewed by Darin Adler.
990
991         * wtf/FeatureDefines.h:
992
993 2015-12-14  Yusuke Suzuki  <utatane.tea@gmail.com>
994
995         Math.random should have an intrinsic thunk and it should be later handled as a DFG Node
996         https://bugs.webkit.org/show_bug.cgi?id=152133
997
998         Reviewed by Geoffrey Garen.
999
1000         Change 64bit random to double logic to convert efficiently.
1001
1002         * wtf/WeakRandom.h:
1003         (WTF::WeakRandom::get):
1004         (WTF::WeakRandom::lowOffset):
1005         (WTF::WeakRandom::highOffset):
1006
1007 2015-12-14  Sukolsak Sakshuwong  <sukolsak@gmail.com>
1008
1009         Make UCharIterator createIterator(StringView) visible to other classes
1010         https://bugs.webkit.org/show_bug.cgi?id=151917
1011
1012         Reviewed by Darin Adler.
1013
1014         Make UCharIterator createIterator(StringView) in CollatorICU.cpp visible
1015         to other classes so that future patches that will ucol_strcollIter
1016         (including Bug 147604) can use it.
1017
1018         * wtf/unicode/Collator.h:
1019         * wtf/unicode/icu/CollatorICU.cpp:
1020         (WTF::createIterator):
1021
1022 2015-12-14  David Kilzer  <ddkilzer@apple.com>
1023
1024         REGRESSION (r162777): Remove Boost Software License from WTF
1025         <http://webkit.org/b/152243>
1026
1027         Reviewed by Darin Adler.
1028
1029         The source code that the Boost Software License was referring to
1030         was removed in r162777 by switching to std::atomic.
1031
1032         * wtf/Atomics.cpp:
1033         * wtf/Atomics.h:
1034         * wtf/ThreadSafeRefCounted.h:
1035         - Remove Boost Software License.
1036         - Update Apple Inc. copyright as needed.
1037         - Refresh Apple Inc. license text.
1038
1039 2015-12-10  Joseph Pecoraro  <pecoraro@apple.com>
1040
1041         Remote Inspector: Verify the identity of the other side of XPC connections
1042         https://bugs.webkit.org/show_bug.cgi?id=152153
1043
1044         Reviewed by Brian Burg.
1045
1046         * WTF.xcodeproj/project.pbxproj:
1047         * wtf/spi/cocoa/SecuritySPI.h: Renamed from Source/WebCore/platform/spi/cocoa/SecuritySPI.h.
1048         Push this down into WTF from WebCore and add a new method.
1049
1050 2015-12-08  Filip Pizlo  <fpizlo@apple.com>
1051
1052         FTL B3 should have basic GetById support
1053         https://bugs.webkit.org/show_bug.cgi?id=152035
1054
1055         Reviewed by Saam Barati.
1056
1057         When dealing with shared task lambdas, you often want to force a value to be allocated so that it
1058         has reference semantics, but you still want the lambda to execute OK when we pop stack. In PL we
1059         usually call this a "box". This is easy to do if the value that happened to be stack-allocated
1060         is also RefCounted, but that's rare, since stack-allocated values often have copy semantics. So,
1061         I've added a Box type to WTF. Behind the scenes, it allocates your object with fast malloc inside
1062         a ThreadSAfeRefCounted. When you pass Box<T>, you're passing the reference. This makes it a lot
1063         easier to work with by-reference capture.
1064
1065         * WTF.xcodeproj/project.pbxproj:
1066         * wtf/Box.h: Added.
1067         (WTF::Box::Box):
1068         (WTF::Box::create):
1069         (WTF::Box::get):
1070         (WTF::Box::operator*):
1071         (WTF::Box::operator->):
1072         (WTF::Box::operator bool):
1073         (WTF::Box::Data::Data):
1074
1075 2015-12-09  Andreas Kling  <akling@apple.com>
1076
1077         [iOS] ResourceUsageOverlay should work on iOS.
1078         <https://webkit.org/b/152021>
1079
1080         Reviewed by Antti Koivisto.
1081
1082         * wtf/Platform.h: Enable RESOURCE_USAGE_OVERLAY for all COCOA platforms.
1083
1084 2015-12-08  Joseph Pecoraro  <pecoraro@apple.com>
1085
1086         Create a Sandbox SPI header
1087         https://bugs.webkit.org/show_bug.cgi?id=151981
1088
1089         Reviewed by Andy Estes.
1090
1091         * WTF.xcodeproj/project.pbxproj:
1092         * wtf/spi/darwin/SandboxSPI.h: Added.
1093
1094 2015-12-07  Filip Pizlo  <fpizlo@apple.com>
1095
1096         FTL B3 should be able to flag the tag constants as being super important so that B3 can hoist them and Air can force them into registers
1097         https://bugs.webkit.org/show_bug.cgi?id=151955
1098
1099         Reviewed by Geoffrey Garen.
1100
1101         Remove some remaining DFG-specific snippets from Dominators. This used to be a non-template
1102         DFG class, and some time ago I hoisted it into WTF and made it generic. But since the only
1103         user of the class was the DFG, this class still had a handful of DFG-specific snippets that
1104         didn't compile when I started using it from B3.
1105
1106         Also renamed immediateDominatorOf() to idom(). This is the sort of abbreviation that we
1107         wouldn't ordinarily want to have in WebKit. But WebKit does allow for abbreviations that are
1108         "more canonical". The term "idom" is definitely more canonical than "immediateDominatorOf".
1109
1110         * wtf/Dominators.h:
1111         (WTF::Dominators::dominates):
1112         (WTF::Dominators::idom):
1113         (WTF::Dominators::forAllStrictDominatorsOf):
1114         (WTF::Dominators::NaiveDominators::dominates):
1115         (WTF::Dominators::NaiveDominators::dump):
1116         (WTF::Dominators::ValidationContext::handleErrors):
1117
1118 2015-12-03  Anders Carlsson  <andersca@apple.com>
1119
1120         Remove Objective-C GC support
1121         https://bugs.webkit.org/show_bug.cgi?id=151819
1122         rdar://problem/23746991
1123
1124         Reviewed by Dan Bernstein.
1125
1126         * Configurations/Base.xcconfig:
1127         * wtf/ThreadingPthreads.cpp:
1128         (WTF::initializeCurrentThreadInternal): Deleted.
1129         * wtf/text/cf/StringImplCF.cpp:
1130         (WTF::StringImpl::createCFString):
1131         (garbageCollectionEnabled): Deleted.
1132         (WTF::StringWrapperCFAllocator::create): Deleted.
1133
1134 2015-12-02  Filip Pizlo  <fpizlo@apple.com>
1135
1136         FTL B3 should support OSR exit
1137         https://bugs.webkit.org/show_bug.cgi?id=151710
1138
1139         Reviewed by Saam Barati.
1140
1141         Make sure that this has perfect forwarding.
1142
1143         * wtf/SegmentedVector.h:
1144         (WTF::SegmentedVector::append):
1145         (WTF::SegmentedVector::alloc):
1146
1147 2015-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1148
1149         [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
1150         https://bugs.webkit.org/show_bug.cgi?id=150792
1151
1152         Reviewed by Saam Barati.
1153
1154         * wtf/FastBitVector.h:
1155         (WTF::FastBitVector::forEachSetBit):
1156         * wtf/FeatureDefines.h:
1157
1158 2015-12-01  Commit Queue  <commit-queue@webkit.org>
1159
1160         Unreviewed, rolling out r192914.
1161         https://bugs.webkit.org/show_bug.cgi?id=151734
1162
1163         JSC tests for this change are failing on 32 and 64-bit bots
1164         (Requested by ryanhaddad on #webkit).
1165
1166         Reverted changeset:
1167
1168         "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
1169         enable this feature"
1170         https://bugs.webkit.org/show_bug.cgi?id=150792
1171         http://trac.webkit.org/changeset/192914
1172
1173 2015-12-01  Myles C. Maxfield  <mmaxfield@apple.com>
1174
1175         Give String and AtomicString an existingHash() function
1176         https://bugs.webkit.org/show_bug.cgi?id=151717
1177
1178         Reviewed by Andreas Kling.
1179
1180         Test: WTF.AtomicStringExistingHash
1181               WTF.StringExistingHash
1182
1183         * wtf/text/AtomicString.h:
1184         (WTF::AtomicString::existingHash):
1185         * wtf/text/WTFString.h:
1186         (WTF::String::existingHash):
1187
1188 2015-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1189
1190         [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
1191         https://bugs.webkit.org/show_bug.cgi?id=150792
1192
1193         Reviewed by Saam Barati.
1194
1195         * wtf/FastBitVector.h:
1196         (WTF::FastBitVector::forEachSetBit):
1197         * wtf/FeatureDefines.h:
1198
1199 2015-11-30  Geoffrey Garen  <ggaren@apple.com>
1200
1201         Use a better RNG for Math.random()
1202         https://bugs.webkit.org/show_bug.cgi?id=151641
1203
1204         Reviewed by Anders Carlsson.
1205
1206         Use 64 bits in the random number generator instead of 32 bit. (In
1207         the end, JavaScript, which uses doubles, will only see 52 bits.) This
1208         prevents programs that multiply a random number by a large constant from
1209         seeing non-random "banding" caused by zeroes in the low 20 bits.
1210
1211         I also took the opportunity to upgrade from GameRandom to Xorshift+,
1212         since Xorshift+ passes more benchmarks for randomness, and is not any
1213         slower or more complicated.
1214
1215         Now let us all remember the fateful words of Steve Weibe, who would be
1216         King of Kong: "The randomness went the opposite way that it usually goes."
1217
1218         * wtf/WeakRandom.h:
1219         (WTF::WeakRandom::WeakRandom):
1220         (WTF::WeakRandom::setSeed): Use standard naming.
1221
1222         (WTF::WeakRandom::seed): This function is safe now. "Unsafe" in function
1223         names makes me itch.
1224
1225         (WTF::WeakRandom::get):
1226         (WTF::WeakRandom::getUint32): Update to 64bit.
1227
1228         (WTF::WeakRandom::advance): The Xorshift+ algorithm.
1229
1230         (WTF::WeakRandom::initializeSeed): Deleted.
1231         (WTF::WeakRandom::seedUnsafe): Deleted.
1232
1233 2015-11-30  Benjamin Poulain  <bpoulain@apple.com>
1234
1235         [JSC] Speed up Air Liveness Analysis on Tmps
1236         https://bugs.webkit.org/show_bug.cgi?id=151556
1237
1238         Reviewed by Filip Pizlo.
1239
1240         * WTF.xcodeproj/project.pbxproj:
1241         * wtf/IndexSparseSet.h: Added.
1242         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
1243         (WTF::IndexSparseSet<OverflowHandler>::add):
1244         (WTF::IndexSparseSet<OverflowHandler>::remove):
1245         (WTF::IndexSparseSet<OverflowHandler>::clear):
1246         (WTF::IndexSparseSet<OverflowHandler>::size):
1247         (WTF::IndexSparseSet<OverflowHandler>::isEmpty):
1248         (WTF::IndexSparseSet<OverflowHandler>::contains):
1249
1250 2015-11-30  Tim Horton  <timothy_horton@apple.com>
1251
1252         Get rid of the !USE(ASYNC_NSTEXTINPUTCLIENT) codepath
1253         https://bugs.webkit.org/show_bug.cgi?id=151673
1254
1255         Reviewed by Anders Carlsson.
1256
1257         * wtf/Platform.h:
1258
1259 2015-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>
1260
1261         [GLIB] Remove GMainLoopSource and GThreadSafeMainLoopSource
1262         https://bugs.webkit.org/show_bug.cgi?id=151633
1263
1264         Reviewed by Csaba Osztrogonác.
1265
1266         * WTF.vcxproj/WTF.vcxproj:
1267         * WTF.vcxproj/WTF.vcxproj.filters:
1268         * wtf/PlatformEfl.cmake:
1269         * wtf/PlatformGTK.cmake:
1270         * wtf/glib/GMainLoopSource.cpp: Removed.
1271         * wtf/glib/GMainLoopSource.h: Removed.
1272         * wtf/glib/GThreadSafeMainLoopSource.cpp: Removed.
1273         * wtf/glib/GThreadSafeMainLoopSource.h: Removed.
1274
1275 2015-11-27  Csaba Osztrogonác  <ossy@webkit.org>
1276
1277         Fix build warning in bignum.cc
1278         https://bugs.webkit.org/show_bug.cgi?id=150797
1279
1280         Reviewed by Geoffrey Garen.
1281
1282         * wtf/dtoa/bignum.cc:
1283
1284 2015-11-18  Daniel Bates  <dabates@apple.com>
1285
1286         [iOS] ASSERTION FAILED: temporaryFilePath.last() == '/' in WebCore::openTemporaryFile()
1287         https://bugs.webkit.org/show_bug.cgi?id=151392
1288         <rdar://problem/23595341>
1289
1290         Reviewed by Alexey Proskuryakov.
1291
1292         Workaround <rdar://problem/23579077> where confstr(_CS_DARWIN_USER_TEMP_DIR, ..., ...) retrieves
1293         the path to the user temporary directory without a trailing slash in the iOS simulator.
1294
1295         * wtf/DataLog.cpp:
1296         (WTF::initializeLogFileOnce):
1297
1298 2015-11-17  Filip Pizlo  <fpizlo@apple.com>
1299
1300         CheckAdd/Mul should have commutativity optimizations in B3->Air lowering
1301         https://bugs.webkit.org/show_bug.cgi?id=151214
1302
1303         Reviewed by Geoffrey Garen.
1304
1305         Disable my failed attempts at perfect forwarding, since they were incorrect, and caused compile
1306         errors if you tried to pass an argument that bound to lvalue. This shouldn't affect performance of
1307         anything we care about, and performance tests seem to confirm that it's all good.
1308
1309         * wtf/ScopedLambda.h:
1310
1311 2015-11-17  Filip Pizlo  <fpizlo@apple.com>
1312
1313         Air should lay out code optimally
1314         https://bugs.webkit.org/show_bug.cgi?id=150478
1315
1316         Reviewed by Geoffrey Garen.
1317
1318         * wtf/GraphNodeWorklist.h:
1319         (WTF::GraphNodeWorklist::push):
1320         (WTF::GraphNodeWorklist::isEmpty):
1321         (WTF::GraphNodeWorklist::notEmpty):
1322         (WTF::GraphNodeWorklist::pop):
1323
1324 2015-11-11  Anders Carlsson  <andersca@apple.com>
1325
1326         Enable cross-platform context menus by default
1327         https://bugs.webkit.org/show_bug.cgi?id=151173
1328
1329         Reviewed by Tim Horton.
1330
1331         * wtf/Platform.h:
1332
1333 2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>
1334
1335         Remove ENABLE(SATURATED_LAYOUT_ARITHMETIC) guards
1336         https://bugs.webkit.org/show_bug.cgi?id=150972
1337
1338         Reviewed by Darin Adler.
1339
1340         * wtf/FeatureDefines.h:
1341
1342 2015-11-11  Filip Pizlo  <fpizlo@apple.com>
1343
1344         B3 should be able to compile and canonicalize Mul
1345         https://bugs.webkit.org/show_bug.cgi?id=151124
1346
1347         Reviewed by Geoffrey Garen.
1348
1349         * wtf/MathExtras.h:
1350         (WTF::fastLog2):
1351
1352 2015-11-10  Filip Pizlo  <fpizlo@apple.com>
1353
1354         B3 should be able to compile a program with ChillDiv
1355         https://bugs.webkit.org/show_bug.cgi?id=151114
1356
1357         Reviewed by Benjamin Poulain.
1358
1359         Needed to beef up some compiler algorithms. All of the hardening was about making them
1360         work with objects that have move semantics but not copy semantics. This arises in B3
1361         basic block insertion sets.
1362
1363         * wtf/BubbleSort.h:
1364         (WTF::bubbleSort):
1365         * wtf/Insertion.h:
1366         (WTF::Insertion::Insertion):
1367         (WTF::Insertion::index):
1368         (WTF::Insertion::element):
1369         (WTF::Insertion::operator<):
1370         (WTF::executeInsertions):
1371
1372 2015-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>
1373
1374         [GTK] Use CROSS_PLATFORM_CONTEXT_MENUS
1375         https://bugs.webkit.org/show_bug.cgi?id=150642
1376
1377         Reviewed by Martin Robinson.
1378
1379         Enable CROSS_PLATFORM_CONTEXT_MENUS for GTK+ port.
1380
1381         * wtf/Platform.h:
1382
1383 2015-11-09  Anders Carlsson  <andersca@apple.com>
1384
1385         Introspect reply block types as well
1386         https://bugs.webkit.org/show_bug.cgi?id=151048
1387
1388         Reviewed by Tim Horton.
1389
1390         Fix operator-> implementation.
1391
1392         * wtf/Optional.h:
1393         (WTF::Optional::operator->):
1394
1395 2015-11-05  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>
1396
1397         Add runtime and compile time flags for enabling Web Animations API and model.
1398         https://bugs.webkit.org/show_bug.cgi?id=150914
1399
1400         Reviewed by Benjamin Poulain.
1401
1402         Add ENABLE_WEB_ANIMATIONS compile time flag, runtime flag webAnimationsEnabled and Expose WK2 preference for runtime flag.
1403
1404         * wtf/FeatureDefines.h:
1405
1406 2015-11-05  Zan Dobersek  <zdobersek@igalia.com>
1407
1408         [GLib] Avoid gint64, std::chrono::microseconds overflows in RunLoop::TimerBase
1409         https://bugs.webkit.org/show_bug.cgi?id=150930
1410
1411         Reviewed by Carlos Garcia Campos.
1412
1413         In RunLoop::TimerBase::start(), avoid overflowing the std::chrono::microseconds
1414         value in case the passed-in fire interval (in seconds) is too large (e.g. when
1415         std::chrono::microseconds::max() is used as the desired interval). This is
1416         achieved by using the passed-in fire interval, converted in microseconds, only
1417         if the value of this interval is smaller than std::chrono::microseconds::max().
1418
1419         In RunLoop::TimerBase::updateReadyTime(), the zero-delay is still considered a
1420         short cut, but we use G_MAXINT64 in case the sum of the current time and the
1421         desired fire interval (now in microseconds) would overflow.
1422
1423         * wtf/glib/RunLoopGLib.cpp:
1424         (WTF::RunLoop::TimerBase::updateReadyTime):
1425         (WTF::RunLoop::TimerBase::start):
1426
1427 2015-11-02  Filip Pizlo  <fpizlo@apple.com>
1428
1429         B3/Air should use bubble sort for their insertion sets, because it's faster than std::stable_sort
1430         https://bugs.webkit.org/show_bug.cgi?id=150828
1431
1432         Reviewed by Geoffrey Garen.
1433
1434         Add a pretty good bubble sort implementation to WTF. This implementation has three
1435         common tricks:
1436
1437         - Forward and backward scans. This reduces the severity of certain kinds of bubble sort
1438           pathologies.
1439
1440         - Return if a scan finds the list to be sorted. This gives the algorithm one of its most
1441           attractive properties: it's super fast when the list is already sorted.
1442
1443         - Each scan eliminates one element from future scans. This makes the algorithm no worse
1444           than insertion sort.
1445
1446         Why do we want this? Because bubble sort is a really great stable sort for small lists,
1447         or large lists in which only a handful of elements are out of order. Compiler insertion
1448         sets tend to be one of those or somewhere in between: usually they are very small, and
1449         usually they are sorted. It's rare that an element will be out of order, and when it is,
1450         it's usually very close to where it's supposed to be.
1451
1452         This is a significant speed-up for B3 compile times.
1453
1454         * WTF.xcodeproj/project.pbxproj:
1455         * wtf/BubbleSort.h: Added.
1456         (WTF::bubbleSort):
1457         * wtf/CMakeLists.txt:
1458
1459 2015-11-02  Andy Estes  <aestes@apple.com>
1460
1461         [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
1462         https://bugs.webkit.org/show_bug.cgi?id=150819
1463
1464         Reviewed by Dan Bernstein.
1465
1466         This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.
1467
1468         * Configurations/Base.xcconfig:
1469
1470 2015-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>
1471
1472         [GLIB] Remove support for GSocket main loop sources from GMainLoopSource
1473         https://bugs.webkit.org/show_bug.cgi?id=150772
1474
1475         Reviewed by Žan Doberšek.
1476
1477         It complicated the code just to make generic what is only used in
1478         one place.
1479
1480         * wtf/glib/GMainLoopSource.cpp:
1481         (WTF::GMainLoopSource::cancel): Deleted.
1482         (WTF::GMainLoopSource::schedule): Deleted.
1483         (WTF::GMainLoopSource::scheduleTimeoutSource): Deleted.
1484         (WTF::GMainLoopSource::scheduleAfterDelay): Deleted.
1485         (WTF::GMainLoopSource::finishVoidCallback): Deleted.
1486         (WTF::GMainLoopSource::voidCallback): Deleted.
1487         (WTF::GMainLoopSource::prepareBoolCallback): Deleted.
1488         * wtf/glib/GMainLoopSource.h:
1489         (WTF::GMainLoopSource::Context::operator=): Deleted.
1490
1491 2015-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>
1492
1493         [GLIB] Remove delete on destroy GMainLoopSources
1494         https://bugs.webkit.org/show_bug.cgi?id=150771
1495
1496         Reviewed by Žan Doberšek.
1497
1498         Delete on destroy sources made the GMainLoopSource implementation
1499         more complex and they are currently unused.
1500
1501         * wtf/glib/GMainLoopSource.cpp:
1502         (WTF::GMainLoopSource::boolCallback):
1503         (WTF::GMainLoopSource::create): Deleted.
1504         (WTF::GMainLoopSource::GMainLoopSource): Deleted.
1505         (WTF::GMainLoopSource::cancel): Deleted.
1506         (WTF::GMainLoopSource::scheduleAndDeleteOnDestroy): Deleted.
1507         (WTF::GMainLoopSource::scheduleAfterDelayAndDeleteOnDestroy): Deleted.
1508         (WTF::GMainLoopSource::voidCallback): Deleted.
1509         * wtf/glib/GMainLoopSource.h:
1510
1511 2015-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>
1512
1513         [GTK] Use RunLoop in WorkQueue implementation
1514         https://bugs.webkit.org/show_bug.cgi?id=150770
1515
1516         Reviewed by Darin Adler.
1517
1518         Instead of using GMainLoop directly. RunLoop already abstracts the
1519         GMainLoop details and uses persistent sources making it more efficient.
1520         For the dispatchAfter implementation we use a helper context class
1521         and a GSource directly, since we are going to get rid of delete on
1522         destroy GMainLoop soon and this is the only place where we still
1523         use them.
1524
1525         * wtf/RunLoop.h:
1526         (WTF::RunLoop::mainContext): Return the GMainContext.
1527         * wtf/WorkQueue.h:
1528         * wtf/glib/WorkQueueGLib.cpp:
1529         (WTF::WorkQueue::platformInitialize): The RunLoop needs to be
1530         created in the worker thread now, so we now use a mutex to wait
1531         until the thread has started and the RunLoop has been created.
1532         (WTF::WorkQueue::platformInvalidate): Stop the RunLoop and wait
1533         until the thread finishes.
1534         (WTF::WorkQueue::dispatch): Use RunLoop::dispatch().
1535         (WTF::DispatchAfterContext::DispatchAfterContext):
1536         (WTF::DispatchAfterContext::~DispatchAfterContext):
1537         (WTF::DispatchAfterContext::dispatch):
1538         (WTF::WorkQueue::dispatchAfter):
1539
1540 2015-11-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1541
1542         [ES6] Support Generator Syntax
1543         https://bugs.webkit.org/show_bug.cgi?id=150769
1544
1545         Reviewed by Geoffrey Garen.
1546
1547         Added ENABLE_ES6_GENERATORS flag.
1548
1549         * wtf/FeatureDefines.h:
1550
1551 2015-11-01  Darin Adler  <darin@apple.com>
1552
1553         ASCIICType refinements
1554         https://bugs.webkit.org/show_bug.cgi?id=150787
1555
1556         Reviewed by Geoffrey Garen.
1557
1558         Refined ASCIICType.h by using narrower types. The most valuable part of this
1559         is the part where the result of toASCIIHexValue is uint8_t instead of int;
1560         that's slightly better for RGB values that the compiler needs to know fit
1561         into a byte (coming in some Color work I plan to do soon).
1562
1563         * wtf/ASCIICType.h: Used CharacterType instead of CharType throughout, and
1564         also sorted the using declarations at the bottom of the header.
1565         (WTF::isASCII): Use the name "character" instead of "c".
1566         (WTF::isASCIIAlpha): Ditto. Also use isASCIILower and toASCIILowerUnchecked
1567         instead of writing it out.
1568         (WTF::isASCIIDigit): Ditto.
1569         (WTF::isASCIIAlphanumeric): Ditto.
1570         (WTF::isASCIIHexDigit): Ditto. Also use toASCIILowerUnchecked instead of
1571         writing it out.
1572         (WTF::isASCIILower): Ditto.
1573         (WTF::isASCIIBinaryDigit): Ditto. Also removed unneeded parentheses to match
1574         the style of the rest of the file.
1575         (WTF::isASCIIOctalDigit): Ditto.
1576         (WTF::isASCIIPrintable): Ditto.
1577         (WTF::isASCIISpace): Ditto.
1578         (WTF::isASCIIUpper): Ditto.
1579         (WTF::toASCIILower): Ditto. Also use isASCIIUpper instead of writing it out.
1580         (WTF::toASCIILowerUnchecked): Tweaked comment.
1581         (WTF::toASCIIUpper): Ditto. Also use isASCIILower instead of writing it out.
1582         (WTF::toASCIIHexValue): Ditto. Also change return type from int to uint8_t.
1583         Also broke a single assertion with && into two separate assertions and got
1584         rid of unnnecessary masking with 0xF0 after shifting left. Also renamed
1585         arguments for the two argument value so they are more sensible.
1586         (WTF::lowerNibbleToASCIIHexDigit): Changed argument type to uint8_t, since
1587         this function does not take a character. Also called it "value" instead of "c".
1588         Also slightly tweaked how the expression is written.
1589         (WTF::upperNibbleToASCIIHexDigit): Ditto. Using the more specific type also
1590         got rid of the need to explicitly mask in this function.
1591         (WTF::isASCIIAlphaCaselessEqual): Renamed the arguments for greater clarity.
1592         With the new clearer argument names, the comment was superfluous.
1593
1594 2015-11-01  Filip Pizlo  <fpizlo@apple.com>
1595
1596         Dominators should be factored out of the DFG
1597         https://bugs.webkit.org/show_bug.cgi?id=150764
1598
1599         Reviewed by Geoffrey Garen.
1600
1601         This takes what used to be DFGDominators.h/DFGDominators.cpp and turns it into a generic
1602         algorithm that can take any abstract graph. The idea is that you create Dominators<CFG> and
1603         pass it a CFG object, which defines the types of graph nodes and methods for getting
1604         successors, predecessors, etc. The DFG now defines a class called CFG, which is a wrapper for
1605         DFG::Graph that conforms to the thing that wtf/Dominators.h expects.
1606
1607         When doing things to graphs, it's common to refer to the things in the graph as "nodes".
1608         Because I intend to reuse the CFG abstraction with many graph algorithms, that abstraction uses
1609         the term "node" to refer to a DFG basic block. But in Dominators, the method and variable names
1610         still use "block". This is because although Dominators are applicable to any kind of directed
1611         graph, it's super unlikely that we will ever use them for anything but compilers. Indeed, the
1612         only reason why I'm factoring them out of the DFG is so that I can use them with B3 and Air.
1613
1614         This has the nice side effect that a user of WTF::Dominators<JSC::DFG::CFG> will see familiar
1615         terminology like "blocksStrictlyDominatedBy(...)" instead of "nodesStrictlyDominatedBy(...)",
1616         which would be super confusing.
1617
1618         Overall, wtf/Dominators.h is a combination of what used to be in DFGDominators.h,
1619         DFGDominators.cpp, DFGNaiveDominators.h, and DFGNaiveDominators.cpp. I only changed code when I
1620         had to in order to make it generic.
1621
1622         * WTF.xcodeproj/project.pbxproj:
1623         * wtf/CMakeLists.txt:
1624         * wtf/Dominators.h: Added.
1625         (WTF::Dominators::Dominators):
1626         (WTF::Dominators::compute):
1627         (WTF::Dominators::strictlyDominates):
1628         (WTF::Dominators::dominates):
1629         (WTF::Dominators::immediateDominatorOf):
1630         (WTF::Dominators::forAllStrictDominatorsOf):
1631         (WTF::Dominators::forAllDominatorsOf):
1632         (WTF::Dominators::forAllBlocksStrictlyDominatedBy):
1633         (WTF::Dominators::forAllBlocksDominatedBy):
1634         (WTF::Dominators::strictDominatorsOf):
1635         (WTF::Dominators::dominatorsOf):
1636         (WTF::Dominators::blocksStrictlyDominatedBy):
1637         (WTF::Dominators::blocksDominatedBy):
1638         (WTF::Dominators::forAllBlocksInDominanceFrontierOf):
1639         (WTF::Dominators::dominanceFrontierOf):
1640         (WTF::Dominators::forAllBlocksInIteratedDominanceFrontierOf):
1641         (WTF::Dominators::forAllBlocksInPrunedIteratedDominanceFrontierOf):
1642         (WTF::Dominators::iteratedDominanceFrontierOf):
1643         (WTF::Dominators::dump):
1644         (WTF::Dominators::LengauerTarjan::LengauerTarjan):
1645         (WTF::Dominators::LengauerTarjan::compute):
1646         (WTF::Dominators::LengauerTarjan::immediateDominator):
1647         (WTF::Dominators::LengauerTarjan::computeDepthFirstPreNumbering):
1648         (WTF::Dominators::LengauerTarjan::computeSemiDominatorsAndImplicitImmediateDominators):
1649         (WTF::Dominators::LengauerTarjan::computeExplicitImmediateDominators):
1650         (WTF::Dominators::LengauerTarjan::link):
1651         (WTF::Dominators::LengauerTarjan::eval):
1652         (WTF::Dominators::LengauerTarjan::compress):
1653         (WTF::Dominators::LengauerTarjan::BlockData::BlockData):
1654         (WTF::Dominators::NaiveDominators::NaiveDominators):
1655         (WTF::Dominators::NaiveDominators::dominates):
1656         (WTF::Dominators::NaiveDominators::dump):
1657         (WTF::Dominators::NaiveDominators::pruneDominators):
1658         (WTF::Dominators::ValidationContext::ValidationContext):
1659         (WTF::Dominators::ValidationContext::reportError):
1660         (WTF::Dominators::ValidationContext::handleErrors):
1661         (WTF::Dominators::naiveDominates):
1662         (WTF::Dominators::forAllBlocksInDominanceFrontierOfImpl):
1663         (WTF::Dominators::forAllBlocksInIteratedDominanceFrontierOfImpl):
1664         (WTF::Dominators::BlockData::BlockData):
1665
1666 2015-11-01  Darin Adler  <darin@apple.com>
1667
1668         Remove some dead and unneeded code (ScrollbarThemeSafari, RenderThemeSafari, OPENCL, a little color space logic)
1669         https://bugs.webkit.org/show_bug.cgi?id=150783
1670
1671         Reviewed by Tim Horton.
1672
1673         * wtf/FeatureDefines.h: Removed the OPENCL feature, no longer supported.
1674
1675 2015-10-31  Filip Pizlo  <fpizlo@apple.com>
1676
1677         B3::reduceStrength's DCE should be more agro and less wrong
1678         https://bugs.webkit.org/show_bug.cgi?id=150748
1679
1680         Reviewed by Geoffrey Garen.
1681
1682         * wtf/GraphNodeWorklist.h:
1683         (WTF::GraphNodeWorklist::saw): This method is super useful.
1684
1685 2015-11-01  Philip Chimento  <philip.chimento@gmail.com>
1686
1687         [GTK] Fix combinations of PLATFORM(GTK) and OS(DARWIN)
1688         https://bugs.webkit.org/show_bug.cgi?id=144560
1689
1690         Reviewed by Darin Adler.
1691
1692         * wtf/Platform.h: Don't USE(ACCELERATE) on PLATFORM(GTK).
1693         * wtf/WorkQueue.h: Change order of OS(DARWIN) and PLATFORM(GTK)
1694         checks so that GTK facilities are used even when building the
1695         GTK platform on Darwin.
1696
1697 2015-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>
1698
1699         [GTK] Use RunLoop::Timer in main thread shared timer GTK+ implementation
1700         https://bugs.webkit.org/show_bug.cgi?id=150754
1701
1702         Reviewed by Darin Adler.
1703
1704         Add API to set the priority of a RunLoop::Timer for GLib.
1705
1706         * wtf/RunLoop.h:
1707         * wtf/glib/RunLoopGLib.cpp:
1708         (WTF::RunLoop::TimerBase::setPriority):
1709
1710 2015-10-31  Andreas Kling  <akling@apple.com>
1711
1712         Add a debug overlay with information about web process resource usage.
1713         <https://webkit.org/b/150599>
1714
1715         Reviewed by Darin Adler.
1716
1717         Add ENABLE(RESOURCE_USAGE_OVERLAY) flag, enabled on Mac by default.
1718
1719         * wtf/Platform.h:
1720
1721 2015-10-30  Chris Dumez  <cdumez@apple.com>
1722
1723         Regression(r191673): Crash in RunLoopTimer::schedule()
1724         https://bugs.webkit.org/show_bug.cgi?id=150723
1725
1726         Reviewed by Anders Carlsson.
1727
1728         We were crashing in RunLoopTimer::schedule() when iterating over the
1729         SchedulePairHashSet. The reason is that we were passing this
1730         SchedulePairHashSet from the main thread to a background thread, which
1731         was not safe because the SchedulePair objects inside the HashSet were
1732         not ThreadSafeRefCounted. This patch makes them ThreadSafeRefCounted.
1733
1734         * wtf/SchedulePair.h:
1735
1736 2015-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>
1737
1738         [GTK] Move the socket polling off the WorkQueue
1739         https://bugs.webkit.org/show_bug.cgi?id=150593
1740
1741         Reviewed by Anders Carlsson.
1742
1743         It doesn't really belong to the WorkQueue, it's only used by the
1744         WebKit2 connection, so it can be moved there.
1745
1746         * wtf/WorkQueue.h:
1747         * wtf/glib/WorkQueueGLib.cpp:
1748         (WTF::WorkQueue::registerSocketEventHandler): Deleted.
1749         (WTF::WorkQueue::unregisterSocketEventHandler): Deleted.
1750
1751 2015-10-29  Carlos Garcia Campos  <cgarcia@igalia.com>
1752
1753         [GTK] Use a persistent main loop source in RunLoop glib implementation
1754         https://bugs.webkit.org/show_bug.cgi?id=150590
1755
1756         Reviewed by Žan Doberšek.
1757
1758         It's more efficient than creating and destroying a new source for
1759         every dispatch and it simplifies the code.
1760
1761         * wtf/RunLoop.h:
1762         * wtf/glib/MainThreadGLib.cpp:
1763         (WTF::scheduleDispatchFunctionsOnMainThread): Use
1764         RunLoop::dispatch() instead of GMainLoopSource::scheduleAndDeleteOnDestroy().
1765         * wtf/glib/RunLoopGLib.cpp:
1766         (WTF::RunLoop::RunLoop): Create and setup the persistent source.
1767         (WTF::RunLoop::~RunLoop): Destroy the persistent source.
1768         (WTF::RunLoop::stop): Stop the persistent source before stopping
1769         the main loop.
1770         (WTF::RunLoop::wakeUp): Make the persistent source active. We
1771         no longer need to explicitly wakeup the context.
1772         (WTF::RunLoop::TimerBase::TimerBase): Create and setup the
1773         persistent source.
1774         (WTF::RunLoop::TimerBase::~TimerBase): Destroy the persistent source.
1775         (WTF::RunLoop::TimerBase::updateReadyTime): Set the ready time
1776         according to the fire interval.
1777         (WTF::RunLoop::TimerBase::start): Make the persistent source active.
1778         (WTF::RunLoop::TimerBase::stop): Stop the persistent source.
1779         (WTF::RunLoop::TimerBase::isActive): Return whether the
1780         persistent source is active.
1781
1782 2015-10-30  Philippe Normand  <pnormand@igalia.com>
1783
1784         [GTK][Mac] fix WTF build
1785         https://bugs.webkit.org/show_bug.cgi?id=150502
1786
1787         Reviewed by Alex Christensen.
1788
1789         * wtf/CMakeLists.txt: Add CommonCryptoSPI.h in the headers.
1790
1791 2015-10-29  Alex Christensen  <achristensen@webkit.org>
1792
1793         Fix Mac CMake build
1794         https://bugs.webkit.org/show_bug.cgi?id=150686
1795
1796         Reviewed by Filip Pizlo.
1797
1798         * wtf/CMakeLists.txt:
1799         * wtf/Platform.h:
1800         * wtf/PlatformMac.cmake:
1801
1802 2015-10-29  Commit Queue  <commit-queue@webkit.org>
1803
1804         Unreviewed, rolling out r191728.
1805         https://bugs.webkit.org/show_bug.cgi?id=150668
1806
1807         Caused a lot of timeouts in layout tests (Requested by KaL on
1808         #webkit).
1809
1810         Reverted changeset:
1811
1812         "[GTK] Use a persistent main loop source in RunLoop glib
1813         implementation"
1814         https://bugs.webkit.org/show_bug.cgi?id=150590
1815         http://trac.webkit.org/changeset/191728
1816
1817 2015-10-29  Carlos Garcia Campos  <cgarcia@igalia.com>
1818
1819         [GTK] Use a persistent main loop source in RunLoop glib implementation
1820         https://bugs.webkit.org/show_bug.cgi?id=150590
1821
1822         Reviewed by Žan Doberšek.
1823
1824         It's more efficient than creating and destroying a new source for
1825         every dispatch and it simplifies the code.
1826
1827         * wtf/RunLoop.h:
1828         * wtf/glib/MainThreadGLib.cpp:
1829         (WTF::scheduleDispatchFunctionsOnMainThread): Use
1830         RunLoop::dispatch() instead of GMainLoopSource::scheduleAndDeleteOnDestroy().
1831         * wtf/glib/RunLoopGLib.cpp:
1832         (WTF::RunLoop::RunLoop): Create and setup the persistent source.
1833         (WTF::RunLoop::~RunLoop): Destroy the persistent source.
1834         (WTF::RunLoop::stop): Stop the persistent source before stopping
1835         the main loop.
1836         (WTF::RunLoop::wakeUp): Make the persistent source active. We
1837         no longer need to explicitly wakeup the context.
1838         (WTF::RunLoop::TimerBase::TimerBase): Create and setup the
1839         persistent source.
1840         (WTF::RunLoop::TimerBase::~TimerBase): Destroy the persistent source.
1841         (WTF::RunLoop::TimerBase::updateReadyTime): Set the ready time
1842         according to the fire interval.
1843         (WTF::RunLoop::TimerBase::start): Make the persistent source active.
1844         (WTF::RunLoop::TimerBase::stop): Stop the persistent source.
1845         (WTF::RunLoop::TimerBase::isActive): Return whether the
1846         persistent source is active.
1847
1848 2015-10-28  Filip Pizlo  <fpizlo@apple.com>
1849
1850         Unreviewed, make sure B3 is disabled on iOS for now.
1851
1852         * wtf/Platform.h:
1853
1854 2015-10-28  Filip Pizlo  <fpizlo@apple.com>
1855
1856         Create a super rough prototype of B3
1857         https://bugs.webkit.org/show_bug.cgi?id=150280
1858
1859         Reviewed by Benjamin Poulain.
1860
1861         * WTF.xcodeproj/project.pbxproj:
1862         * wtf/CMakeLists.txt:
1863         * wtf/HashSet.h:
1864         (WTF::copyToVector):
1865         (WTF::=):
1866         * wtf/ListDump.h:
1867         (WTF::PointerListDump::PointerListDump):
1868         (WTF::PointerListDump::dump):
1869         (WTF::MapDump::MapDump):
1870         (WTF::listDump):
1871         (WTF::pointerListDump):
1872         (WTF::sortedListDump):
1873         * wtf/MathExtras.h:
1874         (WTF::leftShiftWithSaturation):
1875         (WTF::rangesOverlap):
1876         * wtf/Platform.h:
1877         * wtf/ScopedLambda.h: Added.
1878         (WTF::scopedLambda):
1879         * wtf/SharedTask.h:
1880         (WTF::createSharedTask):
1881
1882 2015-10-28  Alberto Garcia  <berto@igalia.com>
1883
1884         [SOUP] Cannot build the network process in glibc-based BSD systems
1885         https://bugs.webkit.org/show_bug.cgi?id=150618
1886
1887         Reviewed by Carlos Garcia Campos.
1888
1889         * wtf/Platform.h: Don't enable HAVE_STAT_BIRTHTIME if the system
1890         is using glibc.
1891
1892 2015-10-21  Filip Pizlo  <fpizlo@apple.com>
1893
1894         Factor out the graph node worklists from DFG into WTF
1895         https://bugs.webkit.org/show_bug.cgi?id=150411
1896
1897         Reviewed by Geoffrey Garen.
1898
1899         The new GraphNodeWorklist.h file is basically just the functionality from the old
1900         DFGBlockWorklist.h, but templatized to work for any graph node type and any kind of graph
1901         node set.
1902
1903         * WTF.xcodeproj/project.pbxproj:
1904         * wtf/CMakeLists.txt:
1905         * wtf/GraphNodeWorklist.h: Added.
1906         (WTF::GraphNodeWorklist::push):
1907         (WTF::GraphNodeWorklist::notEmpty):
1908         (WTF::GraphNodeWorklist::pop):
1909         (WTF::GraphNodeWith::GraphNodeWith):
1910         (WTF::GraphNodeWith::operator bool):
1911         (WTF::ExtendedGraphNodeWorklist::ExtendedGraphNodeWorklist):
1912         (WTF::ExtendedGraphNodeWorklist::forcePush):
1913         (WTF::ExtendedGraphNodeWorklist::push):
1914         (WTF::ExtendedGraphNodeWorklist::notEmpty):
1915         (WTF::ExtendedGraphNodeWorklist::pop):
1916         (WTF::GraphNodeWithOrder::GraphNodeWithOrder):
1917         (WTF::GraphNodeWithOrder::operator bool):
1918         (WTF::PostOrderGraphNodeWorklist::PostOrderGraphNodeWorklist):
1919         (WTF::PostOrderGraphNodeWorklist::~PostOrderGraphNodeWorklist):
1920         (WTF::PostOrderGraphNodeWorklist::pushPre):
1921         (WTF::PostOrderGraphNodeWorklist::pushPost):
1922         (WTF::PostOrderGraphNodeWorklist::push):
1923         (WTF::PostOrderGraphNodeWorklist::notEmpty):
1924         (WTF::PostOrderGraphNodeWorklist::pop):
1925         * wtf/HashTable.h:
1926         (WTF::HashTableAddResult::HashTableAddResult):
1927         (WTF::HashTableAddResult::operator bool):
1928
1929 2015-10-20  Tim Horton  <timothy_horton@apple.com>
1930
1931         Try to fix the build by disabling MAC_GESTURE_EVENTS on 10.9 and 10.10
1932
1933         * wtf/FeatureDefines.h:
1934
1935 2015-10-20  Yoav Weiss  <yoav@yoav.ws>
1936
1937         Rename the PICTURE_SIZES flag to CURRENTSRC
1938         https://bugs.webkit.org/show_bug.cgi?id=150275
1939
1940         Reviewed by Dean Jackson.
1941
1942         * wtf/FeatureDefines.h:
1943
1944 2015-10-19  Beth Dakin  <bdakin@apple.com>
1945
1946         Build fix.
1947
1948         * wtf/FeatureDefines.h:
1949
1950 2015-10-19  Tim Horton  <timothy_horton@apple.com>
1951
1952         Add magnify and rotate gesture event support for Mac
1953         https://bugs.webkit.org/show_bug.cgi?id=150179
1954         <rdar://problem/8036240>
1955
1956         Reviewed by Darin Adler.
1957
1958         * wtf/FeatureDefines.h:
1959         New feature flag.
1960
1961 2015-10-17  Mark Lam  <mark.lam@apple.com>
1962
1963         Add CPU(X86) to the supported MASM_PROBE CPUs. This was accidentally left out in r191197.
1964
1965         Not reviewed.
1966
1967         * wtf/Platform.h:
1968
1969 2015-10-16  Mark Lam  <mark.lam@apple.com>
1970
1971         Always enable MASM_PROBE for debug builds.
1972         https://bugs.webkit.org/show_bug.cgi?id=150190
1973
1974         Reviewed by Geoffrey Garen.
1975
1976         * wtf/Platform.h:
1977
1978 2015-10-14  Andreas Kling  <akling@apple.com>
1979
1980         REGRESSION(r190882): Concatenating a character array and an empty string is broken.
1981         <https://webkit.org/b/150135>
1982
1983         Reviewed by Geoffrey Garen.
1984
1985         StringAdapter templates for raw character arrays were always using 1 as the array length
1986         in toString().
1987
1988         * wtf/text/StringConcatenate.h:
1989
1990 2015-10-14  Per Arne Vollan  <peavo@outlook.com>
1991
1992         [Win64] Enable concurrent JIT.
1993         https://bugs.webkit.org/show_bug.cgi?id=150098
1994
1995         Reviewed by Csaba Osztrogonác.
1996
1997         * wtf/Platform.h:
1998
1999 2015-10-13  Simon Fraser  <simon.fraser@apple.com>
2000
2001         Add helper funtion for checking pointer equivalency and use it
2002         https://bugs.webkit.org/show_bug.cgi?id=150022
2003
2004         Reviewed by Darin Adler.
2005         
2006         Add PointerComparison.h which contains the templated pointer comparison
2007         function.
2008
2009         * WTF.xcodeproj/project.pbxproj:
2010         * wtf/PointerComparison.h: Added.
2011         (WTF::arePointingToEqualData):
2012
2013 2015-10-12  Andreas Kling  <akling@apple.com>
2014
2015         "A + B" with strings shouldn't copy if A or B is empty.
2016         <https://webkit.org/b/150034>
2017
2018         Reviewed by Anders Carlsson.
2019
2020         Add a fast path to WTF's operator+ magic for concatenation of two strings where
2021         one of them is empty. In that case, try to avoid allocation altogether by returning
2022         the non-empty string.
2023
2024         Spotted this while analyzing memory peaks during page load; it turns out we were
2025         duplicating whole text resources (JS, CSS) at the end of decoding, below
2026         TextResourceDecoder::decodeAndFlush(). That function effectively does:
2027
2028             return decode() + flush();
2029
2030         Very often, flush() returns an empty string, so due to the naive operator+,
2031         we'd allocate a new StringImpl of length (decode().length() + flush().length())
2032         and copy the return value from decode() into it. So silly!
2033
2034         Had to make the tryMakeString() machinery use String as a return type instead of
2035         RefPtr<StringImpl> to make all the right overloads gel. StringTypeAdapter templates
2036         are now required to provide a toString() function.
2037
2038         * wtf/text/StringConcatenate.h:
2039         (WTF::StringTypeAdapter<char>::toString):
2040         (WTF::StringTypeAdapter<UChar>::toString):
2041         (WTF::StringTypeAdapter<Vector<char>>::toString):
2042         (WTF::StringTypeAdapter<String>::toString):
2043         (WTF::tryMakeString):
2044         (WTF::makeString):
2045         * wtf/text/StringOperators.h:
2046         (WTF::StringAppend::operator String):
2047         * wtf/text/StringView.h:
2048         (WTF::StringTypeAdapter<StringView>::toString):
2049
2050 2015-10-12  Filip Pizlo  <fpizlo@apple.com>
2051
2052         Unreviewed, fix style in the hopes that it fixes Windows.
2053
2054         * wtf/ParallelHelperPool.cpp:
2055         (WTF::ParallelHelperClient::~ParallelHelperClient):
2056         (WTF::ParallelHelperClient::setTask):
2057         (WTF::ParallelHelperClient::doSomeHelping):
2058         (WTF::ParallelHelperClient::runTaskInParallel):
2059         (WTF::ParallelHelperClient::finish):
2060         (WTF::ParallelHelperClient::claimTask):
2061         (WTF::ParallelHelperClient::runTask):
2062         (WTF::ParallelHelperPool::doSomeHelping):
2063         (WTF::ParallelHelperPool::helperThreadBody):
2064         * wtf/ParallelHelperPool.h:
2065         (WTF::ParallelHelperClient::setFunction):
2066         (WTF::ParallelHelperClient::runFunctionInParallel):
2067         (WTF::ParallelHelperClient::pool):
2068
2069 2015-10-10  Filip Pizlo  <fpizlo@apple.com>
2070
2071         FTL should generate code to call slow paths lazily
2072         https://bugs.webkit.org/show_bug.cgi?id=149936
2073
2074         Reviewed by Saam Barati.
2075
2076         Enables SharedTask to handle any function type, not just void().
2077
2078         It's probably better to use SharedTask instead of std::function in performance-sensitive
2079         code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc
2080         and has aliasing semantics. So, you can just trust that it will have sensible performance
2081         characteristics.
2082
2083         * wtf/ParallelHelperPool.cpp:
2084         (WTF::ParallelHelperClient::~ParallelHelperClient):
2085         (WTF::ParallelHelperClient::setTask):
2086         (WTF::ParallelHelperClient::doSomeHelping):
2087         (WTF::ParallelHelperClient::runTaskInParallel):
2088         (WTF::ParallelHelperClient::finish):
2089         (WTF::ParallelHelperClient::claimTask):
2090         (WTF::ParallelHelperClient::runTask):
2091         (WTF::ParallelHelperPool::doSomeHelping):
2092         (WTF::ParallelHelperPool::helperThreadBody):
2093         * wtf/ParallelHelperPool.h:
2094         (WTF::ParallelHelperClient::setFunction):
2095         (WTF::ParallelHelperClient::runFunctionInParallel):
2096         (WTF::ParallelHelperClient::pool):
2097         * wtf/SharedTask.h:
2098         (WTF::createSharedTask):
2099         (WTF::SharedTask::SharedTask): Deleted.
2100         (WTF::SharedTask::~SharedTask): Deleted.
2101         (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted.
2102
2103 2015-10-10  Dan Bernstein  <mitz@apple.com>
2104
2105         [iOS] Remove unnecessary iOS version checks
2106         https://bugs.webkit.org/show_bug.cgi?id=150002
2107
2108         Reviewed by Alexey Proskuryakov.
2109
2110         * wtf/Platform.h:
2111
2112 2015-10-10  Dan Bernstein  <mitz@apple.com>
2113
2114         [iOS] Remove project support for iOS 8
2115         https://bugs.webkit.org/show_bug.cgi?id=149993
2116
2117         Reviewed by Alexey Proskuryakov.
2118
2119         * Configurations/Base.xcconfig:
2120         * Configurations/WTF.xcconfig:
2121         * Configurations/mbmalloc.xcconfig:
2122
2123 2015-10-08  Joseph Pecoraro  <pecoraro@apple.com>
2124
2125         Clean up Marked classes
2126         https://bugs.webkit.org/show_bug.cgi?id=149853
2127
2128         Reviewed by Darin Adler.
2129
2130         * wtf/PageBlock.h:
2131         Remove duplicate using statement.
2132
2133 2015-10-08  Joseph Pecoraro  <pecoraro@apple.com>
2134
2135         Remove PageReservation.h clang fixme that has been fixed for a while
2136         https://bugs.webkit.org/show_bug.cgi?id=149908
2137
2138         Reviewed by Csaba Osztrogonác.
2139
2140         * wtf/PageReservation.h:
2141         (WTF::PageReservation::operator bool): Deleted.
2142
2143 2015-10-06  Daniel Bates  <dbates@webkit.org>
2144
2145         Enable XSLT when building WebKit for iOS using the public iOS SDK
2146         https://bugs.webkit.org/show_bug.cgi?id=149827
2147
2148         Reviewed by Alexey Proskuryakov.
2149
2150         * wtf/FeatureDefines.h:
2151
2152 2015-10-04  Filip Pizlo  <fpizlo@apple.com>
2153
2154         Inline cache repatching should be throttled if it happens a lot
2155         https://bugs.webkit.org/show_bug.cgi?id=149796
2156         rdar://problem/22674436
2157
2158         Reviewed by Saam Barati.
2159
2160         Add some helpers for saturated math.
2161
2162         * wtf/MathExtras.h:
2163         (WTF::incrementWithSaturation):
2164         (WTF::leftShiftWithSaturation):
2165
2166 2015-10-01  Brent Fulgham  <bfulgham@apple.com>
2167
2168         [Win] Unreviewed CMake build fixes.
2169
2170         * wtf/CMakeLists.txt: Correct build flags to match
2171         the original project files.
2172
2173 2015-09-30  Commit Queue  <commit-queue@webkit.org>
2174
2175         Unreviewed, rolling out r190324.
2176         https://bugs.webkit.org/show_bug.cgi?id=149671
2177
2178         Caused flaky crashes, rdar://problem/22916304 (Requested by ap
2179         on #webkit).
2180
2181         Reverted changeset:
2182
2183         "ParallelHelperPool::runFunctionInParallel() shouldn't
2184         allocate, and ParallelHelperPool.h shouldn't be included
2185         everywhere"
2186         https://bugs.webkit.org/show_bug.cgi?id=149635
2187         http://trac.webkit.org/changeset/190324
2188
2189 2015-09-29  Filip Pizlo  <fpizlo@apple.com>
2190
2191         ParallelHelperPool::runFunctionInParallel() shouldn't allocate, and ParallelHelperPool.h shouldn't be included everywhere
2192         https://bugs.webkit.org/show_bug.cgi?id=149635
2193
2194         Reviewed by Saam Barati.
2195
2196         * wtf/ParallelHelperPool.h:
2197         (WTF::ParallelHelperClient::runFunctionInParallel): Stack-allocate the task instead of heap-allocating it.
2198
2199 2015-09-29  Filip Pizlo  <fpizlo@apple.com>
2200
2201         GC copy phase spans too many files
2202         https://bugs.webkit.org/show_bug.cgi?id=149586
2203
2204         Reviewed by Andreas Kling.
2205
2206         Extract the load balancing algorithm used by the GC's copy phase into a reusable template.
2207         The GC copy phase now uses this.
2208
2209         * WTF.vcxproj/WTF.vcxproj:
2210         * WTF.vcxproj/WTF.vcxproj.filters:
2211         * WTF.xcodeproj/project.pbxproj:
2212         * wtf/CMakeLists.txt:
2213         * wtf/ParallelVectorIterator.h: Added.
2214         (WTF::ParallelVectorIterator::ParallelVectorIterator):
2215         (WTF::ParallelVectorIterator::iterate):
2216
2217 2015-09-26  Filip Pizlo  <fpizlo@apple.com>
2218
2219         Unreviewed, fix Windows build by adding WTF_EXPORT_PRIVATE in various places.
2220
2221         * wtf/ParallelHelperPool.h:
2222         (WTF::ParallelHelperClient::setFunction):
2223         (WTF::ParallelHelperPool::numberOfThreads):
2224
2225 2015-09-24  Filip Pizlo  <fpizlo@apple.com>
2226
2227         VMs should share GC threads
2228         https://bugs.webkit.org/show_bug.cgi?id=149433
2229         rdar://problem/12859344
2230
2231         Reviewed by Geoffrey Garen.
2232
2233         This adds two major things to WTF: WeakRandom and ParallelHelperPool. WeakRandom was
2234         already in JSC; we're just hoisting it into WTF. It's just a weak random number generator
2235         that's suitable for places where you need just a tiny bit of randomness.
2236
2237         ParallelHelperPool is a new API that simplifies data-parallel algorithms like the JSC GC.
2238         In a data-parallel algorithm, we want to run one task on as many cores as possible and let
2239         the task worry about which subset of the input data to work on. In some cases, the
2240         algorithm will not need to do any load balancing - and if load balancing is required, it's
2241         up to the user. This is appropriate in contexts where the load balancing needs to be
2242         custom-tuned for performance, like the GC's marking phase.
2243
2244         This new API has three concepts: task, client, and pool. A task is a reference counted
2245         object with a run() method, which may be run in parallel. It is usually used to wrap a
2246         functor. A pool is a pool of threads that can run things. A client is a placeholder for a
2247         task. A client can have zero or one tasks. A client must be registered with a pool. When a
2248         client has a task, the pool's threads may choose to run it. If a thread starts running a
2249         task, it will run it to completion. When the task returns on any thread, the client takes
2250         it to mean that the task should be removed. That means that any currently running instances
2251         of the task will finish but no new threads will attempt to run the task. You can easily ask
2252         a client to wait until a task finishes. You can also easily ask a client to run a task on
2253         the current thread in addition to possibly some helper threads from the pool.
2254
2255         For some data-parallel algorithms, programming with ParallelHelperPool is as easy as:
2256
2257         client.runFunctionInParallel(
2258             [=] () {
2259                 do things;
2260             });
2261
2262         Note that you cannot tell ahead of time how many threads will join to help the task.
2263         Threads may become available after the task has already started running. Those threads may
2264         join after the other threads have already started. It's not advisable to make algorithmic
2265         decisions based on client.numberOfActiveThreads(), since that number may change. Usually
2266         the best way to use ParallelHelperPool is with an algorithm that has its own custom
2267         worklist. An example of a very simple custom worklist is the one in the JSC GC's copying
2268         phase - it's just a Vector and an index that indicates the next set of elements to process.
2269
2270         This new API was initially designed to simplify how GCThread works, by replacing Phase with
2271         a callback that contains the phase's workload. I then realized that with a few tweaks, I
2272         could make this somewhat general enough that it might become interesting outside GC. I also
2273         realized that I could use this to enable thread sharing. So, although the API is kinda
2274         quirky, it's grounded in the reality of how the JSC GC does parallelism.
2275
2276         * WTF.vcxproj/WTF.vcxproj:
2277         * WTF.vcxproj/WTF.vcxproj.filters:
2278         * WTF.xcodeproj/project.pbxproj:
2279         * wtf/CMakeLists.txt:
2280         * wtf/ParallelHelperPool.cpp: Added.
2281         (WTF::ParallelHelperClient::ParallelHelperClient):
2282         (WTF::ParallelHelperClient::~ParallelHelperClient):
2283         (WTF::ParallelHelperClient::setTask):
2284         (WTF::ParallelHelperClient::finish):
2285         (WTF::ParallelHelperClient::doSomeHelping):
2286         (WTF::ParallelHelperClient::runTaskInParallel):
2287         (WTF::ParallelHelperClient::claimTask):
2288         (WTF::ParallelHelperClient::runTask):
2289         (WTF::ParallelHelperPool::ParallelHelperPool):
2290         (WTF::ParallelHelperPool::~ParallelHelperPool):
2291         (WTF::ParallelHelperPool::addThreads):
2292         (WTF::ParallelHelperPool::ensureThreads):
2293         (WTF::ParallelHelperPool::doSomeHelping):
2294         (WTF::ParallelHelperPool::didMakeWorkAvailable):
2295         (WTF::ParallelHelperPool::helperThreadBody):
2296         (WTF::ParallelHelperPool::hasClientWithTask):
2297         (WTF::ParallelHelperPool::getClientWithTask):
2298         (WTF::ParallelHelperPool::waitForClientWithTask):
2299         * wtf/ParallelHelperPool.h: Added.
2300         (WTF::ParallelHelperClient::setFunction):
2301         (WTF::ParallelHelperClient::runFunctionInParallel):
2302         (WTF::ParallelHelperClient::pool):
2303         (WTF::ParallelHelperClient::numberOfActiveThreads):
2304         (WTF::ParallelHelperPool::numberOfThreads):
2305         * wtf/SharedTask.h: Added.
2306         (WTF::SharedTask::SharedTask):
2307         (WTF::SharedTask::~SharedTask):
2308         (WTF::SharedTaskFunctor::SharedTaskFunctor):
2309         (WTF::createSharedTask):
2310         * wtf/WeakRandom.h: Copied from Source/JavaScriptCore/runtime/WeakRandom.h.
2311         (WTF::WeakRandom::WeakRandom):
2312         (WTF::WeakRandom::initializeSeed):
2313         (WTF::WeakRandom::seedUnsafe):
2314         (WTF::WeakRandom::getUint32):
2315         (WTF::WeakRandom::advance):
2316         (JSC::WeakRandom::WeakRandom): Deleted.
2317         (JSC::WeakRandom::seedUnsafe): Deleted.
2318         (JSC::WeakRandom::getUint32): Deleted.
2319         (JSC::WeakRandom::advance): Deleted.
2320         (JSC::WeakRandom::initializeSeed): Deleted.
2321
2322 2015-09-25  Alex Christensen  <achristensen@webkit.org>
2323
2324         Clean up CMake build on Mac
2325         https://bugs.webkit.org/show_bug.cgi?id=149573
2326
2327         Reviewed by Chris Dumez.
2328
2329         * wtf/PlatformMac.cmake:
2330
2331 2015-09-25  Alex Christensen  <achristensen@webkit.org>
2332
2333         [Win] Switch to CMake
2334         https://bugs.webkit.org/show_bug.cgi?id=148111
2335
2336         Reviewed by Brent Fulgham.
2337
2338         * WTF.vcxproj/WTF.proj:
2339
2340 2015-09-25  Joseph Pecoraro  <pecoraro@apple.com>
2341
2342         Simplify Stopwatch::elapsedTime
2343         https://bugs.webkit.org/show_bug.cgi?id=149538
2344
2345         Reviewed by Darin Adler.
2346
2347         * wtf/Stopwatch.h:
2348         (WTF::Stopwatch::elapsedTime):
2349         Simplify by not starting/stopping but just computing without updating members.
2350
2351 2015-09-25  Brent Fulgham  <bfulgham@apple.com>
2352
2353         [Win] Unreviewed build fix.
2354
2355         * wtf/FeatureDefines.h: Don't turn STREAMS_API on by default
2356         on Windows.
2357
2358 2015-09-24  Ryosuke Niwa  <rniwa@webkit.org>
2359
2360         Ran sort-Xcode-project-file.
2361
2362         * WTF.xcodeproj/project.pbxproj:
2363
2364 2015-09-23  Andy Estes  <aestes@apple.com>
2365
2366         Disable QuickLook on watchOS
2367         https://bugs.webkit.org/show_bug.cgi?id=149508
2368         <rdar://problem/22517968>
2369
2370         Reviewed by Dan Bernstein.
2371
2372         * wtf/Platform.h:
2373
2374 2015-09-22  Andy Estes  <aestes@apple.com>
2375
2376         Disable QuickLook on tvOS
2377         https://bugs.webkit.org/show_bug.cgi?id=149492
2378         <rdar://problem/22741586>
2379
2380         Reviewed by Dan Bernstein.
2381
2382         * wtf/Platform.h: Stopped enabling QuickLook on tvOS.
2383
2384 2015-09-22  Filip Pizlo  <fpizlo@apple.com>
2385
2386         Get rid of ENABLE(PARALLEL_GC)
2387         https://bugs.webkit.org/show_bug.cgi?id=149436
2388
2389         Reviewed by Mark Lam.
2390
2391         We always enable parallel GC everywhere but Windows, and it doesn't look like it was disabled
2392         there for any good reason. So, get rid of the flag.
2393
2394         * wtf/MainThread.cpp:
2395         (WTF::canAccessThreadLocalDataForThread):
2396         (WTF::initializeGCThreads):
2397         (WTF::registerGCThread):
2398         (WTF::isMainThreadOrGCThread):
2399         * wtf/Platform.h:
2400
2401 2015-09-22  Filip Pizlo  <fpizlo@apple.com>
2402
2403         Get rid of ENABLE(GGC)
2404         https://bugs.webkit.org/show_bug.cgi?id=149472
2405
2406         Reviewed by Mark Hahnenberg and Mark Lam.
2407
2408         * wtf/Platform.h:
2409
2410 2015-09-21  Filip Pizlo  <fpizlo@apple.com>
2411
2412         Always use the compiler's CAS implementation and get rid of ENABLE(COMPARE_AND_SWAP)
2413         https://bugs.webkit.org/show_bug.cgi?id=149438
2414
2415         Reviewed by Mark Lam.
2416
2417         * wtf/Atomics.h: Make weakCompareAndSwap() just forward to the system CAS via WTF::Atomic.
2418         (WTF::weakCompareAndSwap):
2419         (WTF::weakCompareAndSwapUIntPtr): Deleted.
2420         (WTF::weakCompareAndSwapSize): Deleted.
2421         * wtf/Bitmap.h: Small changes to use the new API.
2422         (WTF::WordType>::concurrentTestAndSet):
2423         * wtf/Platform.h: Remove ENABLE(COMPARE_AND_SWAP)
2424
2425 2015-09-21  Csaba Osztrogonác  <ossy@webkit.org>
2426
2427         Remove old GCC cruft from wtf/StdLibExtras.h
2428         https://bugs.webkit.org/show_bug.cgi?id=149401
2429
2430         Reviewed by Alex Christensen.
2431
2432         * wtf/StdLibExtras.h:
2433
2434 2015-09-21  Andy Estes  <aestes@apple.com>
2435
2436         Disable Parental Controls on the Apple TV platform
2437         https://bugs.webkit.org/show_bug.cgi?id=149421
2438
2439         Reviewed by Darin Adler.
2440
2441         * wtf/Platform.h:
2442
2443 2015-09-21  Filip Pizlo  <fpizlo@apple.com>
2444
2445         JSC should infer property types
2446         https://bugs.webkit.org/show_bug.cgi?id=148610
2447
2448         Reviewed by Geoffrey Garen.
2449
2450         * wtf/HashTable.h:
2451         (WTF::HashTableAddResult::HashTableAddResult): Make it possible to say "HashMap::AddResult result" without assigning anything to it yet.
2452         * wtf/PrintStream.h:
2453         (WTF::printInternal): Beef up printing of some common WTF types, in particular RefPtr<UniquedStringImpl>.
2454
2455 2015-09-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>
2456
2457         Remove XHR_TIMEOUT compilation guard
2458         https://bugs.webkit.org/show_bug.cgi?id=149260
2459
2460         Reviewed by Benjamin Poulain.
2461
2462         * wtf/FeatureDefines.h:
2463
2464 2015-09-17  Filip Pizlo  <fpizlo@apple.com>
2465
2466         Unreviewed, revert unintended change.
2467
2468         * benchmarks/LockSpeedTest.cpp:
2469         (main):
2470
2471 2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>
2472
2473         Add ShadowRoot interface and Element.prototype.attachShadow
2474         https://bugs.webkit.org/show_bug.cgi?id=149187
2475
2476         Reviewed by Antti Koivisto.
2477
2478         * wtf/FeatureDefines.h:
2479
2480
2481 2015-09-11  Keith Miller  <keith_miller@apple.com>
2482
2483         cryptographicallyRandomValuesFromOS should use CCRandomCopyBytes when available.
2484         https://bugs.webkit.org/show_bug.cgi?id=148439
2485
2486         Reviewed by Alexey Proskuryakov.
2487
2488         Recently, we switched to using arc4random_buf on Darwin but further research indicates that
2489         arc4random_buf has the same behavior we had before and thus we were just pushing the problem
2490         further down the stack. CCRandomCopyBytes, however, appears to be more advanced and has much
2491         better error handling than we had before.
2492
2493         * WTF.xcodeproj/project.pbxproj:
2494         * wtf/OSRandomSource.cpp:
2495         (WTF::cryptographicallyRandomValuesFromOS):
2496         * wtf/spi/darwin/CommonCryptoSPI.h: Added.
2497
2498 2015-09-08  Filip Pizlo  <fpizlo@apple.com>
2499
2500         There should be one stub hanging off an inline cache that contains code for all of the cases, rather than forming a linked list consisting of one stub per case
2501         https://bugs.webkit.org/show_bug.cgi?id=148717
2502
2503         Reviewed by Michael Saboff.
2504
2505         Beef up dumping a bit.
2506
2507         * wtf/PrintStream.h:
2508         (WTF::pointerDump):
2509         (WTF::printInternal):
2510
2511 2015-09-08  Mark Lam  <mark.lam@apple.com>
2512
2513         GC stack scan should include ABI red zone.
2514         https://bugs.webkit.org/show_bug.cgi?id=148976
2515
2516         Reviewed by Geoffrey Garen and Benjamin Poulain.
2517
2518         * wtf/StackBounds.h:
2519         (WTF::StackBounds::origin):
2520         (WTF::StackBounds::end):
2521         (WTF::StackBounds::size):
2522
2523 2015-09-04  Csaba Osztrogonác  <ossy@webkit.org>
2524
2525         Enable reference qualified functions for GCC
2526         https://bugs.webkit.org/show_bug.cgi?id=148526
2527
2528         Reviewed by Darin Adler.
2529
2530         * wtf/Compiler.h:
2531
2532 2015-09-04  Csaba Osztrogonác  <ossy@webkit.org>
2533
2534         webkit-unassigned@lists.webkit.org
2535         https://bugs.webkit.org/show_bug.cgi?id=148525
2536
2537         Reviewed by Darin Adler.
2538
2539         * wtf/Compiler.h:
2540
2541 2015-08-29  Zan Dobersek  <zdobersek@igalia.com>
2542
2543         [WTF] Improve a ParkingLot::parkConditionally() comment for a libstdc++ workaround
2544         https://bugs.webkit.org/show_bug.cgi?id=148571
2545
2546         Reviewed by Filip Pizlo.
2547
2548         * wtf/ParkingLot.cpp:
2549         (WTF::ParkingLot::parkConditionally): Adjust the comment about the workaround for
2550         the libstdc++ std::condition_variable implementation, linking to the WebKit bug
2551         that dissected the problem and the GCC bug that originally reported the problem.
2552
2553 2015-08-28  Anders Carlsson  <andersca@apple.com>
2554
2555         Remove the #if PLATFORM(MAC) in DeprecatedSymbolsUsedBySafari.mm so we'll actually build it on iOS.
2556
2557         Reviewed by Dan Bernstein.
2558
2559         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2560
2561 2015-08-27  Anders Carlsson  <andersca@apple.com>
2562
2563         Define legacy main thread calling functions for iOS as well
2564         https://bugs.webkit.org/show_bug.cgi?id=148530
2565
2566         Reviewed by Tim Horton.
2567
2568         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2569
2570 2015-08-26  Anders Carlsson  <andersca@apple.com>
2571
2572         Fix build.
2573
2574         * wtf/WorkQueue.cpp:
2575
2576 2015-08-26  Anders Carlsson  <andersca@apple.com>
2577
2578         Add and implement WorkQueue::concurrentApply
2579         https://bugs.webkit.org/show_bug.cgi?id=148488
2580
2581         Reviewed by Geoffrey Garen.
2582
2583         WorkQueue::concurrentApply is modeled after dispatch_apply, and on Cocoa it uses dispatch_apply directly.
2584         For other ports there's a generic concurrentApply implemented using our threading primitives.
2585         
2586         * wtf/NeverDestroyed.h:
2587         (WTF::LazyNeverDestroyed::operator->):
2588         * wtf/WorkQueue.cpp:
2589         (WTF::WorkQueue::concurrentApply):
2590         * wtf/WorkQueue.h:
2591         * wtf/cocoa/WorkQueueCocoa.cpp:
2592         (WTF::WorkQueue::concurrentApply):
2593
2594 2015-08-25  Filip Pizlo  <fpizlo@apple.com>
2595
2596         Node::origin should be able to tell you if it's OK to exit
2597         https://bugs.webkit.org/show_bug.cgi?id=145204
2598
2599         Reviewed by Geoffrey Garen.
2600
2601         * wtf/Insertion.h:
2602         (WTF::executeInsertions): Add a useful assertion. This come into play because JSC will use UINT_MAX as "invalid index", and that ought to trigger this assertion.
2603
2604 2015-08-25  Csaba Osztrogonác  <ossy@webkit.org>
2605
2606         Require GCC version at least 4.9
2607         https://bugs.webkit.org/show_bug.cgi?id=148430
2608
2609         Reviewed by Darin Adler.
2610
2611         * wtf/Compiler.h:
2612
2613 2015-08-22  Anders Carlsson  <andersca@apple.com>
2614
2615         std::once_flag needs to be static.
2616
2617         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2618         (WTF::MainThreadFunctionTracker::singleton):
2619
2620 2015-08-21  Anders Carlsson  <andersca@apple.com>
2621
2622         Build fix.
2623
2624         * wtf/MainThread.h:
2625
2626 2015-08-21  Anders Carlsson  <andersca@apple.com>
2627
2628         Address review feedback from Darin.
2629
2630         * wtf/MainThread.h:
2631         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2632         (WTF::callOnMainThread):
2633         (WTF::cancelCallOnMainThread):
2634
2635 2015-08-21  Anders Carlsson  <andersca@apple.com>
2636
2637         Deprecate the old school callOnMainThread/cancelCallOnMainThread functions
2638         https://bugs.webkit.org/show_bug.cgi?id=148327
2639
2640         Reviewed by Sam Weinig.
2641
2642         * wtf/MainThread.cpp:
2643         (WTF::functionQueue):
2644         (WTF::dispatchFunctionsFromMainThread):
2645         (WTF::callOnMainThread):
2646         Change the function queue to be a queue of std::function<void ()> and get rid of dead code.
2647
2648         * wtf/MainThread.h:
2649         Conditionalize callOnMainThread and cancelCallOnMainThread because Safari on Mavericks still expects to them to be
2650         declared in MainThread.h under 10.9.
2651
2652         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2653         Add a MainThreadFunctionTracker singleton that keeps track of scheduled functions so we can ensure that they're not
2654         called if they're cancelled.
2655
2656         (WTF::MainThreadFunctionTracker::singleton):
2657         Return the singleton.
2658
2659         (WTF::MainThreadFunctionTracker::callOnMainThread):
2660         Add the function/context pair to our map and schedule the function to be run on the main thread.
2661         If the function has been removed, don't call it.
2662
2663         (WTF::MainThreadFunctionTracker::cancelCallOnMainThread):
2664         Remove all entries with the given function/context pair.
2665
2666         (WTF::MainThreadFunctionTracker::addFunction):
2667         Add the function/context pair to the map and return the unique identifier.
2668
2669         (WTF::MainThreadFunctionTracker::removeIdentifier):
2670         Look up the identifier and remove it if it still exists. If it exists we know that it hasn't been canceled and that we can call it.
2671
2672         (WTF::MainThreadFunctionTracker::removeFunctions):
2673         Remove all function identifiers matched by the function/context pair.
2674
2675         (WTF::callOnMainThread):
2676         Implement using MainThreadFunctionTracker.
2677
2678         (WTF::cancelCallOnMainThread):
2679         Implement using MainThreadFunctionTracker.
2680
2681 2015-08-21  Anders Carlsson  <andersca@apple.com>
2682
2683         Get rid of uses of the old callOnMainThread function that takes a function ptr + context
2684         https://bugs.webkit.org/show_bug.cgi?id=148324
2685
2686         Reviewed by Tim Horton.
2687
2688         * wtf/text/cf/StringImplCF.cpp:
2689         (WTF::StringWrapperCFAllocator::deallocate):
2690         (WTF::StringWrapperCFAllocator::deallocateOnMainThread): Deleted.
2691
2692 2015-08-20  Commit Queue  <commit-queue@webkit.org>
2693
2694         Unreviewed, rolling out r188717 and r188719.
2695         https://bugs.webkit.org/show_bug.cgi?id=148272
2696
2697         Broke the Mavericks build (Requested by andersca on #webkit).
2698
2699         Reverted changesets:
2700
2701         "Merge Lock and LockBase"
2702         https://bugs.webkit.org/show_bug.cgi?id=148266
2703         http://trac.webkit.org/changeset/188717
2704
2705         "Merge ConditionBase and Condition"
2706         https://bugs.webkit.org/show_bug.cgi?id=148270
2707         http://trac.webkit.org/changeset/188719
2708
2709 2015-08-20  Anders Carlsson  <andersca@apple.com>
2710
2711         Merge ConditionBase and Condition
2712         https://bugs.webkit.org/show_bug.cgi?id=148270
2713
2714         Reviewed by Filip Pizlo.
2715
2716         * wtf/Condition.h:
2717         Direct initialize m_hasWaiters so Condition gets a constexpr constructor.
2718
2719         * wtf/Lock.h:
2720         Remove a now outdated comment.
2721
2722 2015-08-20  Anders Carlsson  <andersca@apple.com>
2723
2724         Merge Lock and LockBase
2725         https://bugs.webkit.org/show_bug.cgi?id=148266
2726
2727         Reviewed by Filip Pizlo.
2728
2729         * wtf/Atomics.h:
2730         (WTF::Atomic::Atomic):
2731         Add a default constructor as well as a constexpr constructor that takes a value.
2732
2733         * wtf/Lock.cpp:
2734         (WTF::Lock::lockSlow):
2735         (WTF::Lock::unlockSlow):
2736         Rename LockBase to Lock.
2737
2738         * wtf/Lock.h:
2739         Rename LockBase to Lock and direct-initialize Atomic to 0. Since the Atomic constructor is constexpr,
2740         Lock also gets a constexpr constructor. Change the LockBase -> StaticLock typedef and add a fixme.
2741
2742         * wtf/WordLock.h:
2743         Direct initialize m_word to 0.
2744
2745 2015-08-19  Filip Pizlo  <fpizlo@apple.com>
2746
2747         Remove WTF::SpinLock
2748         https://bugs.webkit.org/show_bug.cgi?id=148208
2749
2750         Reviewed by Geoffrey Garen.
2751
2752         Remove the SpinLock.h file and remove references to the SpinLock class. Put the old SpinLock
2753         algorithm in LockSpeedTest.cpp - which isn't compiled as part of a WTF or WebKit build - just
2754         so we can still benchmark our locking algorithms against a spinlock baseline.
2755
2756         * WTF.vcxproj/WTF.vcxproj:
2757         * WTF.xcodeproj/project.pbxproj:
2758         * benchmarks/LockSpeedTest.cpp:
2759         * wtf/CMakeLists.txt:
2760         * wtf/Lock.h:
2761         * wtf/SpinLock.h: Removed.
2762         * wtf/WordLock.h:
2763
2764 2015-08-19  Alex Christensen  <achristensen@webkit.org>
2765
2766         CMake Windows build should not include files directly from other Source directories
2767         https://bugs.webkit.org/show_bug.cgi?id=148198
2768
2769         Reviewed by Brent Fulgham.
2770
2771         * wtf/CMakeLists.txt:
2772         * wtf/PlatformWin.cmake:
2773
2774 2015-08-18  Filip Pizlo  <fpizlo@apple.com>
2775
2776         Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
2777         https://bugs.webkit.org/show_bug.cgi?id=148140
2778
2779         Reviewed by Geoffrey Garen.
2780
2781         Also beef up Condition by giving it a StaticCondition variant.
2782
2783         * wtf/Condition.h:
2784         (WTF::ConditionBase::notifyAll):
2785         (WTF::ConditionBase::waitForSecondsImpl):
2786         (WTF::ConditionBase::absoluteFromRelative):
2787         (WTF::Condition::Condition):
2788         (WTF::Condition::notifyAll): Deleted.
2789         (WTF::Condition::waitForSecondsImpl): Deleted.
2790         (WTF::Condition::absoluteFromRelative): Deleted.
2791         * wtf/CryptographicallyRandomNumber.cpp:
2792         * wtf/HashTable.cpp:
2793         (WTF::HashTableStats::recordCollisionAtCount):
2794         (WTF::HashTableStats::dumpStats):
2795         (WTF::hashTableStatsMutex): Deleted.
2796         * wtf/HashTable.h:
2797         (WTF::KeyTraits>::HashTable):
2798         (WTF::KeyTraits>::invalidateIterators):
2799         (WTF::addIterator):
2800         (WTF::removeIterator):
2801         * wtf/Lock.h:
2802         * wtf/MainThread.cpp:
2803         (WTF::functionQueue):
2804         (WTF::dispatchFunctionsFromMainThread):
2805         (WTF::callOnMainThread):
2806         (WTF::cancelCallOnMainThread):
2807         (WTF::mainThreadFunctionQueueMutex): Deleted.
2808         * wtf/StackStats.cpp:
2809         (WTF::StackStats::PerThreadStats::PerThreadStats):
2810         (WTF::StackStats::CheckPoint::CheckPoint):
2811         (WTF::StackStats::CheckPoint::~CheckPoint):
2812         (WTF::StackStats::probe):
2813         (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
2814         (WTF::StackStats::LayoutCheckPoint::~LayoutCheckPoint):
2815         (WTF::StackStats::initialize): Deleted.
2816         * wtf/StackStats.h:
2817         (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
2818         (WTF::StackStats::probe):
2819         (WTF::StackStats::initialize): Deleted.
2820         * wtf/ThreadingPthreads.cpp:
2821         (WTF::initializeThreading):
2822         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2823         (WTF::callOnMainThread):
2824         (WTF::lockAtomicallyInitializedStaticMutex):
2825         (WTF::unlockAtomicallyInitializedStaticMutex):
2826         (WTF::atomicallyInitializedStaticMutex): Deleted.
2827         * wtf/text/StringView.cpp:
2828         (WTF::StringView::UnderlyingString::UnderlyingString):
2829         (WTF::underlyingStrings):
2830         (WTF::StringView::invalidate):
2831         (WTF::StringView::adoptUnderlyingString):
2832         (WTF::StringView::setUnderlyingString):
2833         (WTF::underlyingStringsMutex): Deleted.
2834         * wtf/unicode/icu/CollatorICU.cpp:
2835         (WTF::Collator::Collator):
2836         (WTF::Collator::~Collator):
2837         (WTF::cachedCollatorMutex): Deleted.
2838
2839 2015-08-18  Zan Dobersek  <zdobersek@igalia.com>
2840
2841         [GLib] GMainLoopSource should receive the std::function<> objects through rvalue references
2842         https://bugs.webkit.org/show_bug.cgi?id=147981
2843
2844         Reviewed by Carlos Garcia Campos.
2845
2846         Scheduling methods on GMainLoopSource and GThreadSafeMainLoopSource should
2847         have the std::function<> objects passed through rvalue references, and should
2848         move the passed-in objects forward when required.
2849
2850         * wtf/glib/GMainLoopSource.cpp:
2851         (WTF::GMainLoopSource::schedule):
2852         (WTF::GMainLoopSource::scheduleAfterDelay):
2853         (WTF::GMainLoopSource::scheduleAndDeleteOnDestroy):
2854         (WTF::GMainLoopSource::scheduleAfterDelayAndDeleteOnDestroy):
2855         * wtf/glib/GMainLoopSource.h:
2856         * wtf/glib/GThreadSafeMainLoopSource.cpp:
2857         (WTF::GThreadSafeMainLoopSource::schedule):
2858         (WTF::GThreadSafeMainLoopSource::scheduleAfterDelay):
2859         * wtf/glib/GThreadSafeMainLoopSource.h:
2860
2861 2015-08-18  Eric Carlson  <eric.carlson@apple.com>
2862
2863         Remove "platform text track menu"
2864         https://bugs.webkit.org/show_bug.cgi?id=148139
2865
2866         Reviewed by Jer Noble.
2867
2868         * wtf/Platform.h: Remove PLATFORM_TEXT_TRACK_MENU.
2869
2870 2015-08-18  Filip Pizlo  <fpizlo@apple.com>
2871
2872         WTF::Condition should have a fast path for notifyOne/notifyAll that avoids calling unparkOne/unparkAll
2873         https://bugs.webkit.org/show_bug.cgi?id=148090
2874
2875         Reviewed by Geoffrey Garen.
2876
2877         This change makes notifyOne()/notifyAll() blazing fast when nobody is waiting, by using the
2878         various hooks that ParkingLot gives us to maintain a m_hasWaiters variable. When it's false, it
2879         means that any unpark operation would simply return immediately.
2880
2881         This is a 45% speed-up for the 1-producer/1-consumer scenario with a 100-element queue when you
2882         use the notifyOne()-per-enqueue style. What's cool about this change is that you can now safely
2883         call notifyOne() (or notifyAll()) out of paranoia, just in case someone might be waiting. It's
2884         free to do so if nobody is waiting!
2885
2886         * wtf/Condition.h:
2887         (WTF::Condition::Condition):
2888         (WTF::Condition::waitUntil):
2889         (WTF::Condition::notifyOne):
2890         (WTF::Condition::notifyAll):
2891
2892 2015-08-17  Filip Pizlo  <fpizlo@apple.com>
2893
2894         Replace all remaining uses of WTF::Mutex with WTF::Lock
2895         https://bugs.webkit.org/show_bug.cgi?id=148089
2896
2897         Reviewed by Geoffrey Garen.
2898
2899         This also beefs up and rationalizes the Condition API, so that it can deal with units of time
2900         other than just steady_clock. This makes it easier to port ThreadCondition and
2901         std::condition_variable code over to Condition. This patch does not take a position on what
2902         kind of time is best; from reading a lot of the uses in WebCore, it seems like our use of
2903         double to measure seconds is often nicer than the many different classes in std::chrono.
2904
2905         Also added a Condition speed test, to make sure that all of this is a good idea. And indeed it
2906         is. The 1-producer/1-consumer scenario with a 100-element queue runs 36x faster using
2907         Lock/Condition than Mutex/ThreadCondition when you use the notifyOne()-per-enqueue style. It
2908         runs 58x faster with Lock/Condition when you use the notifyAll()-at-boundary style. Note that
2909         I have a bug open for making the notifyOne()-per-enqueue style even faster:
2910         https://bugs.webkit.org/show_bug.cgi?id=148090. Also, the 10-consumer/10-producer scenario with
2911         a 100-element queue runs 20x faster with Lock/Condition for notifyOne()-per-enqueue and 30x
2912         faster with notifyAll()-at-boundary. The only way to tweak the test to get
2913         Mutex/ThreadCondition to win is to have one producer, one consumer, a 1-element queue, and use
2914         the notifyOne()-per-enqueue style. In that case, one of the two threads is going to be waiting
2915         most of the time and the test basically measures wake-up latency and nothing else. Because
2916         Condition::wait() does a little bit more work than ThreadCondition::wait(),
2917         Mutex/ThreadCondition end up running 3% faster in this test case. But if you vary any of the
2918         parameters of the test, Mutex/ThreadCondition ends up losing - all it takes is more threads or
2919         a queue size of 5 or more. To my knowledge, we never do producer/consumer with a queue bounded
2920         to one element precisely because that approach is the least efficient regardless of locking
2921         algorithm. For example, neither WTF::MessageQueue nor DFG::Worklist have any bounds on their
2922         queue size. So, it seems that replacing all uses of system mutexes and condition variables with
2923         our own thing is a great idea.
2924
2925         * benchmarks/LockSpeedTest.cpp:
2926         * benchmarks/ConditionSpeedTest.cpp: Added.
2927         * wtf/Condition.h:
2928         (WTF::Condition::Condition):
2929         (WTF::Condition::waitUntil):
2930         (WTF::Condition::waitFor):
2931         (WTF::Condition::wait):
2932         (WTF::Condition::waitUntilWallClockSeconds):
2933         (WTF::Condition::waitUntilMonotonicClockSeconds):
2934         (WTF::Condition::notifyOne):
2935         (WTF::Condition::notifyAll):
2936         (WTF::Condition::waitForSecondsImpl):
2937         (WTF::Condition::waitForImpl):
2938         (WTF::Condition::absoluteFromRelative):
2939         * wtf/MessageQueue.h:
2940         (WTF::MessageQueue::infiniteTime):
2941         (WTF::MessageQueue<DataType>::append):
2942         (WTF::MessageQueue<DataType>::appendAndKill):
2943         (WTF::MessageQueue<DataType>::appendAndCheckEmpty):
2944         (WTF::MessageQueue<DataType>::prepend):
2945         (WTF::MessageQueue<DataType>::removeIf):
2946         (WTF::MessageQueue<DataType>::isEmpty):
2947         (WTF::MessageQueue<DataType>::kill):
2948         (WTF::MessageQueue<DataType>::killed):
2949         * wtf/ParallelJobsGeneric.cpp:
2950         (WTF::ParallelEnvironment::ThreadPrivate::execute):
2951         (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
2952         (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
2953         * wtf/ParallelJobsGeneric.h:
2954         * wtf/ParkingLot.cpp:
2955         (WTF::ParkingLot::parkConditionally):
2956         * wtf/ParkingLot.h:
2957         (WTF::ParkingLot::compareAndPark):
2958         * wtf/ThreadingPthreads.cpp:
2959         (WTF::initializeThreading):
2960         * wtf/ThreadingWin.cpp:
2961         (WTF::initializeThreading):
2962         * wtf/dtoa.cpp:
2963         (WTF::pow5mult):
2964         * wtf/dtoa.h:
2965
2966 2015-08-17  Alex Christensen  <achristensen@webkit.org>
2967
2968         Build Debug Suffix on Windows with CMake
2969         https://bugs.webkit.org/show_bug.cgi?id=148083
2970
2971         Reviewed by Brent Fulgham.
2972
2973         * wtf/PlatformWin.cmake:
2974         Add DEBUG_SUFFIX
2975
2976 2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>
2977
2978         Implement IntegerHasher
2979         https://bugs.webkit.org/show_bug.cgi?id=147866
2980
2981         Reviewed by Darin Adler and Anders Carlsson.
2982
2983         Rename StringHasher.h to Hasher.h, and include an IntegerHasher class.
2984
2985         * WTF.vcxproj/WTF.vcxproj: Update to target new file.
2986         * WTF.vcxproj/WTF.vcxproj.filters: Ditto.
2987         * WTF.xcodeproj/project.pbxproj: Ditto.
2988         * wtf/CMakeLists.txt: Ditto.
2989         * wtf/Hasher.h: Renamed from Source/WTF/wtf/StringHasher.h.
2990         * wtf/text/CString.cpp: Use new #include
2991         * wtf/text/StringHash.h: Ditto.
2992         * wtf/text/StringImpl.h: Ditto.
2993         * wtf/unicode/UTF8.cpp: Ditto.
2994
2995 2015-08-17  Alex Christensen  <achristensen@webkit.org>
2996
2997         Move some commands from ./CMakeLists.txt to Source/cmake
2998         https://bugs.webkit.org/show_bug.cgi?id=148003
2999
3000         Reviewed by Brent Fulgham.
3001
3002         * CMakeLists.txt:
3003         Added commands needed to build WTF by itself.
3004
3005 2015-08-14  Filip Pizlo  <fpizlo@apple.com>
3006
3007         Use WTF::Lock and WTF::Condition instead of WTF::Mutex, WTF::ThreadCondition, std::mutex, and std::condition_variable
3008         https://bugs.webkit.org/show_bug.cgi?id=147999
3009
3010         Reviewed by Geoffrey Garen.
3011
3012         Relanding after fixing a deadlock on Linux.
3013
3014         * wtf/Condition.h: "using WTF::Condition".
3015         * wtf/Lock.h:
3016         (WTF::LockBase::lock):
3017         (WTF::LockBase::tryLock): Add tryLock() because it turns out that we use it sometimes.
3018         (WTF::LockBase::try_lock): unique_lock needs this.
3019         (WTF::LockBase::unlock):
3020         * wtf/ParkingLot.cpp:
3021         (WTF::ParkingLot::parkConditionally): Work around a Linux C++ bug where wait_until with time_point::max() immediately returns and doesn't flash the lock.
3022
3023 2015-08-14  Keith Miller  <keith_miller@apple.com>
3024
3025         cryptographicallyRandomValuesFromOS should use arc4random_buf on Darwin.
3026         https://bugs.webkit.org/show_bug.cgi?id=148038
3027
3028         Reviewed by Geoffrey Garen.
3029
3030         Currently, we open a file descriptor to /dev/urandom, which can sometimes
3031         fail to open. Using arc4random_buf instead should get around this issue.
3032
3033         * wtf/OSRandomSource.cpp:
3034         (WTF::cryptographicallyRandomValuesFromOS):
3035
3036 2015-08-14  Commit Queue  <commit-queue@webkit.org>
3037
3038         Unreviewed, rolling out r188444.
3039         https://bugs.webkit.org/show_bug.cgi?id=148029
3040
3041         Broke GTK and EFL (see bug #148027) (Requested by philn on
3042         #webkit).
3043
3044         Reverted changeset:
3045
3046         "Use WTF::Lock and WTF::Condition instead of WTF::Mutex,
3047         WTF::ThreadCondition, std::mutex, and std::condition_variable"
3048         https://bugs.webkit.org/show_bug.cgi?id=147999
3049         http://trac.webkit.org/changeset/188444
3050
3051 2015-08-13  Filip Pizlo  <fpizlo@apple.com>
3052
3053         Use WTF::Lock and WTF::Condition instead of WTF::Mutex, WTF::ThreadCondition, std::mutex, and std::condition_variable
3054         https://bugs.webkit.org/show_bug.cgi?id=147999
3055
3056         Reviewed by Geoffrey Garen.
3057
3058         * wtf/Condition.h: "using WTF::Condition".
3059         * wtf/Lock.h:
3060         (WTF::LockBase::lock):
3061         (WTF::LockBase::tryLock): Add tryLock() because it turns out that we use it sometimes.
3062         (WTF::LockBase::try_lock): unique_lock needs this.
3063         (WTF::LockBase::unlock):
3064
3065 2015-08-13  Commit Queue  <commit-queue@webkit.org>
3066
3067         Unreviewed, rolling out r188428.
3068         https://bugs.webkit.org/show_bug.cgi?id=148015
3069
3070         broke cmake build (Requested by alexchristensen on #webkit).
3071
3072         Reverted changeset:
3073
3074         "Move some commands from ./CMakeLists.txt to Source/cmake"
3075         https://bugs.webkit.org/show_bug.cgi?id=148003
3076         http://trac.webkit.org/changeset/188428
3077
3078 2015-08-13  Alex Christensen  <achristensen@webkit.org>
3079
3080         Move some commands from ./CMakeLists.txt to Source/cmake
3081         https://bugs.webkit.org/show_bug.cgi?id=148003
3082
3083         Reviewed by Brent Fulgham.
3084
3085         * CMakeLists.txt:
3086         Added commands needed to build WTF by itself.
3087
3088 2015-08-13  Mark Lam  <mark.lam@apple.com>
3089
3090         WorkQueue::dispatchAfter() on Windows fires early.
3091         https://bugs.webkit.org/show_bug.cgi?id=147992
3092
3093         Reviewed by Brent Fulgham.
3094
3095         The Windows implementation of WorkQueue::dispatchAfter() uses CreateTimerQueueTimer().
3096         Unfortunately, CreateTimerQueueTimer() is sloppy and can fire early.  We need to compensate
3097         for this slop to ensure that the specified duration does expire before the callback function
3098         is called.  Otherwise, the JSC watchdog (which depends on this) can fail randomly.
3099
3100         * wtf/win/WorkQueueWin.cpp:
3101         (WTF::WorkQueue::dispatchAfter):
3102
3103 2015-08-13  Filip Pizlo  <fpizlo@apple.com>
3104
3105         WTF should have a compact Condition object to use with Lock
3106         https://bugs.webkit.org/show_bug.cgi?id=147986
3107
3108         Reviewed by Geoffrey Garen.
3109
3110         Adds a condition variable implementation based on ParkingLot, called simply WTF::Condition.
3111         It can be used with WTF::Lock or actually any lock implementation. It should even work with
3112         WTF::SpinLock, WTF::Mutex, or std::mutex. Best of all, Condition only requires one byte.
3113
3114         ParkingLot almost contained all of the functionality needed to implemenet wait/notify. We
3115         could have implemented Condition using a 32-bit (or even 64-bit) version that protects
3116         against a notify that happens just before we park. But, this changes the ParkingLot API to
3117         give us the ability to run some code between when ParkingLot enqueues the current thread
3118         and when it actually sleeps. This callback is called with no locks held, so it can call
3119         unlock() on any kind of lock, so long as that lock's unlock() method doesn't recurse into
3120         ParkingLot::parkConditionally(). That seems unlikely; unlock() is more likely to call
3121         ParkingLot::unparkOne() or unparkAll(). WTF::Lock will never call parkConditionally()
3122         inside unlock(), so WTF::Lock is definitely appropriate for use with Condition.
3123
3124         Condition supports most of the API that std::condition_variable supports. It does some
3125         things to try to reduce footgun potential. The preferred timeout form is waitUntil() which
3126         takes an absolute time from the steady_clock. The only relative timeout form also takes a
3127         predicate callback, so it's impossible to write the subtly incorrect
3128         "while (...) wait_for(...)" idiom.
3129
3130         This patch doesn't actually introduce any uses of WTF::Condition other than the unit tests.
3131         I'll start switching code over to using WTF::Condition in another patch.
3132
3133         * WTF.vcxproj/WTF.vcxproj:
3134         * WTF.xcodeproj/project.pbxproj:
3135         * wtf/CMakeLists.txt:
3136         * wtf/Condition.h: Added.
3137         (WTF::Condition::Condition):
3138         (WTF::Condition::waitUntil):
3139         (WTF::Condition::waitFor):
3140         (WTF::Condition::wait):
3141         (WTF::Condition::notifyOne):
3142         (WTF::Condition::notifyAll):
3143         * wtf/Lock.cpp:
3144         (WTF::LockBase::unlockSlow): Make this useful assertion be a release assertion. It catches cases where you unlock the lock even though you don't hold it.
3145         * wtf/ParkingLot.cpp:
3146         (WTF::ParkingLot::parkConditionally): Add the beforeSleep() callback.
3147         (WTF::ParkingLot::unparkOne):
3148         * wtf/ParkingLot.h:
3149         (WTF::ParkingLot::compareAndPark):
3150
3151 2015-08-12  Anders Carlsson  <andersca@apple.com>
3152
3153         Use WTF::Optional in WindowFeatures
3154         https://bugs.webkit.org/show_bug.cgi?id=147956
3155
3156         Reviewed by Sam Weinig.
3157
3158         Add new operators to WTF::Optional to make it more like std::optional.
3159
3160         * wtf/Optional.h:
3161         (WTF::Optional::operator->):
3162         (WTF::Optional::operator*):
3163
3164 2015-08-12  Filip Pizlo  <fpizlo@apple.com>
3165
3166         WTF::Lock should not suffer from the thundering herd
3167         https://bugs.webkit.org/show_bug.cgi?id=147947
3168
3169         Reviewed by Geoffrey Garen.
3170
3171         This changes Lock::unlockSlow() to use unparkOne() instead of unparkAll(). The problem with
3172         doing this is that it's not obvious after calling unparkOne() if there are any other threads
3173         that are still parked on the lock's queue. If we assume that there are and leave the
3174         hasParkedBit set, then future calls to unlock() will take the slow path. We don't want that
3175         if there aren't actually any threads parked. On the other hand, if we assume that there
3176         aren't any threads parked and clear the hasParkedBit, then if there actually were some
3177         threads parked, then they may never be awoken since future calls to unlock() won't take slow
3178         path and so won't call unparkOne(). In other words, we need a way to be very precise about
3179         when we clear the hasParkedBit and we need to do it in a race-free way: it can't be the case
3180         that we clear the bit just as some thread gets parked on the queue.
3181
3182         A similar problem arises in futexes, and one of the solutions is to have a thread that
3183         acquires a lock after parking sets the hasParkedBit. This is what Rusty Russel's usersem
3184         does. It's a subtle algorithm. Also, it means that if a thread barges in before the unparked
3185         thread runs, then that barging thread will not know that there are threads parked. This
3186         could increase the severity of barging.
3187
3188         Since ParkingLot is a user-level API, we don't have to worry about the kernel-user security
3189         issues and so we can expose callbacks while ParkingLot is holding its internal locks. This
3190         change does exactly that for unparkOne(). The new variant of unparkOne() will call a user
3191         function while the queue from which we are unparking is locked. The callback is told basic
3192         stats about the queue: did we unpark a thread this time, and could there be more threads to
3193         unpark in the future. The callback runs while it's impossible for the queue state to change,
3194         since the ParkingLot's internal locks for the queue is held. This means that
3195         Lock::unlockSlow() can either clear, or leave, the hasParkedBit while releasing the lock
3196         inside the callback from unparkOne(). This takes care of the thundering herd problem while
3197         also reducing the greed that arises from barging threads.
3198
3199         This required some careful reworking of the ParkingLot algorithm. The first thing I noticed
3200         was that the ThreadData::shouldPark flag was useless, since it's set exactly when
3201         ThreadData::address is non-null. Then I had to make sure that dequeue() could lazily create
3202         both hashtables and buckets, since the "callback is called while queue is locked" invariant
3203         requires that we didn't exit early due to the hashtable or bucket not being present. Note
3204         that all of this is done in such a way that the old unparkOne() and unparkAll() don't have
3205         to create any buckets, though they now may create the hashtable. We don't care as much about
3206         the hashtable being created by unpark since it's just such an unlikely scenario and it would
3207         only happen once.
3208
3209         This change reduces the kernel CPU usage of WTF::Lock for the long critical section test by
3210         about 8x and makes it always perform as well as WTF::WordLock and WTF::Mutex for that
3211         benchmark.
3212
3213         * benchmarks/LockSpeedTest.cpp:
3214         * wtf/Lock.cpp:
3215         (WTF::LockBase::unlockSlow):
3216         * wtf/Lock.h:
3217         (WTF::LockBase::isLocked):
3218         (WTF::LockBase::isFullyReset):
3219         * wtf/ParkingLot.cpp:
3220         (WTF::ParkingLot::parkConditionally):
3221         (WTF::ParkingLot::unparkOne):
3222         (WTF::ParkingLot::unparkAll):
3223         * wtf/ParkingLot.h:
3224         * wtf/WordLock.h:
3225         (WTF::WordLock::isLocked):
3226         (WTF::WordLock::isFullyReset):
3227
3228 2015-08-11  Filip Pizlo  <fpizlo@apple.com>
3229
3230         Always use a byte-sized lock implementation
3231         https://bugs.webkit.org/show_bug.cgi?id=147908
3232
3233         Reviewed by Geoffrey Garen.
3234
3235         At the start of my locking algorithm crusade, I implemented Lock, which is a sizeof(void*)
3236         lock implementation with some nice theoretical properties and good performance. Then I added
3237         the ParkingLot abstraction and ByteLock. ParkingLot uses Lock in its implementation.
3238         ByteLock uses ParkingLot to create a sizeof(char) lock implementation that performs like
3239         Lock.
3240
3241         It turns out that ByteLock is always at least as good as Lock, and sometimes a lot better:
3242         it requires 8x less memory on 64-bit systems. It's hard to construct a benchmark where
3243         ByteLock is significantly slower than Lock, and when you do construct such a benchmark,
3244         tweaking it a bit can also create a scenario where ByteLock is significantly faster than
3245         Lock.
3246
3247         So, the thing that we call "Lock" should really use ByteLock's algorithm, since it is more
3248         compact and just as fast. That's what this patch does.
3249
3250         But we still need to keep the old Lock algorithm, because it's used to implement ParkingLot,
3251         which in turn is used to implement ByteLock. So this patch does this transformation:
3252
3253         - Move the algorithm in Lock into files called WordLock.h|cpp. Make ParkingLot use
3254           WordLock.
3255
3256         - Move the algorithm in ByteLock into Lock.h|cpp. Make everyone who used ByteLock use Lock
3257           instead. All other users of Lock now get the byte-sized lock implementation.
3258
3259         - Remove the old ByteLock files.
3260
3261         * WTF.vcxproj/WTF.vcxproj:
3262         * WTF.xcodeproj/project.pbxproj:
3263         * benchmarks/LockSpeedTest.cpp:
3264         (main):
3265         * wtf/WordLock.cpp: Added.
3266         (WTF::WordLock::lockSlow):
3267         (WTF::WordLock::unlockSlow):
3268         * wtf/WordLock.h: Added.
3269         (WTF::WordLock::WordLock):
3270         (WTF::WordLock::lock):
3271         (WTF::WordLock::unlock):
3272         (WTF::WordLock::isHeld):
3273         (WTF::WordLock::isLocked):
3274         * wtf/ByteLock.cpp: Removed.
3275         * wtf/ByteLock.h: Removed.
3276         * wtf/CMakeLists.txt:
3277         * wtf/Lock.cpp:
3278         (WTF::LockBase::lockSlow):
3279         (WTF::LockBase::unlockSlow):
3280         * wtf/Lock.h:
3281         (WTF::LockBase::lock):
3282         (WTF::LockBase::unlock):
3283         (WTF::LockBase::isHeld):
3284         (WTF::LockBase::isLocked):
3285         (WTF::Lock::Lock):
3286         * wtf/ParkingLot.cpp:
3287
3288 2015-08-11  Filip Pizlo  <fpizlo@apple.com>
3289
3290         Remove ByteSpinLock
3291         https://bugs.webkit.org/show_bug.cgi?id=147900
3292
3293         Rubber stamped by Mark Lam.
3294
3295         * WTF.xcodeproj/project.pbxproj:
3296         * wtf/ByteSpinLock.h: Removed.
3297
3298 2015-08-11  Brent Fulgham  <bfulgham@apple.com>
3299
3300         [Win] Switch Windows build to Visual Studio 2015
3301         https://bugs.webkit.org/show_bug.cgi?id=147887
3302         <rdar://problem/22235098>
3303
3304         Reviewed by Alex Christensen.
3305
3306         Update Visual Studio project file settings to use the current Visual
3307         Studio and compiler. Continue targeting binaries to run on our minimum
3308         supported configuration of Windows 7.
3309
3310         * WTF.vcxproj/WTF.vcxproj:
3311         * WTF.vcxproj/WTFGenerated.vcxproj:
3312
3313 2015-08-10  Filip Pizlo  <fpizlo@apple.com>
3314
3315         WTF should have a ParkingLot for parking sleeping threads, so that locks can fit in 1.6 bits
3316         https://bugs.webkit.org/show_bug.cgi?id=147665
3317
3318         Reviewed by Mark Lam.
3319
3320         This change adds a major new abstraction for concurrency algorithms in WebKit. It's called a
3321         ParkingLot, and it makes available a thread parking queue for each virtual address in memory.
3322         The queues are maintained by a data-access-parallel concurrent hashtable implementation. The
3323         memory usage is bounded at around half a KB per thread.
3324
3325         The ParkingLot makes it easy to turn any spinlock-based concurrency protocol into one that
3326         parks threads after a while. Because queue state management is up to the ParkingLot and not
3327         the user's data structure, this patch uses it to implement a full adaptive mutex in one byte.
3328         In fact, only three states of that byte are used (0 = available, 1 = locked, 2 = locked and
3329         there are parked threads). Hence the joke that ParkingLot allows locks that fit in 1.6 bits.
3330
3331         ByteLock is used as a replacement for ByteSpinLock in JavaScriptCore.
3332
3333         The API tests for this also demo how to create a completely fair (FIFO) binary semamphore. The
3334         comment in Lock.h shows how we could accelerate Lock performance using ParkingLot. After we
3335         are sure that this code works, we can expand the use of ParkingLot. That's covered by
3336         https://bugs.webkit.org/show_bug.cgi?id=147841.
3337
3338         * WTF.vcxproj/WTF.vcxproj:
3339         * WTF.xcodeproj/project.pbxproj:
3340         * benchmarks/LockSpeedTest.cpp:
3341         (main):
3342         * wtf/Atomics.h:
3343         (WTF::Atomic::compareExchangeWeak):
3344         (WTF::Atomic::compareExchangeStrong):
3345         * wtf/ByteLock.cpp: Added.
3346         (WTF::ByteLock::lockSlow):
3347         (WTF::ByteLock::unlockSlow):
3348         * wtf/ByteLock.h: Added.
3349         (WTF::ByteLock::ByteLock):
3350         (WTF::ByteLock::lock):
3351         (WTF::ByteLock::unlock):
3352         (WTF::ByteLock::isHeld):
3353         (WTF::ByteLock::isLocked):
3354         * wtf/CMakeLists.txt:
3355         * wtf/Lock.h:
3356         * wtf/ParkingLot.cpp: Added.
3357         (WTF::ParkingLot::parkConditionally):
3358         (WTF::ParkingLot::unparkOne):
3359         (WTF::ParkingLot::unparkAll):
3360         (WTF::ParkingLot::forEach):
3361         * wtf/ParkingLot.h: Added.
3362         (WTF::ParkingLot::compareAndPark):
3363
3364 2015-08-11  Brent Fulgham  <bfulgham@apple.com>
3365
3366         [Win] Unreviewed gardening.
3367
3368         * WTF.vcxproj/WTF.vcxproj.filters: Place file references so that files appear in correct
3369         folders in IDE.
3370
3371 2015-08-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>
3372
3373         Compile warning (-Wsign-compare) on 32-bits at WebCore/platform/FileSystem.cpp
3374         https://bugs.webkit.org/show_bug.cgi?id=146414
3375
3376         Reviewed by Darin Adler.
3377
3378         Added convertSafely routine based on isInBounds routine.
3379         Updated BoundChecker by adding a third boolean parameter to this template giving whether Target has greater or equal precision than Source.
3380         Removed BoundCheckElider, which is no longer necessary and had some issues.
3381
3382         * wtf/CheckedArithmetic.h:
3383         (WTF::isInBounds):
3384         (WTF::convertSafely):
3385
3386 2015-08-07  Filip Pizlo  <fpizlo@apple.com>
3387
3388         Lightweight locks should be adaptive
3389         https://bugs.webkit.org/show_bug.cgi?id=147545
3390
3391         Reviewed by Geoffrey Garen.
3392
3393         A common idiom in WebKit is to use spinlocks. We use them because the lock acquisition
3394         overhead is lower than system locks and because they take dramatically less space than system
3395         locks. The speed and space advantages of spinlocks can be astonishing: an uncontended spinlock
3396         acquire is up to 10x faster and under microcontention - short critical section with two or
3397         more threads taking turns - spinlocks are up to 100x faster. Spinlocks take only 1 byte or 4
3398         bytes depending on the flavor, while system locks take 64 bytes or more. Clearly, WebKit
3399         should continue to avoid system locks - they are just far too slow and far too big.
3400
3401         But there is a problem with this idiom. System lock implementations will sleep a thread when
3402         it attempts to acquire a lock that is held, while spinlocks will cause the thread to burn CPU.
3403         In WebKit spinlocks, the thread will repeatedly call sched_yield(). This is awesome for
3404         microcontention, but awful when the lock will not be released for a while. In fact, when
3405         critical sections take tens of microseconds or more, the CPU time cost of our spinlocks is
3406         almost 100x more than the CPU time cost of a system lock. This case doesn't arise too
3407         frequently in our current uses of spinlocks, but that's probably because right now there are
3408         places where we make a conscious decision to use system locks - even though they use more
3409         memory and are slower - because we don't want to waste CPU cycles when a thread has to wait a
3410         while to acquire the lock.
3411
3412         The solution is to just implement a modern adaptive mutex in WTF. Luckily, this isn't a new
3413         concept. This patch implements a mutex that is reminiscent of the kinds of low-overhead locks
3414         that JVMs use. The actual implementation here is inspired by some of the ideas from [1]. The
3415         idea is simple: the fast path is an inlined CAS to immediately acquire a lock that isn't held,
3416         the slow path tries some number of spins to acquire the lock, and if that fails, the thread is
3417         put on a queue and put to sleep. The queue is made up of statically allocated thread nodes and
3418         the lock itself is a tagged pointer: either it is just bits telling us the complete lock state
3419         (not held or held) or it is a pointer to the head of a queue of threads waiting to acquire the
3420         lock. This approach gives WTF::Lock three different levels of adaptation: an inlined fast path
3421         if the lock is not contended, a short burst of spinning for microcontention, and a full-blown
3422         queue for critical sections that are held for a long time.
3423
3424         On a locking microbenchmark, this new Lock exhibits the following performance
3425         characteristics:
3426
3427         - Lock+unlock on an uncontended no-op critical section: 2x slower than SpinLock and 3x faster
3428           than a system mutex.
3429
3430         - Lock+unlock on a contended no-op critical section: 2x slower than SpinLock and 100x faster
3431           than a system mutex.
3432
3433         - CPU time spent in lock() on a lock held for a while: same as system mutex, 90x less than a
3434           SpinLock.
3435
3436         - Memory usage: sizeof(void*), so on 64-bit it's 8x less than a system mutex but 2x worse than
3437           a SpinLock.
3438
3439         This patch replaces all uses of SpinLock with Lock, since our critical sections are not
3440         no-ops so if you do basically anything in your critical section, the Lock overhead will be
3441         invisible. Also, in all places where we used SpinLock, we could tolerate 8 bytes of overhead
3442         instead of 4. Performance benchmarking using JSC macrobenchmarks shows no difference, which is
3443         as it should be: the purpose of this change is to reduce CPU time wasted, not wallclock time.
3444         This patch doesn't replace any uses of ByteSpinLock, since we expect that the space benefits
3445         of having a lock that just uses a byte are still better than the CPU wastage benefits of
3446         Lock. But, this work will enable some future work to create locks that will fit in just 1.6
3447         bits: https://bugs.webkit.org/show_bug.cgi?id=147665.
3448         
3449         Rolling this back in after fixing Lock::unlockSlow() for architectures that have a truly weak
3450         CAS. Since the Lock::unlock() fast path can go to slow path spuriously, it may go there even if
3451         there aren't any threads on the Lock's queue. So, unlockSlow() must be able to deal with the
3452         possibility of a null queue head.
3453
3454         [1] http://www.filpizlo.com/papers/pizlo-pppj2011-fable.pdf
3455
3456         * WTF.vcxproj/WTF.vcxproj:
3457         * WTF.xcodeproj/project.pbxproj:
3458         * benchmarks: Added.
3459         * benchmarks/LockSpeedTest.cpp: Added.
3460         (main):
3461         * wtf/Atomics.h:
3462         (WTF::Atomic::compareExchangeWeak):
3463         (WTF::Atomic::compareExchangeStrong):
3464         * wtf/CMakeLists.txt:
3465         * wtf/Lock.cpp: Added.
3466         (WTF::LockBase::lockSlow):
3467         (WTF::LockBase::unlockSlow):
3468         * wtf/Lock.h: Added.
3469         (WTF::LockBase::lock):
3470         (WTF::LockBase::unlock):
3471         (WTF::LockBase::isHeld):
3472         (WTF::LockBase::isLocked):
3473         (WTF::Lock::Lock):
3474         * wtf/MetaAllocator.cpp:
3475         (WTF::MetaAllocator::release):
3476         (WTF::MetaAllocatorHandle::shrink):
3477         (WTF::MetaAllocator::allocate):
3478         (WTF::MetaAllocator::currentStatistics):
3479         (WTF::MetaAllocator::addFreshFreeSpace):
3480         (WTF::MetaAllocator::debugFreeSpaceSize):
3481         * wtf/MetaAllocator.h:
3482         * wtf/SpinLock.h:
3483         * wtf/ThreadingPthreads.cpp:
3484         * wtf/ThreadingWin.cpp:
3485         * wtf/text/AtomicString.cpp:
3486         * wtf/text/AtomicStringImpl.cpp:
3487         (WTF::AtomicStringTableLocker::AtomicStringTableLocker):
3488
3489 2015-08-05  Filip Pizlo  <fpizlo@apple.com>
3490
3491         Unreviewed, roll out http://trac.webkit.org/changeset/187972.
3492
3493         * wtf/Atomics.cpp:
3494         (WTF::getSwapLock):
3495         (WTF::atomicStep):
3496         * wtf/MessageQueue.h:
3497         (WTF::MessageQueue::infiniteTime):
3498         (WTF::MessageQueue<DataType>::append):
3499         (WTF::MessageQueue<DataType>::appendAndKill):
3500         (WTF::MessageQueue<DataType>::appendAndCheckEmpty):
3501         (WTF::MessageQueue<DataType>::prepend):
3502         (WTF::MessageQueue<DataType>::removeIf):
3503         (WTF::MessageQueue<DataType>::isEmpty):
3504         (WTF::MessageQueue<DataType>::kill):
3505         (WTF::MessageQueue<DataType>::killed):
3506         * wtf/ParallelJobsGeneric.cpp:
3507         (WTF::ParallelEnvironment::ThreadPrivate::execute):
3508         (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
3509         (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
3510         * wtf/ParallelJobsGeneric.h:
3511         * wtf/RunLoop.cpp:
3512         (WTF::RunLoop::performWork):
3513         (WTF::RunLoop::dispatch):
3514         * wtf/RunLoop.h:
3515         * wtf/ThreadSpecificWin.cpp:
3516         (WTF::destructorsList):
3517         (WTF::destructorsMutex):
3518         (WTF::threadSpecificKeyCreate):
3519         (WTF::threadSpecificKeyDelete):
3520         (WTF::ThreadSpecificThreadExit):
3521         * wtf/Threading.cpp:
3522         (WTF::threadEntryPoint):
3523         (WTF::createThread):
3524         * wtf/ThreadingPrimitives.h:
3525         * wtf/ThreadingPthreads.cpp:
3526         (WTF::threadMapMutex):
3527         (WTF::initializeThreading):
3528         (WTF::identifierByPthreadHandle):
3529         (WTF::establishIdentifierForPthreadHandle):
3530         (WTF::changeThreadPriority):
3531         (WTF::waitForThreadCompletion):
3532         (WTF::detachThread):
3533         (WTF::threadDidExit):
3534         (WTF::currentThread):
3535         (WTF::Mutex::Mutex):
3536         (WTF::Mutex::~Mutex):
3537         (WTF::Mutex::lock):
3538         (WTF::Mutex::tryLock):
3539         (WTF::Mutex::unlock):
3540         (WTF::ThreadCondition::~ThreadCondition):
3541         (WTF::ThreadCondition::wait):
3542         (WTF::ThreadCondition::timedWait):
3543         (WTF::DeprecatedMutex::DeprecatedMutex): Deleted.
3544         (WTF::DeprecatedMutex::~DeprecatedMutex): Deleted.
3545         (WTF::DeprecatedMutex::lock): Deleted.
3546         (WTF::DeprecatedMutex::tryLock): Deleted.
3547         (WTF::DeprecatedMutex::unlock): Deleted.
3548         * wtf/ThreadingWin.cpp:
3549         (WTF::initializeCurrentThreadInternal):
3550         (WTF::threadMapMutex):
3551         (WTF::initializeThreading):
3552         (WTF::storeThreadHandleByIdentifier):
3553         (WTF::threadHandleForIdentifier):
3554         (WTF::clearThreadHandleForIdentifier):
3555         (WTF::currentThread):
3556         (WTF::Mutex::Mutex):
3557         (WTF::Mutex::~Mutex):
3558         (WTF::Mutex::lock):
3559         (WTF::Mutex::tryLock):
3560         (WTF::Mutex::unlock):
3561         (WTF::ThreadCondition::~ThreadCondition):
3562         (WTF::ThreadCondition::wait):
3563         (WTF::ThreadCondition::timedWait):
3564         (WTF::DeprecatedMutex::DeprecatedMutex): Deleted.
3565         (WTF::DeprecatedMutex::~DeprecatedMutex): Deleted.
3566         (WTF::DeprecatedMutex::lock): Deleted.
3567         (WTF::DeprecatedMutex::tryLock): Deleted.
3568         (WTF::DeprecatedMutex::unlock): Deleted.
3569         * wtf/WorkQueue.h:
3570         * wtf/dtoa.cpp:
3571         * wtf/dtoa.h:
3572         * wtf/efl/DispatchQueueEfl.cpp:
3573         (DispatchQueue::dispatch):
3574         (DispatchQueue::performWork):
3575         (DispatchQueue::performTimerWork):
3576         (DispatchQueue::insertTimerWorkItem):
3577         (DispatchQueue::wakeUpThread):
3578         (DispatchQueue::getNextTimeOut):
3579         * wtf/efl/DispatchQueueEfl.h:
3580         * wtf/efl/RunLoopEfl.cpp:
3581         (WTF::RunLoop::wakeUpEvent):
3582         (WTF::RunLoop::wakeUp):
3583         * wtf/threads/BinarySemaphore.cpp:
3584         (WTF::BinarySemaphore::signal):
3585         (WTF::BinarySemaphore::wait):
3586         * wtf/threads/BinarySemaphore.h:
3587         * wtf/win/WorkQueueWin.cpp:
3588         (WTF::WorkQueue::handleCallback):
3589         (WTF::WorkQueue::platformInvalidate):
3590         (WTF::WorkQueue::dispatch):
3591         (WTF::WorkQueue::timerCallback):
3592         (WTF::WorkQueue::dispatchAfter):
3593
3594 2015-08-05  Filip Pizlo  <fpizlo@apple.com>
3595
3596         Unreviewed, fix Windows.
3597
3598         * wtf/ThreadSpecificWin.cpp:
3599         (WTF::destructorsList):
3600         (WTF::destructorsMutex):
3601         (WTF::threadSpecificKeyCreate):
3602         (WTF::threadSpecificKeyDelete):
3603         (WTF::ThreadSpecificThreadExit):
3604
3605 2015-08-04  Filip Pizlo  <fpizlo@apple.com>
3606
3607         Rename Mutex to DeprecatedMutex
3608         https://bugs.webkit.org/show_bug.cgi?id=147675
3609
3610         Reviewed by Geoffrey Garen.
3611
3612         * wtf/Atomics.cpp:
3613         (WTF::getSwapLock):
3614         (WTF::atomicStep):
3615         * wtf/MessageQueue.h:
3616         (WTF::MessageQueue::infiniteTime):
3617         (WTF::MessageQueue<DataType>::append):
3618         (WTF::MessageQueue<DataType>::appendAndKill):
3619         (WTF::MessageQueue<DataType>::appendAndCheckEmpty):
3620         (WTF::MessageQueue<DataType>::prepend):
3621         (WTF::MessageQueue<DataType>::removeIf):
3622         (WTF::MessageQueue<DataType>::isEmpty):
3623         (WTF::MessageQueue<DataType>::kill):
3624         (WTF::MessageQueue<DataType>::killed):
3625         * wtf/ParallelJobsGeneric.cpp:
3626         (WTF::ParallelEnvironment::ThreadPrivate::execute):
3627         (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
3628         (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
3629         * wtf/ParallelJobsGeneric.h:
3630         * wtf/RunLoop.cpp:
3631         (WTF::RunLoop::performWork):
3632         (WTF::RunLoop::dispatch):
3633         * wtf/RunLoop.h:
3634         * wtf/Threading.cpp:
3635         (WTF::threadEntryPoint):
3636         (WTF::createThread):
3637         * wtf/ThreadingPrimitives.h:
3638         * wtf/ThreadingPthreads.cpp:
3639         (WTF::threadMapMutex):
3640         (WTF::initializeThreading):
3641         (WTF::identifierByPthreadHandle):
3642         (WTF::establishIdentifierForPthreadHandle):
3643         (WTF::changeThreadPriority):
3644         (WTF::waitForThreadCompletion):
3645         (WTF::detachThread):
3646         (WTF::threadDidExit):
3647         (WTF::currentThread):
3648         (WTF::DeprecatedMutex::DeprecatedMutex):
3649         (WTF::DeprecatedMutex::~DeprecatedMutex):
3650         (WTF::DeprecatedMutex::lock):
3651         (WTF::DeprecatedMutex::tryLock):