Changeset 246623 in webkit
- Timestamp:
- Jun 19, 2019, 5:51:30 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 6 edited
-
Source/WTF/ChangeLog (modified) (1 diff)
-
Source/WTF/wtf/CrossThreadCopier.h (modified) (3 diffs)
-
Source/WTF/wtf/CrossThreadTask.h (modified) (3 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/CMakeLists.txt (modified) (1 diff)
-
Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (modified) (2 diffs)
-
Tools/TestWebKitAPI/Tests/WTF/CrossThreadCopier.cpp (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r246616 r246623 1 2019-06-19 Fujii Hironori <Hironori.Fujii@sony.com> 2 3 Add WTF::crossThreadCopy(T&&) to utilize String::isolatedCopy() && 4 https://bugs.webkit.org/show_bug.cgi?id=198957 5 6 Reviewed by Alex Christensen. 7 8 &&-qualified String::isolatedCopy() has a optimization path which 9 does just WTFMove if it isSafeToSendToAnotherThread which means 10 the object hasOneRef. 11 12 However, WTF::crossThreadCopy was using only &-qualified 13 isolatedCopy. To use the optimization, added 14 WTF::crossThreadCopy(T&&) overloading. 15 16 * wtf/CrossThreadCopier.h: 17 (WTF::crossThreadCopy): Added a overload of (T&&). 18 * wtf/CrossThreadTask.h: 19 (WTF::createCrossThreadTask): Removed explicit template arguments of crossThreadCopy. 20 1 21 2019-06-19 Devin Rousso <drousso@apple.com> 2 22 -
trunk/Source/WTF/wtf/CrossThreadCopier.h
r239427 r246623 32 32 #pragma once 33 33 34 #include <type_traits> 34 35 #include <wtf/Assertions.h> 35 36 #include <wtf/Forward.h> … … 78 79 // Classes that have an isolatedCopy() method get a default specialization. 79 80 template<class T> struct CrossThreadCopierBase<false, false, T> { 80 static T copy(const T& value)81 template<typename U> static auto copy(U&& value) 81 82 { 82 return value.isolatedCopy();83 return std::forward<U>(value).isolatedCopy(); 83 84 } 84 85 }; … … 147 148 // Default specialization for Optional of CrossThreadCopyable class. 148 149 template<typename T> struct CrossThreadCopierBase<false, false, Optional<T>> { 149 typedef Optional<T> Type; 150 static Type copy(const Type& source) 150 template<typename U> static Optional<T> copy(U&& source) 151 151 { 152 152 if (!source) 153 153 return WTF::nullopt; 154 return CrossThreadCopier<T>::copy( *source);154 return CrossThreadCopier<T>::copy(std::forward<U>(source).value()); 155 155 } 156 156 }; 157 157 158 template<typename T> T crossThreadCopy(const T& source)158 template<typename T> auto crossThreadCopy(T&& source) 159 159 { 160 return CrossThreadCopier< T>::copy(source);160 return CrossThreadCopier<std::remove_cv_t<std::remove_reference_t<T>>>::copy(std::forward<T>(source)); 161 161 } 162 162 -
trunk/Source/WTF/wtf/CrossThreadTask.h
r242732 r246623 68 68 CrossThreadTask createCrossThreadTask(void (*method)(Parameters...), const Arguments&... arguments) 69 69 { 70 return CrossThreadTask([method, arguments = std::make_tuple(crossThreadCopy <Arguments>(arguments)...)]() mutable {70 return CrossThreadTask([method, arguments = std::make_tuple(crossThreadCopy(arguments)...)]() mutable { 71 71 callFunctionForCrossThreadTask(method, WTFMove(arguments)); 72 72 }); … … 88 88 CrossThreadTask createCrossThreadTask(T& callee, void (T::*method)(Parameters...), const Arguments&... arguments) 89 89 { 90 return CrossThreadTask([callee = makeRefPtr(&callee), method, arguments = std::make_tuple(crossThreadCopy <Arguments>(arguments)...)]() mutable {90 return CrossThreadTask([callee = makeRefPtr(&callee), method, arguments = std::make_tuple(crossThreadCopy(arguments)...)]() mutable { 91 91 callMemberFunctionForCrossThreadTask(callee.get(), method, WTFMove(arguments)); 92 92 }); … … 96 96 CrossThreadTask createCrossThreadTask(T& callee, void (T::*method)(Parameters...), const Arguments&... arguments) 97 97 { 98 return CrossThreadTask([callee = &callee, method, arguments = std::make_tuple(crossThreadCopy <Arguments>(arguments)...)]() mutable {98 return CrossThreadTask([callee = &callee, method, arguments = std::make_tuple(crossThreadCopy(arguments)...)]() mutable { 99 99 callMemberFunctionForCrossThreadTask(callee, method, WTFMove(arguments)); 100 100 }); -
trunk/Tools/ChangeLog
r246617 r246623 1 2019-06-19 Fujii Hironori <Hironori.Fujii@sony.com> 2 3 Add WTF::crossThreadCopy(T&&) to utilize String::isolatedCopy() && 4 https://bugs.webkit.org/show_bug.cgi?id=198957 5 6 Reviewed by Alex Christensen. 7 8 * TestWebKitAPI/CMakeLists.txt: 9 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 10 * TestWebKitAPI/Tests/WTF/CrossThreadCopier.cpp: Added. 11 1 12 2019-06-19 Keith Rollin <krollin@apple.com> 2 13 -
trunk/Tools/TestWebKitAPI/CMakeLists.txt
r246490 r246623 31 31 Tests/WTF/ConcurrentPtrHashSet.cpp 32 32 Tests/WTF/Condition.cpp 33 Tests/WTF/CrossThreadCopier.cpp 33 34 Tests/WTF/CrossThreadTask.cpp 34 35 Tests/WTF/DateMath.cpp -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r246578 r246623 1471 1471 26F52EB118288F0F0023D412 /* geolocationWatchPositionWithHighAccuracy.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = geolocationWatchPositionWithHighAccuracy.html; sourceTree = "<group>"; }; 1472 1472 26F6E1EF1ADC749B00DE696B /* DFAMinimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DFAMinimizer.cpp; sourceTree = "<group>"; }; 1473 278DE64B22B8D611004E0E7A /* CrossThreadCopier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrossThreadCopier.cpp; sourceTree = "<group>"; }; 1473 1474 290A9BB51735DE8A00D71BBC /* CloseNewWindowInNavigationPolicyDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CloseNewWindowInNavigationPolicyDelegate.mm; sourceTree = "<group>"; }; 1474 1475 290A9BB81735F42300D71BBC /* OpenNewWindow.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = OpenNewWindow.html; sourceTree = "<group>"; }; … … 3400 3401 0F30CB5B1FCE1792004B5323 /* ConcurrentPtrHashSet.cpp */, 3401 3402 0FEAE3671B7D19CB00CE17F2 /* Condition.cpp */, 3403 278DE64B22B8D611004E0E7A /* CrossThreadCopier.cpp */, 3402 3404 51714EB91D087416004723C4 /* CrossThreadTask.cpp */, 3403 3405 26A2C72E15E2E73C005B1A14 /* CString.cpp */,
Note:
See TracChangeset
for help on using the changeset viewer.