[Win][Direct2D] Add Direct2D CMake rules
[WebKit.git] / Source / WTF / ChangeLog
1 2016-10-06  Brent Fulgham  <bfulgham@apple.com>
2
3         [Win][Direct2D] Add Direct2D CMake rules
4         https://bugs.webkit.org/show_bug.cgi?id=162925
5
6         Reviewed by Brent Fulgham.
7
8         * wtf/Platform.h: Don't USE(CA) or USE(CG) if building
9         with Direct2D.
10
11 2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>
12
13         [DOMJIT] Add initial CheckDOM and CallDOM implementations
14         https://bugs.webkit.org/show_bug.cgi?id=162941
15
16         Reviewed by Filip Pizlo.
17
18         * wtf/Box.h:
19         (WTF::Box::Box):
20
21 2016-10-05  Zan Dobersek  <zdobersek@igalia.com>
22
23         Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
24         https://bugs.webkit.org/show_bug.cgi?id=162903
25
26         Reviewed by Alex Christensen.
27
28         Rename build guards for the remaining implementation of the legacy EME API
29         to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
30         of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.
31
32         * wtf/FeatureDefines.h:
33
34 2016-10-04  Saam Barati  <sbarati@apple.com>
35
36         String.prototype.toLowerCase should be a DFG/FTL intrinsic
37         https://bugs.webkit.org/show_bug.cgi?id=162887
38
39         Reviewed by Filip Pizlo and Yusuke Suzuki.
40
41         This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit
42         which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale
43         into a helper function. I decided to extract this into its own function because
44         it may be the case that JSCs JITs will want to continue the operation
45         after it has already ensured that part of an 8-bit string is lower case.
46
47         * wtf/text/StringImpl.cpp:
48         (WTF::StringImpl::convertToLowercaseWithoutLocale):
49         (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
50         * wtf/text/StringImpl.h:
51         * wtf/text/WTFString.cpp:
52         (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
53         * wtf/text/WTFString.h:
54
55 2016-10-04  Chris Dumez  <cdumez@apple.com>
56
57         Implement KeyboardEvent.code from the UI Event spec
58         https://bugs.webkit.org/show_bug.cgi?id=149584
59
60         Reviewed by Darin Adler.
61
62         Add build time flag to toggle support for the code attribute on
63         KeyboardEvent and only enable it on Mac for now, given that the
64         implementation is missing on other platforms.
65
66         * wtf/FeatureDefines.h:
67
68 2016-10-03  Chris Dumez  <cdumez@apple.com>
69
70         Add support for KeyboardEvent.key attribute
71         https://bugs.webkit.org/show_bug.cgi?id=36267
72
73         Reviewed by Darin Adler.
74
75         Add compile time flag for the key attribute on KeyboardEvent and enable
76         it on Cocoa only.
77
78         * wtf/FeatureDefines.h:
79
80 2016-09-29  Sam Weinig  <sam@webkit.org>
81
82         Add initial support for IDL union conversion
83         https://bugs.webkit.org/show_bug.cgi?id=161576
84
85         Reviewed by Chris Dumez.
86
87         * WTF.xcodeproj/project.pbxproj:
88         * wtf/CMakeLists.txt:
89         Add Brigand.h
90
91         * wtf/Brigand.h: Added.
92         Import a standalone copy of Edouard Alligand and Joel Falcou's 
93         Brigand library for help with for help with list based meta programming
94
95         * wtf/StdLibExtras.h:
96         Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference.
97         - IsTemplate acts like std::is_class, but works with a generic base.
98         - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base.
99         - RemoveCVAndReference combines std::remove_cv and std::remove_reference.
100
101 2016-09-30  Filip Pizlo  <fpizlo@apple.com>
102
103         B3::moveConstants should be able to edit code to minimize the number of constants
104         https://bugs.webkit.org/show_bug.cgi?id=162764
105
106         Reviewed by Saam Barati.
107         
108         I thought it would be a good idea to document the fact that dominator traversal happens in a
109         particular order for a reason.
110
111         * wtf/Dominators.h:
112
113 2016-09-29  Filip Pizlo  <fpizlo@apple.com>
114
115         Air should have a way of expressing additional instruction flags
116         https://bugs.webkit.org/show_bug.cgi?id=162699
117
118         Reviewed by Mark Lam.
119
120         * wtf/CommaPrinter.h:
121         (WTF::CommaPrinter::CommaPrinter):
122         (WTF::CommaPrinter::dump):
123         (WTF::CommaPrinter::didPrint):
124
125 2016-09-30  Youenn Fablet  <youenn@apple.com>
126
127         Add a way to go from a RefPtr<T> to Ref<const T>
128         https://bugs.webkit.org/show_bug.cgi?id=162683
129
130         Reviewed by Alex Christensen.
131
132         * wtf/RefPtr.h:
133         (WTF::RefPtr::releaseConstNonNull): Added.
134
135 2016-09-29  Mark Lam  <mark.lam@apple.com>
136
137         Re-enable StringView life-cycle checking.
138         https://bugs.webkit.org/show_bug.cgi?id=160384
139         <rdar://problem/28479434>
140
141         Reviewed by Saam Barati.
142
143         Re-landing after slow running tests have been resolved.
144
145         * wtf/text/StringView.h:
146
147 2016-09-29  Commit Queue  <commit-queue@webkit.org>
148
149         Unreviewed, rolling out r206563.
150         https://bugs.webkit.org/show_bug.cgi?id=162732
151
152         Caused stress/op_*.js.ftl-no-cjit tests to time out (Requested
153         by ryanhaddad on #webkit).
154
155         Reverted changeset:
156
157         "Re-enable StringView life-cycle checking."
158         https://bugs.webkit.org/show_bug.cgi?id=160384
159         http://trac.webkit.org/changeset/206563
160
161 2016-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>
162
163         Clang 3.9 reports a compilation warning about ENABLE_EXCEPTION_SCOPE_VERIFICATION
164         https://bugs.webkit.org/show_bug.cgi?id=162718
165
166         Reviewed by Alex Christensen.
167
168         Clang 3.9 reports a following compilation warning:
169           Source/JavaScriptCore/runtime/VM.h:656:5: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
170
171         * wtf/Platform.h: Changed the definition of ENABLE_EXCEPTION_SCOPE_VERIFICATION not to use 'defined'.
172
173 2016-09-28  Mark Lam  <mark.lam@apple.com>
174
175         Re-enable StringView life-cycle checking.
176         https://bugs.webkit.org/show_bug.cgi?id=160384
177         <rdar://problem/28479434>
178
179         Reviewed by Saam Barati.
180
181         * wtf/text/StringView.h:
182
183 2016-09-28  Filip Pizlo  <fpizlo@apple.com>
184
185         The write barrier should be down with TSO
186         https://bugs.webkit.org/show_bug.cgi?id=162316
187
188         Reviewed by Geoffrey Garen.
189         
190         Added clearRange(), which quickly clears a range of bits. This turned out to be useful for
191         a DFG optimization pass.
192
193         * wtf/FastBitVector.cpp:
194         (WTF::FastBitVector::clearRange):
195         * wtf/FastBitVector.h:
196
197 2016-09-28  Mark Lam  <mark.lam@apple.com>
198
199         Fix race condition in StringView's UnderlyingString lifecycle management.
200         https://bugs.webkit.org/show_bug.cgi?id=162702
201
202         Reviewed by Geoffrey Garen.
203
204         There 2 relevant functions at play:
205
206         void StringView::setUnderlyingString(const StringImpl* string)
207         {
208             UnderlyingString* underlyingString;
209             if (!string)
210                 underlyingString = nullptr;
211             else {
212                 std::lock_guard<StaticLock> lock(underlyingStringsMutex);
213                 auto result = underlyingStrings().add(string, nullptr);
214                 if (result.isNewEntry)
215                     result.iterator->value = new UnderlyingString(*string);
216                 else
217                     ++result.iterator->value->refCount;
218                 underlyingString = result.iterator->value; // Point P2.
219             }
220             adoptUnderlyingString(underlyingString); // Point P5.
221         }
222
223         ... and ...
224
225         void StringView::adoptUnderlyingString(UnderlyingString* underlyingString)
226         {
227             if (m_underlyingString) {
228                 // Point P0.
229                 if (!--m_underlyingString->refCount) {
230                     if (m_underlyingString->isValid) { // Point P1.
231                         std::lock_guard<StaticLock> lock(underlyingStringsMutex);
232                         underlyingStrings().remove(&m_underlyingString->string); // Point P3.
233                     }
234                     delete m_underlyingString; // Point P4.
235                 }
236             }
237             m_underlyingString = underlyingString;
238         }
239
240         Imagine the following scenario:
241
242         1. Thread T1 has been using an UnderlyingString U1, and is now done with it.
243            T1 runs up to point P1 in adoptUnderlyingString(), and is blocked waiting for
244            the underlyingStringsMutex (which is currently being held by Thread T2).
245         2. Context switch to Thread T2.
246            T2 wants to use UnderlyingString U1, and runs up to point P2 in setUnderlyingString()
247            and releases the underlyingStringsMutex.
248            Note: T2 thinks it has successfully refCounted U1, and therefore U1 is safe to use.
249         3. Context switch to Thread T1.
250            T1 acquires the underlyingStringsMutex, and proceeds to remove it from the
251            underlyingStrings() map (see Point P3).  It thinks it has successfully done so
252            and proceeds to delete U1 (see Point P4).
253         4. Context switch to Thread T2.
254            T2 proceeds to use U1 (see Point P5 in setUnderlyingString()).
255            Note: U1 has already been freed.  This is a use after free.
256
257         The fix is to acquire the underlyingStringsMutex at Point P0 in adoptUnderlyingString()
258         instead of after P1.  This ensures that the decrementing of the UnderlyingString
259         refCount and its removal from the underlyingStrings() map is done as an atomic unit.
260
261         Note: If you look in StringView.cpp, you see another setUnderlyingString() which
262         takes a StringView otherString.  This version of setUnderlyingString() can only
263         be called from within the same thread that created the other StringView.  As a
264         result, here, we are guaranteed that the UnderlyingString refCount is never zero,
265         and there's no other threat of another thread trying to delete the UnderlyingString
266         while we adopt it.  Hence, we don't need to acquire the underlyingStringsMutex
267         here.
268
269         This race condition was found when running layout tests fetch/fetch-worker-crash.html
270         and storage/indexeddb/modern/opendatabase-versions.html when CHECK_STRINGVIEW_LIFETIME
271         is enabled.  This issue resulted in those tests crashing due to a use-after-free.
272
273         * wtf/text/StringView.cpp:
274         (WTF::StringView::adoptUnderlyingString):
275         (WTF::StringView::setUnderlyingString):
276
277 2016-09-28  Brent Fulgham  <bfulgham@apple.com>
278
279         Correct 'safeCast' implementation
280         https://bugs.webkit.org/show_bug.cgi?id=162679
281         <rdar://problem/28518189>
282
283         Reviewed by Zalan Bujtas.
284
285         * wtf/StdLibExtras.h:
286         (WTF::safeCast): Use a RELEASE_ASSERT.
287
288 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
289
290         [CMake] Add HAVE_LOCALTIME_R definition
291         https://bugs.webkit.org/show_bug.cgi?id=162636
292
293         Reviewed by Alex Christensen.
294
295         * wtf/DateMath.cpp:
296         (WTF::getLocalTime):
297         * wtf/GregorianDateTime.cpp:
298         (WTF::GregorianDateTime::setToCurrentLocalTime):
299         * wtf/Platform.h:
300
301 2016-09-27  JF Bastien  <jfbastien@apple.com>
302
303         Speed up Heap::isMarkedConcurrently
304         https://bugs.webkit.org/show_bug.cgi?id=162095
305
306         Reviewed by Filip Pizlo.
307
308         Heap::isMarkedConcurrently had a load-load fence which is expensive on weak memory ISAs such as ARM.
309
310         This patch is fairly perf-neutral overall, but the GC's instrumentation reports:
311           GC:Eden is 93% average runtime after change
312           GC:Full is 76% average runtime after change
313
314         The fence was there because:
315          1. If the read of m_markingVersion in MarkedBlock::areMarksStale isn't what's expected then;
316          2. The read of m_marks in MarkedBlock::isMarked needs to observe the value that was stored *before* m_markingVersion was stored.
317
318         This ordering isn't guaranteed on ARM, which has a weak memory model.
319
320         There are 3 ways to guarantee this ordering:
321          A. Use a barrier instruction.
322          B. Use a load-acquire (new in ARMv8).
323          C. use ARM's address dependency rule, which C++ calls memory_order_consume.
324
325         In general:
326          A. is slow but orders all of memory in an intuitive manner.
327          B. is faster-ish and has the same property-ish.
328          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).
329
330         ARM explains the address dependency rule in their document "barrier litmus tests and cookbook":
331
332         > *Resolving by the use of barriers and address dependency*
333         >
334         > There is a rule within the ARM architecture that:
335         > 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).
336         > 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.
337         > Where both a control and address dependency exist, the ordering behaviour is consistent with the address dependency.
338
339         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
340
341         * wtf/Atomics.h:
342         (WTF::zeroWithConsumeDependency): a 0 which carries a dependency
343         (WTF::consumeLoad): pixie magic
344
345 2016-09-27  JF Bastien  <jfbastien@apple.com>
346
347         Atomics.h on Windows: remove seq_cst hack
348         https://bugs.webkit.org/show_bug.cgi?id=162022
349
350         Reviewed by Mark Lam.
351
352         No need to force access to seq_cst, always inlining fixes the MSVC warning.
353
354         * wtf/Atomics.h:
355         (WTF::Atomic::compareExchangeWeak): remove seq_cst hack
356         (WTF::Atomic::compareExchangeStrong): remove seq_cst hack
357         (WTF::Atomic::exchangeAndAdd): remove seq_cst hack
358         (WTF::Atomic::exchange): remove seq_cst hack
359
360 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
361
362         [CMake] Use CMake to determine HAVE_* defines
363         https://bugs.webkit.org/show_bug.cgi?id=162368
364
365         Reviewed by Alex Christensen.
366
367         * wtf/Platform.h:
368
369 2016-09-20  Anders Carlsson  <andersca@apple.com>
370
371         PlatformEvent::m_modifiers should be an OptionSet
372         https://bugs.webkit.org/show_bug.cgi?id=162326
373
374         Reviewed by Daniel Bates.
375
376         * wtf/OptionSet.h:
377         (WTF::OptionSet::operator!=):
378         (WTF::OptionSet::operator-):
379
380 2016-09-27  Jer Noble  <jer.noble@apple.com>
381
382         Remove deprecated ENCRYPTED_MEDIA implementation.
383         https://bugs.webkit.org/show_bug.cgi?id=161010
384
385         Reviewed by Eric Carlson.
386
387         Remove ENABLE_ENCRYPTED_MEDIA.
388
389         * wtf/FeatureDefines.h:
390
391 2016-09-27  Youenn Fablet  <youenn@apple.com>
392
393         [Fetch API] Use Ref<const T> in FetchBody::m_data variant
394         https://bugs.webkit.org/show_bug.cgi?id=162599
395
396         Reviewed by Alex Christensen.
397
398         Enabling to use DeferrableRefCounted<const T> by making m_refCount mutable.
399
400         * wtf/DeferrableRefCounted.h:
401         (WTF::DeferrableRefCountedBase::ref):
402         (WTF::DeferrableRefCountedBase::derefBase):
403         (WTF::DeferrableRefCounted::deref):
404
405 2016-09-26  Daniel Bates  <dabates@apple.com>
406
407         Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
408         https://bugs.webkit.org/show_bug.cgi?id=162365
409
410         Reviewed by Simon Fraser.
411
412         * wtf/FeatureDefines.h:
413
414 2016-09-26  Benjamin Poulain  <benjamin@webkit.org>
415
416         [JSC] Shrink the Math inline caches some more
417         https://bugs.webkit.org/show_bug.cgi?id=162485
418
419         Reviewed by Saam Barati.
420
421         * wtf/Bag.h:
422         Don't copy the arguments before initializing the nodes.
423
424 2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>
425
426         std::unique_ptr deleter functions should not check if pointer is null
427         https://bugs.webkit.org/show_bug.cgi?id=162558
428
429         Reviewed by Alex Christensen.
430
431         std::unique_ptr already does this before calling the deleter.
432
433         * wtf/efl/UniquePtrEfl.h:
434         * wtf/glib/GUniquePtr.h:
435
436 == Rolled over to ChangeLog-2016-09-26 ==