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