Resource Load Statistics: Add alternate classification method
[WebKit-https.git] / Source / WTF / ChangeLog
1 2017-02-21  John Wilander  <wilander@apple.com>
2
3         Resource Load Statistics: Add alternate classification method
4         https://bugs.webkit.org/show_bug.cgi?id=168347
5         <rdar://problem/30352793>
6
7         Reviewed by Alex Christensen.
8
9         * wtf/Platform.h:
10             Added support for HAVE(CORE_PREDICTION).
11
12 2017-02-21  Alex Christensen  <achristensen@webkit.org>
13
14         Unreviewed, rolling out r212699.
15
16         Internal build not ready
17
18         Reverted changeset:
19
20         "[WebRTC][Mac] Activate libwebrtc"
21         https://bugs.webkit.org/show_bug.cgi?id=167293
22         http://trac.webkit.org/changeset/212699
23
24 2017-02-20  Youenn Fablet  <youenn@apple.com>
25
26         [WebRTC][Mac] Activate libwebrtc
27         https://bugs.webkit.org/show_bug.cgi?id=167293
28
29         Reviewed by Alex Christensen.
30
31         * wtf/Platform.h:
32
33 2017-02-20  Mark Lam  <mark.lam@apple.com>
34
35         [Re-landing] CachedCall should let GC know to keep its arguments alive.
36         https://bugs.webkit.org/show_bug.cgi?id=168567
37         <rdar://problem/30475767>
38
39         Reviewed by Saam Barati.
40
41         Added a WTF_FORBID_HEAP_ALLOCATION that will cause a compilation failure if
42         a class declared with it is malloced.
43
44         While this doesn't prevent that class declared WTF_FORBID_HEAP_ALLOCATION from
45         being embedded in another class that is heap allocated, it does at minimum
46         document the intent and gives the users of this class a chance to do the
47         right thing.
48
49         * WTF.xcodeproj/project.pbxproj:
50         * wtf/ForbidHeapAllocation.h: Added.
51
52 2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>
53
54         Unreviewed, rolling out r212685.
55
56         This change broke the 32-bit Sierra build.
57
58         Reverted changeset:
59
60         "Resource Load Statistics: Add alternate classification
61         method"
62         https://bugs.webkit.org/show_bug.cgi?id=168347
63         http://trac.webkit.org/changeset/212685
64
65 2017-02-20  John Wilander  <wilander@apple.com>
66
67         Resource Load Statistics: Add alternate classification method
68         https://bugs.webkit.org/show_bug.cgi?id=168347
69         <rdar://problem/30352793>
70
71         Reviewed by Alex Christensen.
72
73         * wtf/Platform.h:
74             Added support for HAVE(CORE_PREDICTION).
75
76 2017-02-20  Commit Queue  <commit-queue@webkit.org>
77
78         Unreviewed, rolling out r212618.
79         https://bugs.webkit.org/show_bug.cgi?id=168609
80
81         "Appears to cause PLT regression" (Requested by mlam on
82         #webkit).
83
84         Reverted changeset:
85
86         "CachedCall should let GC know to keep its arguments alive."
87         https://bugs.webkit.org/show_bug.cgi?id=168567
88         http://trac.webkit.org/changeset/212618
89
90 2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>
91
92         Unreviewed, rolling out r212622.
93
94         Caused several test failures
95
96         Reverted changeset:
97
98         "[GTK] Test fast/events/message-port-postMessage-
99         recursive.html times out"
100         https://bugs.webkit.org/show_bug.cgi?id=168570
101         http://trac.webkit.org/changeset/212622
102
103 2017-02-19  Carlos Garcia Campos  <cgarcia@igalia.com>
104
105         [GTK] Test fast/events/message-port-postMessage-recursive.html times out
106         https://bugs.webkit.org/show_bug.cgi?id=168570
107
108         Reviewed by Michael Catanzaro.
109
110         This has recently been added and the patch is good. It's just revealing a problem with our timers. The test is
111         posting a message recursively, and also starts a timeout timer to finish the test. The timeout timer is never
112         fired for us, because WebCore timers have lower priority than the one used by
113         postMessage. ScriptExecutionContext uses Document::postTask, that uses scheduleOnMainThread, that uses
114         RunLoop::dispatch(). We are not setting any priority for the timer used by RunLoop::dispatch, so it's using the
115         default. RunLoop::dispatch is normally used to schedule tasks between threads, or just to ensure something is
116         run in a different run loop iteration, but in general nothing urgent as a graphics redraw or something like
117         that. It's quite common to use g_idle_add to schedule tasks between threads, so I think it makes sense to use
118         G_PRIORITY_DEFAULT_IDLE for the RunLoop timer.
119
120         * wtf/glib/RunLoopGLib.cpp:
121         (WTF::RunLoop::RunLoop):
122
123 2017-02-19  Mark Lam  <mark.lam@apple.com>
124
125         CachedCall should let GC know to keep its arguments alive.
126         https://bugs.webkit.org/show_bug.cgi?id=168567
127         <rdar://problem/30475767>
128
129         Reviewed by Saam Barati.
130
131         Added a WTF_FORBID_HEAP_ALLOCATION that will cause a compilation failure if
132         a class declared with it is malloced.
133
134         While this doesn't prevent that class declared WTF_FORBID_HEAP_ALLOCATION from
135         being embedded in another class that is heap allocated, it does at minimum
136         document the intent and gives the users of this class a chance to do the
137         right thing.
138
139         * WTF.xcodeproj/project.pbxproj:
140         * wtf/ForbidHeapAllocation.h: Added.
141
142 2017-02-19  Commit Queue  <commit-queue@webkit.org>
143
144         Unreviewed, rolling out r212466.
145         https://bugs.webkit.org/show_bug.cgi?id=168577
146
147         causes crashes on AArch64 on linux, maybe it's causing crashes
148         on iOS too (Requested by pizlo on #webkit).
149
150         Reverted changeset:
151
152         "The collector thread should only start when the mutator
153         doesn't have heap access"
154         https://bugs.webkit.org/show_bug.cgi?id=167737
155         http://trac.webkit.org/changeset/212466
156
157 2017-02-18  Chris Dumez  <cdumez@apple.com>
158
159         Recursive MessagePort.postMessage() calls causes tab to become unresponsive
160         https://bugs.webkit.org/show_bug.cgi?id=168548
161         <rdar://problem/29808005>
162
163         Reviewed by Darin Adler.
164
165         Add API to retrieve all messages in the queue at once.
166
167         * wtf/MessageQueue.h:
168
169 2017-02-16  Alex Christensen  <achristensen@webkit.org>
170
171         Remove EFL-specific files in Source.
172
173         Rubber-stamped by Anders Carlsson.
174
175         * wtf/text/efl: Removed.
176         * wtf/text/efl/TextBreakIteratorInternalICUEfl.cpp: Removed.
177
178 2017-02-10  Filip Pizlo  <fpizlo@apple.com>
179
180         The collector thread should only start when the mutator doesn't have heap access
181         https://bugs.webkit.org/show_bug.cgi?id=167737
182
183         Reviewed by Keith Miller.
184         
185         Extend the use of AbstractLocker so that we can use more locking idioms.
186
187         * wtf/AutomaticThread.cpp:
188         (WTF::AutomaticThreadCondition::notifyOne):
189         (WTF::AutomaticThreadCondition::notifyAll):
190         (WTF::AutomaticThreadCondition::add):
191         (WTF::AutomaticThreadCondition::remove):
192         (WTF::AutomaticThreadCondition::contains):
193         (WTF::AutomaticThread::AutomaticThread):
194         (WTF::AutomaticThread::tryStop):
195         (WTF::AutomaticThread::isWaiting):
196         (WTF::AutomaticThread::notify):
197         (WTF::AutomaticThread::start):
198         (WTF::AutomaticThread::threadIsStopping):
199         * wtf/AutomaticThread.h:
200         * wtf/NumberOfCores.cpp:
201         (WTF::numberOfProcessorCores): Allow this to be overridden for testing.
202         * wtf/ParallelHelperPool.cpp:
203         (WTF::ParallelHelperClient::finish):
204         (WTF::ParallelHelperClient::claimTask):
205         (WTF::ParallelHelperPool::Thread::Thread):
206         (WTF::ParallelHelperPool::didMakeWorkAvailable):
207         (WTF::ParallelHelperPool::hasClientWithTask):
208         (WTF::ParallelHelperPool::getClientWithTask):
209         * wtf/ParallelHelperPool.h:
210
211 2017-02-16  Anders Carlsson  <andersca@apple.com>
212
213         Remove EFL from WTF
214         https://bugs.webkit.org/show_bug.cgi?id=168452
215
216         Reviewed by Alex Christensen.
217
218         * wtf/CurrentTime.cpp:
219         * wtf/DisallowCType.h:
220         * wtf/FeatureDefines.h:
221         * wtf/MainThread.cpp:
222         * wtf/MainThread.h:
223         * wtf/Platform.h:
224         * wtf/RunLoop.h:
225         * wtf/WorkQueue.h:
226         * wtf/efl/DispatchQueueEfl.cpp: Removed.
227         * wtf/efl/DispatchQueueEfl.h: Removed.
228         * wtf/efl/DispatchQueueWorkItemEfl.h: Removed.
229         * wtf/efl/EflTypedefs.h: Removed.
230         * wtf/efl/MainThreadEfl.cpp: Removed.
231         * wtf/efl/RunLoopEfl.cpp: Removed.
232         * wtf/efl/UniquePtrEfl.h: Removed.
233         * wtf/efl/WorkQueueEfl.cpp: Removed.
234
235 2017-02-13  Alex Christensen  <achristensen@webkit.org>
236
237         URLs with an invalid IPv4 address should be invalid
238         https://bugs.webkit.org/show_bug.cgi?id=168260
239
240         Reviewed by Tim Horton.
241
242         * wtf/Expected.h:
243         (WTF::Expected::value):
244         Added missing WTFMove for rvalue Expected::value().
245
246 2017-02-13  Said Abou-Hallawa  <sabouhallawa@apple.com>
247
248         The current frame of an image should not deleted if another frame is asynchronously being decoded
249         https://bugs.webkit.org/show_bug.cgi?id=167618
250
251         Reviewed by Simon Fraser.
252
253         Add ASSERT_IMPLIES() which should fire when a condition is true but the
254         assertion is false.
255
256         * wtf/Assertions.h:
257
258 2017-02-13  Brady Eidson  <beidson@apple.com>
259
260         Followup to: Replace all WebKit Library Version checks in WK2 with SDK version checks.
261         https://bugs.webkit.org/show_bug.cgi?id=168124
262
263         Reviewed by Geoffrey Garen.
264
265         * wtf/spi/darwin/dyldSPI.h:
266
267 2017-02-13  Myles C. Maxfield  <mmaxfield@apple.com>
268
269         Update custom line breaking iterators to the latest version of Unicode
270         https://bugs.webkit.org/show_bug.cgi?id=168182
271
272         Reviewed by Zalan Bujtas.
273
274         ICU 55.1 supports loose / normal / strict line breaking rules. The oldest platform we ship
275         on has a version of ICU >= that one. Therefore, we don't need to compile our own rules;
276         we can just use ICU's rules.
277
278         * wtf/text/LineBreakIteratorPoolICU.h:
279         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
280         (WTF::LineBreakIteratorPool::take):
281         * wtf/text/TextBreakIterator.cpp:
282         (WTF::acquireLineBreakIterator):
283         (WTF::openLineBreakIterator):
284         (WTF::mapLineIteratorModeToRules): Deleted.
285         (WTF::isCJKLocale): Deleted.
286         * wtf/text/TextBreakIterator.h:
287         (WTF::LazyLineBreakIterator::LazyLineBreakIterator):
288         (WTF::LazyLineBreakIterator::mode):
289         (WTF::LazyLineBreakIterator::get):
290         (WTF::LazyLineBreakIterator::resetStringAndReleaseIterator):
291         (WTF::LazyLineBreakIterator::isLooseCJKMode): Deleted.
292
293 2017-02-10  Dan Bernstein  <mitz@apple.com>
294
295         [Xcode] WTF installs extra copies of two headers outside /usr/local/include/wtf
296         https://bugs.webkit.org/show_bug.cgi?id=168160
297
298         Reviewed by Sam Weinig.
299
300         * WTF.xcodeproj/project.pbxproj: Demoted OrdinalNumber.h MemoryFootprint.h from Private to
301           Project.
302
303 2017-02-10  Commit Queue  <commit-queue@webkit.org>
304
305         Unreviewed, rolling out r212139.
306         https://bugs.webkit.org/show_bug.cgi?id=168152
307
308         Caused some assertions (Requested by JoePeck on #webkit).
309
310         Reverted changeset:
311
312         "Fix misleading comment in RunLoop.h"
313         https://bugs.webkit.org/show_bug.cgi?id=167832
314         http://trac.webkit.org/changeset/212139
315
316 2017-02-10  Joseph Pecoraro  <pecoraro@apple.com>
317
318         Fix misleading comment in RunLoop.h
319         https://bugs.webkit.org/show_bug.cgi?id=167832
320
321         Reviewed by Sam Weinig.
322
323         * wtf/RunLoop.h:
324         Mac initialization used to force using CFRunLoopGetMain(). Now however it just
325         uses RunLoop::current which uses CFRunLoopGetCurrent(). So this comment that
326         it can be done on any thread is misleading and can lead to incorrect behavior
327         if it is actually done on a non-main thread on Mac.
328
329 2017-02-09  Alex Christensen  <achristensen@webkit.org>
330
331         Unreviewed, rolling out r212040.
332
333         Broke build.  I'm not surprised
334
335         Reverted changeset:
336
337         "[WebRTC][Mac] Activate libwebrtc"
338         https://bugs.webkit.org/show_bug.cgi?id=167293
339         http://trac.webkit.org/changeset/212040
340
341 2017-02-09  Youenn Fablet  <youenn@apple.com>
342
343         [WebRTC][Mac] Activate libwebrtc
344         https://bugs.webkit.org/show_bug.cgi?id=167293
345
346         Reviewed by Alex Christensen.
347
348         * wtf/Platform.h:
349
350 2017-02-09  Brady Eidson  <beidson@apple.com>
351
352         Transition "WebKit Library Version" checks to SDK version checks.
353         <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056
354
355         Reviewed by Geoffrey Garen.
356
357         * wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.
358
359 2017-02-09  Commit Queue  <commit-queue@webkit.org>
360
361         Unreviewed, rolling out r211980 and r211987.
362         https://bugs.webkit.org/show_bug.cgi?id=168072
363
364         Caused API test WebKit2.DuplicateCompletionHandlerCalls to
365         fail (Requested by ryanhaddad on #webkit).
366
367         Reverted changesets:
368
369         "Transition "WebKit Library Version" checks to SDK version
370         checks."
371         https://bugs.webkit.org/show_bug.cgi?id=168056
372         http://trac.webkit.org/changeset/211980
373
374         "Build fix for APPLE_INTERNAL_SDK builds after r211980."
375         http://trac.webkit.org/changeset/211987
376
377 2017-02-09  Alexey Proskuryakov  <ap@apple.com>
378
379         Remove unused WebThreadRunSync
380         https://bugs.webkit.org/show_bug.cgi?id=168024
381
382         Reviewed by Tim Horton.
383
384         * wtf/ios/WebCoreThread.cpp:
385         * wtf/ios/WebCoreThread.h:
386
387 2017-02-09  Brady Eidson  <beidson@apple.com>
388
389         Build fix for APPLE_INTERNAL_SDK builds after r211980.
390
391         Unreviewed.
392
393         * wtf/spi/darwin/dyldSPI.h:
394
395 2017-02-09  Brady Eidson  <beidson@apple.com>
396
397         Transition "WebKit Library Version" checks to SDK version checks.
398         <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056
399
400         Reviewed by Geoffrey Garen.
401
402         * wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.
403
404 2017-02-06  Jer Noble  <jer.noble@apple.com>
405
406         Playback stalls when a SourceBuffer append causes frame eviction
407         https://bugs.webkit.org/show_bug.cgi?id=167834
408
409         Reviewed by Eric Carlson.
410
411         Optimize the MediaTime class; specifically the compare() method. The class only
412         needs 6 bits to store the TimeFlags, so make that a uint8_t rather than uint32_t.
413         The implementation is slightly simpler if the TimeScale is unsigned, so make that
414         a uint32_t rather than int32_t. Inline the comparison operators. Optimize the equality
415         comparison by bitwise-and'ing the flags together and masking the result. Optimize for
416         common comparison scenarios (equal timeScales, equal timeValues(), etc.). Attempt the
417         mathematically simpler simpler method for comparing ratios, and only fall back to the
418         complex method if the results of multiplying the timeScale by the timeValue overflows.
419
420         * wtf/MediaTime.cpp:
421         (WTF::greatestCommonDivisor):
422         (WTF::leastCommonMultiple):
423         (WTF::signum):
424         (WTF::MediaTime::MediaTime):
425         (WTF::MediaTime::createWithFloat):
426         (WTF::MediaTime::createWithDouble):
427         (WTF::MediaTime::operator+):
428         (WTF::MediaTime::operator-):
429         (WTF::MediaTime::operator!):
430         (WTF::MediaTime::operator bool):
431         (WTF::MediaTime::compare):
432         (WTF::MediaTime::setTimeScale):
433         (WTF::abs):
434         (WTF::MediaTime::operator<): Deleted.
435         (WTF::MediaTime::operator>): Deleted.
436         (WTF::MediaTime::operator!=): Deleted.
437         (WTF::MediaTime::operator==): Deleted.
438         (WTF::MediaTime::operator>=): Deleted.
439         (WTF::MediaTime::operator<=): Deleted.
440         * wtf/MediaTime.h:
441
442 2017-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>
443
444         [GTK] Fix huge ENABLE_RESOURCE_USAGE warning spam
445
446         Unreviewed. We shouldn't redefine ENABLE_RESOURCE_USAGE in Platform.h as
447         it's already defined in cmakeconfig.h.
448
449         * wtf/Platform.h:
450
451 2017-02-03  Joseph Pecoraro  <pecoraro@apple.com>
452
453         Performance Timing: Convert WTF::MonotonicTime and WTF::Seconds
454         https://bugs.webkit.org/show_bug.cgi?id=167768
455
456         Reviewed by Geoffrey Garen.
457
458         * wtf/Stopwatch.h:
459         (WTF::Stopwatch::elapsedTimeSince):
460         (WTF::Stopwatch::elapsedTimeSinceMonotonicTime): Deleted.
461
462 2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>
463
464         [GTK] Add initial implementation of resource usage overlay
465         https://bugs.webkit.org/show_bug.cgi?id=167731
466
467         Reviewed by Michael Catanzaro.
468
469         Enable RESOURCE_USAGE for GTK+ port too.
470
471         * wtf/Platform.h:
472
473 2017-02-02  Andreas Kling  <akling@apple.com>
474
475         [Mac] In-process memory pressure monitor for WebContent processes AKA websam
476         <https://webkit.org/b/167491>
477         <rdar://problem/30116072>
478
479         Reviewed by Antti Koivisto.
480
481         Add a WTF helper function for getting the current process's memory footprint.
482
483         * WTF.xcodeproj/project.pbxproj:
484         * wtf/CMakeLists.txt:
485         * wtf/MemoryFootprint.cpp:
486         (WTF::memoryFootprint):
487         * wtf/MemoryFootprint.h:
488
489 2017-02-02  Mark Lam  <mark.lam@apple.com>
490
491         Add a SIGILL crash analyzer to make debugging SIGILLs easier.
492         https://bugs.webkit.org/show_bug.cgi?id=167714
493         <rdar://problem/30318237>
494
495         Reviewed by Filip Pizlo.
496
497         * wtf/StdLibExtras.h:
498
499 2017-02-02  Commit Queue  <commit-queue@webkit.org>
500
501         Unreviewed, rolling out r211571 and r211582.
502         https://bugs.webkit.org/show_bug.cgi?id=167751
503
504         This change caused API test WebKit1.MemoryPressureHandler to
505         fail with an assertion. (Requested by ryanhaddad on #webkit).
506
507         Reverted changesets:
508
509         "[Mac] In-process memory pressure monitor for WebContent
510         processes."
511         https://bugs.webkit.org/show_bug.cgi?id=167491
512         http://trac.webkit.org/changeset/211571
513
514         "Unreviewed attempt to fix the Windows build after r211571."
515         http://trac.webkit.org/changeset/211582
516
517 2017-02-02  Andreas Kling  <akling@apple.com>
518
519         [Mac] In-process memory pressure monitor for WebContent processes.
520         <https://webkit.org/b/167491>
521         <rdar://problem/30116072>
522
523         Reviewed by Antti Koivisto.
524
525         Add a WTF helper function for getting the current process's memory footprint.
526
527         * WTF.xcodeproj/project.pbxproj:
528         * wtf/CMakeLists.txt:
529         * wtf/MemoryFootprint.cpp:
530         (WTF::memoryFootprint):
531         * wtf/MemoryFootprint.h:
532
533 2017-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>
534
535         Unreviewed, fix the WebKit nightly open source build
536         <rdar://problem/30308635>
537
538         We cannot assume all internal SDKs have the latest WebKitAdditions, so we need an explicit header check here.
539
540         * wtf/Platform.h:
541
542 2017-02-01  Andreas Kling  <akling@apple.com>
543
544         Implement the alwaysRunsAtBackgroundPriority WK2 setting using thread QoS.
545         <https://webkit.org/b/167387>
546         <rdar://problem/29711409>
547
548         Reviewed by Antti Koivisto.
549
550         Add a new mechanism for overriding the max thread QoS level globally:
551
552             void setGlobalMaxQOSClass(qos_class_t)
553             qos_class_t adjustedQOSClass(qos_class_t)
554
555         The QoS cap applies to all newly created threads, threads that try to override
556         their QoS class manually, and also passed down to bmalloc.
557
558         * wtf/Threading.cpp:
559         (WTF::setCurrentThreadIsUserInteractive):
560         (WTF::setCurrentThreadIsUserInitiated):
561         (WTF::setGlobalMaxQOSClass):
562         (WTF::adjustedQOSClass):
563         * wtf/Threading.h:
564         * wtf/ThreadingPthreads.cpp:
565         (WTF::createThreadInternal):
566         * wtf/cocoa/WorkQueueCocoa.cpp:
567         (WTF::dispatchQOSClass):
568
569 2017-01-31  Antti Koivisto  <antti@apple.com>
570
571         Teach cache coders to encode time_points
572         https://bugs.webkit.org/show_bug.cgi?id=167670
573
574         Reviewed by Andreas Kling.
575
576         * wtf/persistence/Coders.h:
577         (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::encode):
578         (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::decode):
579
580 2017-01-31  Joseph Pecoraro  <pecoraro@apple.com>
581
582         Removed unused m_nestedCount from RunLoop
583         https://bugs.webkit.org/show_bug.cgi?id=167674
584
585         Reviewed by Sam Weinig.
586
587         * wtf/RunLoop.h:
588         * wtf/cf/RunLoopCF.cpp:
589         (WTF::RunLoop::RunLoop):
590         (WTF::RunLoop::run):
591
592 2017-01-31  Filip Pizlo  <fpizlo@apple.com>
593
594         The mutator should be able to perform increments of GC work
595         https://bugs.webkit.org/show_bug.cgi?id=167528
596
597         Reviewed by Keith Miller and Geoffrey Garen.
598
599         We want dataLog to be locked even if you're not logging to a file!
600
601         * wtf/DataLog.cpp:
602         (WTF::initializeLogFileOnce):
603
604 2017-01-28  Wenson Hsieh  <wenson_hsieh@apple.com>
605
606         Check USE(APPLE_INTERNAL_SDK) instead of specific headers when importing from WebKitAdditions
607         https://bugs.webkit.org/show_bug.cgi?id=167555
608
609         Reviewed by Dan Bernstein.
610
611         Instead of guarding #import <WebKitAdditions/*> on the existence of the imported file, consult
612         USE(APPLE_INTERNAL_SDK) instead.
613
614         * wtf/Platform.h:
615
616 2017-01-26  Saam Barati  <sbarati@apple.com>
617
618         Harden how the compiler references GC objects
619         https://bugs.webkit.org/show_bug.cgi?id=167277
620         <rdar://problem/30179506>
621
622         Reviewed by Filip Pizlo.
623
624         I made TinyPtrSet use bitwise_cast instead of static_cast
625         for its singleEntry() function so that it can work on pointer-like
626         types just as it can on actual pointer types.
627         
628         An example of where this matters is when you have TinyPtrSet<T>
629         where T is defined to be a struct which wraps a pointer, e.g:
630         
631         struct T {
632             void* m_pointer;
633         }
634
635         * wtf/TinyPtrSet.h:
636         (WTF::TinyPtrSet::singleEntry):
637
638 2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>
639
640         Introduce an item-provider-based pasteboard wrapper
641         https://bugs.webkit.org/show_bug.cgi?id=167410
642
643         Reviewed by Enrica Casucci.
644
645         Adds an additional feature flag.
646
647         * wtf/FeatureDefines.h:
648
649 2017-01-25  Konstantin Tokarev  <annulen@yandex.ru>
650
651         Removed leftovers of pre-2015 VisualStudio support
652         https://bugs.webkit.org/show_bug.cgi?id=167434
653
654         Reviewed by Alex Christensen.
655
656         * wtf/Compiler.h:
657         * wtf/Platform.h:
658         * wtf/StringExtras.h:
659
660 2017-01-25  Chris Dumez  <cdumez@apple.com>
661
662         Disable Download attribute support on iOS
663         https://bugs.webkit.org/show_bug.cgi?id=167337
664         <rdar://problem/30154148>
665
666         Reviewed by Alexey Proskuryakov.
667
668         Disable Download attribute support on iOS as it currently does not work.
669
670         * wtf/FeatureDefines.h:
671
672 2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>
673
674         Add a hook to include additional feature defines
675         https://bugs.webkit.org/show_bug.cgi?id=167403
676
677         Reviewed by Enrica Casucci.
678
679         * wtf/Platform.h: Include AdditionalFeatureDefines.h, if it exists.
680
681 2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>
682
683         Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
684         https://bugs.webkit.org/show_bug.cgi?id=167394
685
686         Reviewed by Ryosuke Niwa.
687
688         * wtf/FeatureDefines.h:
689
690 2017-01-24  Konstantin Tokarev  <annulen@yandex.ru>
691
692         VS2015 supports ref qualifiers
693         https://bugs.webkit.org/show_bug.cgi?id=167368
694
695         Reviewed by Sam Weinig.
696
697         * wtf/Compiler.h: Enable
698         WTF_COMPILER_SUPPORTS_CXX_REFERENCE_QUALIFIED_FUNCTIONS for VS2015
699
700 2017-01-24  Daniel Bates  <dabates@apple.com>
701
702         StringView.split() should use an iterator design pattern instead of allocating a Vector
703         https://bugs.webkit.org/show_bug.cgi?id=163225
704
705         Reviewed by Darin Adler.
706
707         Implement StringView.split() using an iterator design.
708
709         Using an iterator design avoids the need to allocate a Vector of StringView objects,
710         which is space-inefficient and error prone as the returned Vector may outlive the
711         lifetime of the underlying string associated with the split (as StringView is a non-
712         owning reference to a string).
713
714         StringView.split() now returns a StringView::SplitResult object that implements begin()/end()
715         to support iterating over StringView substrings delimited by the specified separator
716         character. For example, to iterate over the 'c'-separated substrings of a StringView v,
717         you can write:
718
719         for (StringView substring : v.split('c'))
720             // Do something with substring.
721
722         * wtf/text/StringView.cpp:
723         (WTF::StringView::SplitResult::Iterator::findNextSubstring): Advances the iterator to point to the
724         next substring.
725         (WTF::StringView::split): Modified to return a SplitResult::Iterator object instead of a Vector<StringView>.
726         * wtf/text/StringView.h:
727         (WTF::StringView::SplitResult::SplitResult):
728         (WTF::StringView::SplitResult::Iterator::Iterator):
729         (WTF::StringView::SplitResult::Iterator::operator*):
730         (WTF::StringView::SplitResult::Iterator::operator==):
731         (WTF::StringView::SplitResult::Iterator::operator!=):
732         Implements the iterator interface.
733
734 2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>
735
736         Remove outdated ENABLE(CSP_NEXT) build flag
737         https://bugs.webkit.org/show_bug.cgi?id=167252
738
739         Reviewed by Brent Fulgham.
740
741         * wtf/FeatureDefines.h:
742
743 2017-01-17  Andreas Kling  <akling@apple.com>
744
745         Annotate FastMalloc functions with returns_nonnull attribute.
746         <https://webkit.org/b/167144>
747
748         Reviewed by Antti Koivisto.
749
750         Decorate fastMalloc() and friends with __attribute__((returns_nonnull)) for supporting
751         compilers that can do useful things with that information.
752
753         * wtf/Compiler.h:
754         * wtf/FastMalloc.h:
755
756 2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>
757
758         ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
759         https://bugs.webkit.org/show_bug.cgi?id=116551
760         <rdar://problem/13949830>
761
762         Reviewed by Alex Christensen.
763
764         * wtf/FeatureDefines.h:
765
766 2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>
767
768         Remove the REQUEST_ANIMATION_FRAME flag
769         https://bugs.webkit.org/show_bug.cgi?id=156980
770         <rdar://problem/25906849>
771
772         Reviewed by Simon Fraser.
773
774         * wtf/FeatureDefines.h:
775
776 2017-01-15  Sam Weinig  <sam@webkit.org>
777
778         Add the ability to use numbers in makeString()
779         https://bugs.webkit.org/show_bug.cgi?id=167087
780
781         Reviewed by Darin Adler.
782
783         Allow numbers to be easily used in makeString() and tryMakeString().
784
785         For instance, you can now write:
786             int amount = 7;
787             auto foo = makeString("There are ", amount, " apples in the cart");
788
789         * WTF.xcodeproj/project.pbxproj:
790         Add new file.
791
792         * wtf/text/IntegerToStringConversion.h:
793         (WTF::writeNumberToBufferImpl):
794         (WTF::writeNumberToBufferSigned):
795         (WTF::writeNumberToBufferUnsigned):
796         (WTF::lengthOfNumberAsStringImpl):
797         (WTF::lengthOfNumberAsStringSigned):
798         (WTF::lengthOfNumberAsStringUnsigned):
799         Add variants of integer writing code that compute the length of the string
800         that would be produced and writes the string to an existing buffer.
801
802         (WTF::IntegerToStringConversionTrait<AtomicString>::flush): Deleted.
803         (WTF::IntegerToStringConversionTrait<String>::flush): Deleted.
804         (WTF::IntegerToStringConversionTrait<StringBuilder>::flush): Deleted.
805         Move these traits to their respective classes.
806
807         * wtf/text/AtomicString.h:
808         (WTF::IntegerToStringConversionTrait<AtomicString>::flush):
809         * wtf/text/StringBuilder.h:
810         (WTF::IntegerToStringConversionTrait<StringBuilder>::flush):
811         * wtf/text/WTFString.h:
812         (WTF::IntegerToStringConversionTrait<String>::flush):
813         Traits moved here from IntegerToStringConversion.h
814
815         * wtf/text/StringConcatenateNumbers.h: Added.
816         (WTF::StringTypeAdapter<int>::StringTypeAdapter<int>):
817         (WTF::StringTypeAdapter<int>::length):
818         (WTF::StringTypeAdapter<int>::is8Bit):
819         (WTF::StringTypeAdapter<int>::writeTo):
820         (WTF::StringTypeAdapter<int>::toString):
821         (WTF::StringTypeAdapter<unsigned>::StringTypeAdapter<unsigned>):
822         (WTF::StringTypeAdapter<unsigned>::length):
823         (WTF::StringTypeAdapter<unsigned>::is8Bit):
824         (WTF::StringTypeAdapter<unsigned>::writeTo):
825         (WTF::StringTypeAdapter<unsigned>::toString):
826         (WTF::StringTypeAdapter<float>::StringTypeAdapter<float>):
827         (WTF::StringTypeAdapter<float>::length):
828         (WTF::StringTypeAdapter<float>::is8Bit):
829         (WTF::StringTypeAdapter<float>::writeTo):
830         (WTF::StringTypeAdapter<float>::toString):
831         (WTF::StringTypeAdapter<double>::StringTypeAdapter<double>):
832         (WTF::StringTypeAdapter<double>::length):
833         (WTF::StringTypeAdapter<double>::is8Bit):
834         (WTF::StringTypeAdapter<double>::writeTo):
835         (WTF::StringTypeAdapter<double>::toString):
836         Add basic adaptors for int, unsigned, float, and double.
837
838         (WTF::FormattedNumber::fixedPrecision):
839         (WTF::FormattedNumber::fixedWidth):
840         (WTF::FormattedNumber::length):
841         (WTF::FormattedNumber::buffer):
842         (WTF::FormattedNumber::stringView):
843         (WTF::StringTypeAdapter<FormattedNumber>::StringTypeAdapter<FormattedNumber>):
844         (WTF::StringTypeAdapter<FormattedNumber>::length):
845         (WTF::StringTypeAdapter<FormattedNumber>::is8Bit):
846         (WTF::StringTypeAdapter<FormattedNumber>::writeTo):
847         (WTF::StringTypeAdapter<FormattedNumber>::toString):
848         Add a special class, FormattedNumber, and an adaptor for it, allowing for
849         fixedPrecision and fixedWidth representation of doubles.
850
851 2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>
852
853         WebAssembly: Suppress warnings & errors in GCC
854         https://bugs.webkit.org/show_bug.cgi?id=167049
855
856         Reviewed by Sam Weinig.
857
858         * wtf/LEBDecoder.h:
859         (WTF::LEBDecoder::decodeInt):
860         If T = int, it performs `-1 << shift`. It causes
861         warning in GCC. Instead, we first cast it to the
862         UnsignedT, perform operation and re-cast to the
863         T.
864
865 2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>
866
867         Remove ENABLE(DETAILS_ELEMENT) guards
868         https://bugs.webkit.org/show_bug.cgi?id=167042
869
870         Reviewed by Alex Christensen.
871
872         * wtf/FeatureDefines.h:
873
874 2017-01-11  Darin Adler  <darin@apple.com>
875
876         Remove PassRefPtr from more of "platform"
877         https://bugs.webkit.org/show_bug.cgi?id=166809
878
879         Reviewed by Sam Weinig.
880
881         * wtf/Ref.h: Changed the template so that a const Ref<T> does not prohibit non-const
882         use of T. We can still use const Ref<const T> to express that. The earlier design
883         was intentional, but was not consistent with either actual references or with
884         other smart pointer classes like RefPtr. One way to see how much better this is,
885         is to see all the many, many cases where we have const_cast just to work around
886         this. I searched for those and included fixes for many in this patch.
887
888 2017-01-12  Chris Dumez  <cdumez@apple.com>
889
890         [iOS] Implement support for KeyboardEvent.code
891         https://bugs.webkit.org/show_bug.cgi?id=166932
892         <rdar://problem/29972518>
893
894         Reviewed by Darin Adler.
895
896         Enable KEYBOARD_CODE_ATTRIBUTE feature on iOS.
897
898         * wtf/FeatureDefines.h:
899
900 2017-01-11  Andreas Kling  <akling@apple.com>
901
902         Crash when WebCore's GC heap grows way too large.
903         <https://webkit.org/b/166875>
904         <rdar://problem/27896585>
905
906         Reviewed by Mark Lam.
907
908         Publish the WTF::GB constant.
909
910         * wtf/StdLibExtras.h:
911
912 2017-01-11  Anders Carlsson  <andersca@apple.com>
913
914         navigator.plugins.refresh and WKContextRefreshPlugIns doesn't pick up changes to already-present plug-ins
915         https://bugs.webkit.org/show_bug.cgi?id=166942
916         rdar://problem/29839194
917
918         Reviewed by Sam Weinig.
919
920         * wtf/spi/cf/CFBundleSPI.h:
921         Add SPI declaration.
922
923 2017-01-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
924
925         [GTK] Should support key and code properties on keyboard events
926         https://bugs.webkit.org/show_bug.cgi?id=166759
927
928         Reviewed by Carlos Garcia Campos.
929
930         * wtf/FeatureDefines.h: enable key and code properties support for GTK.
931
932 2017-01-08  Antti Koivisto  <antti@apple.com>
933
934         Move cache coders to WTF
935         https://bugs.webkit.org/show_bug.cgi?id=166825
936
937         Rubber-stamped by Sam Weinig.
938
939         Make it possible to use robust serialization of WTF types on the lower levels of the stack.
940
941         * WTF.xcodeproj/project.pbxproj:
942         * wtf/persistence: Added.
943         * wtf/persistence/Coder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoder.h.
944         (WebKit::NetworkCache::Coder::encode): Deleted.
945         (WebKit::NetworkCache::Coder::decode): Deleted.
946         * wtf/persistence/Coders.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.
947         (WebKit::NetworkCache::Coder<AtomicString>::encode): Deleted.
948         (WebKit::NetworkCache::Coder<AtomicString>::decode): Deleted.
949         (WebKit::NetworkCache::Coder<CString>::encode): Deleted.
950         (WebKit::NetworkCache::Coder<CString>::decode): Deleted.
951         (WebKit::NetworkCache::Coder<String>::encode): Deleted.
952         (WebKit::NetworkCache::decodeStringText): Deleted.
953         (WebKit::NetworkCache::Coder<String>::decode): Deleted.
954         (WebKit::NetworkCache::Coder<SHA1::Digest>::encode): Deleted.
955         (WebKit::NetworkCache::Coder<SHA1::Digest>::decode): Deleted.
956         (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::encode): Deleted.
957         (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::decode): Deleted.
958         * wtf/persistence/Coders.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.h.
959         (WebKit::NetworkCache::Coder<std::optional<T>>::encode): Deleted.
960         (WebKit::NetworkCache::Coder<std::optional<T>>::decode): Deleted.
961         * wtf/persistence/Decoder.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.cpp.
962         (WebKit::NetworkCache::Decoder::Decoder): Deleted.
963         (WebKit::NetworkCache::Decoder::~Decoder): Deleted.
964         (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain): Deleted.
965         (WebKit::NetworkCache::Decoder::decodeFixedLengthData): Deleted.
966         (WebKit::NetworkCache::Decoder::decodeNumber): Deleted.
967         (WebKit::NetworkCache::Decoder::decode): Deleted.
968         (WebKit::NetworkCache::Decoder::verifyChecksum): Deleted.
969         * wtf/persistence/Decoder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.h.
970         (WebKit::NetworkCache::Decoder::length): Deleted.
971         (WebKit::NetworkCache::Decoder::currentOffset): Deleted.
972         (WebKit::NetworkCache::Decoder::decodeEnum): Deleted.
973         (WebKit::NetworkCache::Decoder::decode): Deleted.
974         (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain): Deleted.
975         * wtf/persistence/Encoder.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.cpp.
976         (WebKit::NetworkCache::Encoder::Encoder): Deleted.
977         (WebKit::NetworkCache::Encoder::~Encoder): Deleted.
978         (WebKit::NetworkCache::Encoder::grow): Deleted.
979         (WebKit::NetworkCache::Encoder::updateChecksumForData): Deleted.
980         (WebKit::NetworkCache::Encoder::encodeFixedLengthData): Deleted.
981         (WebKit::NetworkCache::Encoder::encodeNumber): Deleted.
982         (WebKit::NetworkCache::Encoder::encode): Deleted.
983         (WebKit::NetworkCache::Encoder::encodeChecksum): Deleted.
984         * wtf/persistence/Encoder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h.
985         (WebKit::NetworkCache::Encoder::encodeEnum): Deleted.
986         (WebKit::NetworkCache::Encoder::encode): Deleted.
987         (WebKit::NetworkCache::Encoder::operator<<): Deleted.
988         (WebKit::NetworkCache::Encoder::buffer): Deleted.
989         (WebKit::NetworkCache::Encoder::bufferSize): Deleted.
990         (WebKit::NetworkCache::Encoder::updateChecksumForNumber): Deleted.
991
992 2017-01-08  Konstantin Tokarev  <annulen@yandex.ru>
993
994         Introduce CPU(X86_SSE2) instead of various SSE2 checks
995         https://bugs.webkit.org/show_bug.cgi?id=166808
996
997         Reviewed by Michael Catanzaro.
998
999         Now copyLCharsFromUCharSource can use SSE2 implementation on non-Darwin
1000         OSes, and all SSE2 code paths are available for MSVC on x86 if /arch:SSE2
1001         or higher is enabled, and for MSVC on x86_64.
1002
1003         * wtf/Platform.h:
1004         * wtf/text/ASCIIFastPath.h:
1005         (WTF::copyLCharsFromUCharSource):
1006
1007 2017-01-05  Myles C. Maxfield  <mmaxfield@apple.com>
1008
1009         Carets can split up marriages and families
1010         https://bugs.webkit.org/show_bug.cgi?id=166711
1011         <rdar://problem/29019333>
1012
1013         Reviewed by Alex Christensen.
1014
1015         There are four code points which should be allowed to accept emoji modifiers:
1016         - U+1F46A FAMILY
1017         - U+1F46B MAN AND WOMAN HOLDING HANDS
1018         - U+1F46C TWO MEN HOLDING HANDS
1019         - U+1F46D TWO WOMEN HOLDING HANDS
1020
1021         Even though macOS's and iOS's emoji keyboard don't allow users to actually type
1022         these combinations, we may still receive them from other platforms. We should
1023         therefore treat these as joining sequences. Rendering isn't a problem because
1024         the fonts accept the emoji modifiers, but our caret placement code isn't educated
1025         about it. Currently, we treat these emoji groups as ligatures, allowing the caret
1026         to be placed between the two code points, which visually shows as being horizontally
1027         centered in the glyph. Instead, we should treat these code points as accepting
1028         emoji modifiers.
1029
1030         Tests: editing/caret/emoji.html
1031                editing/caret/ios/emoji.html
1032
1033         * wtf/text/TextBreakIterator.cpp:
1034         (WTF::cursorMovementIterator):
1035
1036 2017-01-05  Filip Pizlo  <fpizlo@apple.com>
1037
1038         AutomaticThread timeout shutdown leaves a small window where notify() would think that the thread is still running
1039         https://bugs.webkit.org/show_bug.cgi?id=166742
1040
1041         Reviewed by Geoffrey Garen.
1042         
1043         Remove the use of the RAII ThreadScope, since the use of RAII helped make this bug possible:
1044         we'd do ~ThreadScope after we had done ~LockHolder, so in between when we decided to shut
1045         down a thread and when it reported itself as being shut down, there was a window where a
1046         notify() call would get confused.
1047         
1048         Now, we run all thread shutdown stuff while the lock is held. We release the lock last. One
1049         API implication is that threadWillStop becomes threadIsStopping and it's called while the
1050         lock is held. This seems benign.
1051
1052         * wtf/AutomaticThread.cpp:
1053         (WTF::AutomaticThread::start):
1054         (WTF::AutomaticThread::threadIsStopping):
1055         (WTF::AutomaticThread::ThreadScope::ThreadScope): Deleted.
1056         (WTF::AutomaticThread::ThreadScope::~ThreadScope): Deleted.
1057         (WTF::AutomaticThread::threadWillStop): Deleted.
1058         * wtf/AutomaticThread.h:
1059
1060 2017-01-04  Darin Adler  <darin@apple.com>
1061
1062         Remove PassRefPtr use from the "html" directory, other improvements
1063         https://bugs.webkit.org/show_bug.cgi?id=166635
1064
1065         Reviewed by Alex Christensen.
1066
1067         * wtf/RefPtr.h:
1068         (WTF::makeRefPtr): Added.
1069
1070 2017-01-04  Yusuke Suzuki  <utatane.tea@gmail.com>
1071
1072         Unreviewed build fix after r210313
1073         https://bugs.webkit.org/show_bug.cgi?id=166676
1074
1075         Revert `#pragma once` to ifdefs due to build failure.
1076
1077         * wtf/text/StringView.h:
1078
1079 2017-01-04  Yusuke Suzuki  <utatane.tea@gmail.com>
1080
1081         Limit thread name appropriately
1082         https://bugs.webkit.org/show_bug.cgi?id=166676
1083
1084         Reviewed by Sam Weinig.
1085
1086         In some platform, the max length of thread names are limited.
1087         For example, the number of the max length is 32 in Windows and
1088         16 in Linux. But the specified thread name is typically long
1089         in WebKit like "com.apple.CoreIPC.ReceiveQueue"
1090
1091         We port the logic substring the thread name in
1092         generic/WorkQueueGeneric.cpp to Threading. It retrieves the name
1093         "ReceiveQueue" from "com.apple.CoreIPC.ReceiveQueue". And apply
1094         the appropriate the thread name limit and use it on Linux and
1095         Windows environment.
1096
1097         * wtf/Threading.cpp:
1098         (WTF::normalizeThreadName):
1099         (WTF::createThread):
1100         * wtf/Threading.h:
1101         * wtf/ThreadingPthreads.cpp:
1102         (WTF::initializeCurrentThreadInternal):
1103         * wtf/ThreadingWin.cpp:
1104         (WTF::initializeCurrentThreadInternal):
1105         * wtf/generic/WorkQueueGeneric.cpp:
1106         (WorkQueue::platformInitialize):
1107         * wtf/text/StringView.h:
1108         (WTF::StringView::left):
1109         (WTF::StringView::right):
1110         (WTF::StringView::reverseFind):
1111
1112 2017-01-04  Sam Weinig  <sam@webkit.org>
1113
1114         REGRESSION (r210257): com.apple.WebKit.WebContent.Development crashed in com.apple.WebCore: WebCore::ExceptionOr<WTF::Ref<WebCore::Database> >::operator= + 14
1115         <rdar://problem/29866398> 
1116
1117         * wtf/Expected.h:
1118         (WTF::Expected::swap):
1119         Add missing calls to destroy() when moving things over each other in a union.
1120
1121 2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>
1122
1123         Use prctl to name thread on Linux
1124         https://bugs.webkit.org/show_bug.cgi?id=166663
1125
1126         Reviewed by Michael Catanzaro.
1127
1128         It is quite useful if we can name threads. This name will be shown in GDB.
1129         While macOS uses pthread_setname_np, we can use prctl on Linux.
1130
1131         * wtf/ThreadingPthreads.cpp:
1132         (WTF::initializeCurrentThreadInternal):
1133
1134 2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>
1135
1136         WorkQueueGeneric's platformInvalidate() can deadlock when called on the RunLoop's thread
1137         https://bugs.webkit.org/show_bug.cgi?id=166645
1138
1139         Reviewed by Carlos Garcia Campos.
1140
1141         WorkQueue can be destroyed on its invoking thread itself.
1142         The scenario is the following.
1143
1144             1. Create WorkQueue (in thread A).
1145             2. Dispatch a task (in thread A, dispatching a task to thread B).
1146             3. Deref in thread A.
1147             4. The task is executed in thread B.
1148             5. Deref in thread B.
1149             6. The WorkQueue is destroyed, calling platformInvalidate in thread B.
1150
1151         In that case, if platformInvalidate waits thread B's termination, it causes deadlock.
1152         We do not need to wait the thread termination.
1153
1154         * wtf/WorkQueue.h:
1155         * wtf/generic/WorkQueueGeneric.cpp:
1156         (WorkQueue::platformInitialize):
1157         (WorkQueue::platformInvalidate):
1158
1159 2017-01-03  Sam Weinig  <sam@webkit.org>
1160
1161         Make WTF::Expected support Ref template parameters
1162         https://bugs.webkit.org/show_bug.cgi?id=166662
1163
1164         Reviewed by Alex Christensen.
1165
1166         Tests: Added to TestWebKitAPI/Expected.cpp
1167
1168         * wtf/Expected.h:
1169         (WTF::UnexpectedType::value):
1170         Add overloads based on this value type to allow getting at the value
1171         as an rvalue for moving the error into the Expected.
1172
1173         (WTF::Expected::Expected):
1174         Add overload that takes an ErrorType/UnexpectedType<ErrorType> as an rvalue.
1175
1176         (WTF::Expected::swap):
1177         Move the temporary value/error rather than copying.
1178
1179 2017-01-02  Julien Brianceau  <jbriance@cisco.com>
1180
1181         Remove sh4 specific code from JavaScriptCore
1182         https://bugs.webkit.org/show_bug.cgi?id=166640
1183
1184         Reviewed by Filip Pizlo.
1185
1186         * wtf/Platform.h:
1187
1188 2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>
1189
1190         Leverage Substring to create new AtomicStringImpl for StaticStringImpl and SymbolImpl
1191         https://bugs.webkit.org/show_bug.cgi?id=166636
1192
1193         Reviewed by Darin Adler.
1194
1195         Previously we always create the full atomic string if we need to create the same string
1196         based on the given value. For example, when generating AtomicStringImpl from the SymbolImpl,
1197         we need to create a new AtomicStringImpl since SymbolImpl never becomes `isAtomic() == true`.
1198         But it is costly.
1199
1200         This patch leverages the substring system of StringImpl. Instead of allocating the completely
1201         duplicate string, we create a substring StringImpl that shares the same content with the
1202         base string.
1203
1204         * wtf/text/AtomicStringImpl.cpp:
1205         (WTF::stringTable):
1206         (WTF::addToStringTable):
1207         (WTF::addSubstring):
1208         (WTF::AtomicStringImpl::addSlowCase):
1209         (WTF::AtomicStringImpl::remove):
1210         (WTF::AtomicStringImpl::lookUpSlowCase):
1211         * wtf/text/StringImpl.h:
1212         (WTF::StringImpl::StaticStringImpl::operator StringImpl&):
1213
1214 2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>
1215
1216         Use StaticStringImpl instead of StaticASCIILiteral
1217         https://bugs.webkit.org/show_bug.cgi?id=166586
1218
1219         Reviewed by Darin Adler.
1220
1221         It is more handy way to define static StringImpl. It calculates the length
1222         and hash value by using the constexpr constructor and function. So we do
1223         not need to calculate these things in Perl script.
1224         And it allows us to use StaticStringImpl in the hand written C++ code.
1225         Previously, we need to calculate the length and hash value by hand if we
1226         would like to use StaticASCIILiteral in the hand written C++ code, and it
1227         meant that we cannot use it at all in the hand written C++ code.
1228
1229         * wtf/text/AtomicStringImpl.cpp:
1230         (WTF::AtomicStringImpl::addSlowCase):
1231         (WTF::AtomicStringImpl::lookUpSlowCase):
1232         * wtf/text/AtomicStringImpl.h:
1233         * wtf/text/StringImpl.h:
1234         * wtf/text/SymbolImpl.h:
1235         * wtf/text/UniquedStringImpl.h:
1236
1237 2017-01-02  Andreas Kling  <akling@apple.com>
1238
1239         Discard media controls JS/CSS caches under memory pressure.
1240         <https://webkit.org/b/166639>
1241
1242         Reviewed by Antti Koivisto.
1243
1244         * wtf/text/WTFString.h:
1245         (WTF::String::clearImplIfNotShared): Add a helper for clearing a String if the underlying
1246         StringImpl is not referenced by anyone else.
1247
1248 2016-12-22  Mark Lam  <mark.lam@apple.com>
1249
1250         De-duplicate finally blocks.
1251         https://bugs.webkit.org/show_bug.cgi?id=160168
1252
1253         Reviewed by Saam Barati.
1254
1255         Added some methods to bring SegmentedVector closer to parity with Vector.
1256
1257         * wtf/SegmentedVector.h:
1258         (WTF::SegmentedVector::first):
1259         (WTF::SegmentedVector::last):
1260         (WTF::SegmentedVector::takeLast):
1261
1262 2016-12-19  Mark Lam  <mark.lam@apple.com>
1263
1264         Rolling out r209974 and r209952. They break some websites in mysterious ways. Step 2: Rollout r209952.
1265         https://bugs.webkit.org/show_bug.cgi?id=166049
1266
1267         Not reviewed.
1268
1269         * wtf/SegmentedVector.h:
1270         (WTF::SegmentedVector::last):
1271         (WTF::SegmentedVector::first): Deleted.
1272         (WTF::SegmentedVector::takeLast): Deleted.
1273
1274 2016-12-16  Mark Lam  <mark.lam@apple.com>
1275
1276         Add predecessor info to dumps from JSC_dumpBytecodeLivenessResults=true.
1277         https://bugs.webkit.org/show_bug.cgi?id=165958
1278
1279         Reviewed by Keith Miller.
1280
1281         Added some methods to bring SegmentedVector closer to parity with Vector.
1282
1283         * wtf/SegmentedVector.h:
1284         (WTF::SegmentedVector::first):
1285         (WTF::SegmentedVector::last):
1286         (WTF::SegmentedVector::takeLast):
1287
1288 2016-12-16  Michael Saboff  <msaboff@apple.com>
1289
1290         REGRESSION: HipChat and Mail sometimes hang beneath JSC::Heap::lastChanceToFinalize()
1291         https://bugs.webkit.org/show_bug.cgi?id=165962
1292
1293         Reviewed by Filip Pizlo.
1294
1295         There is an inherent race in Condition::waitFor() where the timeout can happen just before
1296         a notify from another thread.
1297
1298         Fixed this by adding a condition variable and flag to each AutomaticThread.  The flag
1299         is used to signify to a notifying thread that the thread is waiting.  That flag is set
1300         in the waiting thread before calling waitFor() and cleared by another thread when it
1301         notifies the thread.  The access to that flag happens when the lock is held.
1302         Now the waiting thread checks if the flag after a timeout to see that it in fact should
1303         proceed like a normal notification.
1304
1305         The added condition variable allows us to target a specific thread.  We used to keep a list
1306         of waiting threads, now we keep a list of all threads.  To notify one thread, we look for
1307         a waiting thread and notify it directly.  If we can't find a waiting thread, we start a
1308         sleeping thread.
1309
1310         We notify all threads by waking all waiting threads and starting all sleeping threads.
1311
1312         * wtf/AutomaticThread.cpp:
1313         (WTF::AutomaticThreadCondition::notifyOne):
1314         (WTF::AutomaticThreadCondition::notifyAll):
1315         (WTF::AutomaticThread::isWaiting):
1316         (WTF::AutomaticThread::notify):
1317         (WTF::AutomaticThread::start):
1318         * wtf/AutomaticThread.h:
1319
1320 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
1321
1322         Unreviewed build fix after r209910
1323
1324         Unreviewed.
1325
1326         * wtf/Platform.h:
1327
1328 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
1329
1330         Stop reinterpret_casting UBreakIterators to the undefined type TextBreakIterator
1331         https://bugs.webkit.org/show_bug.cgi?id=165931
1332
1333         We have a class declaration for TextBreakIterator but no definition for it. When we
1334         create an ICU UBreakIterator, we immediately reinterpret_cast it to this undefined
1335         type, and pass it around our code inside WebCore. Then, whenever we want to actually
1336         use this iterator, we reinterpret_cast it back to UBreakIterator. This is likely due
1337         to some ports historically implementing breaking interators on top of other libraries
1338         other than ICU; however, now, all ports use ICU. Because this internal type is not
1339         helpful and just adds confusion, we should just call our breaking iterators what
1340         they are: UBreakIterators.
1341
1342         This patch is a mechanical replacement of TextBreakIterator to UBreakIterator and
1343         removes the functions we were calling which pass through directly to ubrk_*().
1344
1345         Reviewed by Alex Christensen.
1346
1347         * wtf/text/LineBreakIteratorPoolICU.h:
1348         (WTF::LineBreakIteratorPool::take):
1349         (WTF::LineBreakIteratorPool::put):
1350         * wtf/text/StringView.cpp:
1351         (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
1352         * wtf/text/TextBreakIterator.cpp:
1353         (WTF::initializeIterator):
1354         (WTF::initializeIteratorWithRules):
1355         (WTF::setTextForIterator):
1356         (WTF::setContextAwareTextForIterator):
1357         (WTF::wordBreakIterator):
1358         (WTF::sentenceBreakIterator):
1359         (WTF::cursorMovementIterator):
1360         (WTF::acquireLineBreakIterator):
1361         (WTF::releaseLineBreakIterator):
1362         (WTF::openLineBreakIterator):
1363         (WTF::closeLineBreakIterator):
1364         (WTF::getNonSharedCharacterBreakIterator):
1365         (WTF::cacheNonSharedCharacterBreakIterator):
1366         (WTF::isWordTextBreak):
1367         (WTF::numGraphemeClusters):
1368         (WTF::numCharactersInGraphemeClusters):
1369         (WTF::textBreakFirst): Deleted.
1370         (WTF::textBreakLast): Deleted.
1371         (WTF::textBreakNext): Deleted.
1372         (WTF::textBreakPrevious): Deleted.
1373         (WTF::textBreakPreceding): Deleted.
1374         (WTF::textBreakFollowing): Deleted.
1375         (WTF::textBreakCurrent): Deleted.
1376         (WTF::isTextBreak): Deleted.
1377         * wtf/text/TextBreakIterator.h:
1378         (WTF::LazyLineBreakIterator::lastCharacter):
1379         (WTF::LazyLineBreakIterator::secondToLastCharacter):
1380         (WTF::LazyLineBreakIterator::setPriorContext):
1381         (WTF::LazyLineBreakIterator::updatePriorContext):
1382         (WTF::LazyLineBreakIterator::resetPriorContext):
1383         (WTF::LazyLineBreakIterator::priorContextLength):
1384         (WTF::LazyLineBreakIterator::get):
1385         (WTF::NonSharedCharacterBreakIterator::operator UBreakIterator*):
1386         (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*): Deleted.
1387
1388 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
1389
1390         Sort Xcode project files
1391         https://bugs.webkit.org/show_bug.cgi?id=165937
1392
1393         Reviewed by Simon Fraser.
1394
1395         * WTF.xcodeproj/project.pbxproj:
1396
1397 2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>
1398
1399         Added missing override and final specifiers
1400         https://bugs.webkit.org/show_bug.cgi?id=165903
1401
1402         Reviewed by Darin Adler.
1403
1404         * wtf/RunLoop.h:
1405
1406 2016-12-15  Yusuke Suzuki  <utatane.tea@gmail.com>
1407
1408         [JSC] Optimize Kraken stringify
1409         https://bugs.webkit.org/show_bug.cgi?id=165857
1410
1411         Reviewed by Darin Adler.
1412
1413         Kraken json-stringify-tinderbox performance heavily relies on StringBuilder::appendQuotedJSONString.
1414         According to the result produced by Linux `perf`, it occupies 28% of execution time.
1415
1416         We tighten the hottest loop in the above function. We create the super fast path for non escaping case.
1417         And add " and \ cases (since including " in the string is common). Then we fallback to the slow case.
1418
1419         It improves the performance 5.5% in Kraken json-stringify-tinderbox in MBP.
1420
1421             Performance result in my MBP (dandelion).
1422
1423                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
1424                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
1425                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
1426                 with 95% confidence intervals in milliseconds.
1427
1428                                                    baseline                  patched
1429
1430                 json-stringify-tinderbox        29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
1431
1432                 <arithmetic>                    29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
1433
1434             Performance result in my Linux laptop (hanayamata).
1435
1436                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
1437                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
1438                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
1439                 with 95% confidence intervals in milliseconds.
1440
1441                                                    baseline                  patched
1442
1443                 json-stringify-tinderbox        26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
1444
1445                 <arithmetic>                    26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
1446
1447         * wtf/text/StringBuilder.cpp:
1448         (WTF::appendQuotedJSONStringInternalSlow):
1449         (WTF::appendQuotedJSONStringInternal):
1450
1451 2016-12-14  Commit Queue  <commit-queue@webkit.org>
1452
1453         Unreviewed, rolling out r209795.
1454         https://bugs.webkit.org/show_bug.cgi?id=165853
1455
1456         rolled out the wrong revision (Requested by pizlo on #webkit).
1457
1458         Reverted changeset:
1459
1460         "MarkedBlock::marksConveyLivenessDuringMarking should take
1461         into account collection scope"
1462         https://bugs.webkit.org/show_bug.cgi?id=165741
1463         http://trac.webkit.org/changeset/209795
1464
1465 2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>
1466
1467         REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
1468         https://bugs.webkit.org/show_bug.cgi?id=164022
1469
1470         Reviewed by Xabier Rodriguez-Calvar.
1471
1472         * wtf/glib/GLibUtilities.h:
1473         Added new macros to convert gulong to/from gpointer.
1474
1475 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
1476
1477         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
1478         https://bugs.webkit.org/show_bug.cgi?id=165741
1479
1480         Unreviewed, re-landing this with fix (revert erroneous change to Options).
1481
1482         * WTF.xcodeproj/project.pbxproj:
1483         * wtf/CMakeLists.txt:
1484         * wtf/DataLog.cpp:
1485         (WTF::initializeLogFileOnce):
1486         (WTF::initializeLogFile):
1487         (WTF::dataFile):
1488         * wtf/DataLog.h:
1489         * wtf/LockedPrintStream.cpp: Added.
1490         (WTF::LockedPrintStream::LockedPrintStream):
1491         (WTF::LockedPrintStream::~LockedPrintStream):
1492         (WTF::LockedPrintStream::vprintf):
1493         (WTF::LockedPrintStream::flush):
1494         (WTF::LockedPrintStream::begin):
1495         (WTF::LockedPrintStream::end):
1496         * wtf/LockedPrintStream.h: Added.
1497         * wtf/PrintStream.cpp:
1498         (WTF::PrintStream::printfVariableFormat):
1499         (WTF::PrintStream::begin):
1500         (WTF::PrintStream::end):
1501         * wtf/PrintStream.h:
1502         (WTF::PrintStream::atomically):
1503         (WTF::PrintStream::print):
1504         (WTF::PrintStream::println):
1505         (WTF::PrintStream::printImpl):
1506         (WTF::>::unpack):
1507         (WTF::FormatImpl::FormatImpl):
1508         (WTF::FormatImpl::dump):
1509         (WTF::format):
1510         (WTF::printInternal):
1511         * wtf/RecursiveLockAdapter.h: Added.
1512         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
1513         (WTF::RecursiveLockAdapter::lock):
1514         (WTF::RecursiveLockAdapter::unlock):
1515         (WTF::RecursiveLockAdapter::tryLock):
1516         (WTF::RecursiveLockAdapter::isLocked):
1517         * wtf/WordLock.cpp:
1518         * wtf/WordLock.h:
1519
1520 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
1521
1522         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
1523         https://bugs.webkit.org/show_bug.cgi?id=165741
1524
1525         Unreviewed rollout due to performance regression.
1526
1527         * WTF.xcodeproj/project.pbxproj:
1528         * wtf/CMakeLists.txt:
1529         * wtf/DataLog.cpp:
1530         (WTF::initializeLogFileOnce):
1531         (WTF::initializeLogFile):
1532         (WTF::dataFile):
1533         * wtf/DataLog.h:
1534         * wtf/LockedPrintStream.cpp: Removed.
1535         * wtf/LockedPrintStream.h: Removed.
1536         * wtf/PrintStream.cpp:
1537         (WTF::PrintStream::printfVariableFormat): Deleted.
1538         (WTF::PrintStream::begin): Deleted.
1539         (WTF::PrintStream::end): Deleted.
1540         * wtf/PrintStream.h:
1541         (WTF::PrintStream::print):
1542         (WTF::PrintStream::println):
1543         (WTF::PrintStream::atomically): Deleted.
1544         (WTF::PrintStream::printImpl): Deleted.
1545         (): Deleted.
1546         (WTF::>::unpack): Deleted.
1547         (WTF::FormatImpl::FormatImpl): Deleted.
1548         (WTF::FormatImpl::dump): Deleted.
1549         (WTF::format): Deleted.
1550         * wtf/RecursiveLockAdapter.h: Removed.
1551         * wtf/WordLock.cpp:
1552         * wtf/WordLock.h:
1553
1554 2016-12-13  JF Bastien  <jfbastien@apple.com>
1555
1556         std::expected: fix rvalue forwarding issues
1557         https://bugs.webkit.org/show_bug.cgi?id=165812
1558
1559         Reviewed by Mark Lam.
1560
1561         * wtf/Expected.h:
1562         (WTF::UnexpectedType::UnexpectedType):
1563         (WTF::ExpectedDetail::Base::Base):
1564         (WTF::Expected::Expected):
1565
1566 2016-12-13  Chris Dumez  <cdumez@apple.com>
1567
1568         Unreviewed, rolling out r209544.
1569
1570         Looks like r209489 did not cause the performance regression
1571         after all
1572
1573         Reverted changeset:
1574
1575         "Unreviewed, rolling out r209489."
1576         https://bugs.webkit.org/show_bug.cgi?id=165550
1577         http://trac.webkit.org/changeset/209544
1578
1579 2016-12-13  Commit Queue  <commit-queue@webkit.org>
1580
1581         Unreviewed, rolling out r209725.
1582         https://bugs.webkit.org/show_bug.cgi?id=165811
1583
1584         "Broke ARMv7 builds" (Requested by msaboff on #webkit).
1585
1586         Reverted changeset:
1587
1588         "REGRESSION(r209653): speedometer crashes making virtual slow
1589         path tailcalls"
1590         https://bugs.webkit.org/show_bug.cgi?id=165748
1591         http://trac.webkit.org/changeset/209725
1592
1593 2016-12-13  JF Bastien  <jfbastien@apple.com>
1594
1595         [WTF] Turn tryMakeString(), makeString() into variadic templates
1596         https://bugs.webkit.org/show_bug.cgi?id=147142
1597
1598         Reviewed by Mark Lam.
1599
1600         I wrote this patch while improving WebAssembly's error messages,
1601         and only found this bug afterwards. My implementation does the
1602         bare minimum to make this code variadic without changing
1603         behavior. I think it's better to go with this baby step first, and
1604         improve the code later.
1605
1606         Notable, for my WebAssembly patch I also taught the code to handle
1607         integers and other types (including WebAssembly types). A
1608         follow-up could rely on ADL magic to pretty-format these other
1609         types.
1610
1611         * wtf/text/StringConcatenate.h:
1612         (WTF::sumWithOverflow): This unconditionally does the sum for all
1613         inputs, which the compiler is more likely to appreciate (because
1614         it's the common case) compared to testing for overflow and bailing
1615         on each addition
1616         (WTF::are8Bit): are: the plural of is!
1617         (WTF::makeStringAccumulator): accumulate strings
1618         (WTF::tryMakeStringFromAdapters): a small helper which creates the string adapters
1619         (WTF::tryMakeString): expose out of WTF, since it's part of this file's used API
1620         (WTF::makeString): make it variadic
1621
1622 2016-12-13  Konstantin Tokarev  <annulen@yandex.ru>
1623
1624         Unreviewed, silence -Wsuggest-attribute for GCC with pragmas
1625
1626         * wtf/PrintStream.cpp:
1627         (WTF::PrintStream::printfVariableFormat):
1628
1629 2016-12-12  Michael Saboff  <msaboff@apple.com>
1630
1631         REGRESSION(r209653): speedometer crashes making virtual slow path tailcalls
1632         https://bugs.webkit.org/show_bug.cgi?id=165748
1633
1634         Reviewed by Filip Pizlo.
1635
1636         Rolling back in r209653, r209654, r209663, and r209673.
1637
1638         * wtf/Platform.h:
1639
1640 2016-12-12  Commit Queue  <commit-queue@webkit.org>
1641
1642         Unreviewed, rolling out r209703.
1643         https://bugs.webkit.org/show_bug.cgi?id=165749
1644
1645         Broke Apple builds (Requested by annulen|home on #webkit).
1646
1647         Reverted changeset:
1648
1649         "Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma"
1650         http://trac.webkit.org/changeset/209703
1651
1652 2016-12-12  Konstantin Tokarev  <annulen@yandex.ru>
1653
1654         Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma
1655
1656         * wtf/PrintStream.cpp:
1657         (WTF::PrintStream::printfVariableFormat):
1658         * wtf/PrintStream.h:
1659
1660 2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>
1661
1662         Unreviewed, guarded clang pragma with COMPILER(CLANG) to fix -Werror
1663
1664         * wtf/PrintStream.cpp:
1665         (WTF::PrintStream::printfVariableFormat):
1666
1667 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
1668
1669         Change to use #pragma once (requested by Darin Adler).
1670
1671         * wtf/RecursiveLockAdapter.h:
1672
1673 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
1674
1675         Change to use #pragma once (requested by Darin Adler).
1676
1677         * wtf/LockedPrintStream.h:
1678
1679 2016-12-10  Filip Pizlo  <fpizlo@apple.com>
1680
1681         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
1682         https://bugs.webkit.org/show_bug.cgi?id=165741
1683
1684         Reviewed by Saam Barati.
1685         
1686         To find this bug, I needed to seriously beef up our logging infrastructure.
1687         
1688         It's now the case that:
1689         
1690             dataLog(...);
1691         
1692         will print its output atomically. This happens with some careful magic:
1693         
1694         - dataFile() is now a LockedPrintStream that locks around print().
1695         
1696         - The lock is a recursive lock via RecursiveLockAdapter<>, so if the dump methods end
1697           up calling back into dataLog() then it just works. This is important: say the dump()
1698           calls a getter that itself does logging, maybe because it's encountering badness and
1699           wants to report it before crashing).
1700         
1701         - The lock is a WordLock so that ParkingLot and Lock can keep using dataLog() for
1702           debugging. We probably won't need to debug WordLock anytime soon - the algorithm is
1703           so simple.
1704         
1705         - LockedPrintStream::print(...) causes the print callbacks of its arguments to run on
1706           the underlying PrintStream, so that you don't need to do recursive lock acquisition
1707           on each individual argument and whatever printing it does recursively.
1708
1709         * WTF.xcodeproj/project.pbxproj:
1710         * wtf/CMakeLists.txt:
1711         * wtf/DataLog.cpp:
1712         (WTF::initializeLogFileOnce):
1713         (WTF::initializeLogFile):
1714         (WTF::dataFile):
1715         * wtf/DataLog.h:
1716         * wtf/LockedPrintStream.cpp: Added.
1717         (WTF::LockedPrintStream::LockedPrintStream):
1718         (WTF::LockedPrintStream::~LockedPrintStream):
1719         (WTF::LockedPrintStream::vprintf):
1720         (WTF::LockedPrintStream::flush):
1721         (WTF::LockedPrintStream::begin):
1722         (WTF::LockedPrintStream::end):
1723         * wtf/LockedPrintStream.h: Added.
1724         * wtf/PrintStream.cpp:
1725         (WTF::PrintStream::printfVariableFormat):
1726         (WTF::PrintStream::begin):
1727         (WTF::PrintStream::end):
1728         * wtf/PrintStream.h:
1729         (WTF::PrintStream::atomically):
1730         (WTF::PrintStream::print):
1731         (WTF::PrintStream::println):
1732         (WTF::PrintStream::printImpl):
1733         (WTF::>::unpack):
1734         (WTF::FormatImpl::FormatImpl):
1735         (WTF::FormatImpl::dump):
1736         (WTF::format):
1737         (WTF::printInternal):
1738         * wtf/RecursiveLockAdapter.h: Added.
1739         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
1740         (WTF::RecursiveLockAdapter::lock):
1741         (WTF::RecursiveLockAdapter::unlock):
1742         (WTF::RecursiveLockAdapter::tryLock):
1743         (WTF::RecursiveLockAdapter::isLocked):
1744         * wtf/WordLock.cpp:
1745         * wtf/WordLock.h:
1746
1747 2016-12-11  Darin Adler  <darin@apple.com>
1748
1749         Use std::vsnprintf instead of vasprintf
1750         https://bugs.webkit.org/show_bug.cgi?id=165740
1751
1752         Reviewed by Sam Weinig.
1753
1754         * wtf/Platform.h: Remove HAVE_VASPRINTF.
1755         * wtf/StringExtras.h: Change the vsnprintf workaround to be used only
1756         in older versions of Visual Studio, since the problem it works around
1757         was resolved in Visual Studio 2015.
1758
1759 2016-12-10  Commit Queue  <commit-queue@webkit.org>
1760
1761         Unreviewed, rolling out r209653, r209654, r209663, and
1762         r209673.
1763         https://bugs.webkit.org/show_bug.cgi?id=165739
1764
1765         speedometer crashes (Requested by pizlo on #webkit).
1766
1767         Reverted changesets:
1768
1769         "JSVALUE64: Pass arguments in platform argument registers when
1770         making JavaScript calls"
1771         https://bugs.webkit.org/show_bug.cgi?id=160355
1772         http://trac.webkit.org/changeset/209653
1773
1774         "Unreviewed build fix for 32 bit builds."
1775         http://trac.webkit.org/changeset/209654
1776
1777         "Unreviewed build fix for the CLOOP after r209653"
1778         http://trac.webkit.org/changeset/209663
1779
1780         "REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()"
1781         https://bugs.webkit.org/show_bug.cgi?id=165728
1782         http://trac.webkit.org/changeset/209673
1783
1784 2016-12-10  Chris Dumez  <cdumez@apple.com>
1785
1786         Avoid calling shrink() in the Vector destructor
1787         https://bugs.webkit.org/show_bug.cgi?id=165675
1788
1789         Reviewed by Daniel Bates.
1790
1791         Avoid calling shrink() in the Vector destructor to avoid function call
1792         overhead and unnecessarily reseting m_size to 0.
1793
1794         * wtf/Vector.h:
1795         (WTF::Vector::~Vector):
1796         (WTF::Vector::asanSetBufferSizeToFullCapacity):
1797         (WTF::minCapacity>::asanSetBufferSizeToFullCapacity):
1798
1799 2016-12-09  Michael Saboff  <msaboff@apple.com>
1800
1801         JSVALUE64: Pass arguments in platform argument registers when making JavaScript calls
1802         https://bugs.webkit.org/show_bug.cgi?id=160355
1803
1804         Reviewed by Filip Pizlo.
1805
1806         Added a new build option ENABLE_VM_COUNTERS to enable JIT'able counters.
1807         The default is for the option to be off.
1808
1809         * wtf/Platform.h:
1810         Added ENABLE_VM_COUNTERS
1811
1812 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
1813
1814         Deploy OrdinalNumber in JSC::SourceCode
1815         https://bugs.webkit.org/show_bug.cgi?id=165687
1816
1817         Reviewed by Michael Saboff.
1818
1819         * wtf/text/OrdinalNumber.h:
1820         (WTF::OrdinalNumber::operator>): Added a >.
1821
1822 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
1823
1824         TextPosition and OrdinalNumber should be more like idiomatic numbers
1825         https://bugs.webkit.org/show_bug.cgi?id=165678
1826
1827         Reviewed by Filip Pizlo.
1828
1829         * wtf/text/TextPosition.h:
1830         (WTF::TextPosition::minimumPosition): Deleted. Just use the default
1831         constructor. Other numbers use their default constructors to mean zero.
1832
1833         Any time you need a comment that says "used as a default value", that's
1834         a pretty good indicator that it should be the default constructor.
1835
1836 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
1837
1838         Moved OrdinalNumber into its own file
1839         https://bugs.webkit.org/show_bug.cgi?id=165663
1840
1841         Reviewed by Saam Barati.
1842
1843         * WTF.xcodeproj/project.pbxproj:
1844         * wtf/text/OrdinalNumber.h: Copied from Source/WTF/wtf/text/TextPosition.h.
1845         (WTF::TextPosition::TextPosition): Deleted.
1846         (WTF::TextPosition::operator==): Deleted.
1847         (WTF::TextPosition::operator!=): Deleted.
1848         (WTF::TextPosition::minimumPosition): Deleted.
1849         (WTF::TextPosition::belowRangePosition): Deleted.
1850         * wtf/text/TextPosition.h:
1851         (WTF::OrdinalNumber::fromZeroBasedInt): Deleted.
1852         (WTF::OrdinalNumber::fromOneBasedInt): Deleted.
1853         (WTF::OrdinalNumber::OrdinalNumber): Deleted.
1854         (WTF::OrdinalNumber::zeroBasedInt): Deleted.
1855         (WTF::OrdinalNumber::oneBasedInt): Deleted.
1856         (WTF::OrdinalNumber::operator==): Deleted.
1857         (WTF::OrdinalNumber::operator!=): Deleted.
1858         (WTF::OrdinalNumber::first): Deleted.
1859         (WTF::OrdinalNumber::beforeFirst): Deleted.
1860
1861 2016-12-08  David Kilzer  <ddkilzer@apple.com>
1862
1863         Always check the return value of pthread_key_create()
1864         <https://webkit.org/b/165274>
1865
1866         Reviewed by Darin Adler.
1867
1868         * wtf/ThreadIdentifierDataPthreads.cpp:
1869         (WTF::ThreadIdentifierData::initializeOnce): Make the code more
1870         readable by assigning a variable to the result of
1871         pthread_key_create().  This matches the idiom used elsewhere.
1872
1873 2016-12-08  Keith Miller  <keith_miller@apple.com>
1874
1875         Add 64-bit signed LEB decode method
1876         https://bugs.webkit.org/show_bug.cgi?id=165630
1877
1878         Reviewed by Ryosuke Niwa.
1879
1880         Add int64 LEB decode and fix some 64-bit specific issues
1881         with the decoder. There is also a fix where we would allow
1882         LEBs with canonical length + 1 size that is fixed by this
1883         patch.
1884
1885         * wtf/LEBDecoder.h:
1886         (WTF::LEBDecoder::decodeUInt):
1887         (WTF::LEBDecoder::decodeInt):
1888         (WTF::LEBDecoder::decodeUInt32):
1889         (WTF::LEBDecoder::decodeUInt64):
1890         (WTF::LEBDecoder::decodeInt32):
1891         (WTF::LEBDecoder::decodeInt64):
1892
1893 2016-12-08  Anders Carlsson  <andersca@apple.com>
1894
1895         Defer sending Mach messages if the queue is full
1896         https://bugs.webkit.org/show_bug.cgi?id=165622
1897         rdar://problem/29518036
1898
1899         Reviewed by Brady Eidson.
1900
1901         Add new SPI.
1902
1903         * wtf/spi/darwin/XPCSPI.h:
1904
1905 2016-12-06  Filip Pizlo  <fpizlo@apple.com>
1906
1907         Concurrent GC should be stable enough to land enabled on X86_64
1908         https://bugs.webkit.org/show_bug.cgi?id=164990
1909
1910         Reviewed by Geoffrey Garen.
1911         
1912         Adds the ability to say:
1913         
1914         auto locker = holdLock(any type of lock)
1915         
1916         Instead of having to say:
1917         
1918         Locker<LockType> locker(locks of type LockType)
1919         
1920         I think that we should use "auto locker = holdLock(lock)" as the default way that we acquire
1921         locks unless we need to use a special locker type.
1922         
1923         This also adds the ability to safepoint a lock. Safepointing a lock is basically a super fast
1924         way of unlocking it fairly and then immediately relocking it - i.e. letting anyone who is
1925         waiting to run without losing steam of there is noone waiting.
1926
1927         * wtf/Lock.cpp:
1928         (WTF::LockBase::safepointSlow):
1929         * wtf/Lock.h:
1930         (WTF::LockBase::safepoint):
1931         * wtf/LockAlgorithm.h:
1932         (WTF::LockAlgorithm::safepointFast):
1933         (WTF::LockAlgorithm::safepoint):
1934         (WTF::LockAlgorithm::safepointSlow):
1935         * wtf/Locker.h:
1936         (WTF::AbstractLocker::AbstractLocker):
1937         (WTF::Locker::tryLock):
1938         (WTF::Locker::operator bool):
1939         (WTF::Locker::Locker):
1940         (WTF::Locker::operator=):
1941         (WTF::holdLock):
1942         (WTF::tryHoldLock):
1943
1944 2016-12-08  Chris Dumez  <cdumez@apple.com>
1945
1946         Unreviewed, rolling out r209489.
1947
1948         Likely caused large regressions on JetStream, Sunspider and
1949         Speedometer
1950
1951         Reverted changeset:
1952
1953         "Add system trace points for JavaScript VM entry/exit"
1954         https://bugs.webkit.org/show_bug.cgi?id=165550
1955         http://trac.webkit.org/changeset/209489
1956
1957 2016-12-07  Simon Fraser  <simon.fraser@apple.com>
1958
1959         Add system trace points for JavaScript VM entry/exit
1960         https://bugs.webkit.org/show_bug.cgi?id=165550
1961
1962         Reviewed by Tim Horton.
1963         
1964         Add trace points for entry/exit into/out of the JS VM.
1965
1966         * wtf/SystemTracing.h:
1967
1968 2016-12-06  Alexey Proskuryakov  <ap@apple.com>
1969
1970         Correct SDKROOT values in xcconfig files
1971         https://bugs.webkit.org/show_bug.cgi?id=165487
1972         rdar://problem/29539209
1973
1974         Reviewed by Dan Bernstein.
1975
1976         Fix suggested by Dan Bernstein.
1977
1978         * Configurations/DebugRelease.xcconfig:
1979
1980 2016-12-06  Michael Saboff  <msaboff@apple.com>
1981
1982         REGRESSION(r209399): Causes crashes when dumping JIT disassembly
1983         https://bugs.webkit.org/show_bug.cgi?id=165483
1984
1985         Reviewed by Geoffrey Garen.
1986
1987         Fixed the RELEASE_ASSERT() to check that the 6 character string is terminated by a null
1988         character.
1989
1990         * wtf/SixCharacterHash.cpp:
1991         (WTF::sixCharacterHashStringToInteger):
1992
1993 2016-12-04  Darin Adler  <darin@apple.com>
1994
1995         Use ASCIICType more, and improve it a little bit
1996         https://bugs.webkit.org/show_bug.cgi?id=165360
1997
1998         Reviewed by Sam Weinig.
1999
2000         * wtf/ASCIICType.h: Added declarations of all the functions to the top of the file,
2001         so we have a list of what's available, not just a mix of that and the implementation.
2002
2003         * wtf/HexNumber.h:
2004         (WTF::Internal::hexDigitsForMode): Moved lowerHexDigits and upperHexDigits
2005         inside this function.
2006         (WTF::appendByteAsHex): Use auto.
2007         (WTF::placeByteAsHexCompressIfPossible): Ditto.
2008         (WTF::placeByteAsHex): Ditto.
2009         (WTF::appendUnsignedAsHex): Ditto.
2010         (WTF::appendUnsigned64AsHex): Ditto.
2011         (WTF::appendUnsignedAsHexFixedSize): Ditto.
2012         (WTF::isHexDigit): Deleted.
2013         (WTF::uncheckedHexDigit): Deleted.
2014         (WTF::hexDigitValue): Deleted.
2015         (WTF::uncheckedHexDigitValue): Deleted.
2016
2017         * wtf/SixCharacterHash.cpp:
2018         (WTF::sixCharacterHashStringToInteger): Use isASCIIUpper, isASCIILower, and
2019         isASCIIDigit. Also added some FIXMEs; for some reason this function uses
2020         RELEASE_ASSERT to abort if the passed-in string is not six characters long,
2021         and it's not clear to me why this is so critical to assert.
2022         (WTF::integerToSixCharacterHashString): Moved the table inside this function,
2023         obviating the need for a macro named TABLE.
2024
2025         * wtf/dtoa/bignum.cc:
2026         (WTF::double_conversion::HexCharValue): Deleted.
2027         (WTF::double_conversion::Bignum::AssignHexString): Use toASCIIHexValue.
2028         * wtf/dtoa/double-conversion.cc:
2029         (WTF::double_conversion::StringToDoubleConverter::StringToDouble): Use isASCIIDigit.
2030
2031         * wtf/text/StringBuilder.cpp:
2032         (WTF::appendQuotedJSONStringInternal): Use upperNibbleToASCIIHexDigit and
2033         lowerNibbleToASCIIHexDigit.
2034
2035         * wtf/text/StringImpl.cpp:
2036         (WTF::StringImpl::convertToUppercaseWithoutLocale): Use toASCIIUpper.
2037         Removed the workaround for a bug that was fixed in Visual Studio 2013.
2038
2039 2016-12-05  Joseph Pecoraro  <pecoraro@apple.com>
2040
2041         REGRESSION(r208985): SafariForWebKitDevelopment Symbol Not Found looking for method with WTF::Optional
2042         https://bugs.webkit.org/show_bug.cgi?id=165351
2043
2044         Reviewed by Yusuke Suzuki.
2045
2046         Include a slimmed down version of WTF::Optional which older versions
2047         of Safari still depend on for a JavaScriptCore exported symbol.
2048         To prevent misuse name it WTF::DeprecatedOptional and use it only in
2049         the one instance it is needed.
2050
2051         * WTF.xcodeproj/project.pbxproj:
2052         * wtf/DeprecatedOptional.h: Added.
2053         (WTF::Optional::operator bool):
2054         (WTF::Optional::value):
2055         (WTF::Optional::asPtr):
2056
2057 2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>
2058
2059         Add __STDC_FORMAT_MACROS before inttypes.h is included
2060         https://bugs.webkit.org/show_bug.cgi?id=165374
2061
2062         We need formatting macros like PRIu64 to be available in all places where
2063         inttypes.h header is used. All these usages get inttypes.h definitions
2064         via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
2065         macros are not used anymore since r185129.
2066
2067         This patch fixes multiple build errors with MinGW and reduces number of
2068         independent __STDC_FORMAT_MACROS uses in the code base.
2069
2070         Reviewed by Darin Adler.
2071
2072         * wtf/Assertions.h: Define __STDC_FORMAT_MACROS.
2073         * wtf/StdLibExtras.h: Remove definition of PRId64 for Windows, as we
2074         have __STDC_FORMAT_MACROS defined now.
2075
2076 2016-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>
2077
2078         Refactor SymbolImpl layout
2079         https://bugs.webkit.org/show_bug.cgi?id=165247
2080
2081         Reviewed by Darin Adler.
2082
2083         This patch moves SymbolImpl initialization from StringImpl to SymbolImpl.
2084         In SymbolImpl, we create the appropriate fields. At that time, these fields
2085         should be aligned to the BufferSubstring StringImpl.
2086
2087         And we newly create the `m_flags` in SymbolImpl. Instead of using special
2088         StringImpl::null(), we store s_flagIsNullSymbol flag here. In WTF, we have
2089         the invariant that StringImpl::empty() is the only atomic empty string.
2090         But StringImpl::null() breaks this invariant. Using a special flag is safer
2091         way to represent the null Symbol `Symbol()`.
2092
2093         * WTF.xcodeproj/project.pbxproj:
2094         * wtf/CMakeLists.txt:
2095         * wtf/StdLibExtras.h:
2096         (WTF::roundUpToMultipleOfImpl0):
2097         (WTF::roundUpToMultipleOfImpl):
2098         (WTF::roundUpToMultipleOf):
2099         * wtf/text/StringImpl.cpp:
2100         (WTF::StringImpl::~StringImpl):
2101         (WTF::StringImpl::createSymbol): Deleted.
2102         (WTF::StringImpl::createNullSymbol): Deleted.
2103         * wtf/text/StringImpl.h:
2104         (WTF::StringImpl::isAtomic):
2105         (WTF::StringImpl::StringImpl):
2106         (WTF::StringImpl::requiresCopy):
2107         (WTF::StringImpl::isNullSymbol): Deleted.
2108         (WTF::StringImpl::symbolAwareHash): Deleted.
2109         (WTF::StringImpl::existingSymbolAwareHash): Deleted.
2110         (WTF::StringImpl::null): Deleted.
2111         (WTF::StringImpl::extractFoldedStringInSymbol): Deleted.
2112         (WTF::StringImpl::symbolRegistry): Deleted.
2113         (WTF::StringImpl::hashForSymbol): Deleted.
2114         * wtf/text/StringStatics.cpp:
2115         (WTF::StringImpl::nextHashForSymbol): Deleted.
2116         * wtf/text/SymbolImpl.cpp: Copied from Source/WTF/wtf/text/SymbolRegistry.cpp.
2117         (WTF::SymbolImpl::nextHashForSymbol):
2118         (WTF::SymbolImpl::create):
2119         (WTF::SymbolImpl::createNullSymbol):
2120         * wtf/text/SymbolImpl.h:
2121         (WTF::SymbolImpl::hashForSymbol):
2122         (WTF::SymbolImpl::symbolRegistry):
2123         (WTF::SymbolImpl::isNullSymbol):
2124         (WTF::SymbolImpl::extractFoldedString):
2125         (WTF::SymbolImpl::SymbolImpl):
2126         (WTF::StringImpl::symbolAwareHash):
2127         (WTF::StringImpl::existingSymbolAwareHash):
2128         * wtf/text/SymbolRegistry.cpp:
2129         (WTF::SymbolRegistry::~SymbolRegistry):
2130         (WTF::SymbolRegistry::symbolForKey):
2131         (WTF::SymbolRegistry::keyForSymbol):
2132         * wtf/text/UniquedStringImpl.h:
2133         (WTF::UniquedStringImpl::UniquedStringImpl):
2134
2135 2016-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>
2136
2137         Introduce StringImpl::StaticStringImpl with constexpr constructor
2138         https://bugs.webkit.org/show_bug.cgi?id=165093
2139
2140         Reviewed by Darin Adler.
2141
2142         This patch adds new class, StringImpl::StaticStringImpl.
2143         By using this class, we can easily create static StringImpls.
2144         This class has constexpr constructor. You can initialize instances
2145         of this class as global static variables without invoking global
2146         constructors.
2147
2148         We already have similar system, StaticASCIILiteral. But using it
2149         requires some special perl script since we need to calculate
2150         hash value. On the other hand, we can use StaticStringImpl without
2151         any script supports since we implement constexpr hash function.
2152         In the future, we will replace all the use of StaticASCIILiteral
2153         with this StaticStringImpl.
2154
2155         We define empty / null strings as StaticStringImpl. And we make
2156         StringImpl::empty() & StringImpl::null() inline functions.
2157
2158         * wtf/Hasher.h:
2159         (WTF::StringHasher::hashWithTop8BitsMasked):
2160         (WTF::StringHasher::hash):
2161         (WTF::StringHasher::finalize):
2162         (WTF::StringHasher::finalizeAndMaskTop8Bits):
2163         (WTF::StringHasher::computeLiteralHash):
2164         (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
2165         (WTF::StringHasher::avalancheBits3):
2166         (WTF::StringHasher::avalancheBits2):
2167         (WTF::StringHasher::avalancheBits1):
2168         (WTF::StringHasher::avalancheBits0):
2169         (WTF::StringHasher::avalancheBits):
2170         (WTF::StringHasher::avoidZero):
2171         (WTF::StringHasher::processPendingCharacter):
2172         (WTF::StringHasher::calculateWithRemainingLastCharacter1):
2173         (WTF::StringHasher::calculateWithRemainingLastCharacter0):
2174         (WTF::StringHasher::calculateWithRemainingLastCharacter):
2175         (WTF::StringHasher::calculate1):
2176         (WTF::StringHasher::calculate0):
2177         (WTF::StringHasher::calculate):
2178         (WTF::StringHasher::computeLiteralHashImpl):
2179         * wtf/text/StringImpl.cpp:
2180         * wtf/text/StringImpl.h:
2181         (WTF::StringImpl::StaticStringImpl::StaticStringImpl):
2182         (WTF::StringImpl::null):
2183         (WTF::StringImpl::empty):
2184         * wtf/text/StringStatics.cpp:
2185         (WTF::StringImpl::null): Deleted.
2186         (WTF::StringImpl::empty): Deleted.
2187
2188 2016-11-30  Darin Adler  <darin@apple.com>
2189
2190         Roll out StringBuilder changes from the previous patch.
2191         They were a slowdown on a Kraken JSON test.
2192
2193         * wtf/text/StringBuilder.cpp:
2194         * wtf/text/StringBuilder.h:
2195         Roll out changes from below.
2196
2197 2016-11-30  Darin Adler  <darin@apple.com>
2198
2199         Streamline and speed up tokenizer and segmented string classes
2200         https://bugs.webkit.org/show_bug.cgi?id=165003
2201
2202         And do it without re-introducing:
2203
2204         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
2205         https://bugs.webkit.org/show_bug.cgi?id=165142
2206
2207         Reviewed by Sam Weinig.
2208
2209         * wtf/text/StringBuilder.cpp:
2210         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
2211         the header since it is only used inside the class. Also renamed from
2212         getBufferCharacters.
2213         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
2214         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
2215         for the upconvert case in the 16-bit overload of StrinBuilder::append.
2216         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
2217         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
2218         implementation below that now correctly determines the size of what will
2219         be appended by walking thorugh the string twice.
2220         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
2221         quote marks in here. Also made a few coding style tweaks.
2222         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
2223         simpler algorithm that grows the string the same way the append function
2224         does. The old code would use reserveCapacity in a way that was costly when
2225         doing a lot of appends on the same string, and also allocated far too much
2226         memory for normal use cases where characters did not need to be turned
2227         into escape sequences.
2228
2229         * wtf/text/StringBuilder.h:
2230         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
2231         m_is8Bit field wasn't set correctly in one case, optimized the function that
2232         adds substrings for the case where this is the first append and the substring
2233         happens to cover the entire string. Also clarified the assertions and removed
2234         an unneeded check from that substring overload.
2235         (WTF::equal): Reimplemented, using equalCommon. Added an overload of the equal
2236         function just for the case where the arguments are StringBuilder, String.
2237         This is needed because of the peculiar behavior of is8Bit in String, different
2238         from any of our other string classes. I think we should consider changing
2239         String::is8Bit to return true for null strings. We could then remove this
2240         overload and probably remove other checks for null and zero length elsewhere
2241         that are also needed only to avoid calling is8Bit on a null String.
2242
2243 2016-11-29  JF Bastien  <jfbastien@apple.com>
2244
2245         WebAssembly JS API: improve Instance
2246         https://bugs.webkit.org/show_bug.cgi?id=164757
2247
2248         Reviewed by Keith Miller.
2249
2250         * wtf/Expected.h:
2251         (WTF::ExpectedDetail::destroy): silence a warning
2252
2253 2016-11-29  Commit Queue  <commit-queue@webkit.org>
2254
2255         Unreviewed, rolling out r209058 and r209074.
2256         https://bugs.webkit.org/show_bug.cgi?id=165188
2257
2258         These changes caused API test StringBuilderTest.Equal to crash
2259         and/or fail. (Requested by ryanhaddad on #webkit).
2260
2261         Reverted changesets:
2262
2263         "Streamline and speed up tokenizer and segmented string
2264         classes"
2265         https://bugs.webkit.org/show_bug.cgi?id=165003
2266         http://trac.webkit.org/changeset/209058
2267
2268         "REGRESSION (r209058): API test StringBuilderTest.Equal
2269         crashing"
2270         https://bugs.webkit.org/show_bug.cgi?id=165142
2271         http://trac.webkit.org/changeset/209074
2272
2273 2016-11-29  Simon Fraser  <simon.fraser@apple.com>
2274
2275         Allow TracePoint to take arbitrary data
2276         https://bugs.webkit.org/show_bug.cgi?id=165182
2277
2278         Reviewed by Tim Horton.
2279
2280         Allow TracePoint() to take four numeric arguments, for arbitrary data.
2281
2282         #pragma once
2283
2284         * wtf/SystemTracing.h:
2285         (WTF::TracePoint):
2286
2287 2016-11-29  Andy Estes  <aestes@apple.com>
2288
2289         [Cocoa] Enable two clang warnings recommended by Xcode
2290         https://bugs.webkit.org/show_bug.cgi?id=164498
2291
2292         Reviewed by Mark Lam.
2293
2294         * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.
2295
2296 2016-11-29  Darin Adler  <darin@apple.com>
2297
2298         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
2299         https://bugs.webkit.org/show_bug.cgi?id=165142
2300
2301         * wtf/text/StringBuilder.h: Added an overload of the equal function just
2302         for the case where the arguments are StringBuilder, String. This is needed
2303         because of the peculiar behavior of is8Bit in String, different from any of
2304         our other string classes. I think we should consider changing String::is8Bit
2305         to return true for null strings. We could then remove this overload and
2306         probably remove other checks for null and zero length elsewhere that are
2307         also needed only to avoid calling is8Bit on a null String.
2308
2309 2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>
2310
2311         Scroll snapping on Mac should use AppKit animations
2312         https://bugs.webkit.org/show_bug.cgi?id=147261
2313         <rdar://problem/29395293>
2314
2315         Reviewed by Brent Fulgham.
2316
2317         Introduce HAVE(NSSCROLLING_FILTERS), which is on for macOS El Capitan and later.
2318
2319         * wtf/Platform.h:
2320
2321 2016-11-28  Darin Adler  <darin@apple.com>
2322
2323         Streamline and speed up tokenizer and segmented string classes
2324         https://bugs.webkit.org/show_bug.cgi?id=165003
2325
2326         Reviewed by Sam Weinig.
2327
2328         * wtf/text/StringBuilder.cpp:
2329         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
2330         the header since it is only used inside the class. Also renamed from
2331         getBufferCharacters.
2332         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
2333         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
2334         for the upconvert case in the 16-bit overload of StrinBuilder::append.
2335         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
2336         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
2337         implementation below that now correctly determines the size of what will
2338         be appended by walking thorugh the string twice.
2339         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
2340         quote marks in here. Also made a few coding style tweaks.
2341         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
2342         simpler algorithm that grows the string the same way the append function
2343         does. The old code would use reserveCapacity in a way that was costly when
2344         doing a lot of appends on the same string, and also allocated far too much
2345         memory for normal use cases where characters did not need to be turned
2346         into escape sequences.
2347
2348         * wtf/text/StringBuilder.h:
2349         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
2350         m_is8Bit field wasn't set correctly in one case, optimized the function that
2351         adds substrings for the case where this is the first append and the substring
2352         happens to cover the entire string. Also clarified the assertions and removed
2353         an unneeded check from that substring overload.
2354         (WTF::equal): Reimplemented, using equalCommon.
2355
2356 2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>
2357
2358         [WTF] Import std::optional reference implementation as WTF::Optional
2359         https://bugs.webkit.org/show_bug.cgi?id=164199
2360
2361         Reviewed by Saam Barati and Sam Weinig.
2362
2363         Import std::optional reference implementation offered by the C++17
2364         original proposal paper. It has the same interface and functionality
2365         to the C++17's one. Previous WTF::Optional lacks several functionalities.
2366         The largest one is the correct constexpr constructors. This fact prevents
2367         us from using Optional<literal type> in constexpr context in WebKit.
2368
2369         In WebKit, we do not allow global constructors. So only the constexpr
2370         constructor is the way to use WTF::Optional in the static const
2371         global variables. WTF::Optional is used in DOMJIT::Effect and
2372         we would like to emit static const global variables that includes
2373         this DOMJIT::Effect. That is the main motivation of this work.
2374         This functionality allows the IDL code generator to emit DOMJIT
2375         signatures as static const global variables.
2376
2377         We import the reference implementation one instead of LLVM libc++'s one.
2378         This is because LLVM libc++'s one depends on many macro and type_traits
2379         offered by libc++ implementation. And adopting it to WebKit requires
2380         large modification compared to this reference implementation one.
2381         Furthermore, it is difficult to compile libc++'s optional in old GCC and VC++.
2382         It also requires some more modifications. To keep the thing simple,
2383         we import the reference implementation one now. Once C++17 is released
2384         and we update the compiler baseline, we can smoothly switch to the standard
2385         library's std::optional.
2386
2387         We also add support for the environment that does not use exceptions to this
2388         reference implementation.
2389
2390         And we also add valueOrCompute helper function. That keeps the extended
2391         functionality that previous WTF::Optional has.
2392
2393         * wtf/CrossThreadQueue.h:
2394         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
2395         * wtf/Expected.h:
2396         (WTF::makeExpected):
2397         * wtf/Forward.h:
2398         * wtf/HashTraits.h:
2399         (WTF::HashTraits<Ref<P>>::take):
2400         * wtf/MainThread.cpp:
2401         (WTF::initializeGCThreads):
2402         (WTF::mayBeGCThread):
2403         * wtf/MainThread.h:
2404         * wtf/Optional.h:
2405         (std::detail_::is_assignable::has_assign):
2406         (std::detail_::has_overloaded_addressof::has_overload):
2407         (std::detail_::static_addressof):
2408         (std::detail_::convert):
2409         (std::nullopt_t::nullopt_t):
2410         (std::bad_optional_access::bad_optional_access):
2411         (std::optional_base::optional_base):
2412         (std::optional_base::~optional_base):
2413         (std::constexpr_optional_base::constexpr_optional_base):
2414         (std::optional::dataptr):
2415         (std::optional::contained_val):
2416         (std::optional::__NOEXCEPT_):
2417         (std::optional::optional):
2418         (std::optional::operator=):
2419         (std::optional::emplace):
2420         (std::optional::operator ->):
2421         (std::optional::operator *):
2422         (std::optional::value):
2423         (std::optional::value_or):
2424         (std::operator==):
2425         (std::operator!=):
2426         (std::operator<):
2427         (std::operator>):
2428         (std::operator<=):
2429         (std::operator>=):
2430         (std::__NOEXCEPT_):
2431         (std::make_optional):
2432         (std::hash<std::optional<T>>::operator()):
2433         (WTF::NulloptTag::NulloptTag): Deleted.
2434         (WTF::Optional::Optional): Deleted.
2435         (WTF::Optional::~Optional): Deleted.
2436         (WTF::Optional::operator=): Deleted.
2437         (WTF::Optional::operator bool): Deleted.
2438         (WTF::Optional::operator->): Deleted.
2439         (WTF::Optional::operator*): Deleted.
2440         (WTF::Optional::value): Deleted.
2441         (WTF::Optional::valueOr): Deleted.
2442         (WTF::Optional::valueOrCompute): Deleted.
2443         (WTF::Optional::asPtr): Deleted.
2444         (WTF::Optional::destroy): Deleted.
2445         (WTF::operator==): Deleted.
2446         (WTF::operator!=): Deleted.
2447         (WTF::makeOptional): Deleted.
2448         (WTF::printInternal): Deleted.
2449         * wtf/text/StringView.cpp:
2450         (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
2451         (WTF::StringView::GraphemeClusters::Iterator::Iterator):
2452         * wtf/text/StringView.h:
2453
2454 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
2455
2456         Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
2457         https://bugs.webkit.org/show_bug.cgi?id=164992
2458
2459         Reviewed by Darin Adler.
2460
2461         Add Seconds::zero() as a nicer way to express Seconds(0). 
2462
2463         * wtf/Seconds.h:
2464         (WTF::Seconds::zero):
2465
2466 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
2467
2468         Add literals for various time units
2469         https://bugs.webkit.org/show_bug.cgi?id=165074
2470
2471         Reviewed by Filip Pizlo.
2472         
2473         Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
2474         and unsigned long long types (those allowed for custom literals).
2475         
2476         Add minutes-related functions (there are one or two use cases in WebCore).
2477
2478         * wtf/Seconds.h:
2479         (WTF::Seconds::minutes):
2480         (WTF::Seconds::fromMinutes):
2481         (WTF::Seconds::fromMilliseconds):
2482         (WTF::Seconds::fromMicroseconds):
2483         (WTF::Seconds::fromNanoseconds):
2484         (WTF::operator _min):
2485         (WTF::operator _s):
2486         (WTF::operator _ms):
2487         (WTF::operator _us):
2488         (WTF::operator _ns):
2489
2490 2016-11-22  Darin Adler  <darin@apple.com>
2491
2492         One more tiny bit of follow-up.
2493
2494         * wtf/text/TextBreakIterator.cpp:
2495         (WTF::numCharactersInGraphemeClusters): Removed unneeded always-true check.
2496
2497 2016-11-22  Darin Adler  <darin@apple.com>
2498
2499         Quick follow-up to previous patch.
2500
2501         * wtf/text/TextBreakIterator.cpp:
2502         (WTF::numCharactersInGraphemeClusters): Removed incorrect assertion.
2503
2504 2016-11-22  Darin Adler  <darin@apple.com>
2505
2506         Make normal case fast in the input element limitString function
2507         https://bugs.webkit.org/show_bug.cgi?id=165023
2508
2509         Reviewed by Dan Bernstein.
2510
2511         * wtf/text/LineBreakIteratorPoolICU.h: Removed many unneeded includes.
2512         Simplified the class a bit, removing some extra definitions.
2513         (WTF::LineBreakIteratorPool::sharedPool): Use NeverDestroyed instead of new.
2514         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword): Reimplemented in
2515         a simpler way without using StringBuilder. Also updated for change to
2516         LineBreakIteratorMode.
2517         (WTF::LineBreakIteratorPool::put): Use uncheckedAppend since the code is
2518         careful to only use the inline capacity in the vector.
2519
2520         * wtf/text/TextBreakIterator.cpp: Moved some includes in here from the header.
2521         (WTF::mapLineIteratorModeToRules): Updated for change to LineBreakIteratorMode.
2522         (WTF::openLineBreakIterator): Ditto.
2523         (WTF::numGraphemeClusters): Added a fast path for all 8-bit strings; don't
2524         use ICU for that case, even if there is a CR character in it.
2525         (WTF::numCharactersInGraphemeClusters): Added a fast path for strings that are
2526         short enough to entirely fit without even looking at the characters; that's a
2527         case we likely hit all the time. Also added a fast path for all 8-bit strings.
2528
2529         * wtf/text/TextBreakIterator.h: Changed LineBreakIteratorMode to be an enum
2530         class and not repeat UAX14 in the names of the modes. Initialize data members
2531         in the class definition rather than the constructors.
2532
2533 2016-11-21  Mark Lam  <mark.lam@apple.com>
2534
2535         Hasher::addCharacters() should be able to handle zero length strings.
2536         https://bugs.webkit.org/show_bug.cgi?id=165024
2537
2538         Reviewed by Yusuke Suzuki.
2539
2540         Currently, it will fail to handle zero length strings if it has a pending
2541         character.  The fix is simply to return early if length is 0. 
2542
2543         * wtf/Hasher.h:
2544         (WTF::StringHasher::addCharacters):
2545
2546 2016-11-18  Jeremy Jones  <jeremyj@apple.com>
2547
2548         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
2549         https://bugs.webkit.org/show_bug.cgi?id=163801
2550
2551         Reviewed by Simon Fraser.
2552
2553         * wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.
2554
2555 2016-11-17  Saam Barati  <sbarati@apple.com>
2556
2557         Remove async/await compile time flag and enable tests
2558         https://bugs.webkit.org/show_bug.cgi?id=164828
2559         <rdar://problem/28639334>
2560
2561         Reviewed by Yusuke Suzuki.
2562
2563         * wtf/FeatureDefines.h:
2564
2565 2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>
2566
2567         [JSC] WTF::TemporaryChange with WTF::SetForScope
2568         https://bugs.webkit.org/show_bug.cgi?id=164761
2569
2570         Reviewed by Saam Barati.
2571
2572         JavaScriptCore's bytecompiler/SetForScope.h is completely the same
2573         to WTF::TemporaryChange. SetForScope sounds better name since it
2574         says that this object works as Scope.
2575
2576         We rename WTF::TemporaryChange to WTF::SetForScope. And replace
2577         all the use to this WTF::SetForScope.
2578
2579         * WTF.xcodeproj/project.pbxproj:
2580         * wtf/SetForScope.h: Renamed from Source/WTF/wtf/TemporaryChange.h.
2581         (WTF::SetForScope::SetForScope):
2582         (WTF::SetForScope::~SetForScope):
2583
2584 2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>
2585
2586         [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
2587         https://bugs.webkit.org/show_bug.cgi?id=164827
2588
2589         Reviewed by Ryosuke Niwa.
2590
2591         * wtf/FeatureDefines.h:
2592
2593 2016-11-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>
2594
2595         [JSC] Build broken for 32-bit x86 after r208306 with GCC 4.9
2596         https://bugs.webkit.org/show_bug.cgi?id=164588
2597
2598         Reviewed by Mark Lam.
2599
2600         Provide assembly for executing the cpuid instruction when compiling
2601         in PIC mode with the GCC 4.9 EBX on 32-bit x86.
2602
2603         Note that the values returned by cpuid here are not used. The purpose
2604         of calling this instruction is to force the CPU to complete and sync
2605         any buffered modifications on registers, memory or flags before
2606         fetching and executing the next instruction.
2607
2608         * wtf/Atomics.h:
2609         (WTF::x86_cpuid):
2610
2611 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
2612
2613         Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS
2614         https://bugs.webkit.org/show_bug.cgi?id=164791
2615
2616         Reviewed by Geoffrey Garen.
2617         
2618         Both the concurrent GC and the concurrent JIT rely on concurrency support in fundamental
2619         JSC runtime components like JSValue. So, the thing that guards it should be a "feature"
2620         called CONCURRENT_JS not CONCURRENT_JIT.
2621
2622         * wtf/Platform.h:
2623
2624 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
2625
2626         The concurrent GC should have a timeslicing controller
2627         https://bugs.webkit.org/show_bug.cgi?id=164783
2628
2629         Reviewed by Geoffrey Garen.
2630
2631         * wtf/LockAlgorithm.h: Added some comments.
2632         * wtf/Seconds.h: Added support for modulo. It's necessary for timeslicing.
2633         (WTF::Seconds::operator%):
2634         (WTF::Seconds::operator%=):
2635
2636 2016-11-11  Filip Pizlo  <fpizlo@apple.com>
2637
2638         The GC should be optionally concurrent and disabled by default
2639         https://bugs.webkit.org/show_bug.cgi?id=164454
2640
2641         Reviewed by Geoffrey Garen.
2642         
2643         The reason why I went to such great pains to make WTF::Lock fit in two bits is that I
2644         knew that I would eventually need to stuff one into some miscellaneous bits of the
2645         JSCell header. That time has come, because the concurrent GC has numerous race
2646         conditions in visitChildren that can be trivially fixed if each object just has an
2647         internal lock. Some cell types might use it to simply protect their entire visitChildren
2648         function and anything that mutates the fields it touches, while other cell types might
2649         use it as a "lock of last resort" to handle corner cases of an otherwise wait-free or
2650         lock-free algorithm. Right now, it's used to protect certain transformations involving
2651         indexing storage.
2652         
2653         To make this happen, I factored the WTF::Lock algorithm into a LockAlgorithm struct that
2654         is templatized on lock type (uint8_t for WTF::Lock), the isHeldBit value (1 for
2655         WTF::Lock), and the hasParkedBit value (2 for WTF::Lock). This could have been done as
2656         a templatized Lock class that basically contains Atomic<LockType>. You could then make
2657         any field into a lock by bitwise_casting it to TemplateLock<field type, bit1, bit2>. But
2658         this felt too dirty, so instead, LockAlgorithm has static methods that take
2659         Atomic<LockType>& as their first argument. I think that this makes it more natural to
2660         project a LockAlgorithm onto an existing Atomic<> field. Sadly, some places have to cast
2661         their non-Atomic<> field to Atomic<> in order for this to work. Like so many other things
2662         we do, this just shows that the C++ style of labeling fields that are subject to atomic
2663         ops as atomic is counterproductive. Maybe some day I'll change LockAlgorithm to use our
2664         other Atomics API, which does not require Atomic<>.
2665         
2666         WTF::Lock now uses LockAlgorithm. The slow paths are still outlined. I don't feel too
2667         bad about the LockAlgorithm.h header being included in so many places because we change
2668         that algorithm so infrequently.
2669         
2670         Also, I added a hasElapsed(time) function. This function makes it so much more natural
2671         to write timeslicing code, which the concurrent GC has to do a lot of.
2672
2673         * WTF.xcodeproj/project.pbxproj:
2674         * wtf/CMakeLists.txt:
2675         * wtf/ListDump.h:
2676         * wtf/Lock.cpp:
2677         (WTF::LockBase::lockSlow):
2678         (WTF::LockBase::unlockSlow):
2679         (WTF::LockBase::unlockFairlySlow):
2680         (WTF::LockBase::unlockSlowImpl): Deleted.
2681         * wtf/Lock.h:
2682         (WTF::LockBase::lock):
2683         (WTF::LockBase::tryLock):
2684         (WTF::LockBase::unlock):
2685         (WTF::LockBase::unlockFairly):
2686         (WTF::LockBase::isHeld):
2687         (): Deleted.
2688         * wtf/LockAlgorithm.h: Added.
2689         (WTF::LockAlgorithm::lockFastAssumingZero):
2690         (WTF::LockAlgorithm::lockFast):
2691         (WTF::LockAlgorithm::lock):
2692         (WTF::LockAlgorithm::tryLock):
2693         (WTF::LockAlgorithm::unlockFastAssumingZero):
2694         (WTF::LockAlgorithm::unlockFast):
2695         (WTF::LockAlgorithm::unlock):
2696         (WTF::LockAlgorithm::unlockFairly):
2697         (WTF::LockAlgorithm::isLocked):
2698         (WTF::LockAlgorithm::lockSlow):
2699         (WTF::LockAlgorithm::unlockSlow):
2700         * wtf/TimeWithDynamicClockType.cpp:
2701         (WTF::hasElapsed):
2702         * wtf/TimeWithDynamicClockType.h:
2703
2704 2016-11-14  JF Bastien  <jfbastien@apple.com>
2705
2706         Expected: add missing `inline`
2707         https://bugs.webkit.org/show_bug.cgi?id=164735
2708
2709         Reviewed by Yusuke Suzuki.
2710
2711         Free functions and full template specializations need to be
2712         `inline`, or in a .cpp file, otherwise each .o creates a duplicate
2713         symbol which makes the linker very sad.
2714
2715         * wtf/Expected.h:
2716         (WTF::ExpectedDetail::Throw):
2717         (WTF::makeExpected):
2718
2719 2016-11-14  Mark Lam  <mark.lam@apple.com>
2720
2721         Build fix after r208690.
2722         https://bugs.webkit.org/show_bug.cgi?id=164681
2723
2724         Not reviewed.
2725
2726         * wtf/FastMalloc.h:
2727
2728 2016-11-13  Mark Lam  <mark.lam@apple.com>
2729
2730         Add debugging facility to limit the max single allocation size.
2731         https://bugs.webkit.org/show_bug.cgi?id=164681
2732
2733         Reviewed by Keith Miller.
2734
2735         This is useful for simulating memory allocation failures on resource constraint
2736         devices for testing purposes.
2737
2738         This facility is only conditionally compiled in on debug builds.  It does not
2739         have any burden on release builds at all.  When in use, the max single allocation
2740         size limit applies to individual allocations.  For malloc (and similar), the
2741         allocation will crash in FastMalloc if the requested size exceeds the set max
2742         single allocation size.  For tryMalloc (and similar), the allocation returns
2743         nullptr if the requested size exceeds the set max single allocation size.  The
2744         max single allocation size is set to std::numeric_limit<size_t>::max() by default
2745         (i.e. when not set and no limit is in effect).
2746
2747         Also fixed non-bmalloc versions of fastAlignedMalloc() to crash when allocation
2748         fails.
2749
2750         * wtf/FastMalloc.cpp:
2751         (WTF::fastSetMaxSingleAllocationSize):
2752         (WTF::fastAlignedMalloc):
2753         (WTF::tryFastAlignedMalloc):
2754         (WTF::tryFastMalloc):
2755         (WTF::fastMalloc):
2756         (WTF::tryFastCalloc):
2757         (WTF::fastCalloc):
2758         (WTF::fastRealloc):
2759         * wtf/FastMalloc.h:
2760
2761 2016-11-13  JF Bastien  <jfbastien@apple.com>
2762
2763         Implement WTF::Expected
2764         https://bugs.webkit.org/show_bug.cgi?id=164526
2765
2766         Reviewed by Yusuke Suzuki.
2767
2768         std::expected isn't in C++17, and may be in C++20. It's a nice
2769         complement to std::any / std::optional because it's a type-tagged
2770         union which has a single expected result but could also contain an
2771         error.
2772
2773         This would be useful in the WebAssembly parser, for example.
2774
2775         Using this implementation will allow us to provide feedback to the
2776         standards committee and guide std::expected's design before it
2777         gets standardized. I've already sent a bunch of feedback to the
2778         author based on my experience implementing this.
2779
2780         This could supplement WTF::Either and WTF::ExceptionOr.
2781
2782         * WTF.xcodeproj/project.pbxproj:
2783         * wtf/Compiler.h: Add RELAXED_CONSTEXPR
2784         * wtf/Expected.h: Added.
2785         (WTF::UnexpectedType::UnexpectedType):
2786         (WTF::UnexpectedType::value):
2787         (WTF::operator==):
2788         (WTF::operator!=):
2789         (WTF::operator<):
2790         (WTF::operator>):
2791         (WTF::operator<=):
2792         (WTF::operator>=):
2793         (WTF::makeUnexpected):
2794         (WTF::ExpectedDetail::Throw):
2795         (WTF::ExpectedDetail::ConstexprBase::ConstexprBase):
2796         (WTF::ExpectedDetail::Base::Base):
2797         (WTF::ExpectedDetail::Base::~Base):
2798         (WTF::Expected::Expected):
2799         (WTF::Expected::operator=):
2800         (WTF::Expected::swap):
2801         (WTF::Expected::operator->):
2802         (WTF::Expected::operator*):
2803         (WTF::Expected::operator bool):
2804         (WTF::Expected::hasValue):
2805         (WTF::Expected::value):
2806         (WTF::Expected::error):
2807         (WTF::Expected::getUnexpected):
2808         (WTF::Expected::valueOr):
2809         (WTF::swap):
2810         (WTF::makeExpected):
2811         (WTF::makeExpectedFromError):
2812
2813 2016-11-11  Alex Christensen  <achristensen@webkit.org>
2814
2815         Allow mutable lambdas in HashMap::ensure
2816         https://bugs.webkit.org/show_bug.cgi?id=164642
2817
2818         Reviewed by Sam Weinig.
2819
2820         * wtf/HashMap.h:
2821         (WTF::HashMapEnsureTranslator::translate):
2822         (WTF::X>::removeIf):
2823
2824 2016-11-11  Beth Dakin  <bdakin@apple.com>
2825
2826         Get touch bar code building for open source builds
2827         https://bugs.webkit.org/show_bug.cgi?id=164610
2828
2829         Reviewed by Wenson Hsieh.
2830
2831         * wtf/Platform.h:
2832
2833 2016-11-10  JF Bastien  <jfbastien@apple.com>
2834
2835         ASSERTION FAILED: length > offset encountered with wasm.yaml/wasm/js-api/test_Module.js.default-wasm
2836         https://bugs.webkit.org/show_bug.cgi?id=164597
2837
2838         Reviewed by Keith Miller.
2839
2840         Decoding at end of file should fail, not assert.
2841
2842         * wtf/LEBDecoder.h:
2843         (WTF::LEBDecoder::decodeUInt):
2844         (WTF::LEBDecoder::decodeInt32):
2845
2846 2016-11-10  Alex Christensen  <achristensen@webkit.org>
2847
2848         Remove unused CFURLCACHE code
2849         https://bugs.webkit.org/show_bug.cgi?id=164551
2850
2851         Reviewed by Antti Koivisto.
2852
2853         * wtf/Platform.h:
2854
2855 2016-11-09  Alex Christensen  <achristensen@webkit.org>
2856
2857         Allow RefPtrs of const ThreadSafeRefCounted types
2858         https://bugs.webkit.org/show_bug.cgi?id=164548
2859
2860         Reviewed by Tim Horton.
2861
2862         * wtf/ThreadSafeRefCounted.h:
2863         Make m_refCount mutable like we did with RefCounted in r203257.
2864
2865 2016-11-09  Chris Dumez  <cdumez@apple.com>
2866
2867         [Mac] Stop using deprecated AppKit enumeration values
2868         https://bugs.webkit.org/show_bug.cgi?id=164494
2869
2870         Reviewed by Darin Adler.
2871
2872         Stop using deprecated AppKit enumeration values.
2873
2874         * wtf/mac/AppKitCompatibilityDeclarations.h:
2875
2876 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
2877
2878         Fixed compilation of LLInt with MinGW
2879         https://bugs.webkit.org/show_bug.cgi?id=164449
2880
2881         Reviewed by Michael Catanzaro.
2882
2883         MinGW uses LLIntAssembly.h with GNU assembler syntax, just like GCC on
2884         other platforms.
2885
2886         * wtf/InlineASM.h: Define LOCAL_LABEL_STRING as .L#name for MinGW.
2887
2888 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
2889
2890         [MinGW] Fixed C99/C++11 format attributes in printf-like functions
2891         https://bugs.webkit.org/show_bug.cgi?id=164448
2892
2893         Reviewed by Michael Catanzaro.
2894
2895         By default MinGW uses printf-like function provided in msvcrt.dll,
2896         however they miss support for C99/C++11 format attributes. Use MinGW
2897         implementations instead.
2898
2899         * wtf/Assertions.h: Use gnu_printf format in WTF_ATTRIBUTE_PRINTF
2900
2901 2016-11-05  Yusuke Suzuki  <utatane.tea@gmail.com>
2902
2903         [JSCOnly] RunLoopGeneric should adopt MonotonicTime / WallTime change
2904         https://bugs.webkit.org/show_bug.cgi?id=164447
2905
2906         Reviewed by Csaba Osztrogonác.
2907
2908         Build fix for JSCOnly.
2909
2910         * wtf/generic/RunLoopGeneric.cpp:
2911         (WTF::RunLoop::TimerBase::ScheduledTask::create):
2912         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
2913         (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
2914         (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
2915         (WTF::RunLoop::populateTasks):
2916         (WTF::RunLoop::dispatchAfter):
2917         (WTF::RunLoop::TimerBase::start):
2918
2919 2016-11-04  Filip Pizlo  <fpizlo@apple.com>
2920
2921         WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
2922         https://bugs.webkit.org/show_bug.cgi?id=152045
2923
2924         Reviewed by Andy Estes.
2925         
2926         We used to use 'double' for all time measurements. Sometimes it was milliseconds,
2927         sometimes it was seconds. Sometimes we measured a span of time, sometimes we spoke of time
2928         since some epoch. When we spoke of time since epoch, we either used a monotonic clock or
2929         a wall clock. The type - always 'double' - never told us what kind of time we had, even
2930         though there were roughly six of them (sec interval, ms interval, sec since epoch on wall,
2931         ms since epoch on wall, sec since epoch monotonic, ms since epoch monotonic).
2932         
2933         At some point, we thought that it would be a good idea to replace these doubles with
2934         std::chrono. But since replacing some things with std::chrono, we found it to be terribly
2935         inconvenient:
2936         
2937         - Outrageous API. I never want to say std::chrono::milliseconds(blah). I never want to say
2938           std::chrono::steady_clock::timepoint. The syntax for duration_cast is ugly, and ideally
2939           duration_cast would not even be a thing.
2940         
2941         - No overflow protection. std::chrono uses integers by default and using anything else is
2942           clumsy. But the integer math is done without regard for the rough edges of integer math,
2943           so any cast between std::chrono types risks overflow. Any comparison risks overflow
2944           because it may do conversions silently. We have even found bugs where some C++
2945           implementations had more overflows than others, which ends up being a special kind of
2946           hell. In many cases, the overflow also has nasal demons.
2947         
2948         It's an error to represent time using integers. It would have been excusable back when
2949         floating point math was not guaranteed to be supported on all platforms, but that would
2950         have been a long time ago. Time is a continuous, infinite concept and it's a perfect fit
2951         for floating point:
2952         
2953         - Floating point preserves precision under multiplication in all but extreme cases, so
2954           using floating point for time means that unit conversions are almost completely
2955           lossless. This means that we don't have to think very hard about what units to use. In
2956           this patch, we use seconds almost everywhere. We only convert at boundaries, like an API
2957           boundary that wants something other than seconds.
2958         
2959         - Floating point makes it easy to reason about infinity, which is something that time code
2960           wants to do a lot. Example: when would you like to timeout? Infinity please! This is the
2961           most elegant way of having an API support both a timeout variant and a no-timeout
2962           variant.
2963
2964         - Floating point does well-understood things when math goes wrong, and these things are
2965           pretty well optimized to match what a mathematician would do when computing with real
2966           numbers represented using scientific notation with a finite number of significant
2967           digits. This means that time math under floating point looks like normal math. On the
2968           other hand, std::chrono time math looks like garbage because you have to always check
2969           for multiple possible UB corners whenever you touch large integers. Integers that
2970           represent time are very likely to be large and you don't have to do much to overflow
2971           them. At this time, based on the number of bugs we have already seen due to chrono
2972           overflows, I am not certain that we even understand what are all of the corner cases
2973           that we should even check for.
2974         
2975         This patch introduces a new set of timekeeping classes that are all based on double, and
2976         all internally use seconds. These classes support algebraic typing. The classes are:
2977         
2978         - Seconds: this is for measuring a duration.
2979         - WallTime: time since epoch according to a wall clock (aka real time clock).
2980         - MonotonicTime: time since epoch according to a monotonic clock.
2981         - ClockType: enum that says either Wall or Monotonic.
2982         - TimeWithDynamicClockType: a tuple of double and ClockType, which represents either a
2983           wall time or a monotonic time.
2984         
2985         All of these classes behave like C++ values and are cheap to copy around since they are
2986         very nearly POD. This supports comprehensive conversions between the various time types.
2987         Most of this is by way of algebra. Here are just some of the rules we recognize:
2988         
2989         WallTime = WallTime + Seconds
2990         Seconds = WallTime - WallTime
2991         MonotonicTime = MonotonicTime + Seconds
2992         etc...
2993         
2994         We support negative, infinite, and NaN times because math.
2995         
2996         We support conversions between MonotonicTime and WallTime, like:
2997         
2998         WallTime wt = mt.approximateWallTime()
2999         
3000         This is called this "approximate" because the only way to do it is to get the current time
3001         on both clocks and convert relative to that.
3002         
3003         Many of our APIs would be happy using whatever notion of time the user wanted to use. For
3004         those APIs, which includes Condition and ParkingLot, we have TimeWithDynamicClockType. You
3005         can automatically convert WallTime or MonotonicTime to TimeWithDynamicClockType. This
3006         means that if you use a WallTime with Condition::waitUntil, then Condition's internal
3007         logic for when it should wake up makes its decision based on the current WallTime - but if
3008         you use MonotonicTime then waitUntil will make its decision based on current
3009         MonotonicTime. This is a greater level of flexibility than chrono allowed, since chrono
3010         did not have the concept of a dynamic clock type.
3011         
3012         This patch does not include conversions between std::chrono and these new time classes,
3013         because past experience shows that we're quite bad at getting conversions between
3014         std::chrono and anything else right. Also, I didn't need such conversion code because this
3015         patch only converts code that transitively touches ParkingLot and Condition. It was easy
3016         to get all of that code onto the new time classes.
3017
3018         * WTF.xcodeproj/project.pbxproj:
3019         * wtf/AutomaticThread.cpp:
3020         (WTF::AutomaticThread::start):
3021         * wtf/CMakeLists.txt:
3022         * wtf/ClockType.cpp: Added.
3023         (WTF::printInternal):
3024         * wtf/ClockType.h: Added.
3025         * wtf/Condition.h:
3026         (WTF::ConditionBase::waitUntil):
3027         (WTF::ConditionBase::waitFor):
3028         (WTF::ConditionBase::wait):
3029         (WTF::ConditionBase::waitUntilWallClockSeconds): Deleted.
3030         (WTF::ConditionBase::waitUntilMonotonicClockSeconds): Deleted.
3031         (WTF::ConditionBase::waitForSeconds): Deleted.
3032         (WTF::ConditionBase::waitForSecondsImpl): Deleted.
3033         (WTF::ConditionBase::waitForImpl): Deleted.
3034         (WTF::ConditionBase::absoluteFromRelative): Deleted.
3035         * wtf/CrossThreadQueue.h:
3036         (WTF::CrossThreadQueue<DataType>::waitForMessage):
3037         * wtf/CurrentTime.cpp:
3038         (WTF::sleep):
3039         * wtf/MessageQueue.h:
3040         (WTF::MessageQueue::infiniteTime): Deleted.
3041         * wtf/MonotonicTime.cpp: Added.
3042         (WTF::MonotonicTime::now):
3043         (WTF::MonotonicTime::approximateWallTime):
3044         (WTF::MonotonicTime::dump):
3045         (WTF::MonotonicTime::sleep):
3046         * wtf/MonotonicTime.h: Added.
3047         (WTF::MonotonicTime::MonotonicTime):
3048         (WTF::MonotonicTime::fromRawDouble):
3049         (WTF::MonotonicTime::infinity):
3050         (WTF::MonotonicTime::secondsSinceEpoch):
3051         (WTF::MonotonicTime::approximateMonotonicTime):
3052         (WTF::MonotonicTime::operator bool):
3053         (WTF::MonotonicTime::operator+):
3054         (WTF::MonotonicTime::operator-):
3055         (WTF::MonotonicTime::operator+=):
3056         (WTF::MonotonicTime::operator-=):
3057         (WTF::MonotonicTime::operator==):
3058         (WTF::MonotonicTime::operator!=):
3059         (WTF::MonotonicTime::operator<):
3060         (WTF::MonotonicTime::operator>):
3061         (WTF::MonotonicTime::operator<=):
3062         (WTF::MonotonicTime::operator>=):
3063         * wtf/ParkingLot.cpp:
3064         (WTF::ParkingLot::parkConditionallyImpl):
3065         (WTF::ParkingLot::unparkOne):
3066         (WTF::ParkingLot::unparkOneImpl):
3067         (WTF::ParkingLot::unparkCount):
3068         * wtf/ParkingLot.h:
3069         (WTF::ParkingLot::parkConditionally):
3070         (WTF::ParkingLot::compareAndPark):
3071         * wtf/Seconds.cpp: Added.
3072         (WTF::Seconds::operator+):
3073         (WTF::Seconds::operator-):
3074         (WTF::Seconds::dump):
3075         (WTF::Seconds::sleep):
3076         * wtf/Seconds.h: Added.
3077         (WTF::Seconds::Seconds):
3078         (WTF::Seconds::value):
3079         (WTF::Seconds::seconds):
3080         (WTF::Seconds::milliseconds):
3081         (WTF::Seconds::microseconds):
3082         (WTF::Seconds::nanoseconds):
3083         (WTF::Seconds::fromMilliseconds):
3084         (WTF::Seconds::fromMicroseconds):
3085         (WTF::Seconds::fromNanoseconds):
3086         (WTF::Seconds::infinity):
3087         (WTF::Seconds::operator bool):
3088         (WTF::Seconds::operator+):
3089         (WTF::Seconds::operator-):
3090         (WTF::Seconds::operator*):
3091         (WTF::Seconds::operator/):
3092         (WTF::Seconds::operator+=):
3093         (WTF::Seconds::operator-=):
3094         (WTF::Seconds::operator*=):
3095         (WTF::Seconds::operator/=):
3096         (WTF::Seconds::operator==):
3097         (WTF::Seconds::operator!=):
3098         (WTF::Seconds::operator<):
3099         (WTF::Seconds::operator>):
3100         (WTF::Seconds::operator<=):
3101         (WTF::Seconds::operator>=):
3102         * wtf/TimeWithDynamicClockType.cpp: Added.
3103         (WTF::TimeWithDynamicClockType::now):
3104         (WTF::TimeWithDynamicClockType::nowWithSameClock):
3105         (WTF::TimeWithDynamicClockType::wallTime):
3106         (WTF::TimeWithDynamicClockType::monotonicTime):
3107         (WTF::TimeWithDynamicClockType::approximateWallTime):
3108         (WTF::TimeWithDynamicClockType::approximateMonotonicTime):
3109         (WTF::TimeWithDynamicClockType::operator-):
3110         (WTF::TimeWithDynamicClockType::operator<):
3111         (WTF::TimeWithDynamicClockType::operator>):
3112         (WTF::TimeWithDynamicClockType::operator<=):
3113         (WTF::TimeWithDynamicClockType::operator>=):
3114         (WTF::TimeWithDynamicClockType::dump):
3115         (WTF::TimeWithDynamicClockType::sleep):
3116         * wtf/TimeWithDynamicClockType.h: Added.
3117         (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType):
3118         (WTF::TimeWithDynamicClockType::fromRawDouble):
3119         (WTF::TimeWithDynamicClockType::secondsSinceEpoch):
3120         (WTF::TimeWithDynamicClockType::clockType):
3121         (WTF::TimeWithDynamicClockType::withSameClockAndRawDouble):
3122         (WTF::TimeWithDynamicClockType::operator bool):
3123         (WTF::TimeWithDynamicClockType::operator+):
3124         (WTF::TimeWithDynamicClockType::operator-):
3125         (WTF::TimeWithDynamicClockType::operator+=):
3126         (WTF::TimeWithDynamicClockType::operator-=):
3127         (WTF::TimeWithDynamicClockType::operator==):
3128         (WTF::TimeWithDynamicClockType::operator!=):
3129         * wtf/WallTime.cpp: Added.
3130         (WTF::WallTime::now):
3131         (WTF::WallTime::approximateMonotonicTime):
3132         (WTF::WallTime::dump):
3133         (WTF::WallTime::sleep):
3134         * wtf/WallTime.h: Added.
3135         (WTF::WallTime::WallTime):
3136         (WTF::WallTime::fromRawDouble):
3137         (WTF::WallTime::infinity):
3138         (WTF::WallTime::secondsSinceEpoch):
3139         (WTF::WallTime::approximateWallTime):
3140         (WTF::WallTime::operator bool):
3141         (WTF::WallTime::operator+):
3142         (WTF::WallTime::operator-):
3143         (WTF::WallTime::operator+=):
3144         (WTF::WallTime::operator-=):
3145         (WTF::WallTime::operator==):
3146         (WTF::WallTime::operator!=):
3147         (WTF::WallTime::operator<):
3148         (WTF::WallTime::operator>):
3149         (WTF::WallTime::operator<=):
3150         (WTF::WallTime::operator>=):
3151         * wtf/threads/BinarySemaphore.cpp:
3152         (WTF::BinarySemaphore::wait):
3153         * wtf/threads/BinarySemaphore.h:
3154
3155 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
3156
3157         DFG plays fast and loose with the shadow values of a Phi
3158         https://bugs.webkit.org/show_bug.cgi?id=164309
3159
3160         Reviewed by Saam Barati.
3161         
3162         Made this API use size rather than maxIndex as its initialization parameter, because that's
3163         less confusing.
3164
3165         * wtf/IndexSparseSet.h:
3166         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
3167
3168 2016-11-03  Commit Queue  <commit-queue@webkit.org>
3169
3170         Unreviewed, rolling out r208364.
3171         https://bugs.webkit.org/show_bug.cgi?id=164402
3172
3173         broke the build (Requested by smfr on #webkit).
3174
3175         Reverted changeset:
3176
3177         "DFG plays fast and loose with the shadow values of a Phi"
3178         https://bugs.webkit.org/show_bug.cgi?id=164309
3179         http://trac.webkit.org/changeset/208364
3180
3181 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
3182
3183         DFG plays fast and loose with the shadow values of a Phi
3184         https://bugs.webkit.org/show_bug.cgi?id=164309
3185
3186         Reviewed by Saam Barati.
3187         
3188         Made this API use size rather than maxIndex as its initialization parameter, because that's
3189         less confusing.
3190
3191         * wtf/IndexSparseSet.h:
3192         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
3193
3194 2016-11-03  Konstantin Tokarev  <annulen@yandex.ru>
3195
3196         Fixes to build JSCOnly on macOS
3197         https://bugs.webkit.org/show_bug.cgi?id=164379
3198
3199         Reviewed by Michael Catanzaro.
3200
3201         * wtf/Platform.h: JSCOnly port should not provide any PLATFORM() macro
3202
3203 2016-11-03  Brady Eidson  <beidson@apple.com>
3204
3205         IndexedDB 2.0: Support binary keys.
3206         <rdar://problem/28806927> and https://bugs.webkit.org/show_bug.cgi?id=164359
3207
3208         Reviewed by Alex Christensen.
3209
3210         * wtf/Hasher.h:
3211         (WTF::StringHasher::hashMemory): Teach hashMemory() to handle buffers with odd lengths.
3212
3213 2016-11-02  Filip Pizlo  <fpizlo@apple.com>
3214
3215         The GC should be in a thread
3216         https://bugs.webkit.org/show_bug.cgi?id=163562
3217
3218         Reviewed by Geoffrey Garen and Andreas Kling.
3219         
3220         This fixes some bugs and adds a few features.
3221
3222         * wtf/Atomics.h: The GC may do work on behalf of the JIT. If it does, the main thread needs to execute a cross-modifying code fence. This is cpuid on x86 and I believe it's isb on ARM. It would have been an isync on PPC and I think that isb is the ARM equivalent.
3223         (WTF::arm_isb):
3224         (WTF::crossModifyingCodeFence):
3225         (WTF::x86_ortop):
3226         (WTF::x86_cpuid):
3227         * wtf/AutomaticThread.cpp: I accidentally had AutomaticThreadCondition inherit from ThreadSafeRefCounted<AutomaticThread> [sic]. This never crashed before because all of our prior AutomaticThreadConditions were immortal.
3228         (WTF::AutomaticThread::AutomaticThread):
3229         (WTF::AutomaticThread::~AutomaticThread):
3230         (WTF::AutomaticThread::start):
3231         * wtf/AutomaticThread.h:
3232         * wtf/MainThread.cpp: Need to allow initializeGCThreads() to be called separately because it's now more than just a debugging thing.
3233         (WTF::initializeGCThreads):
3234
3235 2016-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>
3236
3237         Clean wrong comment about compositing on the UI process.
3238         https://bugs.webkit.org/show_bug.cgi?id=164339
3239
3240         Reviewed by Michael Catanzaro.
3241
3242         * wtf/Platform.h: The comment about compositing on the UI process
3243         was added on r109302 but was not removed properly when the Qt port
3244         was removed from trunk.
3245         USE_PROTECTION_SPACE_AUTH_CALLBACK has nothing to do with it.
3246
3247 2016-11-02  Alex Christensen  <achristensen@webkit.org>
3248
3249         Remove Battery Status API from the tree
3250         https://bugs.webkit.org/show_bug.cgi?id=164213
3251
3252         Reviewed by Sam Weinig.
3253
3254         * wtf/FeatureDefines.h:
3255
3256 2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>
3257
3258         [Readable Streams API] Enable creation of ReadableByteStreamController
3259         https://bugs.webkit.org/show_bug.cgi?id=164014
3260
3261         Reviewed by Youenn Fablet.
3262
3263         Added flag for the byte stream part of Readable Streams API.
3264
3265         * wtf/FeatureDefines.h:
3266
3267 2016-11-02  Per Arne Vollan  <pvollan@apple.com>
3268
3269         [Win] Copy build results to AAS 'Program Files' folder.
3270         https://bugs.webkit.org/show_bug.cgi?id=164273
3271
3272         Reviewed by Brent Fulgham.
3273
3274         The preferred location for the binaries is the AAS 'Program Files' folder.
3275
3276         * WTF.vcxproj/WTF.proj:
3277
3278 2016-10-29  Filip Pizlo  <fpizlo@apple.com>
3279
3280         JSC should support SharedArrayBuffer
3281         https://bugs.webkit.org/show_bug.cgi?id=163986
3282
3283         Reviewed by Keith Miller.
3284         
3285         Adds some small things we need for SharedArrayBuffer.
3286         
3287         * wtf/Atomics.h:
3288         (WTF::Atomic::compareExchangeWeakRelaxed):
3289         (WTF::Atomic::exchangeAdd):
3290         (WTF::Atomic::exchangeAnd):
3291         (WTF::Atomic::exchangeOr):
3292         (WTF::Atomic::exchangeSub):
3293         (WTF::Atomic::exchangeXor):
3294         (WTF::atomicLoad):
3295         (WTF::atomicStore):
3296         (WTF::atomicCompareExchangeWeak):
3297         (WTF::atomicCompareExchangeWeakRelaxed):
3298         (WTF::atomicCompareExchangeStrong):
3299         (WTF::atomicExchangeAdd):
3300         (WTF::atomicExchangeAnd):
3301         (WTF::atomicExchangeOr):
3302         (WTF::atomicExchangeSub):
3303         (WTF::atomicExchangeXor):
3304         (WTF::atomicExchange):
3305         (WTF::Atomic::exchangeAndAdd): Deleted.
3306         (WTF::weakCompareAndSwap): Deleted.
3307         We need to be able to do atomics operations on naked pointers. We also need to be able to do
3308         all of the things that std::atomic does. This adds those things and renames
3309         weakCompareAndSwap to atomicCompareExchangeWeakRelaxed so that we're using consistent
3310         terminology.
3311         
3312         * wtf/Bitmap.h:
3313         (WTF::WordType>::concurrentTestAndSet): Renamed weakCompareAndSwap.
3314         (WTF::WordType>::concurrentTestAndClear): Renamed weakCompareAndSwap.
3315         * wtf/FastBitVector.h:
3316         (WTF::FastBitVector::atomicSetAndCheck): Renamed weakCompareAndSwap.
3317         * wtf/ParkingLot.cpp:
3318         (WTF::ParkingLot::unparkOne):
3319         (WTF::ParkingLot::unparkCount):
3320         * wtf/ParkingLot.h:
3321         Added unparkCount(), which lets you unpark some bounded number of threads and returns the
3322         number of threads unparked. This is just a modest extension of unparkAll(). unparkAll() now
3323         just calls unparkCount(ptr, UINT_MAX).
3324
3325 2016-10-30  Frederic Wang  <fwang@igalia.com>
3326
3327         Use HarfBuzz ot-math API to parse the OpenType MATH table
3328         https://bugs.webkit.org/show_bug.cgi?id=162671
3329
3330         Reviewed by Michael Catanzaro.
3331
3332         * wtf/Platform.h: By default, do not enable internal OpenType MATH parsing on GTK.
3333
3334 2016-10-25  Mark Lam  <mark.lam@apple.com>
3335
3336         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
3337         https://bugs.webkit.org/show_bug.cgi?id=163996
3338         <rdar://problem/28263117>
3339
3340         Reviewed by Geoffrey Garen.
3341
3342         * wtf/Vector.h:
3343         (WTF::minCapacity>::tryConstructAndAppend):
3344         (WTF::minCapacity>::tryConstructAndAppendSlowCase):
3345         - Added try versions of constructAndAppend() so that we can handle the failure
3346           to allocate more gracefully.
3347
3348 2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>
3349
3350         Non-specialized version of deleteObject should not have template argument
3351         https://bugs.webkit.org/show_bug.cgi?id=163943
3352
3353         Reviewed by Anders Carlsson.
3354
3355         Fixes compilation of GDIObject.h with MinGW
3356
3357         * wtf/win/GDIObject.h:
3358         (WTF::deleteObject):
3359
3360 2016-10-24  Per Arne Vollan  <pvollan@apple.com>
3361
3362         [Win] CMake build type is not set.
3363         https://bugs.webkit.org/show_bug.cgi?id=163917
3364
3365         Reviewed by Alex Christensen.
3366
3367         The CMAKE_BUILD_TYPE variable should be set to Debug or Release.
3368
3369         * WTF.vcxproj/WTF.proj:
3370
3371 2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>
3372
3373         [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
3374         https://bugs.webkit.org/show_bug.cgi?id=163657
3375
3376         Reviewed by Saam Barati.
3377
3378         Simplify nonEmptyRangesOverlap.
3379
3380         * wtf/MathExtras.h:
3381         (WTF::nonEmptyRangesOverlap):
3382
3383 2016-10-23  Chris Dumez  <cdumez@apple.com>
3384
3385         Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
3386         <rdar://problem/28902292>
3387
3388         Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.
3389
3390         * wtf/Platform.h:
3391
3392 2016-10-20  Keith Miller  <keith_miller@apple.com>
3393
3394         Add support for WASM calls
3395         https://bugs.webkit.org/show_bug.cgi?id=161727
3396
3397         Reviewed by Filip Pizlo and Michael Saboff.
3398
3399         Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace.
3400
3401         * wtf/LEBDecoder.h:
3402         (WTF::LEBDecoder::decodeUInt):
3403         (WTF::LEBDecoder::decodeUInt32):
3404         (WTF::LEBDecoder::decodeUInt64):
3405         (WTF::LEBDecoder::decodeInt32):
3406         (decodeUInt32): Deleted.
3407         (decodeInt32): Deleted.
3408
3409 2016-10-20  Filip Pizlo  <fpizlo@apple.com>
3410
3411         The tracking of the coarse-grain Heap state (allocating or not, collector or not, eden vs full) should respect the orthogonality between allocating and collecting
3412         https://bugs.webkit.org/show_bug.cgi?id=163738
3413
3414         Reviewed by Geoffrey Garen.
3415         
3416         There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing
3417         should know about this.
3418
3419         * wtf/MainThread.cpp:
3420         (WTF::initializeGCThreads):
3421         (WTF::registerGCThread):
3422         (WTF::mayBeGCThread):
3423         * wtf/MainThread.h:
3424
3425 2016-10-19  Sam Weinig  <sam@webkit.org>
3426
3427         Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
3428         https://bugs.webkit.org/show_bug.cgi?id=163713
3429
3430         Reviewed by Dan Bernstein.
3431
3432         - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following
3433           way:
3434                 WTF::visit(WTF::makeVisitor(...), variant)
3435
3436         * wtf/Variant.h:
3437         (WTF::switchOn):
3438
3439 2016-10-19  Alex Christensen  <achristensen@webkit.org>
3440
3441         Revert r207151
3442         https://bugs.webkit.org/show_bug.cgi?id=163675
3443
3444         Reviewed by Brent Fulgham.
3445
3446         * wtf/Platform.h:
3447         * wtf/SchedulePair.h:
3448         * wtf/SchedulePairMac.mm:
3449
3450 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
3451
3452         REGRESSION (r207480): 3 Dromaeo tests failing
3453         https://bugs.webkit.org/show_bug.cgi?id=163633
3454
3455         Reviewed by Mark Lam.
3456         
3457         It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking
3458         thread will clear our address eventually - but not immediately. This causes a nasty
3459         assertion failure. The tricky thing is that when we detect this, we need to wait until that
3460         unparking thread does the deed. Otherwise, they will still do it at some later time.
3461         
3462         Alternatively, we could use some kind of versioning to detect this - increment the version
3463         when you park, so that unparking threads will know if they are time travelers. That seems
3464         more yucky.
3465         
3466         I don't think it matters too much what we do here, so long as it's simple and correct, since
3467         this requires a race that is rare enough that it didn't happen once in my testing, and I was
3468         pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is
3469         rare because it requires the timeout to happen right as someone else is unparking. Since
3470         it's so rare, its probably OK that the unparked thread waits just a tiny moment until the
3471         unparking thread is done.
3472
3473         * wtf/ParkingLot.cpp:
3474         (WTF::ParkingLot::parkConditionallyImpl):
3475         (WTF::ParkingLot::unparkOneImpl):
3476
3477 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
3478
3479         Baseline JIT should use AutomaticThread
3480         https://bugs.webkit.org/show_bug.cgi?id=163686
3481
3482         Reviewed by Geoffrey Garen.
3483         
3484         Added a AutomaticThreadCondition::wait() method, so that if you really want to use one
3485         common condition for your thread and something else, you can do it. This trivially works
3486         if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's
3487         dangerous, since you don't know who will wake up).
3488         
3489         The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an
3490         optimal way: there are just two threads talking to each other, so it wakes up at most one
3491         thread and that thread is exactly the one you want woken up. Adding wait() means that I did
3492         not have to change that code.
3493
3494         * wtf/AutomaticThread.cpp:
3495         (WTF::AutomaticThreadCondition::wait):
3496         * wtf/AutomaticThread.h:
3497
3498 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
3499
3500         DFG worklist should use AutomaticThread
3501         https://bugs.webkit.org/show_bug.cgi?id=163615
3502
3503         Reviewed by Mark Lam.
3504         
3505         This adds new functionality to AutomaticThread to support DFG::Worklist:
3506         
3507         - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end
3508           of a thread's lifetime. This allows Worklist to tie some resources to the life of the
3509           thread, and also means that now those resources will naturally free up when the Worklist is
3510           not in use.
3511         
3512         - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We
3513           need to know if the Condition woke up anyone. If it didn't, then we need to launch one of
3514           our threads.
3515
3516         * wtf/AutomaticThread.cpp:
3517         (WTF::AutomaticThreadCondition::notifyOne):
3518         (WTF::AutomaticThread::ThreadScope::ThreadScope):
3519         (WTF::AutomaticThread::ThreadScope::~ThreadScope):
3520         (WTF::AutomaticThread::start):
3521         (WTF::AutomaticThread::threadDidStart):
3522         (WTF::AutomaticThread::threadWillStop):
3523         * wtf/AutomaticThread.h:
3524         * wtf/Condition.h:
3525         (WTF::ConditionBase::notifyOne):
3526
3527 2016-10-18  Sam Weinig  <sam@webkit.org>
3528
3529         Replace std::experimental::variant with WTF::Variant (or similar)
3530         https://bugs.webkit.org/show_bug.cgi?id=163626
3531
3532         Reviewed by Chris Dumez.
3533
3534         Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
3535         into the WTF namespace.
3536
3537         * wtf/Forward.h:
3538         * wtf/Variant.h:
3539
3540 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
3541
3542         WTF should make it easier to create threads that die automatically after inactivity
3543         https://bugs.webkit.org/show_bug.cgi?id=163576
3544
3545         Reviewed by Andreas Kling.
3546         
3547         For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel
3548         guilty because those threads don't shut down when they are inactive. For example, in bug
3549         163562, I need to add a new GC thread. There will be one of them per VM. This means that a
3550         JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's
3551         good.
3552         
3553         A common pattern for all of these threads is that they&n