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