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