Stop python icon bouncing in the dock while running browser benchmarks.
[WebKit.git] / Source / WTF / ChangeLog
1 2016-08-22  Keith Miller  <keith_miller@apple.com>
2
3         Actually enable the WASM build.
4         https://bugs.webkit.org/show_bug.cgi?id=160933
5
6         Reviewed by Geoffrey Garen.
7
8         * wtf/FeatureDefines.h:
9
10 2016-08-17  Don Olmstead  <don.olmstead@am.sony.com>
11
12         Use find_library within Windows build
13         https://bugs.webkit.org/show_bug.cgi?id=160904
14
15         Reviewed by Brent Fulgham.
16
17         * wtf/CMakeLists.txt:
18
19 2016-08-17  Anders Carlsson  <andersca@apple.com>
20
21         Move WKSignedPublicKeyAndChallengeString into WebCore and make it proper C++
22         https://bugs.webkit.org/show_bug.cgi?id=160945
23
24         Reviewed by Dan Bernstein.
25
26         * wtf/RetainPtr.h:
27         (WTF::RetainPtr::operator&):
28         Cast this to the right type.
29
30         * wtf/spi/cocoa/SecuritySPI.h:
31         Add new SPI.
32
33 2016-08-17  Antti Koivisto  <antti@apple.com>
34
35         Remove CSS_IMAGE_SET feature define
36         https://bugs.webkit.org/show_bug.cgi?id=160944
37
38         Reviewed by Dean Jackson.
39
40         * wtf/FeatureDefines.h:
41
42 2016-08-16  Keith Miller  <keith_miller@apple.com>
43
44         Enable WebAssembly in the build.
45         https://bugs.webkit.org/show_bug.cgi?id=160916
46
47         Reviewed by Benjamin Poulain.
48
49         This patch turns on WebAssembly on all the platforms that support B3.
50         Turning on WebAssembly by default lets us check the build on every
51         platform.
52
53         * wtf/FeatureDefines.h:
54
55 2016-08-16  Anders Carlsson  <andersca@apple.com>
56
57         Fix a thinko.
58
59         * wtf/Scope.h:
60
61 2016-08-16  Anders Carlsson  <andersca@apple.com>
62
63         Add WTF::ScopeExit
64         https://bugs.webkit.org/show_bug.cgi?id=160908
65
66         Reviewed by Geoffrey Garen.
67
68         WTF::ScopeExit and WTF::makeScopeExit let you define an object that will invoke a function when the
69         object goes out of scope. This is going to be used to avoid spagetti-code and gotos in a future patch.
70
71         The class is modeled after the LWG paper "P0052 - Generic Scope Guard and RAII Wrapper for the Standard Library".
72
73         * WTF.xcodeproj/project.pbxproj:
74         * wtf/Scope.h: Added.
75         (WTF::makeScopeExit):
76
77 2016-08-15  Anders Carlsson  <andersca@apple.com>
78
79         Add an address-of operator to RetainPtr
80         https://bugs.webkit.org/show_bug.cgi?id=160879
81
82         Reviewed by Tim Horton.
83
84         This will make some security-related code from WebKitSystemInterface easier to port.
85
86         * wtf/HashIterators.h:
87         (WTF::HashTableValuesIterator::get):
88         * wtf/HashTable.h:
89         (WTF::HashTableBucketInitializer<true>::initialize):
90         Use std::addressof instead of &, in case & is overloaded.
91
92         * wtf/RetainPtr.h:
93         (WTF::RetainPtr::operator&):
94         Implement this.
95
96 2016-08-15  Sam Weinig  <sam@webkit.org>
97
98         Speed up compile times by not including wtf/Variant.h so much
99         https://bugs.webkit.org/show_bug.cgi?id=160847
100
101         Reviewed by Alex Christensen and Saam Barati.
102
103         * wtf/Forward.h:
104         Add forward declaration of std::variant.
105
106         * wtf/StdLibExtras.h:
107         Remove references to std::variant. Move them to wtf/Variant.h
108
109 2016-08-15  Keith Miller  <keith_miller@apple.com>
110
111         Implement WASM Parser and B3 IR generator
112         https://bugs.webkit.org/show_bug.cgi?id=160681
113
114         Reviewed by Benjamin Poulain.
115
116         * wtf/DataLog.h:
117         (WTF::dataLogLn): Add a new dataLog function, dataLogLn that
118         automagically includes a new line at the end of the print.
119         * wtf/LEBDecoder.h:
120         (decodeUInt32):
121         (decodeInt32): Change the LEBDecoder to take a pointer and length
122         rather than a Vector.
123
124 2016-08-15  Keith Rollin  <krollin@apple.com>
125
126         Rename LOG_ALWAYS
127         https://bugs.webkit.org/show_bug.cgi?id=160768
128
129         Rename LOG_ALWAYS and friends, given that the first parameter to it is
130         a boolean expression that determines whether or not logging should be
131         performed.
132
133         Reviewed by Chris Dumez.
134
135         * wtf/Assertions.h:
136
137 2016-08-15  Joseph Pecoraro  <pecoraro@apple.com>
138
139         Remove unused includes of wtf headers
140         https://bugs.webkit.org/show_bug.cgi?id=160839
141
142         Reviewed by Alex Christensen.
143
144         * wtf/BackwardsGraph.h:
145         * wtf/DataLog.cpp:
146         * wtf/WorkQueue.cpp:
147         * wtf/text/StringImpl.cpp:
148         * wtf/unicode/icu/CollatorICU.cpp:
149
150 2016-08-14  Daniel Bates  <dabates@apple.com>
151
152         Fix compiler errors when building iOS WebKit using the iOS 10 beta SDK
153         https://bugs.webkit.org/show_bug.cgi?id=160725
154
155         Reviewed by Sam Weinig.
156
157         For now, disable OS_LOG when building with the iOS 10 beta SDK until
158         we have the fix for <rdar://problem/27758343>.
159
160         * wtf/Platform.h:
161
162 2016-08-13  Dan Bernstein  <mitz@apple.com>
163
164         Build fix follow-up to r204433.
165
166         * wtf/StdLibExtras.h:
167         (WTF::makeVisitor): Don’t use an auto return type.
168
169 2016-08-12  Sam Weinig  <sam@webkit.org>
170
171         Make variant only available when compiling for C++14 or greater
172         https://bugs.webkit.org/show_bug.cgi?id=160813
173
174         Reviewed by Anders Carlsson.
175
176         * wtf/Compiler.h:
177         * wtf/StdLibExtras.h:
178         * wtf/Variant.h:
179
180 2016-08-11  Maureen Daum  <mdaum@apple.com>
181
182         Add NSButtonType to AppKitCompatibilityDeclarations.h.
183         https://bugs.webkit.org/show_bug.cgi?id=160767.
184
185         Reviewed by Dan Bernstein.
186
187         Add NSButtonType to AppKitCompatibilityDeclarations.h so that we can use the new
188         names but still build successfully on older OS versions.
189
190         * wtf/mac/AppKitCompatibilityDeclarations.h:
191
192 2016-08-10  Benjamin Poulain  <bpoulain@apple.com>
193
194         [JSC] TinyPtrSet::deleteListIfNecessary() no longer needs to test for reservedValue
195         https://bugs.webkit.org/show_bug.cgi?id=160721
196
197         Reviewed by Sam Weinig.
198
199         Previously, TinyPtrSet was using a ThinFlag if there was no OutOfLineList.
200         A side effect is that isThin() was false for reservedValue. When deleting
201         the list, we had to consider both cases: isThin() and reservedValue.
202
203         In r204065, I changed the flag to a FatFlag to ensure TinyPtrSet can be initialized
204         with bzero().
205         This changes the value of isThin() of reservedValue to true since reservedValue
206         does not have the FatFlag bit set.
207         This patch removes the useless condition from deleteListIfNecessary().
208
209         * wtf/TinyPtrSet.h:
210         (WTF::TinyPtrSet::deleteListIfNecessary):
211
212 2016-08-09  Sam Weinig  <sam@webkit.org>
213
214         Fix windows build.
215
216         * wtf/Variant.h:
217         (std::experimental::__visit_helper2::__visit):
218         MSVC does not support extended constexpr. Use a ternary operator instead of an if statement.
219
220 2016-08-06  Sam Weinig  <sam@webkit.org>
221
222         Replace NodeOrString with std::variant<RefPtr<Node>, String>
223         https://bugs.webkit.org/show_bug.cgi?id=160638
224
225         Reviewed by Anders Carlsson.
226
227         * wtf/StdLibExtras.h:
228         (WTF::Visitor::Visitor):
229         (WTF::makeVisitor):
230         Add WTF::makeVisitor() which takes a list of lambdas to use
231         an an overload set for a visitor object.
232
233         Also, re-export std::experimental::variant (and helpers) in the std
234         namespace using type aliasing.
235
236         * wtf/Variant.h:
237         Make std::experimental::variant work in WebCore.
238
239 2016-08-06  Sam Weinig  <sam@webkit.org>
240
241         WTF needs a variant implementation
242         https://bugs.webkit.org/show_bug.cgi?id=160618
243
244         Reviewed by Darin Adler.
245
246         Add an implementation of std::experimental::variant matching the C++17 draft http://wg21.link/n4606 
247         taken from https://bitbucket.org/anthonyw/variant/src (5bce47fa788648f79e5ea1d77b0eef2e8f0b2999) and
248         modified to support compiling without exceptions (where it used to throw, we lovingly CRASH()).
249
250         * WTF.xcodeproj/project.pbxproj:
251         Add new file.
252
253         * wtf/Compiler.h:
254         Add COMPILER_SUPPORTS define for C++ exceptions.
255
256         * wtf/Variant.h: Added.
257
258 2016-08-05  Keith Miller  <keith_miller@apple.com>
259
260         Add LEBDecoder and tests
261         https://bugs.webkit.org/show_bug.cgi?id=160625
262
263         Reviewed by Benjamin Poulain.
264
265         Adds some LEB decoder functions to WTF. These are used in the
266         WASM spec to encode numbers in a semi-compressed format.
267
268         * WTF.xcodeproj/project.pbxproj:
269         * wtf/LEBDecoder.h: Added.
270         (decodeUInt32):
271         (decodeInt32):
272
273 2016-08-05  Keith Miller  <keith_miller@apple.com>
274
275         Delete out of date WASM code.
276         https://bugs.webkit.org/show_bug.cgi?id=160603
277
278         Reviewed by Saam Barati.
279
280         Add Feature define for WebAssembly on mac.
281
282         * wtf/FeatureDefines.h:
283
284 2016-08-03  Csaba Osztrogonác  <ossy@webkit.org>
285
286         Lacking support on a arm-traditional disassembler.
287         https://bugs.webkit.org/show_bug.cgi?id=123717
288
289         Reviewed by Mark Lam.
290
291         * wtf/Platform.h:
292
293 2016-08-02  Myles C. Maxfield  <mmaxfield@apple.com>
294
295         Update breaking rules to match ICU 57
296         https://bugs.webkit.org/show_bug.cgi?id=160488
297         <rdar://problem/25856238>
298
299         Reviewed by Darin Adler.
300
301         This patch fixes a typo in the uax14AssignmentsAfter rules which
302         was causing flag emoji to have line breaking opportunities in their
303         middles. It also fixes significant language issues for languages
304         such as Hebrew, and adds correct breaking opportunities around
305         hyphens.
306
307         * wtf/text/TextBreakIterator.cpp:
308         (WTF::cursorMovementIterator):
309         (WTF::uax14AssignmentsAfter):
310         (WTF::uax14Forward):
311         (WTF::uax14Reverse):
312
313 2016-08-02  Benjamin Poulain  <benjamin@webkit.org>
314
315         [JSC] Simplify the initialization of AbstractValue in the AbstractInterpreter
316         https://bugs.webkit.org/show_bug.cgi?id=160370
317
318         Reviewed by Saam Barati.
319
320         * wtf/TinyPtrSet.h:
321         (WTF::TinyPtrSet::isThin):
322         (WTF::TinyPtrSet::set):
323
324 2016-08-02  Benjamin Poulain  <bpoulain@apple.com>
325
326         Clean up some useless AtomicString atoms
327         https://bugs.webkit.org/show_bug.cgi?id=160471
328
329         Reviewed by Geoffrey Garen.
330
331         * wtf/text/AtomicString.h:
332         * wtf/text/StringStatics.cpp:
333         (WTF::AtomicString::init): Deleted.
334
335 2016-08-01  Benjamin Poulain  <bpoulain@apple.com>
336
337         [JSC][ARM64] Fix branchTest32/64 taking an immediate as mask
338         https://bugs.webkit.org/show_bug.cgi?id=160439
339
340         Reviewed by Filip Pizlo.
341
342         * wtf/MathExtras.h:
343         (getLSBSet):
344         This was not working at all for MacroAssembler.
345         Since TrustedImm32/64 are signed integers, the arithmetic shift would
346         never get rid of the top bit and we get an infinite loop.
347
348 2016-07-29  Mark Lam  <mark.lam@apple.com>
349
350         Make StringView capable of being passed or returned in only 2 registers.
351         https://bugs.webkit.org/show_bug.cgi?id=160344
352
353         Reviewed by Geoffrey Garen.
354
355         We just need to #if out copy and move constructors and assignment operators.
356
357         After this change, the following test code:
358
359             JS_EXPORT_PRIVATE StringView returnStringView(StringView sv)
360             {
361                 return sv;
362             }
363
364         ... compiles to the following for x86_64:
365
366             __ZN3JSC16returnStringViewEN3WTF10StringViewE:
367             000000000093fb20        pushq   %rbp
368             000000000093fb21        movq    %rsp, %rbp
369             000000000093fb24        movq    %rdi, %rax // Copy from arg word 0 to ret word 0.
370             000000000093fb27        movq    %rsi, %rdx // Copy from arg word 1 to ret word 1.
371             000000000093fb2a        popq    %rbp
372             000000000093fb2b        retq
373
374         ... and this for arm64:
375
376             __ZN3JSC16returnStringViewEN3WTF10StringViewE:
377             0000000000818504        ret // arg word 0 and 1 are in the same regs as ret word 0 and 1.
378
379         * wtf/text/StringView.h:
380         (WTF::StringView::StringView):
381         (WTF::StringView::~StringView):
382         (WTF::StringView::operator=):
383
384 2016-07-29  Csaba Osztrogonác  <ossy@webkit.org>
385
386         Remove PassRef.h after r177259
387         https://bugs.webkit.org/show_bug.cgi?id=160348
388
389         Reviewed by Andreas Kling.
390
391         * wtf/PassRef.h: Removed.
392
393 2016-07-28  Mark Lam  <mark.lam@apple.com>
394
395         StringView should have an explicit m_is8Bit field.
396         https://bugs.webkit.org/show_bug.cgi?id=160282
397         <rdar://problem/27327943>
398
399         Reviewed by Benjamin Poulain.
400
401         The current implementation reserves 1 bit in the 32-bit m_length field as an
402         is16Bit flag.  As a result, a StringView is incapable of handling strings that
403         have a length of 32-bit in size.  This results in a mismatch with the
404         expectations of String, StringImpl, and JavaScriptCore's JSString which all
405         support a 32-bit unsigned length.
406
407         This patch fixes this issue by introducing an explicit m_is8Bit field, thereby
408         allowing m_length to be a full 32-bit again.
409
410         We also introduced a clear() convenience method to set the fields of StringView
411         to empty values.  Previously, we were duplicating the code for clearing those
412         fields.  We now call clear() in all those places instead.
413
414         Note: in clear(), we set m_is8Bit to true because we want an empty StringView
415         to be 8-bit rather than 16-bit.  This is consistent with what the empty() method
416         returns.
417
418         * wtf/text/StringView.h:
419         (WTF::StringView::setUnderlyingString):
420         (WTF::StringView::StringView):
421         (WTF::StringView::operator=):
422         (WTF::StringView::initialize):
423         (WTF::StringView::clear):
424         (WTF::StringView::empty):
425         (WTF::StringView::length):
426         (WTF::StringView::operator bool):
427         (WTF::StringView::is8Bit):
428         (WTF::StringView::substring):
429         (WTF::StringView::getCharactersWithUpconvert):
430         (WTF::StringView::toString):
431         (WTF::StringView::toAtomicString):
432         (WTF::StringView::toFloat):
433         (WTF::StringView::toInt):
434         (WTF::StringView::toIntStrict):
435         (WTF::StringView::toStringWithoutCopying):
436         (WTF::StringView::find):
437
438 2016-07-24  Filip Pizlo  <fpizlo@apple.com>
439
440         B3 should support multiple entrypoints
441         https://bugs.webkit.org/show_bug.cgi?id=159391
442
443         Reviewed by Saam Barati.
444
445         * wtf/GraphNodeWorklist.h: Expose some handy functionality.
446         (WTF::GraphNodeWorklist::pop):
447         (WTF::GraphNodeWorklist::saw):
448         (WTF::GraphNodeWorklist::seen):
449         * wtf/VectorTraits.h: Fix a bug! Otherwise filling a vector of byte-sized enum classes doesn't work.
450
451 2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
452
453         [macOS] Caret placement occurs in the middle of new emoji group candidates
454         https://bugs.webkit.org/show_bug.cgi?id=160008
455         <rdar://problem/27430111>
456
457         Reviewed by Simon Fraser.
458
459         r203330 added support for new emoji group candidates. This patch updates the rules
460         governing caret placement around these new emoji groups.
461
462         * wtf/text/TextBreakIterator.cpp:
463         (WTF::cursorMovementIterator):
464
465 2016-07-20  Rajeev Misra  <rajeevmisraforapple@gmail.com>
466
467         Remove unnecessary if check from ParkingLot.cpp
468         https://bugs.webkit.org/show_bug.cgi?id=159961
469
470         Reviewed by Alex Christensen.
471
472         A good practice is to have as less conditional statement
473         or special cases as possible in code. This change
474         simply removes a unnecessary "if" statement for
475         condition which was already evaluated by switch/case
476         and thus there was no need to evaluate again.
477
478         * wtf/ParkingLot.cpp:
479
480 2016-07-18  Anders Carlsson  <andersca@apple.com>
481
482         WebKit nightly fails to build on macOS Sierra
483         https://bugs.webkit.org/show_bug.cgi?id=159902
484         rdar://problem/27365672
485
486         Reviewed by Tim Horton.
487
488         * icu/unicode/ucurr.h: Added.
489         Add ucurr.h from ICU.
490
491 2016-07-18  Michael Saboff  <msaboff@apple.com>
492
493         ASSERTION FAILED: : (year >= 1970 && yearday >= 0) || (year < 1970 && yearday < 0) -- WTF/wtf/DateMath.cpp
494         https://bugs.webkit.org/show_bug.cgi?id=159883
495
496         Reviewed by Filip Pizlo.
497
498         The function daysFrom1970ToYear() takes an integer year and returns a double result.
499         The calculation uses 1970 as a baseline year and subtracts 1970 from the argument year.
500         It does that subtraction using integer arithmetic, which given negative years close to
501         INT_MIN can underflow as a result of subtracting 1970.  Since we want a double result,
502         the fix is to cast year as a double before the subtraction, which eliminates the underflow.
503
504         * wtf/DateMath.cpp:
505         (WTF::daysFrom1970ToYear):
506
507 2016-07-17  Filip Pizlo  <fpizlo@apple.com>
508
509         RegisterSet should use a Bitmap instead of a BitVector so that it never allocates memory and is trivial to copy
510         https://bugs.webkit.org/show_bug.cgi?id=159863
511
512         Reviewed by Saam Barati.
513         
514         Give Bitmap all of the power of BitVector (except for automatic resizing). This means a
515         variant of set() that takes a bool, and a bunch of helper methods (merge, filter, exclude,
516         forEachSetBit, ==, !=, and hash).
517
518         * wtf/Bitmap.h:
519         (WTF::WordType>::set):
520         (WTF::WordType>::testAndSet):
521         (WTF::WordType>::isFull):
522         (WTF::WordType>::merge):
523         (WTF::WordType>::filter):
524         (WTF::WordType>::exclude):
525         (WTF::WordType>::forEachSetBit):
526         (WTF::=):
527         (WTF::WordType>::hash):
528
529 2016-07-02  Filip Pizlo  <fpizlo@apple.com>
530
531         WTF::Lock should be fair eventually
532         https://bugs.webkit.org/show_bug.cgi?id=159384
533
534         Reviewed by Geoffrey Garen.
535         
536         In https://webkit.org/blog/6161/locking-in-webkit/ we showed how relaxing the fairness of
537         locks makes them fast. That post presented lock fairness as a trade-off between two
538         extremes:
539         
540         - Barging. A barging lock, like WTF::Lock, releases the lock in unlock() even if there was a
541           thread on the queue. If there was a thread on the queue, the lock is released and that
542           thread is made runnable. That thread may then grab the lock, or some other thread may grab
543           the lock first (it may barge). Usually, the barging thread is the thread that released the
544           lock in the first place. This maximizes throughput but hurts fairness. There is no good
545           theoretical bound on how unfair the lock may become, but empirical data suggests that it's
546           fair enough for the cases we previously measured.
547         
548         - FIFO. A FIFO lock, like HandoffLock in ToyLocks.h, does not release the lock in unlock()
549           if there is a thread waiting. If there is a thread waiting, unlock() will make that thread
550           runnable and inform it that it now holds the lock. This ensures perfect round-robin
551           fairness and allows us to reason theoretically about how long it may take for a thread to
552           grab the lock. For example, if we know that only N threads are running and each one may
553           contend on a critical section, and each one may hold the lock for at most S seconds, then
554           the time it takes to grab the lock is N * S. Unfortunately, FIFO locks perform very badly
555           in most cases. This is because for the common case of short critical sections, they force
556           a context switch after each critical section if the lock is contended.
557         
558         This change makes WTF::Lock almost as fair as FIFO while still being as fast as barging.
559         Thanks to this new algorithm, you can now have both of these things at the same time.
560         
561         This change makes WTF::Lock eventually fair. We can almost (more on the caveats below)
562         guarantee that the time it takes to grab a lock is N * max(1ms, S). In other words, critical
563         sections that are longer than 1ms are always fair. For shorter critical sections, the amount
564         of time that any thread waits is 1ms times the number of threads. There are some caveats
565         that arise from our use of randomness, but even then, in the limit as the critical section
566         length goes to infinity, the lock becomes fair. The corner cases are unlikely to happen; our
567         experiments show that the lock becomes exactly as fair as a FIFO lock for any critical
568         section that is 1ms or longer.
569         
570         The fairness mechanism is broken into two parts. WTF::Lock can now choose to unlock a lock
571         fairly or unfairly thanks to the new ParkingLot token mechanism. WTF::Lock knows when to use
572         fair unlocking based on a timeout mechanism in ParkingLot called timeToBeFair.
573         
574         ParkingLot::unparkOne() and ParkingLot::parkConditionally() can now communicate with each
575         other via a token. unparkOne() can pass a token, which parkConditionally() will return. This
576         change also makes parkConditionally() a lot more precise about when it was unparked due to a
577         call to unparkOne(). If unparkOne() is told that a thread was unparked then this thread is
578         guaranteed to report that it was unparked rather than timing out, and that thread is
579         guaranteed to get the token that unparkOne() passed. The token is an intptr_t. We use it as
580         a boolean variable in WTF::Lock, but you could use it to pass arbitrary data structures. By
581         default, the token is zero. WTF::Lock's unlock() will pass 1 as the token if it is doing
582         fair unlocking. In that case, unlock() will not release the lock, and lock() will know that
583         it holds the lock as soon as parkConditionally() returns. Note that this algorithm relies
584         on unparkOne() invoking WTF::Lock's callback while the queue lock is held, so that WTF::Lock
585         can make a decision about unlock strategy and inject a token while it has complete knowledge
586         over the state of the queue. As such, it's not immediately obvious how to implement this
587         algorithm on top of futexes. You really need ParkingLot!
588         
589         WTF::Lock does not use fair unlocking every time. We expose a new API, Lock::unlockFairly(),
590         which forces the fair unlocking behavior. Additionally, ParkingLot now maintains a
591         per-bucket stochastic fairness timeout. When the timeout fires, the unparkOne() callback
592         sees UnparkResult::timeToBeFair = true. This timeout is set to be anywhere from 0ms to 1ms
593         at random. When a dequeue happens and there are threads that actually get dequeued, we check
594         if the time since the last unfair unlock (the last time timeToBeFair was set to true) is
595         more than the timeout amount. If so, then we set timeToBeFair to true and reset the timeout.
596         This means that in the absence of ParkingLot collisions, unfair unlocking is guaranteed to
597         happen at least once per millisecond. It will happen at 2 KHz on average. If there are
598         collisions, then each collision adds one millisecond to the worst case (and 0.5 ms to the
599         average case). The reason why we don't just use a fixed 1ms timeout is that we want to avoid
600         resonance. Imagine a program in which some thread acquires a lock at 1 KHz in-phase with the
601         timeToBeFair timeout. Then this thread would be the benefactor of fairness to the detriment
602         of everyone else. Randomness ensures that we aren't too fair to any one thread.
603         
604         Empirically, this is neutral on our major benchmarks like JetStream but it's an enormous
605         improvement in LockFairnessTest. It's common for an unfair lock (either our BargingLock, the
606         old WTF::Lock, any of the other futex-based locks that barge, or new os_unfair_lock) to
607         allow only one thread to hold the lock during a whole second in which each thread is holding
608         the lock for 1ms at a time. This is because in a barging lock, releasing a lock after
609         holding it for 1ms and then reacquiring it immediately virtually ensures that none of the
610         other threads can wake up in time to grab it before it's relocked. But the new WTF::Lock
611         handles this case like a champ: each thread gets equal turns.
612         
613         Here's some data. If we launch 10 threads and have each of them run for 1 second while
614         repeatedly holding a critical section for 1ms, then here's how many times each thread gets
615         to hold the lock using the old WTF::Lock algorithm:
616         
617         799, 6, 1, 1, 1, 1, 1, 1, 1, 1
618         
619         One thread hogged the lock for almost the whole time! With the new WTF::Lock, the lock
620         becomes totally fair:
621         
622         80, 79, 79, 79, 79, 79, 79, 80, 80, 79
623         
624         I don't know of anyone creating such an automatically-fair adaptive lock before, so I think
625         that this is a pretty awesome advancement to the state of the art!
626         
627         This change is good for three reasons:
628         
629         - We do have long critical sections in WebKit and we don't want to have to worry about
630           starvation. This reduces the likelihood that we will see starvation due to our lock
631           strategy.
632         
633         - I was talking to ggaren about bmalloc's locking needs, and he wanted unlockFairly() or
634           lockFairly() or some moral equivalent for the scavenger thread.
635         
636         - If we use a WTF::Lock to manage heap access in a multithreaded GC, we'll need the ability
637           to unlock and relock without barging.
638
639         * benchmarks/LockFairnessTest.cpp:
640         (main):
641         * benchmarks/ToyLocks.h:
642         * wtf/Condition.h:
643         (WTF::ConditionBase::waitUntil):
644         (WTF::ConditionBase::notifyOne):
645         * wtf/Lock.cpp:
646         (WTF::LockBase::lockSlow):
647         (WTF::LockBase::unlockSlow):
648         (WTF::LockBase::unlockFairlySlow):
649         (WTF::LockBase::unlockSlowImpl):
650         * wtf/Lock.h:
651         (WTF::LockBase::try_lock):
652         (WTF::LockBase::unlock):
653         (WTF::LockBase::unlockFairly):
654         (WTF::LockBase::isHeld):
655         (WTF::LockBase::isFullyReset):
656         * wtf/ParkingLot.cpp:
657         (WTF::ParkingLot::parkConditionallyImpl):
658         (WTF::ParkingLot::unparkOne):
659         (WTF::ParkingLot::unparkOneImpl):
660         (WTF::ParkingLot::unparkAll):
661         * wtf/ParkingLot.h:
662         (WTF::ParkingLot::parkConditionally):
663         (WTF::ParkingLot::compareAndPark):
664         (WTF::ParkingLot::unparkOne):
665
666 2016-07-17  Myles C. Maxfield  <mmaxfield@apple.com>
667
668         Support new emoji group candidates
669         https://bugs.webkit.org/show_bug.cgi?id=159755
670         <rdar://problem/27325521>
671
672         Reviewed by Dean Jackson.
673
674         This patch doesn't update the rules for our cursor movement iterator, because
675         I don't know the language used for implementing these rules. These rules will
676         be updated in the near future. When they do,
677         editing/deleting/delete-emoji-expected.txt will need to be updated.
678
679         * wtf/text/TextBreakIterator.cpp:
680         (WTF::cursorMovementIterator):
681
682 2016-07-16  Chris Dumez  <cdumez@apple.com>
683
684         Add move constructor / assignment operator to ListHashSet
685         https://bugs.webkit.org/show_bug.cgi?id=159837
686
687         Reviewed by Darin Adler.
688
689         Add move constructor / assignment operator to ListHashSet.
690
691         * wtf/ListHashSet.h:
692         (WTF::ListHashSetConstIterator::operator++):
693         (WTF::U>::ListHashSet):
694         (WTF::=):
695         (WTF::U>::clear):
696         (WTF::U>::appendNode):
697         (WTF::U>::prependNode):
698         (WTF::U>::deleteAllNodes):
699         (WTF::ListHashSetNode::ListHashSetNode): Deleted.
700
701 2016-07-15  Chris Dumez  <cdumez@apple.com>
702
703         Use emptyString() / nullAtom when possible
704         https://bugs.webkit.org/show_bug.cgi?id=159850
705
706         Reviewed by Ryosuke Niwa.
707
708         Use emptyString() / nullAtom when possible, for performance.
709
710         * wtf/text/AtomicString.cpp:
711         (WTF::AtomicString::convertASCIICase):
712
713 2016-07-15  Chris Dumez  <cdumez@apple.com>
714
715         Unreviewed, rolling out r203304.
716
717         This is wrong because of Node* entries in the internal HashMap
718
719         Reverted changeset:
720
721         "Add move constructor / assignment operator to ListHashSet"
722         https://bugs.webkit.org/show_bug.cgi?id=159837
723         http://trac.webkit.org/changeset/203304
724
725 2016-07-15  Chris Dumez  <cdumez@apple.com>
726
727         Add move constructor / assignment operator to ListHashSet
728         https://bugs.webkit.org/show_bug.cgi?id=159837
729
730         Reviewed by Alex Christensen.
731
732         Add move constructor / assignment operator to ListHashSet.
733
734         * wtf/ListHashSet.h:
735
736 2016-07-15  Geoffrey Garen  <ggaren@apple.com>
737
738         Added a makeRef<T> helper
739         https://bugs.webkit.org/show_bug.cgi?id=159835
740
741         Reviewed by Andreas Kling.
742
743         Anders told me to!
744
745         * wtf/Ref.h:
746         (WTF::makeRef): Helper function to do type inference for you.
747
748 2016-07-15  Ryan Haddad  <ryanhaddad@apple.com>
749
750         Unreviewed, rolling out r203266.
751
752         This change caused editing/deleting/delete-emoji.html to time
753         out on El Capitan, crash under GuardMalloc
754
755         Reverted changeset:
756
757         "Support new emoji group candidates"
758         https://bugs.webkit.org/show_bug.cgi?id=159755
759         http://trac.webkit.org/changeset/203266
760
761 2016-07-15  Csaba Osztrogonác  <ossy@webkit.org>
762
763         Revert r202560 to fix the ARMv7 build with ARM instruction set
764         https://bugs.webkit.org/show_bug.cgi?id=159707
765
766         Reviewed by Carlos Garcia Campos.
767
768         * wtf/Platform.h: Revert r202560.
769
770 2016-07-14  Myles C. Maxfield  <mmaxfield@apple.com>
771
772         Support new emoji group candidates
773         https://bugs.webkit.org/show_bug.cgi?id=159755
774         <rdar://problem/27325521>
775
776         Reviewed by Dean Jackson.
777
778         This patch doesn't update the rules for our cursor movement iterator, because
779         I don't know the language used for implementing these rules. These rules will
780         be updated in the near future. When they do,
781         editing/deleting/delete-emoji-expected.txt will need to be updated.
782
783         * wtf/text/TextBreakIterator.cpp:
784         (WTF::cursorMovementIterator):
785
786 2016-07-14  Alex Christensen  <achristensen@webkit.org>
787
788         Allow RefPtrs of const RefCounted types
789         https://bugs.webkit.org/show_bug.cgi?id=158269
790
791         Reviewed by Anders Carlsson.
792
793         * wtf/RefCounted.h:
794         (WTF::RefCountedBase::ref):
795         (WTF::RefCountedBase::~RefCountedBase):
796         (WTF::RefCountedBase::derefBase):
797         (WTF::RefCounted::deref):
798         Creating references to a const object does not really modify the object,
799         so everything in RefCounted is now mutable, and ref and deref are const.
800
801 2016-07-14  Chris Dumez  <cdumez@apple.com>
802
803         Avoid an extra heap allocation when dispatching Functions to WorkQueue
804         https://bugs.webkit.org/show_bug.cgi?id=158367
805
806         Reviewed by Anders Carlsson.
807
808         Avoid an extra heap allocation when dispatching Functions to WorkQueue
809         by adding leakCallable() / adoptCallable() functions to Function.
810
811         * wtf/Function.h:
812         * wtf/cocoa/WorkQueueCocoa.cpp:
813         (WTF::WorkQueue::dispatch):
814         (WTF::WorkQueue::dispatchAfter):
815
816 2016-07-13  Myles C. Maxfield  <mmaxfield@apple.com>
817
818         Addressing post-review comments after r203119
819         https://bugs.webkit.org/show_bug.cgi?id=159749
820
821         Unreviewed.
822
823         * wtf/text/StringView.h:
824         (WTF::StringView::CodePoints::Iterator::Iterator):
825         (WTF::StringView::CodePoints::Iterator::operator*):
826         (WTF::StringView::CodePoints::Iterator::operator==):
827
828 2016-07-13  Enrica Casucci  <enrica@apple.com>
829
830         Update supported platforms in xcconfig files to match the sdk names.
831         https://bugs.webkit.org/show_bug.cgi?id=159728
832
833         Reviewed by Tim Horton.
834
835         * Configurations/Base.xcconfig:
836
837 2016-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
838
839         [GTK] WebKitGtk+ uses too many file descriptors
840         https://bugs.webkit.org/show_bug.cgi?id=152316
841
842         Reviewed by Michael Catanzaro.
843
844         Add helper functions to duplicate a file descriptor setting close on exec flag, and also to set close on exec
845         flag to an existing file descriptor.
846
847         * wtf/UniStdExtras.h:
848         * wtf/UniStdExtras.cpp
849         (WTF::setCloseOnExec):
850         (WTF::dupCloseOnExec):
851
852 2016-07-12  Benjamin Poulain  <bpoulain@apple.com>
853
854         [JSC] Array.prototype.join() fails some conformance tests
855         https://bugs.webkit.org/show_bug.cgi?id=159657
856
857         Reviewed by Saam Barati.
858
859         * wtf/text/AtomicString.cpp:
860         (WTF::AtomicString::number):
861         * wtf/text/AtomicString.h:
862
863 2016-07-12  Commit Queue  <commit-queue@webkit.org>
864
865         Unreviewed, rolling out r203131.
866         https://bugs.webkit.org/show_bug.cgi?id=159698
867
868         This change caused an existing LayoutTest to time out on debug
869         testers (Requested by ryanhaddad on #webkit).
870
871         Reverted changeset:
872
873         "[JSC] Array.prototype.join() fails some conformance tests"
874         https://bugs.webkit.org/show_bug.cgi?id=159657
875         http://trac.webkit.org/changeset/203131
876
877 2016-07-12  Filip Pizlo  <fpizlo@apple.com>
878
879         platformUserPreferredLanguages on Mac should not try to put the region into the language
880         https://bugs.webkit.org/show_bug.cgi?id=159693
881
882         Rubber stamped by Alexey Proskuryakov.
883         
884         Currently, navigator.language is the thing that we use as the BCP-47 tag in our Intl code
885         when certain APIs are called without a locale argument.  That mostly makes sense, and is
886         deeply wired into our engine.
887
888         In r200105, we made Intl aware of the region as a separate thing from the language by having
889         platformUserPreferredLanguages() return something like a BCP-47 tag that was
890         <language>-<region>.  For example, if I told System Preferences that I want to speak English
891         but live in Poland then we'd get "en-pl".  This had the effect of making Intl APIs format
892         dates using Polish formatting, for example.
893
894         But this is an odd change, since that same function also feeds into navigator.language.
895         "en-pl" isn't what we want there, since my System Preferences settings aren't supposed to
896         mean that I want to speak Polish-style English.  There's no such thing.
897
898         It may be worthwhile to wire the region settings more elegantly into Intl, but if we do that,
899         it should be via a mechanism that is separate from navigator.language. So, this change simply
900         reverts r200105.
901
902         * wtf/PlatformUserPreferredLanguagesMac.mm:
903         (WTF::httpStyleLanguageCode):
904         (WTF::platformUserPreferredLanguages):
905         (WTF::isValidICUCountryCode): Deleted.
906
907 2016-07-12  Per Arne Vollan  <pvollan@apple.com>
908
909         [Win] Fix for build error when trying to version stamp dll.
910         https://bugs.webkit.org/show_bug.cgi?id=159692
911
912         Reviewed by Brent Fulgham.
913
914         Use correct path to version stamp script.
915
916         * wtf/CMakeLists.txt:
917
918 2016-07-12  Benjamin Poulain  <bpoulain@apple.com>
919
920         [JSC] Array.prototype.join() fails some conformance tests
921         https://bugs.webkit.org/show_bug.cgi?id=159657
922
923         Reviewed by Saam Barati.
924
925         * wtf/text/AtomicString.cpp:
926         (WTF::AtomicString::number):
927         * wtf/text/AtomicString.h:
928
929 2016-07-12  Myles C. Maxfield  <mmaxfield@apple.com>
930
931         Relax ordering requirements on StringView::CodePoints iterator
932         https://bugs.webkit.org/show_bug.cgi?id=159609
933
934         Reviewed by Darin Adler.
935
936         Previously, there was a requirement where if you use a CodePoints
937         iterator, you couldn't dereference twice in a row or increment
938         twice in a row. This restriction is unnecessary.
939
940         * wtf/text/StringView.h:
941         (WTF::StringView::CodePoints::Iterator::Iterator):
942         (WTF::StringView::CodePoints::Iterator::advanceCurrentCodePoint):
943         (WTF::StringView::CodePoints::Iterator::operator*):
944         (WTF::StringView::CodePoints::Iterator::operator==):
945
946 2016-07-12  Csaba Osztrogonác  <ossy@webkit.org>
947
948         JSCOnly bulidfix after r203078
949         https://bugs.webkit.org/show_bug.cgi?id=159669
950
951         Reviewed by Yusuke Suzuki.
952
953         * wtf/PlatformJSCOnly.cmake:
954         * wtf/text/jsconly/TextBreakIteratorInternalICUJSCOnly.cpp: Added.
955         (WTF::currentSearchLocaleID):
956         (WTF::currentTextBreakLocaleID):
957
958 2016-07-12  Per Arne Vollan  <pvollan@apple.com>
959
960         [Win] DLLs are missing version information.
961         https://bugs.webkit.org/show_bug.cgi?id=159349
962
963         Reviewed by Brent Fulgham.
964
965         Generate autoversion.h and run perl version stamp utility.
966
967         * wtf/CMakeLists.txt:
968
969 2016-07-11  Myles C. Maxfield  <mmaxfield@apple.com>
970
971         Implement grapheme cluster iterator on StringView
972         https://bugs.webkit.org/show_bug.cgi?id=159598
973
974         Reviewed by Anders Carlsson.
975
976         This is in preparation for honoring the second argument to FontFaceSet.load().
977
978         * wtf/text/StringView.cpp:
979         (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
980         (WTF::StringView::GraphemeClusters::Iterator::Impl::operator++):
981         (WTF::StringView::GraphemeClusters::Iterator::Impl::operator*):
982         (WTF::StringView::GraphemeClusters::Iterator::Impl::operator==):
983         (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
984         (WTF::StringView::GraphemeClusters::Iterator::Iterator):
985         (WTF::StringView::GraphemeClusters::Iterator::~Iterator):
986         (WTF::StringView::GraphemeClusters::Iterator::operator*):
987         (WTF::StringView::GraphemeClusters::Iterator::operator==):
988         (WTF::StringView::GraphemeClusters::Iterator::operator!=):
989         * wtf/text/StringView.h:
990         (WTF::StringView::GraphemeClusters::GraphemeClusters):
991         * text/TextBreakIterator.cpp:
992         (WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator):
993         * text/TextBreakIterator.h:
994
995 2016-07-10  Myles C. Maxfield  <mmaxfield@apple.com>
996
997         Move breaking iterator code to WTF
998         https://bugs.webkit.org/show_bug.cgi?id=159594
999
1000         Reviewed by Alex Christensen.
1001
1002         This is in preparation for giving StringView a GraphemeClusters iterator.
1003         Such an interator needs to be implemented on top of our breaking iterator
1004         code.
1005
1006         * WTF.xcodeproj/project.pbxproj:
1007         * icu/unicode/ubrk.h: Added.
1008         * icu/unicode/utext.h: Renamed from Source/WebCore/icu/unicode/utext.h.
1009         * wtf/CMakeLists.txt:
1010         * wtf/PlatformEfl.cmake:
1011         * wtf/PlatformGTK.cmake:
1012         * wtf/PlatformMac.cmake:
1013         * wtf/PlatformWin.cmake:
1014         * wtf/TinyLRUCache.h:
1015         * wtf/text/LineBreakIteratorPoolICU.h: Renamed from Source/WebCore/platform/text/LineBreakIteratorPoolICU.h.
1016         (WTF::LineBreakIteratorPool::LineBreakIteratorPool):
1017         (WTF::LineBreakIteratorPool::sharedPool):
1018         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
1019         (WTF::LineBreakIteratorPool::take):
1020         (WTF::LineBreakIteratorPool::put):
1021         * wtf/text/TextBreakIterator.cpp: Renamed from Source/WebCore/platform/text/TextBreakIterator.cpp.
1022         (WTF::initializeIterator):
1023         (WTF::initializeIteratorWithRules):
1024         (WTF::setTextForIterator):
1025         (WTF::setContextAwareTextForIterator):
1026         (WTF::wordBreakIterator):
1027         (WTF::sentenceBreakIterator):
1028         (WTF::cursorMovementIterator):
1029         (WTF::acquireLineBreakIterator):
1030         (WTF::releaseLineBreakIterator):
1031         (WTF::mapLineIteratorModeToRules):
1032         (WTF::isCJKLocale):
1033         (WTF::openLineBreakIterator):
1034         (WTF::closeLineBreakIterator):
1035         (WTF::compareAndSwapNonSharedCharacterBreakIterator):
1036         (WTF::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator):
1037         (WTF::NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator):
1038         (WTF::textBreakFirst):
1039         (WTF::textBreakLast):
1040         (WTF::textBreakNext):
1041         (WTF::textBreakPrevious):
1042         (WTF::textBreakPreceding):
1043         (WTF::textBreakFollowing):
1044         (WTF::textBreakCurrent):
1045         (WTF::isTextBreak):
1046         (WTF::isWordTextBreak):
1047         (WTF::numGraphemeClusters):
1048         (WTF::numCharactersInGraphemeClusters):
1049         * wtf/text/TextBreakIterator.h: Renamed from Source/WebCore/platform/text/TextBreakIterator.h.
1050         (WTF::LazyLineBreakIterator::LazyLineBreakIterator):
1051         (WTF::LazyLineBreakIterator::~LazyLineBreakIterator):
1052         (WTF::LazyLineBreakIterator::string):
1053         (WTF::LazyLineBreakIterator::isLooseCJKMode):
1054         (WTF::LazyLineBreakIterator::lastCharacter):
1055         (WTF::LazyLineBreakIterator::secondToLastCharacter):
1056         (WTF::LazyLineBreakIterator::setPriorContext):
1057         (WTF::LazyLineBreakIterator::updatePriorContext):
1058         (WTF::LazyLineBreakIterator::resetPriorContext):
1059         (WTF::LazyLineBreakIterator::priorContextLength):
1060         (WTF::LazyLineBreakIterator::get):
1061         (WTF::LazyLineBreakIterator::resetStringAndReleaseIterator):
1062         (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*):
1063         * wtf/text/TextBreakIteratorInternalICU.h: Renamed from Source/WebCore/platform/text/TextBreakIteratorInternalICU.h.
1064         * wtf/text/efl/TextBreakIteratorInternalICUEfl.cpp: Renamed from Source/WebCore/platform/text/efl/TextBreakIteratorInternalICUEfl.cpp.
1065         (WebCore::currentSearchLocaleID):
1066         (WebCore::currentTextBreakLocaleID):
1067         * wtf/text/gtk/TextBreakIteratorInternalICUGtk.cpp: Renamed from Source/WebCore/platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp.
1068         (WebCore::currentSearchLocaleID):
1069         (WebCore::currentTextBreakLocaleID):
1070         * wtf/text/icu/UTextProvider.cpp: Renamed from Source/WebCore/platform/text/icu/UTextProvider.cpp.
1071         (WTF::fixPointer):
1072         (WTF::uTextCloneImpl):
1073         * wtf/text/icu/UTextProvider.h: Renamed from Source/WebCore/platform/text/icu/UTextProvider.h.
1074         (WTF::uTextProviderContext):
1075         (WTF::initializeContextAwareUTextProvider):
1076         (WTF::uTextAccessPinIndex):
1077         (WTF::uTextAccessInChunkOrOutOfRange):
1078         * wtf/text/icu/UTextProviderLatin1.cpp: Renamed from Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp.
1079         (WTF::uTextLatin1Clone):
1080         (WTF::uTextLatin1NativeLength):
1081         (WTF::uTextLatin1Access):
1082         (WTF::uTextLatin1Extract):
1083         (WTF::uTextLatin1MapOffsetToNative):
1084         (WTF::uTextLatin1MapNativeIndexToUTF16):
1085         (WTF::uTextLatin1Close):
1086         (WTF::openLatin1UTextProvider):
1087         (WTF::textLatin1ContextAwareGetCurrentContext):
1088         (WTF::textLatin1ContextAwareMoveInPrimaryContext):
1089         (WTF::textLatin1ContextAwareSwitchToPrimaryContext):
1090         (WTF::textLatin1ContextAwareMoveInPriorContext):
1091         (WTF::textLatin1ContextAwareSwitchToPriorContext):
1092         (WTF::uTextLatin1ContextAwareClone):
1093         (WTF::uTextLatin1ContextAwareNativeLength):
1094         (WTF::uTextLatin1ContextAwareAccess):
1095         (WTF::uTextLatin1ContextAwareExtract):
1096         (WTF::uTextLatin1ContextAwareClose):
1097         (WTF::openLatin1ContextAwareUTextProvider):
1098         * wtf/text/icu/UTextProviderLatin1.h: Renamed from Source/WebCore/platform/text/icu/UTextProviderLatin1.h.
1099         * wtf/text/icu/UTextProviderUTF16.cpp: Renamed from Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp.
1100         (WTF::textUTF16ContextAwareGetCurrentContext):
1101         (WTF::textUTF16ContextAwareMoveInPrimaryContext):
1102         (WTF::textUTF16ContextAwareSwitchToPrimaryContext):
1103         (WTF::textUTF16ContextAwareMoveInPriorContext):
1104         (WTF::textUTF16ContextAwareSwitchToPriorContext):
1105         (WTF::uTextUTF16ContextAwareClone):
1106         (WTF::uTextUTF16ContextAwareNativeLength):
1107         (WTF::uTextUTF16ContextAwareAccess):
1108         (WTF::uTextUTF16ContextAwareExtract):
1109         (WTF::uTextUTF16ContextAwareClose):
1110         (WTF::openUTF16ContextAwareUTextProvider):
1111         * wtf/text/icu/UTextProviderUTF16.h: Renamed from Source/WebCore/platform/text/icu/UTextProviderUTF16.h.
1112         * wtf/text/mac/TextBreakIteratorInternalICUMac.mm: Renamed from Source/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm.
1113         (WTF::textBreakLocalePreference):
1114         (WTF::topLanguagePreference):
1115         (WTF::getLocale):
1116         (WTF::getSearchLocale):
1117         (WTF::currentSearchLocaleID):
1118         (WTF::getTextBreakLocale):
1119         (WTF::currentTextBreakLocaleID):
1120         * wtf/text/win/TextBreakIteratorInternalICUWin.cpp: Renamed from Source/WebCore/platform/text/win/TextBreakIteratorInternalICUWin.cpp.
1121         (WebCore::currentSearchLocaleID):
1122         (WebCore::currentTextBreakLocaleID):
1123
1124 2016-07-08  Commit Queue  <commit-queue@webkit.org>
1125
1126         Unreviewed, rolling out r202799.
1127         https://bugs.webkit.org/show_bug.cgi?id=159568
1128
1129         Caused build failure (Requested by perarne on #webkit).
1130
1131         Reverted changeset:
1132
1133         "[Win] DLLs are missing version information."
1134         https://bugs.webkit.org/show_bug.cgi?id=159349
1135         http://trac.webkit.org/changeset/202799
1136
1137 2016-07-08  Jiewen Tan  <jiewen_tan@apple.com>
1138
1139         Define DYLD_MACOSX_VERSION_10_12
1140         https://bugs.webkit.org/show_bug.cgi?id=159525
1141         <rdar://problem/26250296>
1142
1143         Reviewed by Brent Fulgham.
1144
1145         * wtf/spi/darwin/dyldSPI.h:
1146
1147 2016-07-01  Jer Noble  <jer.noble@apple.com>
1148
1149         REGRESSION (r202641): Netflix playback stalls after a few seconds
1150         https://bugs.webkit.org/show_bug.cgi?id=159365
1151
1152         Reviewed by Eric Carlson.
1153
1154         Add a isBetween() convenience method.
1155
1156         * wtf/MediaTime.cpp:
1157         (WTF::MediaTime::isBetween):
1158         * wtf/MediaTime.h:
1159
1160 2016-07-03  Per Arne Vollan  <pvollan@apple.com>
1161
1162         [Win] DLLs are missing version information.
1163         https://bugs.webkit.org/show_bug.cgi?id=159349
1164
1165         Reviewed by Brent Fulgham.
1166
1167         Generate autoversion.h in the prebuild step.
1168         Run the perl version stamp utility.
1169
1170         * wtf/CMakeLists.txt:
1171
1172 2016-07-03  Saam Barati  <sbarati@apple.com>
1173
1174         BytecodeGenerator::getVariablesUnderTDZ is too conservative
1175         https://bugs.webkit.org/show_bug.cgi?id=159387
1176
1177         Reviewed by Filip Pizlo.
1178
1179         I've templatized SmallPtrSet on its SmallArraySize instead
1180         of it always being 8.  
1181
1182         * wtf/SmallPtrSet.h:
1183         (WTF::SmallPtrSet::SmallPtrSet):
1184         (WTF::SmallPtrSet::add):
1185         (WTF::SmallPtrSet::iterator::operator!=):
1186         (WTF::SmallPtrSet::bucket):
1187
1188 2016-07-03  Filip Pizlo  <fpizlo@apple.com>
1189
1190         Ugh. Once again, unreviewed, roll out unintentional commit in r202790.
1191
1192         * benchmarks/LockFairnessTest.cpp:
1193         (main):
1194
1195 2016-07-02  Dan Bernstein  <mitz@apple.com>
1196
1197         Build fix.
1198
1199         * wtf/Assertions.cpp:
1200
1201 2016-07-02  Filip Pizlo  <fpizlo@apple.com>
1202
1203         Unreviewed, roll back unintentional commit in r202778.
1204
1205         * benchmarks/LockFairnessTest.cpp:
1206         (main):
1207
1208 2016-07-01  Jer Noble  <jer.noble@apple.com>
1209
1210         Deadlock inside -[WebCoreNSURLSession dealloc]
1211         https://bugs.webkit.org/show_bug.cgi?id=159331
1212         <rdar://problem/27122716>
1213
1214         Reviewed by Alex Christensen.
1215
1216         A Function<> object can wrap any callable type, including a C++ lambda.
1217
1218         dispatchFunctionsFromMainThread() holds a lock while iterating over the functions in
1219         functionQueue(), and during ths iteration, the previous callable object is destroyed by
1220         assigning the result of functionQueue().takeFirst(). Because lambdas (and other callables,
1221         like functors) can own objects, destroying this callable can have side effects, and if one
1222         of those side effects is to call callOnMainThread(), this can deadlock.
1223
1224         Move this side-effect-having call outside the locked block by clearing the function object
1225         immediately after calling it.
1226
1227         * wtf/MainThread.cpp:
1228         (WTF::dispatchFunctionsFromMainThread):
1229
1230 2016-06-29  Jer Noble  <jer.noble@apple.com>
1231
1232         Adopt MediaRemote.
1233         https://bugs.webkit.org/show_bug.cgi?id=159250
1234
1235         Reviewed by Eric Carlson.
1236
1237         Add USE_MEDIAREMOTE.
1238
1239         * wtf/Platform.h:
1240
1241 2016-06-28  Commit Queue  <commit-queue@webkit.org>
1242
1243         Unreviewed, rolling out r202580.
1244         https://bugs.webkit.org/show_bug.cgi?id=159245
1245
1246         Caused all WKTR tests to fail on GuardMalloc and Production
1247         only for unknown reasons, investigating offline. (Requested by
1248         brrian on #webkit).
1249
1250         Reverted changeset:
1251
1252         "RunLoop::Timer should use constructor templates instead of
1253         class templates"
1254         https://bugs.webkit.org/show_bug.cgi?id=159153
1255         http://trac.webkit.org/changeset/202580
1256
1257 2016-06-28  Brian Burg  <bburg@apple.com>
1258
1259         RunLoop::Timer should use constructor templates instead of class templates
1260         https://bugs.webkit.org/show_bug.cgi?id=159153
1261
1262         Reviewed by Alex Christensen.
1263
1264         Refactor RunLoop::Timer to align with WebCore::Timer. Use a constructor
1265         template instead of a class template. Store a bound std::function rather than
1266         a templated member and function. Add a constructor that takes a std::function.
1267
1268         * wtf/RunLoop.h:
1269         (WTF::RunLoop::Timer::Timer):
1270         (WTF::RunLoop::Timer::fired):
1271
1272 2016-06-28  Tomas Popela  <tpopela@redhat.com>
1273
1274         THUMB2 support not correctly detected on Fedora with GCC 6.1.
1275         https://bugs.webkit.org/show_bug.cgi?id=159083
1276
1277         Reviewed by Carlos Garcia Campos.
1278
1279         On Fedora 24 with GCC 6.1. the __thumb2__ and __thumb__ are not
1280         defined so the detection of THUMB2 support will fail. Look also
1281         whether the __ARM_ARCH_ISA_THUMB is defined to fix the THUMB2
1282         detection.
1283
1284         * wtf/Platform.h:
1285
1286 2016-06-27  Joseph Pecoraro  <pecoraro@apple.com>
1287
1288         Remove now unused WTF::findNextLineStart
1289         https://bugs.webkit.org/show_bug.cgi?id=159157
1290
1291         Reviewed by Mark Lam.
1292
1293         Unused after r202498.
1294
1295         * wtf/text/StringImpl.cpp:
1296         (WTF::StringImpl::findNextLineStart): Deleted.
1297         * wtf/text/StringImpl.h:
1298         (WTF::findNextLineStart): Deleted.
1299         * wtf/text/WTFString.h:
1300         (WTF::String::findNextLineStart): Deleted.
1301
1302 2016-06-21  Anders Carlsson  <andersca@apple.com>
1303
1304         Rename NoncopyableFunction to Function
1305         https://bugs.webkit.org/show_bug.cgi?id=158354
1306
1307         Reviewed by Chris Dumez.
1308
1309         * WTF.xcodeproj/project.pbxproj:
1310         * wtf/CrossThreadTask.h:
1311         (WTF::CrossThreadTask::CrossThreadTask):
1312         * wtf/Function.h: Renamed from Source/WTF/wtf/NoncopyableFunction.h.
1313         * wtf/FunctionDispatcher.h:
1314         * wtf/MainThread.cpp:
1315         (WTF::functionQueue):
1316         (WTF::dispatchFunctionsFromMainThread):
1317         (WTF::callOnMainThread):
1318         * wtf/MainThread.h:
1319         * wtf/RunLoop.cpp:
1320         (WTF::RunLoop::performWork):
1321         (WTF::RunLoop::dispatch):
1322         * wtf/RunLoop.h:
1323         * wtf/WorkQueue.h:
1324         * wtf/cocoa/WorkQueueCocoa.cpp:
1325         (WTF::WorkQueue::dispatch):
1326         (WTF::WorkQueue::dispatchAfter):
1327         * wtf/efl/DispatchQueueWorkItemEfl.h:
1328         (WorkItem::WorkItem):
1329         (TimerWorkItem::create):
1330         (TimerWorkItem::TimerWorkItem):
1331         * wtf/efl/WorkQueueEfl.cpp:
1332         (WTF::WorkQueue::dispatch):
1333         (WTF::WorkQueue::dispatchAfter):
1334         * wtf/generic/RunLoopGeneric.cpp:
1335         (WTF::RunLoop::TimerBase::ScheduledTask::create):
1336         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
1337         (WTF::RunLoop::dispatchAfter):
1338         * wtf/generic/WorkQueueGeneric.cpp:
1339         (WorkQueue::dispatch):
1340         (WorkQueue::dispatchAfter):
1341         * wtf/glib/RunLoopGLib.cpp:
1342         (WTF::DispatchAfterContext::DispatchAfterContext):
1343         (WTF::RunLoop::dispatchAfter):
1344         * wtf/win/WorkItemWin.cpp:
1345         (WTF::WorkItemWin::WorkItemWin):
1346         (WTF::WorkItemWin::create):
1347         (WTF::HandleWorkItem::HandleWorkItem):
1348         (WTF::HandleWorkItem::createByAdoptingHandle):
1349         * wtf/win/WorkItemWin.h:
1350         (WTF::WorkItemWin::function):
1351         * wtf/win/WorkQueueWin.cpp:
1352         (WTF::WorkQueue::dispatch):
1353         (WTF::WorkQueue::dispatchAfter):
1354
1355 2016-06-23  David Kilzer  <ddkilzer@apple.com>
1356
1357         REGRESSION (r202380): iOS 9.x internal builds are broken
1358
1359         Follow-up fix for: Enable window.open() for existing versions of Secret Society
1360         <https://webkit.org/b/159049>
1361         <rdar://problem/26528349>
1362
1363         * wtf/spi/darwin/dyldSPI.h: Define DYLD_IOS_VERSION_10_0 when
1364         building on internal SDKs older than iOS 10.
1365
1366 2016-06-23  John Wilander  <wilander@apple.com>
1367
1368         Enable window.open() for existing versions of Secret Society
1369         https://bugs.webkit.org/show_bug.cgi?id=159049
1370         <rdar://problem/26528349>
1371         
1372         Reviewed by Andy Estes.
1373
1374         The Secret Society Hidden Mystery app has a broken version check treating iOS 10
1375         as iOS 1 on iPads. Therefore it believes it can use window.open() in a tap
1376         handler. We should allow the existing versions of the app to do this to not break
1377         them.
1378
1379         * wtf/spi/darwin/dyldSPI.h:
1380             Added DYLD_IOS_VERSION_10_0.
1381
1382 2016-06-21  Said Abou-Hallawa  <sabouhallawa@apple,com>
1383
1384         Add system tracing points for requestAnimationFrame() workflow
1385         https://bugs.webkit.org/show_bug.cgi?id=158723
1386
1387         Reviewed by Simon Fraser.
1388
1389         Define new trace score codes for requestAnimationFrame().
1390
1391         * wtf/SystemTracing.h:
1392         (WTF::TracePoint):
1393         (WTF::TraceScope::TraceScope):
1394         (WTF::TraceScope::~TraceScope):
1395
1396 2016-06-20  Commit Queue  <commit-queue@webkit.org>
1397
1398         Unreviewed, rolling out r202136.
1399         https://bugs.webkit.org/show_bug.cgi?id=158932
1400
1401         JSBench wasn't regressed by r202002 and r202111 on iOS after
1402         all (Requested by rniwa_ on #webkit).
1403
1404         Reverted changeset:
1405
1406         "Unreviewed, rolling out r202002 and r202111."
1407         https://bugs.webkit.org/show_bug.cgi?id=158638
1408         http://trac.webkit.org/changeset/202136
1409
1410 2016-06-17  Chris Dumez  <cdumez@apple.com>
1411
1412         Optimize parseCacheHeader() by using StringView
1413         https://bugs.webkit.org/show_bug.cgi?id=158891
1414
1415         Reviewed by Darin Adler.
1416
1417         Add a StringView::find() overload which takes a CharacterMatchFunction
1418         to match the one on String.
1419
1420         * wtf/text/StringView.h:
1421         (WTF::StringView::find):
1422
1423 2016-06-17  Mark Lam  <mark.lam@apple.com>
1424
1425         OOM Assertion failure in JSON.stringify.
1426         https://bugs.webkit.org/show_bug.cgi?id=158794
1427         <rdar://problem/26826254>
1428
1429         Reviewed by Saam Barati.
1430
1431         The bug was actually in StringBuilder::appendQuotedJSONString() where it failed
1432         to detect an imminent unsigned int overflow.  The fix is to use Checked<unsigned>
1433         for the needed math, and RELEASE_ASSERT afterwards that we did not overflow.
1434
1435         I also added more assertions to detect sooner if any there are any problems with
1436         StringBuilder's m_buffer or m_length being incorrectly sized.  These assertions
1437         have been run on the JSC and layout tests without any issue.
1438
1439         * wtf/text/StringBuilder.cpp:
1440         (WTF::StringBuilder::resize):
1441         (WTF::StringBuilder::allocateBuffer):
1442         (WTF::StringBuilder::allocateBufferUpConvert):
1443         (WTF::StringBuilder::reallocateBuffer<LChar>):
1444         (WTF::StringBuilder::reallocateBuffer<UChar>):
1445         (WTF::StringBuilder::reserveCapacity):
1446         (WTF::StringBuilder::appendUninitializedSlow):
1447         (WTF::StringBuilder::append):
1448         (WTF::StringBuilder::appendQuotedJSONString):
1449         * wtf/text/StringBuilder.h:
1450         (WTF::StringBuilder::swap):
1451
1452 2016-06-14  Filip Pizlo  <fpizlo@apple.com>
1453
1454         Baseline JIT should be concurrent
1455         https://bugs.webkit.org/show_bug.cgi?id=158755
1456
1457         Reviewed by Geoffrey Garen.
1458         
1459         The concurrent baseline JIT needs to be able to clone bytecode to get a consistent snapshot.
1460         So, this adds such a method.
1461
1462         * wtf/RefCountedArray.h:
1463         (WTF::RefCountedArray::RefCountedArray):
1464         (WTF::RefCountedArray::clone):
1465
1466 2016-06-16  Chris Dumez  <cdumez@apple.com>
1467
1468         No need to ref connection in lambda inside NetworkResourceLoader::tryStoreAsCacheEntry()
1469         https://bugs.webkit.org/show_bug.cgi?id=158862
1470
1471         Reviewed by Darin Adler.
1472
1473         Add NoncopyableFunction constructor that takes a nullptr_t in, in order
1474         to match the std::function API and make porting from one to the other
1475         easier.
1476
1477         * wtf/NoncopyableFunction.h:
1478
1479 2016-06-16  Chris Dumez  <cdumez@apple.com>
1480
1481         Unreviewed, rolling out r202002 and r202111.
1482
1483         Ryosuke says this was a JSBench regression on iOS
1484
1485         Reverted changesets:
1486
1487         "Make HashMap and HashSet work with Refs"
1488         https://bugs.webkit.org/show_bug.cgi?id=158638
1489         http://trac.webkit.org/changeset/202002
1490
1491         "Improve HashMap and HashSet support for Ref"
1492         https://bugs.webkit.org/show_bug.cgi?id=158789
1493         http://trac.webkit.org/changeset/202111
1494
1495 2016-06-15  Chris Dumez  <cdumez@apple.com>
1496
1497         [Cocoa] Clean up / optimize ResourceResponse::platformLazyInit(InitLevel)
1498         https://bugs.webkit.org/show_bug.cgi?id=158809
1499
1500         Reviewed by Darin Adler.
1501
1502         Add toAtomicString() method to StringView to avoid having to call toString()
1503         and then atomizing the String at call sites.
1504
1505         * wtf/text/StringView.h:
1506         (WTF::StringView::toAtomicString):
1507
1508 2016-06-15  Sam Weinig  <sam@webkit.org>
1509
1510         Improve HashMap and HashSet support for Ref
1511         https://bugs.webkit.org/show_bug.cgi?id=158789
1512
1513         Reviewed by Chris Dumez.
1514
1515         Tests: Add more cases to WTF_HashMap.Ref_Key, WTF_HashMap.Ref_Value and WTF_HashSet.Ref
1516
1517         * wtf/HashMap.h:
1518         * wtf/HashSet.h:
1519         Add a MappedTakeType typedef and rework the take functions to use it and HashTraits::take(...).
1520
1521         * wtf/HashTraits.h:
1522         (WTF::GenericHashTraits::assignToEmpty):
1523         Move to GenericHashTraits rather than GenericHashTraitsBase, since it is not different
1524         between integral and non-integral HashTraits.
1525
1526         (WTF::GenericHashTraits::take):
1527         Add a trait function for take that defaults as a forward. This allows us to override take
1528         just like we do with get/peek.
1529
1530         (WTF::HashTraits<Ref<P>>::emptyValue):
1531         Remove unnecessary explicit construction.
1532
1533         (WTF::HashTraits<Ref<P>>::peek):
1534         Fix assertion that could happen if you did a HashMap.get() on an empty Ref value.
1535
1536         (WTF::HashTraits<Ref<P>>::take):
1537         Make the TakeType of a Ref<P> be Optional<Ref<P>>, to avoid having empty
1538         Refs returned from HashMap and HashSet. Implement an explicit take() function to
1539         construct one.
1540
1541         (WTF::HashTraits<Ref<P>>::customDeleteBucket): Deleted.
1542         Remove unnecessary customDeleteBucket implementation. Ref does not assign nullptr to
1543         it's m_ptr in destruction, so there is no dead store to avoid here.
1544
1545         * wtf/Ref.h:
1546         (WTF::Ref::ptrAllowingHashTableEmptyValue):
1547         Add HashTrait helper to allow getting the value of m_ptr even when it is null. This
1548         allows us to avoid a branch in HashTraits<Ref<P>>::peek().
1549
1550 2016-06-15  Konstantin Tokarev  <annulen@yandex.ru>
1551
1552         Only Mac port needs ObjC API for JSC
1553         https://bugs.webkit.org/show_bug.cgi?id=158780
1554
1555         Reviewed by Philippe Normand.
1556
1557         * wtf/FeatureDefines.h:
1558
1559 2016-06-15  Yusuke Suzuki  <utatane.tea@gmail.com>
1560
1561         Unreviewed, follow up patch for r202092
1562         https://bugs.webkit.org/show_bug.cgi?id=158661
1563
1564         During checking Windows port on EWS, accidentally introduce the regression.
1565
1566         * wtf/Platform.h:
1567
1568 2016-06-15  Yusuke Suzuki  <utatane.tea@gmail.com>
1569
1570         [JSC] Move calling convention flags to WTF
1571         https://bugs.webkit.org/show_bug.cgi?id=158661
1572
1573         Reviewed by Keith Miller.
1574
1575         * wtf/Platform.h:
1576
1577 2016-06-14  Myles C. Maxfield  <mmaxfield@apple.com>
1578
1579         Honor bidi unicode codepoints
1580         https://bugs.webkit.org/show_bug.cgi?id=149170
1581         <rdar://problem/26527378>
1582
1583         Reviewed by Simon Fraser.
1584
1585         * wtf/unicode/CharacterNames.h:
1586
1587 2016-06-14  Commit Queue  <commit-queue@webkit.org>
1588
1589         Unreviewed, rolling out r202057.
1590         https://bugs.webkit.org/show_bug.cgi?id=158749
1591
1592         This change broke the Windows build. (Requested by ryanhaddad
1593         on #webkit).
1594
1595         Reverted changeset:
1596
1597         "Honor bidi unicode codepoints"
1598         https://bugs.webkit.org/show_bug.cgi?id=149170
1599         http://trac.webkit.org/changeset/202057
1600
1601 2016-06-14  Myles C. Maxfield  <mmaxfield@apple.com>
1602
1603         Honor bidi unicode codepoints
1604         https://bugs.webkit.org/show_bug.cgi?id=149170
1605         <rdar://problem/26527378>
1606
1607         Reviewed by Simon Fraser.
1608
1609         * wtf/unicode/CharacterNames.h:
1610
1611 2016-06-13  Alex Christensen  <achristensen@webkit.org>
1612
1613         Add WebSocketProvider stub
1614         https://bugs.webkit.org/show_bug.cgi?id=158702
1615
1616         Reviewed by Brady Eidson.
1617
1618         * wtf/UniqueRef.h:
1619         (WTF::UniqueRef::operator->):
1620         (WTF::UniqueRef::operator T&):
1621         (WTF::UniqueRef::operator const T&):
1622         Added operator T& to avoid unneeded .get() calls.
1623
1624 2016-06-13  Sam Weinig  <sam@webkit.org>
1625
1626         Make HashMap and HashSet work with Refs
1627         https://bugs.webkit.org/show_bug.cgi?id=158638
1628
1629         Reviewed by Darin Adler.
1630
1631         * wtf/GetPtr.h:
1632         Move HashTableDeletedValueType and HashTableEmptyValueType here, as they are now shared
1633         by more than one smart pointer. This file should probably be renamed to something else
1634         at some point to indicate that it contains helpers for pointer and ref related functionality.
1635
1636         * wtf/HashFunctions.h:
1637         Add a DefaultHash for Refs. Customize the PtrHash to indicate that it is not safe to compare
1638         to empty or deleted Refs.
1639
1640         * wtf/HashMap.h:
1641         (WTF::HashMapTranslator::equal):
1642         (WTF::HashMapTranslator::translate):
1643         (WTF::HashMapEnsureTranslator::equal):
1644         (WTF::HashMapEnsureTranslator::translate):
1645         * wtf/HashSet.h:
1646         (WTF::IdentityExtractor::extract):
1647         (WTF::HashSetTranslator::hash):
1648         (WTF::HashSetTranslator::equal):
1649         (WTF::HashSetTranslator::translate):
1650         * wtf/HashTable.h:
1651         (WTF::IdentityHashTranslator::hash):
1652         (WTF::IdentityHashTranslator::equal):
1653         (WTF::IdentityHashTranslator::translate):
1654         Use the new assignToEmpty trait function to allow uninitialized Ref's to be safely assigned to.
1655
1656         * wtf/HashTraits.h:
1657         (WTF::HashTraits<Ref<P>>::emptyValue):
1658         (WTF::HashTraits<Ref<P>>::isEmptyValue):
1659         (WTF::HashTraits<Ref<P>>::assignToEmpty):
1660         (WTF::HashTraits<Ref<P>>::peek):
1661         (WTF::HashTraits<Ref<P>>::customDeleteBucket):
1662         Add custom HashTraits for Ref. Also, introduce a new trait function, assignToEmpty, for use
1663         in translation assignments. This is necessary since the default assignment operator for Ref
1664         will not allow assignment to the empty Ref, which we need to do here.
1665
1666         * wtf/Ref.h:
1667         (WTF::Ref::operator=):
1668         (WTF::Ref::Ref):
1669         (WTF::Ref::isHashTableDeletedValue):
1670         (WTF::Ref::hashTableDeletedValue):
1671         (WTF::Ref::isHashTableEmptyValue):
1672         (WTF::Ref::hashTableEmptyValue):
1673         Add explicit constructors/predicates for making deleted/empty Refs.
1674
1675         (WTF::Ref::assignToHashTableEmptyValue):
1676         Add a special function that allows assignment to an empty Ref, which the
1677         assignment operator does not.
1678         
1679         (WTF::IsSmartPtr):
1680         Add an IsSmartPtr override to indicate that Ref is a smart pointer.
1681
1682         * wtf/RefPtr.h:
1683         Move HashTableDeletedValueType to GetPtr.h.
1684
1685 2016-06-13  Fujii Hironori  <Hironori.Fujii@sony.com>
1686
1687         Stack overflow at RefPtr::release on Windows port since r201782
1688         https://bugs.webkit.org/show_bug.cgi?id=158687
1689
1690         Reviewed by Chris Dumez.
1691
1692         RefPtr::release calls RefPtr::RefPtr, and RefPtr::RefPtr calls
1693         RefPtr::release.
1694
1695         RefPtr::RefPtr does not need to call RefPtr::release.
1696
1697         * wtf/RefPtr.h:
1698         (WTF::RefPtr::RefPtr): Do not call RefPtr::release.
1699
1700 2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>
1701
1702         Addressing post-review comments after r201978.
1703         https://bugs.webkit.org/show_bug.cgi?id=158649
1704         <rdar://problem/13258122>
1705
1706         Unreviewed.
1707
1708         * wtf/text/StringCommon.h:
1709         (WTF::equal):
1710         (WTF::naiveEqualWithoutPerformingUnicodeNormalization): Deleted.
1711
1712 2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>
1713
1714         [Cocoa] Map commonly used Chinese Windows font names to names present on Cocoa operating systems
1715         https://bugs.webkit.org/show_bug.cgi?id=158649
1716         <rdar://problem/13258122>
1717
1718         Reviewed by Darin Adler.
1719
1720         * wtf/text/StringCommon.h:
1721         (WTF::naiveEqualWithoutPerformingUnicodeNormalization): Added.
1722
1723 2016-06-11  Chris Dumez  <cdumez@apple.com>
1724
1725         WorkerNavigator is missing some attributes
1726         https://bugs.webkit.org/show_bug.cgi?id=158593
1727         <rdar://problem/26731334>
1728
1729         Reviewed by Darin Adler.
1730
1731         * wtf/PlatformUserPreferredLanguages.h:
1732         * wtf/PlatformUserPreferredLanguagesWin.cpp:
1733         (WTF::platformLanguage):
1734         (WTF::platformUserPreferredLanguages):
1735
1736         Make platformUserPreferredLanguages() thread safe on Windows. The
1737         Mac and Unix implementations are already thread-safe.
1738
1739         HAS_FASTCALL_CALLING_CONVENTION is changed to COMPILER_SUPPORTS(FASTCALL_CALLING_CONVENTION).
1740
1741 2016-06-10  Alex Christensen  <achristensen@webkit.org>
1742
1743         Introduce WTF::UniqueRef
1744         https://bugs.webkit.org/show_bug.cgi?id=158596
1745
1746         Reviewed by Brady Eidson.
1747
1748         WTF::UniqueRef is like a std::unique_ptr that is guaranteed to be non-null.
1749         std::make_unique returns a non-null value that is put into a std::unique_ptr, a type
1750         that could contain null values.  To be able to pass such values around and store them
1751         without wondering if they are null, we now have WTF::UniqueRef which cannot be null.
1752
1753         * WTF.xcodeproj/project.pbxproj:
1754         * wtf/CMakeLists.txt:
1755         * wtf/UniqueRef.h: Added.
1756         (WTF::makeUniqueRef):
1757         (WTF::UniqueRef::UniqueRef):
1758         (WTF::UniqueRef::get):
1759         (WTF::UniqueRef::operator&):
1760         (WTF::UniqueRef::operator->):
1761
1762 2016-06-09  Brady Eidson  <beidson@apple.com>
1763
1764         Unaddressed review feedback from r201872
1765
1766         * wtf/CrossThreadTask.h:
1767         (WTF::callFunctionForCrossThreadTask): Fix typo.
1768
1769 2016-06-09  Brady Eidson  <beidson@apple.com>
1770
1771         Greatly simplify CrossThreadTask.h.
1772         https://bugs.webkit.org/show_bug.cgi?id=158542
1773
1774         Reviewed by Darin Adler.
1775
1776         * wtf/CrossThreadTask.h:
1777         (WTF::crossThreadCopy):
1778         (WTF::callFunctionForCrossThreadTaskImpl):
1779         (WTF::callFunctionForCrossThreadTask):
1780         (WTF::createCrossThreadTask):
1781         (WTF::callMemberFunctionForCrossThreadTaskImpl):
1782         (WTF::callMemberFunctionForCrossThreadTask):
1783
1784 2016-06-08  Brady Eidson  <beidson@apple.com>
1785
1786         Make CrossThreadCopier more efficient (fewer copies!).
1787         https://bugs.webkit.org/show_bug.cgi?id=158456
1788
1789         Reviewed by Alex Christensen.
1790
1791         Previously, we'd run all arguments through CrossThreadCopier, then immediately make
1792         an unnecessary copy of the result during lambda capture.
1793
1794         Instead, we should just put the CrossThreadCopier generated objects directly in lambdas,
1795         which are then captured by NoncopyableFunctions.
1796
1797         This reduces the number of constructor calls per argument from 2 copies to 1 move.
1798
1799         * wtf/CrossThreadTask.h:
1800         (WTF::CrossThreadTask::CrossThreadTask):
1801         (WTF::createCrossThreadTask):
1802
1803 2016-06-07  Filip Pizlo  <fpizlo@apple.com>
1804
1805         Implement Air::allocateStack() in ES6 to see how much of a bad idea that is
1806         https://bugs.webkit.org/show_bug.cgi?id=158318
1807
1808         Reviewed by Saam Barati.
1809
1810         * wtf/Insertion.h:
1811         (WTF::executeInsertions): I found a bug while rewriting this code in JS.
1812         * wtf/PrintStream.h:
1813         (WTF::PrintStream::print):
1814         (WTF::PrintStream::println): This is useful to have.
1815
1816 2016-06-07  Keith Rollin  <krollin@apple.com>
1817
1818         Remove all uses of PassRefPtr in WTF
1819         https://bugs.webkit.org/show_bug.cgi?id=157596
1820         <rdar://problem/26234391>
1821
1822         Reviewed by Chris Dumez.
1823
1824         Remove/update most interfaces that take or return PassRefPtrs.
1825         Remaining references include those in non-Cocoa implementations and
1826         those required for continued compatibility with modules that still use
1827         PassRefPtrs (specifically: Forward.h, RefPtr interoperability,
1828         SizeLimits.h, WorkQueue (Windows) DispatchQueueEfl,
1829         DispatchWorkItemEfl, and PassRefPtr itself).
1830
1831         Update calls to interfaces that no longer take or return PassRefPtrs.
1832
1833         Update adoptRef(T*) to return a RefPtr instead of a PassRefPtr and
1834         move it to RefPtr.h from PassRefPtr.h.
1835
1836         * wtf/MetaAllocator.cpp:
1837         (WTF::MetaAllocator::allocate):
1838         * wtf/MetaAllocator.h:
1839         * wtf/ParallelJobsGeneric.h:
1840         (WTF::ParallelEnvironment::ThreadPrivate::create):
1841         * wtf/text/AtomicStringImpl.cpp:
1842         (WTF::HashAndUTF8CharactersTranslator::translate):
1843         (WTF::SubstringTranslator::translate):
1844         * wtf/text/CString.cpp:
1845         (WTF::CStringBuffer::createUninitialized):
1846         * wtf/text/CString.h:
1847         * wtf/text/StringBuilder.cpp:
1848         (WTF::StringBuilder::reifyString):
1849         (WTF::StringBuilder::resize):
1850         (WTF::StringBuilder::reallocateBuffer<LChar>):
1851         (WTF::StringBuilder::reallocateBuffer<UChar>):
1852         * wtf/text/StringImpl.cpp:
1853         (WTF::StringImpl::reallocateInternal):
1854         (WTF::StringImpl::reallocate):
1855         (WTF::StringImpl::create8BitIfPossible):
1856         (WTF::StringImpl::createSymbol):
1857         (WTF::StringImpl::createNullSymbol):
1858         (WTF::StringImpl::convertToLowercaseWithoutLocale):
1859         (WTF::StringImpl::convertToUppercaseWithoutLocale):
1860         (WTF::StringImpl::convertToLowercaseWithLocale):
1861         (WTF::StringImpl::convertToUppercaseWithLocale):
1862         (WTF::StringImpl::convertASCIICase):
1863         * wtf/text/StringImpl.h:
1864         (WTF::StringImpl::StringImpl):
1865         (WTF::StringImpl::createSubstringSharingImpl):
1866         (WTF::StringImpl::tryCreateUninitialized):
1867         (WTF::StringImpl::extractFoldedStringInSymbol):
1868         * wtf/text/SymbolRegistry.cpp:
1869         (WTF::SymbolRegistry::symbolForKey):
1870         * wtf/text/WTFString.cpp:
1871         (WTF::String::substringSharingImpl):
1872         * wtf/text/WTFString.h:
1873         (WTF::String::String): Deleted.
1874         * wtf/text/cf/StringImplCF.cpp:
1875
1876 2016-06-07  Yusuke Suzuki  <utatane.tea@gmail.com>
1877
1878         [JSC] Do not allocate unnecessary UTF-8 string for encodeXXX functions
1879         https://bugs.webkit.org/show_bug.cgi?id=158416
1880
1881         Reviewed by Darin Adler and Geoffrey Garen.
1882
1883         * wtf/Bitmap.h:
1884         (WTF::Bitmap::size):
1885         (WTF::WordType>::Bitmap):
1886         (WTF::WordType>::get):
1887         (WTF::WordType>::set):
1888         (WTF::WordType>::testAndSet):
1889         (WTF::WordType>::testAndClear):
1890         (WTF::WordType>::concurrentTestAndSet):
1891         (WTF::WordType>::concurrentTestAndClear):
1892         (WTF::WordType>::clear):
1893         (WTF::WordType>::clearAll):
1894         (WTF::WordType>::nextPossiblyUnset):
1895         (WTF::WordType>::findRunOfZeros):
1896         (WTF::WordType>::count):
1897         (WTF::WordType>::isEmpty):
1898         (WTF::WordType>::isFull):
1899
1900 2016-06-06  Saam Barati  <sbarati@apple.com>
1901
1902         equal(StringView, StringView) for strings should have a fast path for pointer equality
1903         https://bugs.webkit.org/show_bug.cgi?id=158452
1904
1905         Reviewed by Andreas Kling.
1906
1907         JSBench does a lot of StringView::operator== on StringViews that have
1908         the same underlying characters pointer. This becomes hot inside JSBench
1909         because JSBench heavily stresses JSC's UnlinkedCodeCache with a high
1910         hit rate. This means that when we get a hit in the cache, we used to
1911         do the long form of string compare. However, we were often comparing
1912         two StringViews that had the same underlying buffer and length.
1913         This patch speeds this case up to run in constant time instead of
1914         linear time.
1915
1916         * wtf/text/StringCommon.h:
1917         (WTF::equalCommon):
1918         * wtf/text/StringImpl.h:
1919         (WTF::StringImpl::StringImpl):
1920         (WTF::StringImpl::data):
1921         * wtf/text/StringView.h:
1922         (WTF::StringView::data):
1923
1924 2016-06-04  Anders Carlsson  <andersca@apple.com>
1925
1926         Get rid of WorkItemWin
1927         https://bugs.webkit.org/show_bug.cgi?id=158381
1928
1929         Reviewed by Sam Weinig.
1930
1931         * wtf/PlatformWin.cmake:
1932         * wtf/WorkQueue.h:
1933         * wtf/win/WorkItemWin.cpp: Removed.
1934         (WTF::WorkItemWin::WorkItemWin): Deleted.
1935         (WTF::WorkItemWin::create): Deleted.
1936         (WTF::WorkItemWin::~WorkItemWin): Deleted.
1937         * wtf/win/WorkItemWin.h: Removed.
1938         (WTF::WorkItemWin::function): Deleted.
1939         (WTF::WorkItemWin::queue): Deleted.
1940         * wtf/win/WorkQueueWin.cpp:
1941         (WTF::WorkQueue::performWorkOnRegisteredWorkThread):
1942         (WTF::WorkQueue::dispatch):
1943
1944 2016-06-03  Anders Carlsson  <andersca@apple.com>
1945
1946         Get rid of HANDLE registration code in WorkQueueWin
1947         https://bugs.webkit.org/show_bug.cgi?id=158375
1948
1949         Reviewed by Darin Adler.
1950
1951         * wtf/WorkQueue.h:
1952         * wtf/win/WorkItemWin.cpp:
1953         (WTF::HandleWorkItem::HandleWorkItem): Deleted.
1954         (WTF::HandleWorkItem::createByAdoptingHandle): Deleted.
1955         (WTF::HandleWorkItem::~HandleWorkItem): Deleted.
1956         * wtf/win/WorkItemWin.h:
1957         (WTF::HandleWorkItem::setWaitHandle): Deleted.
1958         (WTF::HandleWorkItem::waitHandle): Deleted.
1959         * wtf/win/WorkQueueWin.cpp:
1960         (WTF::WorkQueue::handleCallback): Deleted.
1961         (WTF::WorkQueue::platformInvalidate): Deleted.
1962         (WTF::WorkQueue::unregisterWaitAndDestroyItemSoon): Deleted.
1963         (WTF::WorkQueue::unregisterWaitAndDestroyItemCallback): Deleted.
1964
1965 2016-06-03  Commit Queue  <commit-queue@webkit.org>
1966
1967         Unreviewed, rolling out r201663.
1968         https://bugs.webkit.org/show_bug.cgi?id=158374
1969
1970         Broke the Windows build (Requested by andersca on #webkit).
1971
1972         Reverted changeset:
1973
1974         "Rename NoncopyableFunction to Function"
1975         https://bugs.webkit.org/show_bug.cgi?id=158354
1976         http://trac.webkit.org/changeset/201663
1977
1978 2016-06-03  Anders Carlsson  <andersca@apple.com>
1979
1980         Rename NoncopyableFunction to Function
1981         https://bugs.webkit.org/show_bug.cgi?id=158354
1982
1983         Reviewed by Chris Dumez.
1984
1985         * WTF.xcodeproj/project.pbxproj:
1986         * wtf/CrossThreadTask.h:
1987         (WTF::CrossThreadTask::CrossThreadTask):
1988         * wtf/Function.h: Renamed from Source/WTF/wtf/NoncopyableFunction.h.
1989         * wtf/FunctionDispatcher.h:
1990         * wtf/MainThread.cpp:
1991         (WTF::functionQueue):
1992         (WTF::dispatchFunctionsFromMainThread):
1993         (WTF::callOnMainThread):
1994         * wtf/MainThread.h:
1995         * wtf/RunLoop.cpp:
1996         (WTF::RunLoop::performWork):
1997         (WTF::RunLoop::dispatch):
1998         * wtf/RunLoop.h:
1999         * wtf/WorkQueue.h:
2000         * wtf/cocoa/WorkQueueCocoa.cpp:
2001         (WTF::WorkQueue::dispatch):
2002         (WTF::WorkQueue::dispatchAfter):
2003         * wtf/efl/DispatchQueueWorkItemEfl.h:
2004         (WorkItem::WorkItem):
2005         (TimerWorkItem::create):
2006         (TimerWorkItem::TimerWorkItem):
2007         * wtf/efl/WorkQueueEfl.cpp:
2008         (WTF::WorkQueue::dispatch):
2009         (WTF::WorkQueue::dispatchAfter):
2010         * wtf/generic/RunLoopGeneric.cpp:
2011         (WTF::RunLoop::TimerBase::ScheduledTask::create):
2012         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
2013         (WTF::RunLoop::dispatchAfter):
2014         * wtf/generic/WorkQueueGeneric.cpp:
2015         (WorkQueue::dispatch):
2016         (WorkQueue::dispatchAfter):
2017         * wtf/glib/RunLoopGLib.cpp:
2018         (WTF::DispatchAfterContext::DispatchAfterContext):
2019         (WTF::RunLoop::dispatchAfter):
2020         * wtf/win/WorkItemWin.cpp:
2021         (WTF::WorkItemWin::WorkItemWin):
2022         (WTF::WorkItemWin::create):
2023         (WTF::HandleWorkItem::HandleWorkItem):
2024         (WTF::HandleWorkItem::createByAdoptingHandle):
2025         * wtf/win/WorkItemWin.h:
2026         (WTF::WorkItemWin::function):
2027         * wtf/win/WorkQueueWin.cpp:
2028         (WTF::WorkQueue::dispatch):
2029         (WTF::WorkQueue::dispatchAfter):
2030
2031 2016-06-03  Mark Lam  <mark.lam@apple.com>
2032
2033         Clean up how StackVisitor dumps its frames.
2034         https://bugs.webkit.org/show_bug.cgi?id=158316
2035
2036         Reviewed by Keith Miller.
2037
2038         Added an Indenter class what works with dataLog.
2039
2040         * WTF.xcodeproj/project.pbxproj:
2041         * wtf/Indenter.h: Added.
2042         (WTF::Indenter::Indenter):
2043         (WTF::Indenter::dump):
2044         (WTF::Indenter::operator++):
2045         (WTF::Indenter::operator--):
2046
2047 2016-06-02  Said Abou-Hallawa  <sabouhallawa@apple,com>
2048
2049         [iOS] PDFDocumentImage should not create a cached image larger than 4M pixels
2050         https://bugs.webkit.org/show_bug.cgi?id=157857
2051
2052         Reviewed by Darin Adler.
2053
2054         * wtf/StdLibExtras.h: Add a constant value for GB (2^30).
2055
2056 2016-06-02  Oliver Hunt  <oliver@apple.com>
2057
2058         JS parser incorrectly handles invalid utf8 in error messages.
2059         https://bugs.webkit.org/show_bug.cgi?id=158128
2060
2061         Reviewed by Saam Barati.
2062
2063         Add a new toStringWithLatin1Fallback that simply uses
2064         String::fromUTF8WithLatin1Fallback, so we can avoid the
2065         standard String::fromUTF8 null return.
2066
2067         * wtf/StringPrintStream.cpp:
2068         (WTF::StringPrintStream::toStringWithLatin1Fallback):
2069         * wtf/StringPrintStream.h:
2070
2071 2016-06-02  Keith Miller  <keith_miller@apple.com>
2072
2073         Unreviewed, reland r201532. The associated regressions have been fixed
2074         by r201584.
2075
2076 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
2077
2078         Use "= delete" for Locker(int) 
2079
2080         Rubber stamped by Saam Barati.
2081         
2082         See discussion: https://bugs.webkit.org/show_bug.cgi?id=158306#c8
2083
2084         * wtf/Locker.h:
2085         (WTF::Locker::Locker):
2086         (WTF::Locker::~Locker):
2087
2088 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
2089
2090         Make it harder to accidentally pass an integer to a locker.
2091
2092         Rubber stamped by Keith Miller.
2093         
2094         See here for the discussion: https://bugs.webkit.org/show_bug.cgi?id=158306#c3
2095
2096         * wtf/Locker.h:
2097         (WTF::Locker::Locker):
2098         (WTF::Locker::~Locker):
2099
2100 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
2101
2102         Make it easier to use NoLockingNecessary
2103         https://bugs.webkit.org/show_bug.cgi?id=158306
2104
2105         Reviewed by Keith Miller.
2106         
2107         An idiom that we borrowed from LLVM is that if a function requires a lock to be held, we
2108         have it take a const Locker& as its first argument. This may not communicate which lock is
2109         to be held, but it does help us to remember that some lock must be held. So far, it's been
2110         relatively easy to then figure out which lock. We've had bugs where we forgot to hold a
2111         lock but I don't remember the last time we had a bug where we grabbed the wrong lock.
2112         
2113         But sometimes, we know at the point where we call such a method that we actually don't
2114         need to hold any lock. This usually happens during object construction. If we're
2115         constructing some object then we usually know that we have not escaped it yet, so we don't
2116         need to waste time acquiring its lock. We could solve this by having a separate set of
2117         methods that don't do or require locking. This would be cumbersome, since usually for
2118         every variant that takes const Locker&, there is already one that doesn't, and that one
2119         will grab the lock for you. So this means having a third variant, that also doesn't take a
2120         const Locker&, but does no locking. That's pretty weird.
2121         
2122         So, we introduced NoLockingNecessary for situations like this. The idiom went like so:
2123         
2124             Locker<Whatever> locker(Locker<Whatever>::NoLockingNecessary)
2125             stuff->foo(locker);
2126         
2127         Usually though, there would be some distance between where the locker is defined and where
2128         it's used, so when you just look at stuff->foo(locker) in isolation you don't know if this
2129         is a real locker or a NoLockingNecessary cast. Also, requiring two lines for this just
2130         adds code.
2131         
2132         This change makes this easier. Now you can just do:
2133         
2134             stuff->foo(NoLockingNecessary).
2135         
2136         This is because NoLockingNecessary has been pulled out into the WTF namespace (and is
2137         usinged from the global namespace) and the Locker<> constructor that takes
2138         NoLockingNecessaryTag is now implicit.
2139         
2140         The only possible downside of this change is that people might use this idiom more
2141         frequently now that it's easier to use. I don't think that's a bad thing. I'm now
2142         convinced that this is not a bad idiom. When I was fixing an unrelated bug, I almost went
2143         the way of adding more locking to some core JSC data structures, and in the process, I
2144         needed to use NoLockingNecessary. It's clear that this is a general-purpose idiom and we
2145         should not impose artificial constraints on its use.
2146
2147         * wtf/Locker.h:
2148         (WTF::Locker::Locker):
2149         (WTF::Locker::~Locker):
2150
2151 2016-06-01  Brady Eidson  <beidson@apple.com>
2152
2153         Get rid of StringCapture.
2154         https://bugs.webkit.org/show_bug.cgi?id=158285
2155
2156         Reviewed by Chris Dumez.
2157
2158         * wtf/text/WTFString.h:
2159         (WTF::StringCapture::StringCapture): Deleted.
2160         (WTF::StringCapture::string): Deleted.
2161         (WTF::StringCapture::releaseString): Deleted.
2162         (WTF::StringCapture::operator=): Deleted.
2163
2164 2016-06-01  Benjamin Poulain  <bpoulain@apple.com>
2165
2166         [JSC] Some setters for components of Date do not timeClip() their result
2167         https://bugs.webkit.org/show_bug.cgi?id=158278
2168
2169         Unreviewed.
2170
2171         * wtf/DateMath.cpp:
2172         (WTF::equivalentYearForDST): Deleted.
2173         The assertion is bogus.
2174         As the comments above explains, the function is completely wrong for years
2175         outside [1900-2100].
2176         The tests passing large values for years are failing (year <= maxYear).
2177         The weird NaN test is a mystery. The old changelog does not explain it.
2178
2179 2016-05-31  Commit Queue  <commit-queue@webkit.org>
2180
2181         Unreviewed, rolling out r201363 and r201456.
2182         https://bugs.webkit.org/show_bug.cgi?id=158240
2183
2184         "40% regression on date-format-xparb" (Requested by
2185         keith_miller on #webkit).
2186
2187         Reverted changesets:
2188
2189         "LLInt should be able to cache prototype loads for values in
2190         GetById"
2191         https://bugs.webkit.org/show_bug.cgi?id=158032
2192         http://trac.webkit.org/changeset/201363
2193
2194         "get_by_id should support caching unset properties in the
2195         LLInt"
2196         https://bugs.webkit.org/show_bug.cgi?id=158136
2197         http://trac.webkit.org/changeset/201456
2198
2199 2016-05-31  Brady Eidson  <beidson@apple.com>
2200
2201         Make createCrossThreadTask() functions return on the stack instead of the heap.
2202         https://bugs.webkit.org/show_bug.cgi?id=158215
2203
2204         Reviewed by Darin Adler.
2205
2206         * WTF.xcodeproj/project.pbxproj:
2207
2208         * wtf/CrossThreadCopier.cpp:
2209
2210         * wtf/CrossThreadQueue.h: Added. A lightweight of MessageQueue that deals directly
2211           in objects instead of in std::unique_ptrs.
2212         (WTF::CrossThreadQueue::isKilled):
2213         (WTF::CrossThreadQueue<DataType>::append):
2214         (WTF::CrossThreadQueue<DataType>::waitForMessage):
2215         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
2216
2217         * wtf/CrossThreadTask.h:
2218         (WTF::createCrossThreadTask):
2219         (WTF::CrossThreadTask::CrossThreadTask): Deleted.
2220
2221 2016-05-30  Brady Eidson  <beidson@apple.com>
2222
2223         Move CrossThreadCopier/CrossThreadTask to WTF.
2224         https://bugs.webkit.org/show_bug.cgi?id=158207
2225
2226         Reviewed by Alex Christensen.
2227
2228         * WTF.xcodeproj/project.pbxproj:
2229         * wtf/CMakeLists.txt:
2230
2231         * wtf/CrossThreadCopier.cpp: Renamed from Source/WebCore/platform/CrossThreadCopier.cpp.
2232         * wtf/CrossThreadCopier.h: Renamed from Source/WebCore/platform/CrossThreadCopier.h.
2233         (WTF::CrossThreadCopierPassThrough::copy):
2234         
2235         * wtf/CrossThreadTask.h: Renamed from Source/WebCore/platform/CrossThreadTask.h.
2236         (WTF::CrossThreadTask::CrossThreadTask):
2237         (WTF::CrossThreadTask::performTask):
2238         (WTF::createCrossThreadTask):
2239
2240 2016-05-28  Chris Dumez  <cdumez@apple.com>
2241
2242         Templatize NoncopyableFunction class similarly to std::function
2243         https://bugs.webkit.org/show_bug.cgi?id=158185
2244
2245         Reviewed by Darin Adler.
2246
2247         Templatize NoncopyableFunction class similarly to std::function, so
2248         that it can be used as a std::function replacement in more places.
2249
2250         Previously, NoncopyableFunction could only support "void()" lambdas.
2251
2252         * wtf/FunctionDispatcher.h:
2253         * wtf/MainThread.cpp:
2254         (WTF::functionQueue):
2255         (WTF::dispatchFunctionsFromMainThread):
2256         (WTF::callOnMainThread):
2257         * wtf/MainThread.h:
2258         * wtf/NoncopyableFunction.h:
2259         * wtf/RunLoop.cpp:
2260         (WTF::RunLoop::performWork):
2261         (WTF::RunLoop::dispatch):
2262         * wtf/RunLoop.h:
2263         * wtf/WorkQueue.h:
2264         * wtf/cocoa/WorkQueueCocoa.cpp:
2265         (WTF::WorkQueue::dispatch):
2266         (WTF::WorkQueue::dispatchAfter):
2267         * wtf/efl/DispatchQueueWorkItemEfl.h:
2268         (WorkItem::WorkItem):
2269         (TimerWorkItem::create):
2270         (TimerWorkItem::TimerWorkItem):
2271         * wtf/efl/WorkQueueEfl.cpp:
2272         (WTF::WorkQueue::dispatch):
2273         (WTF::WorkQueue::dispatchAfter):
2274         * wtf/generic/RunLoopGeneric.cpp:
2275         (WTF::RunLoop::TimerBase::ScheduledTask::create):
2276         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
2277         (WTF::RunLoop::dispatchAfter):
2278         * wtf/generic/WorkQueueGeneric.cpp:
2279         (WorkQueue::dispatch):
2280         (WorkQueue::dispatchAfter):
2281         * wtf/glib/RunLoopGLib.cpp:
2282         (WTF::DispatchAfterContext::DispatchAfterContext):
2283         (WTF::RunLoop::dispatchAfter):
2284         * wtf/win/WorkItemWin.cpp:
2285         (WTF::WorkItemWin::WorkItemWin):
2286         (WTF::WorkItemWin::create):
2287         (WTF::HandleWorkItem::HandleWorkItem):
2288         (WTF::HandleWorkItem::createByAdoptingHandle):
2289         * wtf/win/WorkItemWin.h:
2290         (WTF::WorkItemWin::function):
2291         * wtf/win/WorkQueueWin.cpp:
2292         (WTF::WorkQueue::dispatch):
2293         (WTF::WorkQueue::dispatchAfter):
2294
2295 2016-05-28  Dan Bernstein  <mitz@apple.com>
2296
2297         Build fix for projects that include MainThread.h without including FastMalloc.h.
2298
2299         * wtf/NoncopyableFunction.h: Include FastMalloc.h from here.
2300
2301 2016-05-27  Chris Dumez  <cdumez@apple.com>
2302
2303         callOnMainThread() should not copy captured lambda variables
2304         https://bugs.webkit.org/show_bug.cgi?id=158166
2305
2306         Reviewed by Brady Eidson.
2307
2308         callOnMainThread() should not copy captured lambda variables. This
2309         function is usually called cross-thread with a lambda and copying
2310         the lambda (and its captured variables) can lead to thread-safety
2311         issues.
2312
2313         This patch updates callOnMainThread() to take a NoncopyableFunction&&
2314         in parameter instead of a std::function. The call sites of
2315         callOnMainThread() have also been updated to use C++14's lambda
2316         capture with initializer.
2317
2318         * WTF.xcodeproj/project.pbxproj:
2319
2320         * wtf/FunctionDispatcher.h:
2321         * wtf/NoncopyableFunction.h:
2322         - Moved NoncopyableFunction from FunctionDispatcher.h to
2323           NoncopyableFunction.h.
2324         - Add a new operator=(nullptr_t) operator to NoncopyableFunction to
2325           match std::function, as one of the call sites needed it.
2326
2327         * wtf/MainThread.cpp:
2328         (WTF::functionQueue):
2329         (WTF::dispatchFunctionsFromMainThread):
2330         (WTF::callOnMainThread):
2331         * wtf/MainThread.h:
2332
2333 2016-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>
2334
2335         Unreviewed, build fix for JSCOnly port.
2336         https://bugs.webkit.org/show_bug.cgi?id=158111
2337
2338         Use NoncopyableFunction instead of std::function<>.
2339
2340         * wtf/generic/RunLoopGeneric.cpp:
2341         (WTF::RunLoop::TimerBase::ScheduledTask::create):
2342         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
2343
2344 2016-05-27  Chris Dumez  <cdumez@apple.com>
2345
2346         WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables
2347         https://bugs.webkit.org/show_bug.cgi?id=158111
2348
2349         Reviewed by Darin Adler.
2350
2351         WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables.
2352         These are often used cross-thread and copying the captured lambda variables can be
2353         dangerous (e.g. we do not want to copy a String after calling isolatedCopy() upon
2354         capture).
2355
2356         This patch introduces a new NoncopyableFunction type that behaves similarly to
2357         std::function but guarantees that the passed-in lambda (and its captured variables)
2358         cannot be copied. This new NoncopyableFunction type is now used for
2359         WorkQueue / RunLoop's dispatch() / dispatchAfter() which are commonly used
2360         cross-thread. This should now allow us to call WorkQueue::dispatch() with a lambda
2361         that captures a String like so:
2362         [str = str.isolatedCopy()]() { }
2363
2364         Also note that even though this is not leveraged in this patch, NoncopyableFunction
2365         would allow us to capture move-only types such as std::unique_ptr as so:
2366         [p = WTFMove(p)]() { }
2367         This does not work if we convert the lambda into an std::function because
2368         std::function requires the lambda to be copyable, NoncopyableFunction does not.
2369
2370         * wtf/FunctionDispatcher.h:
2371         (WTF::CallableWrapperBase::~CallableWrapperBase):
2372         (WTF::NoncopyableFunction::NoncopyableFunction):
2373         (WTF::NoncopyableFunction::operator()):
2374         (WTF::NoncopyableFunction::operator bool):
2375         (WTF::NoncopyableFunction::operator=):
2376         * wtf/RunLoop.cpp:
2377         (WTF::RunLoop::performWork):
2378         (WTF::RunLoop::dispatch):
2379         * wtf/RunLoop.h:
2380         * wtf/WorkQueue.h:
2381         * wtf/cocoa/WorkQueueCocoa.cpp:
2382         (WTF::WorkQueue::dispatch):
2383         (WTF::WorkQueue::dispatchAfter):
2384         * wtf/efl/DispatchQueueWorkItemEfl.h:
2385         (WorkItem::WorkItem):
2386         (TimerWorkItem::create):
2387         (TimerWorkItem::TimerWorkItem):
2388         * wtf/efl/WorkQueueEfl.cpp:
2389         (WTF::WorkQueue::dispatch):
2390         (WTF::WorkQueue::dispatchAfter):
2391         * wtf/generic/RunLoopGeneric.cpp:
2392         (WTF::RunLoop::dispatchAfter):
2393         * wtf/generic/WorkQueueGeneric.cpp:
2394         (WorkQueue::dispatch):
2395         (WorkQueue::dispatchAfter):
2396         * wtf/glib/RunLoopGLib.cpp:
2397         (WTF::DispatchAfterContext::DispatchAfterContext):
2398         (WTF::RunLoop::dispatchAfter):
2399         * wtf/win/WorkItemWin.cpp:
2400         (WTF::WorkItemWin::WorkItemWin):
2401         (WTF::WorkItemWin::create):
2402         (WTF::HandleWorkItem::HandleWorkItem):
2403         (WTF::HandleWorkItem::createByAdoptingHandle):
2404         * wtf/win/WorkItemWin.h:
2405         (WTF::WorkItemWin::function):
2406         * wtf/win/WorkQueueWin.cpp:
2407         (WTF::WorkQueue::dispatch):
2408         (WTF::WorkQueue::timerCallback):
2409         (WTF::WorkQueue::dispatchAfter):
2410
2411 2016-05-26  Filip Pizlo  <fpizlo@apple.com>
2412
2413         ScopedLambda should have a lifetime story that makes sense to the compiler
2414         https://bugs.webkit.org/show_bug.cgi?id=158118
2415
2416         Reviewed by Mark Lam.
2417
2418         Prior to this change, there were two lifetime bugs in ScopedLambda:
2419         
2420         - scopedLambda(Functor&&) would bind Functor to const lambda&, so the resulting ScopedLambdaFunctor
2421           would hold a reference to the original lambda. This would have surprising behavior; for example
2422           it meant that this code was wrong:
2423           
2424           auto l = scopedLambda<things>([&] ...);
2425           
2426           The solution is to have explicit copy/move versions of scopedLambda() rather than rely on perfect
2427           forwarding.
2428         
2429         - ScopedLambdaFunctor did not override its copy or move operations, so if the compiler did not RVO
2430           scopedLambda(), it would return a ScopedLambdaFunctor whose m_arg points to a dead temporary
2431           ScopedLambdaFunctor instance. The solution is to have explicit copy/move constructors and
2432           operators, which preserve the invariant that ScopedLambda::m_arg points to this.
2433         
2434         One nice side-effect of all of these constructors and operators being explicit is that we can rely
2435         on WTFMove's excellent assertions, which helped catch the first issue.
2436         
2437         This reverts ParkingLot to use ScopedLambda again.
2438
2439         * wtf/ParkingLot.cpp:
2440         (WTF::ParkingLot::parkConditionallyImpl):
2441         (WTF::ParkingLot::unparkOne):
2442         (WTF::ParkingLot::unparkOneImpl):
2443         * wtf/ParkingLot.h:
2444         (WTF::ParkingLot::parkConditionally):
2445         (WTF::ParkingLot::unparkOne):
2446         * wtf/ScopedLambda.h:
2447         (WTF::scopedLambda):
2448
2449 2016-05-25  Anders Carlsson  <andersca@apple.com>
2450
2451         Get rid of WTF/Functional.h
2452         https://bugs.webkit.org/show_bug.cgi?id=158081
2453
2454         Reviewed by Chris Dumez.
2455
2456         This is no longer used, and removing it will free up the name for a new Functional.h implementation.
2457
2458         * WTF.xcodeproj/project.pbxproj:
2459         * wtf/Functional.h: Removed.
2460         (WTF::RefAndDeref::ref): Deleted.
2461         (WTF::RefAndDeref::deref): Deleted.
2462         (WTF::ParamStorageTraits::wrap): Deleted.
2463         (WTF::ParamStorageTraits::unwrap): Deleted.
2464         (WTF::ParamStorageTraits<PassRefPtr<T>>::wrap): Deleted.
2465         (WTF::ParamStorageTraits<PassRefPtr<T>>::unwrap): Deleted.
2466         (WTF::ParamStorageTraits<RefPtr<T>>::wrap): Deleted.
2467         (WTF::ParamStorageTraits<RefPtr<T>>::unwrap): Deleted.
2468         (WTF::ParamStorageTraits<RetainPtr<T>>::wrap): Deleted.
2469         (WTF::ParamStorageTraits<RetainPtr<T>>::unwrap): Deleted.
2470         (WTF::FunctionImplBase::~FunctionImplBase): Deleted.
2471         (WTF::FunctionBase::isNull): Deleted.
2472         (WTF::FunctionBase::FunctionBase): Deleted.
2473         (WTF::FunctionBase::impl): Deleted.
2474         (WTF::bind): Deleted.
2475         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
2476
2477 2016-05-24  Keith Miller  <keith_miller@apple.com>
2478
2479         LLInt should be able to cache prototype loads for values in GetById
2480         https://bugs.webkit.org/show_bug.cgi?id=158032
2481
2482         Reviewed by Filip Pizlo.
2483
2484         Add move constructors/initializers to Bags.
2485
2486         * wtf/Bag.h:
2487         (WTF::Bag::Bag):
2488         (WTF::Bag::operator=):
2489
2490 2016-05-24  Chris Dumez  <cdumez@apple.com>
2491
2492         Use auto for some of our lambda function parameters
2493         https://bugs.webkit.org/show_bug.cgi?id=158001
2494
2495         Reviewed by Darin Adler.
2496
2497         Use auto for some of our lambda function parameters now that we build with c++14.
2498
2499         * wtf/BubbleSort.h:
2500         (WTF::bubbleSort):
2501
2502 2016-05-23  Chris Dumez  <cdumez@apple.com>
2503
2504         Speed up move of vectors of POD types that have an inline buffer
2505         https://bugs.webkit.org/show_bug.cgi?id=158003
2506
2507         Reviewed by Benjamin Poulain.
2508
2509         When moving a vector of POD types that have an inline buffer, we would
2510         call std::swap() on the inline buffers. This unnecessarily slow because:
2511         1. It does not consider the vector size, and therefore may end up doing
2512            more work than necessary when the inline buffer is not full.
2513         2. In the "move" case, the destination buffer is completely empty so
2514            we don't really want a swap. We merely want the move the content of
2515            the source's inline buffer into the destination's one.
2516
2517         Instead of calling std::swap(), we now call swapInlineBuffers() which
2518         was already used for non-POD types. swapInlineBuffers() will do just
2519         what we want in the "move" case because swapBound is going to be 0.
2520         As a result, we will only move the content of the source buffer into
2521         the destination one. Also swapInlineBuffers() is aware of the source
2522         vector's size so it will only move what's strictly needed.
2523
2524         This seems to be a 2% progression on Dromaeo DOM attributes test.
2525
2526         * wtf/Vector.h:
2527         (WTF::VectorBuffer::swapInlineBuffer):
2528
2529 2016-05-22  Dan Bernstein  <mitz@apple.com>
2530
2531         Added NSEventMaskMouseMoved to AppKitCompatibilityDeclarations.h.
2532
2533         Rubber-stamped by Anders Carlsson.
2534
2535         * wtf/mac/AppKitCompatibilityDeclarations.h:
2536
2537 2016-05-22  Dan Bernstein  <mitz@apple.com>
2538
2539         Another attempt to fix the GTK build after my previous changes.
2540
2541         * wtf/StdLibExtras.h:
2542
2543 2016-05-22  Dan Bernstein  <mitz@apple.com>
2544
2545         Tried to fix the GTK build after r201257.
2546
2547         * wtf/StdLibExtras.h:
2548
2549 2016-05-22  Dan Bernstein  <mitz@apple.com>
2550
2551         Additional fixes for non-C++14 Apple projects that use WTF.
2552
2553         * wtf/StdLibExtras.h:
2554         (std::exchange):
2555
2556 2016-05-22  Dan Bernstein  <mitz@apple.com>
2557
2558         Additional fixes for non-C++14 Apple projects that use WTF.
2559
2560         * wtf/StdLibExtras.h:
2561         (std::make_unique):
2562         (std::move):
2563
2564 2016-05-22  Dan Bernstein  <mitz@apple.com>
2565
2566         Correct the previous build fix attempt.
2567
2568         * wtf/StdLibExtras.h:
2569
2570 2016-05-22  Dan Bernstein  <mitz@apple.com>
2571
2572         Build fix for non-C++14 Apple projects that use WTF.
2573
2574         Rubber-stamped by Anders.
2575
2576         * wtf/StdLibExtras.h:
2577
2578 2016-05-22  Brady Eidson  <beidson@apple.com>
2579
2580         Move to C++14.
2581         https://bugs.webkit.org/show_bug.cgi?id=157948
2582
2583         Reviewed by Michael Catanzaro.
2584
2585         * Configurations/Base.xcconfig:
2586         
2587         Delete a lot of "stl additions until we can adopt C++14" code:
2588         * wtf/StdLibExtras.h:
2589         (std::make_unique): Deleted.
2590         (std::index_sequence::size): Deleted.
2591         (std::exchange): Deleted.
2592         (std::literals::chrono_literals::operator _s): Deleted.
2593         (std::literals::chrono_literals::operator _ms): Deleted.
2594
2595 2016-05-20  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
2596
2597         Implement operator== for WeakPtr
2598         https://bugs.webkit.org/show_bug.cgi?id=157883
2599
2600         Reviewed by Chris Dumez.
2601
2602         Implement operator== and operator!= for WeakPtr and update code to use the operators.
2603
2604         * wtf/WeakPtr.h:
2605         (WTF::operator==):
2606         (WTF::operator!=):
2607
2608 2016-05-19  Chris Dumez  <cdumez@apple.com>
2609
2610         Improve compile-time assertions in is<>() / downcast<>()
2611         https://bugs.webkit.org/show_bug.cgi?id=157817
2612
2613         Reviewed by Darin Adler.
2614
2615         * wtf/Ref.h:
2616         (WTF::is):
2617         Add is<>() overloads taking a Ref<>() so that is<>() keeps working when
2618         passing a Ref<>(), despite the new static assertions on the input type.
2619         Some call sites were already leveraging this as it was working by
2620         implicitly converting the Ref<T> into a T&.
2621
2622         * wtf/TypeCasts.h:
2623         (WTF::is):
2624         (WTF::downcast):
2625         Make static assertions stricter in is<>() / downcast<>() to catch more
2626         cases where those are either unnecessary or incorrect.
2627
2628 2016-05-19  Filip Pizlo  <fpizlo@apple.com>
2629
2630         Unreviewed, fix all of the builds. I failed a second time.
2631
2632         * wtf/BackwardsGraph.h:
2633         (WTF::BackwardsGraph::rootName):
2634
2635 2016-05-19  Filip Pizlo  <fpizlo@apple.com>
2636
2637         Unreviewed, fix all of the builds. I had made an additional change that I did not mean to
2638         commit. This fixes it.
2639
2640         * wtf/BackwardsGraph.h:
2641         (WTF::BackwardsGraph::rootName):
2642         (WTF::BackwardsGraph::Set::dump):
2643         (WTF::BackwardsGraph::dump):
2644
2645 2016-05-18  Filip Pizlo  <fpizlo@apple.com>
2646
2647         DFG::LICMPhase shouldn't hoist type checks unless it knows that the check will succeed at the loop pre-header
2648         https://bugs.webkit.org/show_bug.cgi?id=144527
2649
2650         Reviewed by Saam Barati.
2651         
2652         This adds an adaptor for graphs called BackwardsGraph. The WTF graph framework is based on
2653         passing around a Graph template argument that follows the protocol shared by DFG::CFG,
2654         B3::CFG, and Air::CFG. These graphs always have a single root node but may have many leaf
2655         nodes. This new BackwardsGraph adaptor reverses the graph by creating a synthetic return
2656         node that it uses as the root in the inverted graph. This currently may resort to some
2657         heuristics in programs that have an infinite loop, but other than that, it'll work well in
2658         the general case.
2659         
2660         This allows us to say Dominators<BackwardsGraph<some graph type>> as a way of computing
2661         backwards dominators, which then allows us to easily answer control flow equivalence
2662         queries.
2663
2664         * CMakeLists.txt:
2665         * WTF.xcodeproj/project.pbxproj:
2666         * wtf/BackwardsGraph.h: Added.
2667         (WTF::BackwardsGraph::Node::Node):
2668         (WTF::BackwardsGraph::Node::root):
2669         (WTF::BackwardsGraph::Node::operator==):
2670         (WTF::BackwardsGraph::Node::operator!=):
2671         (WTF::BackwardsGraph::Node::operator bool):
2672         (WTF::BackwardsGraph::Node::isRoot):
2673         (WTF::BackwardsGraph::Node::node):
2674         (WTF::BackwardsGraph::Set::Set):
2675         (WTF::BackwardsGraph::Set::add):
2676         (WTF::BackwardsGraph::Set::remove):
2677         (WTF::BackwardsGraph::Set::contains):
2678         (WTF::BackwardsGraph::Set::dump):
2679         (WTF::BackwardsGraph::Map::Map):
2680         (WTF::BackwardsGraph::Map::clear):
2681         (WTF::BackwardsGraph::Map::size):
2682         (WTF::BackwardsGraph::Map::operator[]):
2683         (WTF::BackwardsGraph::BackwardsGraph):
2684         (WTF::BackwardsGraph::root):
2685         (WTF::BackwardsGraph::newMap):
2686         (WTF::BackwardsGraph::successors):
2687         (WTF::BackwardsGraph::predecessors):
2688         (WTF::BackwardsGraph::index):
2689         (WTF::BackwardsGraph::node):
2690         (WTF::BackwardsGraph::numNodes):
2691         (WTF::BackwardsGraph::dump):
2692         * wtf/Dominators.h:
2693         (WTF::Dominators::Dominators):
2694         (WTF::Dominators::dump):
2695         (WTF::Dominators::LengauerTarjan::computeDepthFirstPreNumbering):
2696         * wtf/GraphNodeWorklist.h:
2697         (WTF::GraphNodeWith::GraphNodeWith):
2698         (WTF::GraphNodeWith::operator bool):
2699         * wtf/StdLibExtras.h:
2700         (WTF::callStatelessLambda):
2701         (WTF::checkAndSet):
2702
2703 2016-05-18  Saam barati  <sbarati@apple.com>
2704
2705         StringBuilder::appendQuotedJSONString doesn't properly protect against the math it's doing. Make the math fit the assertion.
2706         https://bugs.webkit.org/show_bug.cgi?id=157868
2707
2708         Reviewed by Benjamin Poulain.
2709
2710         appendQuotedJSONString was rounding up to the next power of two when resizing
2711         its buffer. Lets call the allocation size X. If X > 2^31, then
2712         roundUpToPowerOfTwo(X) == 0. This patch fixes this by making the
2713         assertion reflect what the code is doing. We now allocate to a size
2714         of X = std::max(maximumCapacityRequired , roundUpToPowerOfTwo(maximumCapacityRequired))
2715
2716         * wtf/text/StringBuilder.cpp:
2717         (WTF::StringBuilder::appendQuotedJSONString):
2718
2719 2016-05-17  Joseph Pecoraro  <pecoraro@apple.com>
2720
2721         REGRESSION(r192855): Math.random() always produces the same first 7 decimal points the first two invocations
2722         https://bugs.webkit.org/show_bug.cgi?id=157805
2723         <rdar://problem/26327851>
2724
2725         Reviewed by Geoffrey Garen.
2726
2727         * wtf/WeakRandom.h:
2728         (WTF::WeakRandom::setSeed):
2729         Advance once to randomize the 32bit seed across the 128bit state
2730         and avoid re-using 64bits of state in the second advance.
2731
2732 2016-05-17  Dean Jackson  <dino@apple.com>
2733
2734         Remove ES6_GENERATORS flag
2735         https://bugs.webkit.org/show_bug.cgi?id=157815
2736         <rdar://problem/26332894>
2737
2738         Reviewed by Geoffrey Garen.
2739
2740         This flag isn't needed. Generators are enabled everywhere and
2741         part of a stable specification.
2742
2743         * wtf/FeatureDefines.h:
2744
2745 2016-05-17  Filip Pizlo  <fpizlo@apple.com>
2746
2747         WTF should know about Language
2748         https://bugs.webkit.org/show_bug.cgi?id=157756
2749
2750         Reviewed by Geoffrey Garen.
2751
2752         This contains two changes:
2753
2754         - Move everything that WebCore's logic for getting the platform user preferred language
2755           depended on into WTF. This means CFBundleSPI.h and BlockObjCExceptions.h|cpp.
2756
2757         - Move WebCore::platformUserPreferredLanguages() to WTF::platformUserPreferredLanguages().
2758           This is needed by https://bugs.webkit.org/show_bug.cgi?id=157755, which will make JSC
2759           use this to detect the platform user preferred language when running standalone.
2760
2761         Moving the dependencies accounts for a huge chunk of this change, since we have to rewire
2762         all of the references to those headers in all of WebKit.
2763
2764         Moving platformUserPreferredLanguages() is mostly easy except for the weird callback.
2765         That function would call languageDidChange(), which needs to stay in WebCore. So, this
2766         gives WebCore the ability to register a languageDidChange callback. Other than this new
2767         logic, the code being added to WTF is just being lifted out of WebCore.
2768
2769         * WTF.xcodeproj/project.pbxproj:
2770         * wtf/BlockObjCExceptions.h: Added.
2771         * wtf/BlockObjCExceptions.mm: Added.
2772         (ReportBlockedObjCException):
2773         * wtf/PlatformEfl.cmake:
2774         * wtf/PlatformGTK.cmake:
2775         * wtf/PlatformJSCOnly.cmake:
2776         * wtf/PlatformMac.cmake:
2777         * wtf/PlatformUserPreferredLanguages.h: Added.
2778         * wtf/PlatformUserPreferredLanguagesMac.mm: Added.
2779         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
2780         (WTF::preferredLanguages):
2781         (+[WTFLanguageChangeObserver languagePreferencesDidChange:]):
2782         (WTF::httpStyleLanguageCode):
2783         (WTF::isValidICUCountryCode):
2784         (WTF::platformUserPreferredLanguages):
2785         * wtf/PlatformUserPreferredLanguagesUnix.cpp: Added.
2786         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
2787         (WTF::platformLanguage):
2788         (WTF::platformUserPreferredLanguages):
2789         * wtf/PlatformUserPreferredLanguagesWin.cpp: Added.
2790         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
2791         (WTF::localeInfo):
2792         (WTF::platformLanguage):
2793         (WTF::platformUserPreferredLanguages):
2794         * wtf/PlatformWin.cmake:
2795         * wtf/spi/cf: Added.
2796         * wtf/spi/cf/CFBundleSPI.h: Added.
2797
2798 2016-05-17  Youenn Fablet  <youenn.fablet@crf.canon.fr>
2799
2800         DOMPromise should only restrict the resolution type
2801         https://bugs.webkit.org/show_bug.cgi?id=157307
2802
2803         Reviewed by Darin Adler.
2804
2805         * wtf/Ref.h: Adding static constexpr to ease detection of Ref for templates.
2806         * wtf/RefPtr.h: Ditto.
2807
2808 2016-05-16  Michael Saboff  <msaboff@apple.com>
2809
2810         ARMV7K: Crash at JavaScriptCore: WTF::ScopedLambdaFunctor<bool
2811         https://bugs.webkit.org/show_bug.cgi?id=157781
2812
2813         Reviewed by Filip Pizlo.
2814
2815         Replaced use of ScopedLambda in locking code with std::function much as it was
2816         before change set 199760 to work around what appears to be a clang compiler issue.
2817
2818         * wtf/ParkingLot.cpp:
2819         (WTF::ParkingLot::parkConditionallyImpl):
2820         (WTF::ParkingLot::unparkOne):
2821         (WTF::ParkingLot::unparkAll):
2822         (WTF::ParkingLot::forEach):
2823         (WTF::ParkingLot::unparkOneImpl): Deleted.
2824         (WTF::ParkingLot::forEachImpl): Deleted.
2825         * wtf/ParkingLot.h:
2826         (WTF::ParkingLot::parkConditionally):
2827         (WTF::ParkingLot::unparkOne): Deleted.
2828         (WTF::ParkingLot::forEach): Deleted.
2829
2830 2016-05-15  Chris Dumez  <cdumez@apple.com>
2831
2832         Use more references in JS wrappers related code
2833         https://bugs.webkit.org/show_bug.cgi?id=157721
2834
2835         Reviewed by Darin Adler.
2836
2837         Add new static_reference_cast() overload that takes a Ref<U>&& in
2838         in order to downcast Ref<> types without causing ref-counting
2839         churn.
2840
2841         * wtf/Ref.h:
2842         (WTF::static_reference_cast):
2843
2844 2016-05-13  Chris Dumez  <cdumez@apple.com>
2845
2846         Unreviewed, rolling out r200837.
2847
2848         Seems to have regressed Speedometer and JetStream on iOS
2849
2850         Reverted changeset:
2851
2852         "DOMPromise should only restrict the resolution type"
2853         https://bugs.webkit.org/show_bug.cgi?id=157307
2854         http://trac.webkit.org/changeset/200837
2855
2856 2016-05-13  Beth Dakin  <bdakin@apple.com>
2857
2858         Add dyldSPI.h
2859         https://bugs.webkit.org/show_bug.cgi?id=157401
2860         -and corresponding-
2861         rdar://problem/26253396
2862
2863         Reviewed by Darin Adler.
2864
2865         New header for dyld spi.
2866         * WTF.xcodeproj/project.pbxproj:
2867         * wtf/spi/darwin/dyldSPI.h: Added.
2868
2869 2016-05-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>
2870
2871         DOMPromise should only restrict the resolution type
2872         https://bugs.webkit.org/show_bug.cgi?id=157307
2873
2874         Reviewed by Darin Adler.
2875
2876         * wtf/Ref.h: Adding static constexpr to ease detection of Ref for templates.
2877         * wtf/RefPtr.h: Ditto.
2878
2879 2016-05-12  Daniel Bates  <dabates@apple.com>
2880
2881         Use SecTask SPI to retrieve code signing identifier for user directory suffix
2882         https://bugs.webkit.org/show_bug.cgi?id=157570
2883
2884         Reviewed by Darin Adler.
2885         <rdar://problem/25706517>
2886
2887         Forward declare SPI SecTaskCopySigningIdentifier().
2888
2889         * wtf/spi/cocoa/SecuritySPI.h:
2890
2891 2016-05-12  Csaba Osztrogonác  <ossy@webkit.org>
2892
2893         Remove ENABLE(ES6_ARROWFUNCTION_SYNTAX) guards
2894         https://bugs.webkit.org/show_bug.cgi?id=157564
2895
2896         Reviewed by Darin Adler.
2897
2898         * wtf/FeatureDefines.h:
2899
2900 2016-05-10  Filip Pizlo  <fpizlo@apple.com>
2901
2902         Internal JSC profiler should have a timestamped log of events for each code block
2903         https://bugs.webkit.org/show_bug.cgi?id=157538
2904
2905         Reviewed by Benjamin Poulain.
2906
2907         * wtf/PrintStream.h:
2908         (WTF::PrintStream::print):
2909
2910 2016-05-10  Chris Dumez  <cdumez@apple.com>
2911
2912         Get rid of a lot of calls to RefPtr::release()
2913         https://bugs.webkit.org/show_bug.cgi?id=157505
2914
2915         Reviewed by Alex Christensen.
2916
2917         Get rid of a lot of calls to RefPtr::release() and use WTFMove() instead.
2918
2919         * wtf/text/AtomicStringImpl.cpp:
2920         (WTF::HashAndUTF8CharactersTranslator::translate):
2921         * wtf/text/CString.cpp:
2922         (WTF::CString::copyBufferIfNeeded):
2923         * wtf/text/StringBuilder.cpp:
2924         (WTF::StringBuilder::allocateBuffer):
2925         (WTF::StringBuilder::allocateBufferUpConvert):
2926         (WTF::StringBuilder::shrinkToFit):
2927         * wtf/text/WTFString.cpp:
2928         (WTF::String::append):
2929         (WTF::String::insert):
2930         (WTF::String::removeInternal):
2931         * wtf/text/WTFString.h:
2932         (WTF::String::String):
2933         (WTF::String::operator=):
2934         (WTF::String::releaseImpl):
2935         (WTF::String::isNull): Deleted.
2936
2937 2016-05-08  Chris Dumez  <cdumez@apple.com>
2938
2939         [COCOA] Disable HAVE_DTRACE at build time
2940         https://bugs.webkit.org/show_bug.cgi?id=157433
2941         <rdar://problem/26148841>
2942
2943         Reviewed by Mark Lam.
2944
2945         Disable HAVE_DTRACE on COCOA since it is mostly unused and has a performance
2946         impact, at least on iOS.
2947
2948         * wtf/Platform.h:
2949
2950 2016-05-08  Chris Dumez  <cdumez@apple.com>
2951
2952         [Bindings] Simplify [RequiresExistingAtomicString] IDL extended attribute handling
2953         https://bugs.webkit.org/show_bug.cgi?id=157465
2954
2955         Reviewed by Darin Adler.
2956
2957         Add an AtomicString(RefPtr<AtomicStringImpl>&&) constructor that is now
2958         used by the bindings when [RequiresExistingAtomicString] is used. This
2959         is more efficient than using AtomicString(AtomicStringImpl*) as the
2960         caller has a RefPtr<AtomicStringImpl> and is consistent with the
2961         pre-existing String(RefPtr<AtomicStringImpl>&&) constructor.
2962
2963         * wtf/text/AtomicString.h:
2964         (WTF::AtomicString::AtomicString):
2965
2966 2016-05-08  Darin Adler  <darin@apple.com>
2967
2968         * wtf/text/WTFString.h: Remove pragma once. Not working for some reason.
2969
2970 2016-05-08  Darin Adler  <darin@apple.com>
2971
2972         Follow-up to that last patch (missed review comments).
2973
2974         * wtf/text/WTFString.h: Use nullptr instead of 0 as needed. Also use pragma once.
2975
2976 2016-05-08  Darin Adler  <darin@apple.com>
2977
2978         Change EventSource constructor to take an IDL dictionary instead of a WebCore::Dictionary
2979         https://bugs.webkit.org/show_bug.cgi?id=157459
2980
2981         Reviewed by Chris Dumez.
2982
2983         * wtf/text/WTFString.h: Export a symbol now used in WebCore.
2984
2985 2016-05-02  Sam Weinig  <sam@webkit.org>
2986
2987         On platforms that support it, use a SecTrustRef as the basis of CertificateInfo instead of a chain of SecCertificateRefs.
2988         https://bugs.webkit.org/show_bug.cgi?id=157220
2989
2990         Reviewed by Darin Adler.
2991
2992         * wtf/Platform.h:
2993         Add support for HAVE(SEC_TRUST_SERIALIZATION).
2994
2995         * wtf/spi/cocoa/SecuritySPI.h:
2996         Add SPI access to SecTrustSerialize and SecTrustDeserialize.
2997
2998 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
2999
3000         Add HLE locks and synchronic TTAS locks to the ToyLocks benchmark suite
3001         https://bugs.webkit.org/show_bug.cgi?id=157367
3002
3003         Rubber stamped by Benjamin Poulain.
3004         
3005         Turns out they are both a lot slower than WTF::Lock. The HLE lock is written according to Intel's
3006         documentation. The synchronic lock follows the algorithm of the "ttas_lock" in the synchronic
3007         test.hpp.
3008
3009         * benchmarks/ToyLocks.h:
3010
3011 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
3012
3013         Add a few more WTF locking benchmarks
3014         https://bugs.webkit.org/show_bug.cgi?id=157365
3015
3016         Rubber stamped by Benjamin Poulain.
3017         
3018         Factors out our toy locks into ToyLocks.h and adds a new test (LockFairnessTest) that measures
3019         the fairness of locks.
3020         
3021         The result: WTF::Lock is pretty fair enough.
3022
3023         * benchmarks/LockFairnessTest.cpp: Added.
3024         (main):
3025         * benchmarks/LockSpeedTest.cpp:
3026         (main):
3027         * benchmarks/ToyLocks.h: Added.
3028
3029 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
3030
3031         Speed up JSGlobalObject initialization by making some properties lazy
3032         https://bugs.webkit.org/show_bug.cgi?id=157045
3033
3034         Reviewed by Keith Miller.
3035         
3036         This WTF change is at the heart of a large JSC change. In JSC I found myself wanting to
3037         do this a lot:
3038         
3039             static void callback(Foo& foo) { ... }
3040         
3041             foo.setCallback(callback);
3042         
3043         But that's not very nice to write if many different setCallback() calls are inside of the
3044         same very large function: you'll have to have a lot of static function definitions in
3045         one part of the file, and then a bunch of setCallback() calls in another part. It's hard
3046         to reason about what's going on with such code.
3047         
3048         So what if you wrote this instead:
3049         
3050             foo.setCallback([] (Foo& foo) { ... });
3051         
3052         Much nicer! There is a standard way to do this: lambdas that are stateless are
3053         convertible to function pointers. This change also offers another approach that is a bit
3054         more general.
3055         
3056         These additions to WTF help you do it:
3057         
3058         isStatelessLambda<Func>(): tells you if Func is a stateless lambda. This uses is_empty to
3059         test if the lambda is stateless. This turns out to be a stronger property than
3060         convertibility to function pointers. For example, a function pointer is convertible to a
3061         function pointer, but it is definitely stateful: you cannot successfully call it if you
3062         only has its type. On the other hand, a stateless lambda is really stateless in the sense
3063         that you only need its type to call it.
3064         
3065         callStatelessLambda<ResultType, Func>(Arguments&&...): calls the given stateless lambda.
3066         
3067         JSC uses these to build up some sophisticated lazy-initialization APIs. The use of
3068         statelessness allows JSC to combine a lambda with other logic into a single function
3069         pointer.
3070
3071         * wtf/StdLibExtras.h:
3072         (WTF::isStatelessLambda):
3073         (WTF::callStatelessLambda):
3074
3075 2016-05-04  Per Arne Vollan  <peavo@outlook.com>
3076
3077         [Win] Use NeverDestroyed template.
3078         https://bugs.webkit.org/show_bug.cgi?id=157345
3079
3080         Reviewed by Darin Adler.
3081
3082         * wtf/ThreadingWin.cpp:
3083         (WTF::threadMapMutex):
3084         (WTF::threadMap):
3085
3086 2016-05-04  Chris Dumez  <cdumez@apple.com>
3087
3088         Unreviewed, rolling out r200383 and r200406.
3089
3090         Seems to have caused crashes on iOS / ARMv7s
3091
3092         Reverted changesets:
3093
3094         "Speed up JSGlobalObject initialization by making some
3095         properties lazy"
3096         https://bugs.webkit.org/show_bug.cgi?id=157045
3097         http://trac.webkit.org/changeset/200383
3098
3099         "REGRESSION(r200383): Setting lazily initialized properties
3100         across frame boundaries crashes"
3101         https://bugs.webkit.org/show_bug.cgi?id=157333
3102         http://trac.webkit.org/changeset/200406
3103
3104 2016-05-03  Filip Pizlo  <fpizlo@apple.com>
3105
3106         Speed up JSGlobalObject initialization by making some properties lazy
3107         https://bugs.webkit.org/show_bug.cgi?id=157045
3108
3109         Reviewed by Keith Miller.
3110         
3111         This WTF change is at the heart of a large JSC change. In JSC I found myself wanting to
3112         do this a lot:
3113         
3114             static void callback(Foo& foo) { ... }
3115         
3116             foo.setCallback(callback);
3117         
3118         But that's not very nice to write if many different setCallback() calls are inside of the
3119         same very large function: you'll have to have a lot of static function definitions in
3120         one part of the file, and then a bunch of setCallback() calls in another part. It's hard
3121         to reason about what's going on with such code.
3122         
3123         So what if you wrote this instead:
3124         
3125             foo.setCallback([] (Foo& foo) { ... });
3126         
3127         Much nicer! There is a standard way to do this: lambdas that are stateless are
3128         convertible to function pointers. This change also offers another approach that is a bit
3129         more general.
3130         
3131         These additions to WTF help you do it:
3132         
3133         isStatelessLambda<Func>(): tells you if Func is a stateless lambda. This uses is_empty to
3134         test if the lambda is stateless. This turns out to be a stronger property than
3135         convertibility to function pointers. For example, a function pointer is convertible to a
3136         function pointer, but it is definitely stateful: you cannot successfully call it if you
3137         only has its type. On the other hand, a stateless lambda is really stateless in the sense
3138         that you only need its type to call it.
3139         
3140         callStatelessLambda<ResultType, Func>(Arguments&&...): calls the given stateless lambda.
3141         
3142         JSC uses these to build up some sophisticated lazy-initialization APIs. The use of
3143         statelessness allows JSC to combine a lambda with other logic into a single function
3144         pointer.
3145
3146         * wtf/StdLibExtras.h:
3147         (WTF::isStatelessLambda):
3148         (WTF::callStatelessLambda):
3149
3150 2016-05-03  Per Arne Vollan  <peavo@outlook.com>
3151
3152         [Win] Remove Windows XP Compatibility Requirements
3153         https://bugs.webkit.org/show_bug.cgi?id=152899
3154
3155         Reviewed by Brent Fulgham.
3156
3157         Windows XP is not supported anymore, we can remove workarounds.
3158
3159         * wtf/Assertions.cpp:
3160
3161 2016-05-03  Per Arne Vollan  <peavo@outlook.com>
3162
3163         [Win] Warning fix.
3164         https://bugs.webkit.org/show_bug.cgi?id=157309
3165
3166         Reviewed by Darin Adler.
3167
3168         MSVC gives a warning when converting from signed to unsigned.
3169
3170         * wtf/SmallPtrSet.h:
3171         (WTF::SmallPtrSet::begin):
3172
3173 2016-05-02  Brady Eidson  <beidson@apple.com>
3174
3175         Add the ability to accumulate logs for specific logging channels to help diagnose test timeouts.
3176         https://bugs.webkit.org/show_bug.cgi?id=157274
3177
3178         Reviewed by Alex Christensen.
3179
3180         This patch changes WTFLog to add the logging string to the logging accumulator if the logging channel says so.
3181         It also adds support for using this new accumulation mechanism.
3182
3183         * WTF.xcodeproj/project.pbxproj:
3184
3185         * wtf/Assertions.cpp:
3186         (WTF::resetAccumulatedLogs):
3187         (WTF::getAndResetAccumulatedLogs):
3188         * wtf/Assertions.h:
3189
3190         * wtf/LoggingAccumulator.h: Added. Expose functions to get accumulated logs and to reset the accumulation.
3191
3192         * wtf/text/WTFString.cpp:
3193         (WTF::String::format): Update to handle %@ on CF (Well, really ObjC) platforms.
3194
3195 2016-05-02  Per Arne Vollan  <peavo@outlook.com>
3196
3197         [Win] Enable IndexedDB.
3198         https://bugs.webkit.org/show_bug.cgi?id=157192
3199
3200         Reviewed by Brent Fulgham.
3201
3202         Fix compile errors when format specifiers like PRIu64 is used, by defining
3203         __STDC_FORMAT_MACROS before inttypes.h is included.
3204
3205         * wtf/Platform.h: 
3206
3207 2016-04-27  Brady Eidson  <beidson@apple.com>
3208
3209         Modern IDB: Implement native IDBFactory.getAllDatabaseNames for WebInspector.
3210         https://bugs.webkit.org/show_bug.cgi?id=157072
3211
3212         Reviewed by Alex Christensen.
3213
3214         Moved these Hex Digit utilities from WebCore URL code (???), 
3215         and add a checked version of getting the hex digit value.
3216         
3217         * wtf/HexNumber.h:
3218         (WTF::isHexDigit):
3219         (WTF::uncheckedHexDigit):
3220         (WTF::hexDigitValue):
3221         (WTF::uncheckedHexDigitValue):
3222
3223 2016-04-25  Ryosuke Niwa  <rniwa@webkit.org>
3224
3225         Remove the build flag for template elements
3226         https://bugs.webkit.org/show_bug.cgi?id=157022
3227
3228         Reviewed by Daniel Bates.
3229
3230         * wtf/FeatureDefines.h:
3231
3232 2016-04-25  Fujii Hironori  <Hironori.Fujii@sony.com>
3233
3234         Heap corruption is detected when destructing JSGlobalObject
3235         https://bugs.webkit.org/show_bug.cgi?id=156831
3236
3237         Reviewed by Mark Lam.
3238
3239         WebKit uses CRT static library on Windows.  Each copy of the CRT
3240         library has its own heap manager, allocating memory in one CRT
3241         library and passing the pointer across a DLL boundary to be freed
3242         by a different copy of the CRT library is a potential cause for
3243         heap corruption.
3244
3245           Potential Errors Passing CRT Objects Across DLL Boundaries
3246           <https://msdn.microsoft.com/en-us/library/ms235460(v=vs.140).aspx>
3247
3248         JSGlobalObject::createRareDataIfNeeded is inlined but
3249         JSGlobalObject::~JSGlobalObject is not.  Then, the heap of
3250         allocating JSGlobalObjectRareData is WebKit.dll, but deallocating
3251         JavaScriptCore.dll.  Adding WTF_MAKE_FAST_ALLOCATED to
3252         JSGlobalObjectRareData ensures heap consistency of it.  WTF::Lock
3253         also needs WTF_MAKE_FAST_ALLOCATED because it is allocated from
3254         the inlined constructor of JSGlobalObjectRareData.
3255
3256         * wtf/Lock.h: Add WTF_MAKE_FAST_ALLOCATED.
3257
3258 2016-04-21  Saam barati  <sbarati@apple.com>
3259
3260         Lets do less locking of symbol tables in the BytecodeGenerator where we don't have race conditions
3261         https://bugs.webkit.org/show_bug.cgi?id=156821
3262
3263         Reviewed by Filip Pizlo.
3264
3265         This patch introduces a new constructor for Locker which implies no
3266         locking is necessary. You instantiate such a locker like so:
3267         `Locker<Lock> locker(Locker<Lock>::NoLockingNecessary);`
3268
3269         This is useful to for very specific places when it is not yet
3270         required to engage in a specified locking protocol. As an example,
3271         we use this in JSC when we allocate a particular object that
3272         engages in a locking protocol with the concurrent compiler thread,
3273         but before a concurrent compiler thread that could have access
3274         to the object exists.
3275
3276         * wtf/Locker.h:
3277         (WTF::Locker::Locker):
3278         (WTF::Locker::~Locker):
3279
3280 2016-04-19  Michael Saboff  <msaboff@apple.com>
3281
3282         iTunes crashing JavaScriptCore.dll
3283         https://bugs.webkit.org/show_bug.cgi?id=156647
3284
3285         Reviewed by Filip Pizlo.
3286
3287         If a thread was created without using the WTF thread apis and that thread uses
3288         a JavaScript VM and that thread exits with the VM still around, JSC won't know
3289         that the thread has exited.  Currently, we use ThreadSpecificThreadExit() to
3290         clean up any thread specific keys.  Cleaning up these keys is how JSC is
3291         notified of a thread exit.  We only call ThreadSpecificThreadExit() from
3292         wtfThreadEntryPoint() when the thread entry point function returns.
3293         This mechanism was put in place for Windows because we layer the WTF::ThreadSpecific
3294         functionality on top of TLS (Thread Local Storage), but TLS doesn't have
3295         a thread exiting callback the way that pthread_create_key does.
3296
3297         The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
3298         Windows allows multiple fibers per thread, WebKit is not designed to work with a
3299         multiple fibers per thread.  When there is only one fiber per thread, FLS works just
3300         like TLS, but it has the destroy callback.
3301
3302         I restructured the Windows version of WTF::ThreadSpecific to be almost the same
3303         as the pthread version.  Added THREAD_SPECIFIC_CALL to set the correct
3304         calling convenction for Windows 32 bit.
3305
3306         * wtf/ThreadSpecific.h:
3307         (WTF::threadSpecificKeyCreate):
3308         (WTF::threadSpecificKeyDelete):
3309         (WTF::threadSpecificSet):
3310         (WTF::threadSpecificGet):
3311         (WTF::ThreadSpecific<T>::ThreadSpecific):
3312         (WTF::ThreadSpecific<T>::~ThreadSpecific):
3313         (WTF::ThreadSpecific<T>::get):
3314         (WTF::ThreadSpecific<T>::set):
3315         (WTF::ThreadSpecific<T>::destroy):
3316         Restructured to use FLS.  Renamed TLS* to FLS*.
3317
3318         * wtf/ThreadSpecificWin.cpp:
3319         (WTF::flsKeyCount):
3320         (WTF::flsKeys):
3321         Renamed from tlsKey*() to flsKey*().
3322
3323         (WTF::destructorsList): Deleted.
3324         (WTF::destructorsMutex): Deleted.
3325         (WTF::PlatformThreadSpecificKey::PlatformThreadSpecificKey): Deleted.
3326         (WTF::PlatformThreadSpecificKey::~PlatformThreadSpecificKey): Deleted.
3327         (WTF::PlatformThreadSpecificKey::setValue): Deleted.
3328         (WTF::PlatformThreadSpecificKey::value): Deleted.
3329         (WTF::PlatformThreadSpecificKey::callDestructor): Deleted.
3330         (WTF::tlsKeyCount): Deleted.
3331         (WTF::tlsKeys): Deleted.
3332         (WTF::threadSpecificKeyCreate): Deleted.
3333         (WTF::threadSpecificKeyDelete): Deleted.
3334         (WTF::threadSpecificSet): Deleted.
3335         (WTF::threadSpecificGet): Deleted.
3336         (WTF::ThreadSpecificThreadExit): Deleted.
3337
3338         * wtf/ThreadingWin.cpp:
3339         (WTF::wtfThreadEntryPoint): Eliminated call to ThreadSpecificThreadExit.
3340
3341 2016-04-19  Filip Pizlo  <fpizlo@apple.com>
3342
3343         Add more locking algorithms to the LockSpeedTest.
3344
3345         Rubber stamped by Saam Barati.
3346
3347         * benchmarks/LockSpeedTest.cpp:
3348         (main):
3349
3350 2016-04-19  Filip Pizlo  <fpizlo@apple.com>
3351
3352         Clean up the ParkingLot uparking API a bit
3353         https://bugs.webkit.org/show_bug.cgi?id=156746
3354
3355         Reviewed by Saam Barati and Geoffrey Garen.
3356         
3357         Previously, unparkOne() would either return a boolean to tell you if there are any more threads on
3358         the queue or it would pass your callback a pair of booleans - one to tell if a thread was unparked
3359         and another to tell if there are any more threads. This was an annoying inconsistency. What if you
3360         wanted to know if unparkOne() unparked a thread but you don't care to use callbacks?
3361
3362         This fixes unparkOne() to use a struct called UnparkResult for both of its variants. This makes the
3363         code a bit cleaner.
3364
3365         * wtf/Atomics.h: Add some more atomic ops.
3366         (WTF::Atomic::exchangeAndAdd):
3367         (WTF::Atomic::exchange):
3368         * wtf/Condition.h: Change calls to unparkOne().
3369         (WTF::ConditionBase::notifyOne):
3370         * wtf/Lock.cpp: Change calls to unparkOne().
3371         (WTF::LockBase::unlockSlow):
3372         * wtf/ParkingLot.cpp:
3373         (WTF::ParkingLot::parkConditionally):
3374         (WTF::ParkingLot::unparkOne):
3375         * wtf/ParkingLot.h: Switch to using ScopedLambda and introduce UnparkResult.
3376
3377 2016-04-19  Commit Queue  <commit-queue@webkit.org>
3378
3379         Unreviewed, rolling out r199726.
3380         https://bugs.webkit.org/show_bug.cgi?id=156748
3381
3382         WebKit tests crash on Windows 32 (Requested by msaboff on
3383         #webkit).
3384
3385         Reverted changeset:
3386
3387         "iTunes crashing JavaScriptCore.dll"
3388         https://bugs.webkit.org/show_bug.cgi?id=156647
3389         http://trac.webkit.org/changeset/199726
3390
3391 2016-04-19  Michael Saboff  <msaboff@apple.com>
3392
3393         iTunes crashing JavaScriptCore.dll
3394         https://bugs.webkit.org/show_bug.cgi?id=156647
3395
3396         Reviewed by Saam Barati.
3397
3398         If a thread was created without using the WTF thread apis and that thread uses
3399         a JavaScript VM and that thread exits with the VM still around, JSC won't know
3400         that the thread has exited.  Currently, we use ThreadSpecificThreadExit() to
3401         clean up any thread specific keys.  Cleaning up these keys is how JSC is
3402         notified of a thread exit.  We only call ThreadSpecificThreadExit() from
3403         wtfThreadEntryPoint() when the thread entry point function returns.
3404         This mechanism was put in place for Windows because we layer the WTF::ThreadSpecific
3405         functionality on top of TLS (Thread Local Storage), but TLS doesn't have
3406         a thread exiting callback the way that pthread_create_key.
3407
3408         The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
3409         Windows allows multiple fibers per thread, WebKit is not designed to work with a
3410         multiple fibers per thread.  When there is only one fiber per thread, FLS works just
3411         like TLS, but it has the destroy callback.
3412
3413         I restructured the Windows version of WTF::ThreadSpecific to be almost the same
3414         as the pthread version.
3415
3416         * wtf/ThreadSpecific.h:
3417         (WTF::threadSpecificKeyCreate):
3418         (WTF::threadSpecificKeyDelete):
3419         (WTF::threadSpecificSet):
3420         (WTF::threadSpecificGet):
3421         (WTF::ThreadSpecific<T>::ThreadSpecific):
3422         (WTF::ThreadSpecific<T>::~ThreadSpecific):
3423         (WTF::ThreadSpecific<T>::get):
3424         (WTF::ThreadSpecific<T>::set):
3425         (WTF::ThreadSpecific<T>::destroy):
3426         Restructured to use FLS.  Renamed TLS* to FLS*.
3427
3428         * wtf/ThreadSpecificWin.cpp:
3429         (WTF::flsKeyCount):
3430         (WTF::flsKeys):
3431         Renamed from tlsKey*() to flsKey*().
3432
3433         (WTF::destructorsList): Deleted.
3434         (WTF::destructorsMutex): Deleted.
3435         (WTF::PlatformThreadSpecificKey::PlatformThreadSpecificKey): Deleted.
3436         (WTF::PlatformThreadSpecificKey::~PlatformThreadSpecificKey): Deleted.
3437         (WTF::PlatformThreadSpecificKey::setValue): Deleted.
3438         (WTF::PlatformThreadSpecificKey::value): Deleted.
3439         (WTF::PlatformThreadSpecificKey::callDestructor): Deleted.
3440         (WTF::tlsKeyCount): Deleted.
3441         (WTF::tlsKeys): Deleted.
3442         (WTF::threadSpecificKeyCreate): Deleted.
3443         (WTF::threadSpecificKeyDelete): Deleted.
3444         (WTF::threadSpecificSet): Deleted.
3445         (WTF::threadSpecificGet): Deleted.
3446         (WTF::ThreadSpecificThreadExit): Deleted.
3447
3448         * wtf/ThreadingWin.cpp:
3449         (WTF::wtfThreadEntryPoint): Eliminated call to ThreadSpecificThreadExit.
3450
3451 2016-04-19  Yusuke Suzuki  <utatane.tea@gmail.com>
3452
3453         [GTK] Use Generic WorkQueue instead of WorkQueueGLib
3454         https://bugs.webkit.org/show_bug.cgi?id=156721
3455
3456         Reviewed by Benjamin Poulain.
3457
3458         WorkQueueGLib includes platform-dependent part only for WorkQueue::dispatchAfter.
3459         However, its code is related to RunLoopGLib rather than WorkQueueGLib.
3460         In this patch, we move the code from WorkQueueGLib to RunLoopGLib, drop WorkQueueGLib
3461         and use WorkQueueGeneric.
3462
3463         * wtf/PlatformGTK.cmake:
3464         * wtf/RunLoop.h:
3465         * wtf/WorkQueue.h:
3466         * wtf/glib/RunLoopGLib.cpp:
3467         (WTF::DispatchAfterContext::DispatchAfterContext):
3468         (WTF::DispatchAfterContext::dispatch):
3469         (WTF::RunLoop::dispatchAfter):
3470         * wtf/glib/WorkQueueGLib.cpp: Removed.
3471         (WTF::WorkQueue::platformInitialize): Deleted.
3472         (WTF::WorkQueue::platformInvalidate): Deleted.
3473         (WTF::WorkQueue::dispatch): Deleted.
3474         (WTF::DispatchAfterContext::DispatchAfterContext): Deleted.
3475         (WTF::DispatchAfterContext::~DispatchAfterContext): Deleted.
3476         (WTF::DispatchAfterContext::dispatch): Deleted.
3477         (WTF::WorkQueue::dispatchAfter): Deleted.
3478
3479 2016-04-18  Yusuke Suzuki  <utatane.tea@gmail.com>
3480
3481         [JSCOnly] Implement RunLoop and remove glib dependency
3482         https://bugs.webkit.org/show_bug.cgi?id=155706
3483
3484         Reviewed by Michael Catanzaro.
3485
3486         Add missing RunLoop and WorkQueue platform code for JSCOnly port.
3487         The implementation does not use platform specific things. Instead, we
3488         implement them on WTF framework; using condition variables to construct
3489         the run loop and timers.
3490
3491         Since the fallback is implemented, it is not necessary for JSCOnly port
3492         to depend on GLib's RunLoop abstraction. So this patch removes its
3493         dependency. As a result, now, JSCOnly port removes dependencies except for the system ICU.
3494
3495         We clean up event loop ifdefs by introducing USE_XXX_EVENT_LOOP flags.
3496         USE(XXX_EVENT_LOOP) is exclusive to each other. So from now, we do not need to take care
3497         of the order of if-defs for the event loops. (For example, USE(GLIB) should have lead before
3498         OS(DARWIN) in WorkQueue.h for WebKitGTK on Darwin.)
3499
3500         EVENT_LOOP determination is done in Platform.h. This follows the style of WTF PLATFORM.
3501
3502         * wtf/Platform.h:
3503         * wtf/PlatformJSCOnly.cmake:
3504         * wtf/RunLoop.h:
3505         * wtf/WorkQueue.h:
3506         * wtf/generic/MainThreadGeneric.cpp: Renamed from Source/WTF/wtf/none/MainThreadNone.cpp.
3507         (WTF::initializeMainThreadPlatform):
3508         (WTF::scheduleDispatchFunctionsOnMainThread):
3509         * wtf/generic/RunLoopGeneric.cpp: Added.
3510         (WTF::RunLoop::TimerBase::ScheduledTask::create):
3511         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
3512         (WTF::RunLoop::TimerBase::ScheduledTask::fired):
3513         (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
3514         (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
3515         (WTF::RunLoop::TimerBase::ScheduledTask::EarliestSchedule::operator()):
3516         (WTF::RunLoop::TimerBase::ScheduledTask::isActive):
3517         (WTF::RunLoop::TimerBase::ScheduledTask::deactivate):
3518         (WTF::RunLoop::RunLoop):
3519         (WTF::RunLoop::~RunLoop):
3520         (WTF::RunLoop::populateTasks):
3521         (WTF::RunLoop::runImpl):
3522         (WTF::RunLoop::run):
3523         (WTF::RunLoop::iterate):
3524         (WTF::RunLoop::stop):
3525         (WTF::RunLoop::wakeUp):
3526         (WTF::RunLoop::schedule):
3527         (WTF::RunLoop::scheduleAndWakeUp):
3528         (WTF::RunLoop::dispatchAfter):
3529         (WTF::RunLoop::TimerBase::TimerBase):
3530         (WTF::RunLoop::TimerBase::~TimerBase):
3531         (WTF::RunLoop::TimerBase::start):
3532         (WTF::RunLoop::TimerBase::stop):
3533         (WTF::RunLoop::TimerBase::isActive):
3534         * wtf/generic/WorkQueueGeneric.cpp: Added.
3535         (WorkQueue::platformInitialize):
3536         (WorkQueue::platformInvalidate):
3537         (WorkQueue::dispatch):
3538         (WorkQueue::dispatchAfter):
3539         * wtf/none/MainThreadNone.cpp:
3540         (WTF::initializeMainThreadPlatform): Deleted.
3541         (WTF::scheduleDispatchFunctionsOnMainThread): Deleted.
3542         * wtf/none/RunLoopNone.cpp:
3543         (WTF::RunLoop::RunLoop): Deleted.
3544         (WTF::RunLoop::~RunLoop): Deleted.
3545         (WTF::RunLoop::run): Deleted.
3546         (WTF::RunLoop::stop): Deleted.
3547         (WTF::RunLoop::wakeUp): Deleted.
3548         (WTF::RunLoop::TimerBase::TimerBase): Deleted.
3549         (WTF::RunLoop::TimerBase::~TimerBase): Deleted.
3550         (WTF::RunLoop::TimerBase::start): Deleted.
3551         (WTF::RunLoop::TimerBase::stop): Deleted.
3552         (WTF::RunLoop::TimerBase::isActive): Deleted.
3553         * wtf/none/WorkQueueNone.cpp:
3554         (WorkQueue::platformInitialize): Deleted.
3555         (WorkQueue::platformInvalidate): Deleted.
3556         (WorkQueue::dispatch): Deleted.
3557         (WorkQueue::dispatchAfter): Deleted.
3558
3559 2016-04-18  Commit Queue  <commit-queue@webkit.org>
3560
3561         Unreviewed, rolling out r199621.
3562         https://bugs.webkit.org/show_bug.cgi?id=156708
3563
3564         made windows tests crash (Requested by alexchristensen on
3565         #webkit).
3566
3567         Reverted changeset:
3568
3569         "iTunes crashing JavaScriptCore.dll"
3570         https://bugs.webkit.org/show_bug.cgi?id=156647
3571         http://trac.webkit.org/changeset/199621
3572
3573 2016-04-15  Michael Saboff  <msaboff@apple.com>
3574
3575         iTunes crashing JavaScriptCore.dll
3576         https://bugs.webkit.org/show_bug.cgi?id=156647
3577
3578         Reviewed by Geoffrey Garen.
3579
3580         If a thread was created without using the WTF thread apis and that thread uses
3581         a JavaScript VM and that thread exits with the VM still around, JSC won't know
3582         that the thread has exited.  Currently, we use ThreadSpecificThreadExit() to
3583         clean up any thread specific keys.  Cleaning up these keys is how JSC is
3584         notified of a thread exit.  We only call ThreadSpecificThreadExit() from
3585         wtfThreadEntryPoint() when the thread entry point function returns.
3586         This mechanism was put in place for Windos because we layer the WTF::ThreadSpecific
3587         functionality on top of TLS (Thread Local Storage), but TLS doesn't have
3588         a thread exiting callback the way that pthread_create_key.
3589
3590         The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
3591         Windows allows multiple fibers per thread, WebKit is not designed to work with a
3592         multiple fibers per thread.  When ther is only one fiber per thread, FLS works just
3593         like TLS, but it has the destroy callback.
3594
3595         I restructured the Windows version of WTF::ThreadSpecific to be almost the same
3596         as the pthread version.
3597         
3598         * wtf/ThreadSpecific.h:
3599         (WTF::threadSpecificKeyCreate):
3600         (WTF::threadSpecificKeyDelete):
3601         (WTF::threadSpecificSet):
3602         (WTF::threadSpecificGet):
3603         (WTF::ThreadSpecific<T>::ThreadSpecific):
3604         (WTF::ThreadSpecific<T>::~ThreadSpecific):
3605         (WTF::ThreadSpecific<T>::get):
3606         (WTF::ThreadSpecific<T>::set):
3607         (WTF::ThreadSpecific<T>::destroy):
3608         Restructured to use FLS.  Renamed TLS* to FLS*.
3609
3610         * wtf/ThreadSpecificWin.cpp:
3611         (WTF::flsKeyCount):
3612         (WTF::flsKeys):
3613         Renamed from tlsKey*() to flsKey*().
3614
3615         (WTF::destructorsList): Deleted.
3616         (WTF::destructorsMutex): Deleted.
3617         (WTF::PlatformThreadSpecificKey::PlatformThreadSpecificKey): Deleted.
3618         (WTF::PlatformThreadSpecificKey::~PlatformThreadSpecificKey): Deleted.
3619         (WTF::PlatformThreadSpecificKey::setValue): Deleted.
3620         (WTF::PlatformThreadSpecificKey::value): Deleted.
3621         (WTF::PlatformThreadSpecificKey::callDestructor): Deleted.
3622         (WTF::tlsKeyCount): Deleted.
3623         (WTF::tlsKeys): Deleted.
3624         (WTF::threadSpecificKeyCreate): Deleted.
3625         (WTF::threadSpecificKeyDelete): Deleted.
3626         (WTF::threadSpecificSet): Deleted.
3627         (WTF::threadSpecificGet): Deleted.
3628         (WTF::ThreadSpecificThreadExit): Deleted.
3629
3630         * wtf/ThreadingWin.cpp:
3631         (WTF::wtfThreadEntryPoint): Eliminated call to ThreadSpecificThreadExit.
3632
3633 2016-04-12  Filip Pizlo  <fpizlo@apple.com>
3634
3635         PolymorphicAccess should buffer AccessCases before regenerating
3636         https://bugs.webkit.org/show_bug.cgi?id=156457
3637
3638         Reviewed by Benjamin Poulain.
3639
3640         * wtf/TinyPtrSet.h:
3641         (WTF::TinyPtrSet::add): Add a helpful comment because I had forgotten what the bool return meant.
3642
3643 2016-04-12  Tomas Popela  <tpopela@redhat.com>
3644
3645         S390X and PPC64 architectures detection is wrong