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