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