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