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