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