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