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