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