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