Changeset 201518 in webkit
- Timestamp:
- May 31, 2016, 12:33:22 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 15 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/WTF.xcodeproj/project.pbxproj (modified) (4 diffs)
-
WTF/wtf/CrossThreadCopier.cpp (modified) (2 diffs)
-
WTF/wtf/CrossThreadQueue.h (added)
-
WTF/wtf/CrossThreadTask.h (modified) (19 diffs)
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/Modules/indexeddb/client/IDBConnectionProxy.h (modified) (2 diffs)
-
WebCore/Modules/indexeddb/server/IDBServer.cpp (modified) (3 diffs)
-
WebCore/Modules/indexeddb/server/IDBServer.h (modified) (3 diffs)
-
WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (modified) (2 diffs)
-
WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (modified) (3 diffs)
-
WebCore/dom/ScriptExecutionContext.h (modified) (1 diff)
-
WebCore/fileapi/ThreadableBlobRegistry.cpp (modified) (2 diffs)
-
WebKit2/ChangeLog (modified) (1 diff)
-
WebKit2/DatabaseProcess/DatabaseProcess.cpp (modified) (4 diffs)
-
WebKit2/DatabaseProcess/DatabaseProcess.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r201504 r201518 1 2016-05-31 Brady Eidson <beidson@apple.com> 2 3 Make createCrossThreadTask() functions return on the stack instead of the heap. 4 https://bugs.webkit.org/show_bug.cgi?id=158215 5 6 Reviewed by Darin Adler. 7 8 * WTF.xcodeproj/project.pbxproj: 9 10 * wtf/CrossThreadCopier.cpp: 11 12 * wtf/CrossThreadQueue.h: Added. A lightweight of MessageQueue that deals directly 13 in objects instead of in std::unique_ptrs. 14 (WTF::CrossThreadQueue::isKilled): 15 (WTF::CrossThreadQueue<DataType>::append): 16 (WTF::CrossThreadQueue<DataType>::waitForMessage): 17 (WTF::CrossThreadQueue<DataType>::tryGetMessage): 18 19 * wtf/CrossThreadTask.h: 20 (WTF::createCrossThreadTask): 21 (WTF::CrossThreadTask::CrossThreadTask): Deleted. 22 1 23 2016-05-30 Brady Eidson <beidson@apple.com> 2 24 -
trunk/Source/WTF/WTF.xcodeproj/project.pbxproj
r201504 r201518 105 105 515F794F1CFC9F4A00CCED93 /* CrossThreadCopier.h in Headers */ = {isa = PBXBuildFile; fileRef = 515F794C1CFC9F4A00CCED93 /* CrossThreadCopier.h */; }; 106 106 515F79501CFC9F4A00CCED93 /* CrossThreadTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 515F794D1CFC9F4A00CCED93 /* CrossThreadTask.h */; }; 107 515F79561CFD3A6900CCED93 /* CrossThreadQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 515F79551CFD3A6900CCED93 /* CrossThreadQueue.h */; }; 107 108 553071CA1C40427200384898 /* TinyLRUCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 553071C91C40427200384898 /* TinyLRUCache.h */; }; 108 109 70A993FE1AD7151300FA615B /* SymbolRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70A993FC1AD7151300FA615B /* SymbolRegistry.cpp */; }; … … 427 428 515F794C1CFC9F4A00CCED93 /* CrossThreadCopier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadCopier.h; sourceTree = "<group>"; }; 428 429 515F794D1CFC9F4A00CCED93 /* CrossThreadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadTask.h; sourceTree = "<group>"; }; 430 515F79551CFD3A6900CCED93 /* CrossThreadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadQueue.h; sourceTree = "<group>"; }; 429 431 553071C91C40427200384898 /* TinyLRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyLRUCache.h; sourceTree = "<group>"; }; 430 432 5D247B6214689B8600E78B76 /* libWTF.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libWTF.a; sourceTree = BUILT_PRODUCTS_DIR; }; … … 806 808 515F794B1CFC9F4A00CCED93 /* CrossThreadCopier.cpp */, 807 809 515F794C1CFC9F4A00CCED93 /* CrossThreadCopier.h */, 810 515F79551CFD3A6900CCED93 /* CrossThreadQueue.h */, 808 811 515F794D1CFC9F4A00CCED93 /* CrossThreadTask.h */, 809 812 A8A47273151A825A004123FF /* CryptographicallyRandomNumber.cpp */, … … 1183 1186 A8A4738A151A825B004123FF /* Bitmap.h in Headers */, 1184 1187 A8A4738C151A825B004123FF /* BitVector.h in Headers */, 1188 515F79561CFD3A6900CCED93 /* CrossThreadQueue.h in Headers */, 1185 1189 1A944F471C3D8814005BD28C /* BlockPtr.h in Headers */, 1186 1190 93DDE9321CDC052D00FD3491 /* dyldSPI.h in Headers */, -
trunk/Source/WTF/wtf/CrossThreadCopier.cpp
r201504 r201518 31 31 32 32 #include "config.h" 33 #include "CrossThreadCopier.h" 33 #include <wtf/CrossThreadCopier.h> 34 35 #include <wtf/CrossThreadTask.h> 34 36 35 37 namespace WTF { … … 79 81 80 82 } // namespace WTF 83 -
trunk/Source/WTF/wtf/CrossThreadTask.h
r201504 r201518 28 28 #include <wtf/CrossThreadCopier.h> 29 29 #include <wtf/NoncopyableFunction.h> 30 #include <wtf/StdLibExtras.h> 30 31 31 32 namespace WTF { 32 33 33 34 class CrossThreadTask { 34 WTF_MAKE_NONCOPYABLE(CrossThreadTask);35 35 public: 36 CrossThreadTask() = default; 37 36 38 CrossThreadTask(NoncopyableFunction<void ()>&& taskFunction) 37 39 : m_taskFunction(WTFMove(taskFunction)) … … 46 48 47 49 protected: 48 CrossThreadTask() { }49 50 50 NoncopyableFunction<void ()> m_taskFunction; 51 51 }; … … 74 74 75 75 template<typename T> 76 std::unique_ptr<CrossThreadTask>createCrossThreadTask(76 CrossThreadTask createCrossThreadTask( 77 77 T& callee, 78 78 void (T::*method)()) 79 79 { 80 return std::make_unique<CrossThreadTaskImpl<T>>(&callee, method);80 return CrossThreadTaskImpl<T>(&callee, method); 81 81 } 82 82 83 83 template<typename T, typename P1, typename MP1> 84 std::unique_ptr<CrossThreadTask>createCrossThreadTask(84 CrossThreadTask createCrossThreadTask( 85 85 T& callee, 86 86 void (T::*method)(MP1), 87 87 const P1& parameter1) 88 88 { 89 return std::make_unique<CrossThreadTaskImpl<T, MP1>>(89 return CrossThreadTaskImpl<T, MP1>( 90 90 &callee, 91 91 method, … … 94 94 95 95 template<typename T, typename P1, typename MP1, typename P2, typename MP2> 96 std::unique_ptr<CrossThreadTask>createCrossThreadTask(96 CrossThreadTask createCrossThreadTask( 97 97 T& callee, 98 98 void (T::*method)(MP1, MP2), … … 100 100 const P2& parameter2) 101 101 { 102 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2>>(102 return CrossThreadTaskImpl<T, MP1, MP2>( 103 103 &callee, 104 104 method, … … 109 109 110 110 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> 111 std::unique_ptr<CrossThreadTask>createCrossThreadTask(111 CrossThreadTask createCrossThreadTask( 112 112 T& callee, 113 113 void (T::*method)(MP1, MP2, MP3), … … 116 116 const P3& parameter3) 117 117 { 118 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2, MP3>>(118 return CrossThreadTaskImpl<T, MP1, MP2, MP3>( 119 119 &callee, 120 120 method, … … 125 125 126 126 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> 127 std::unique_ptr<CrossThreadTask>createCrossThreadTask(127 CrossThreadTask createCrossThreadTask( 128 128 void (*method)(MP1, MP2, MP3), 129 129 const P1& parameter1, … … 131 131 const P3& parameter3) 132 132 { 133 return std::make_unique<CrossThreadTaskStaticImpl<MP1, MP2, MP3>>(133 return CrossThreadTaskStaticImpl<MP1, MP2, MP3>( 134 134 method, 135 135 WTF::CrossThreadCopier<P1>::copy(parameter1), … … 139 139 140 140 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4> 141 std::unique_ptr<CrossThreadTask>createCrossThreadTask(141 CrossThreadTask createCrossThreadTask( 142 142 T& callee, 143 143 void (T::*method)(MP1, MP2, MP3, MP4), … … 147 147 const P4& parameter4) 148 148 { 149 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4>>(149 return CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4>( 150 150 &callee, 151 151 method, … … 157 157 158 158 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5> 159 std::unique_ptr<CrossThreadTask>createCrossThreadTask(159 CrossThreadTask createCrossThreadTask( 160 160 T& callee, 161 161 void (T::*method)(MP1, MP2, MP3, MP4, MP5), … … 166 166 const P5& parameter5) 167 167 { 168 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5>>(168 return CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5>( 169 169 &callee, 170 170 method, … … 177 177 178 178 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6> 179 std::unique_ptr<CrossThreadTask>createCrossThreadTask(179 CrossThreadTask createCrossThreadTask( 180 180 T& callee, 181 181 void (T::*method)(MP1, MP2, MP3, MP4, MP5, MP6), … … 187 187 const P6& parameter6) 188 188 { 189 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5, MP6>>(189 return CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5, MP6>( 190 190 &callee, 191 191 method, … … 199 199 200 200 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7> 201 std::unique_ptr<CrossThreadTask>createCrossThreadTask(201 CrossThreadTask createCrossThreadTask( 202 202 T& callee, 203 203 void (T::*method)(MP1, MP2, MP3, MP4, MP5, MP6, MP7), … … 210 210 const P7& parameter7) 211 211 { 212 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5, MP6, MP7>>(212 return CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5, MP6, MP7>( 213 213 &callee, 214 214 method, … … 223 223 224 224 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7, typename P8, typename MP8> 225 std::unique_ptr<CrossThreadTask>createCrossThreadTask(225 CrossThreadTask createCrossThreadTask( 226 226 T& callee, 227 227 void (T::*method)(MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8), … … 235 235 const P8& parameter8) 236 236 { 237 return std::make_unique<CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8>>(237 return CrossThreadTaskImpl<T, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8>( 238 238 &callee, 239 239 method, -
trunk/Source/WebCore/ChangeLog
r201516 r201518 1 2016-05-31 Brady Eidson <beidson@apple.com> 2 3 Make createCrossThreadTask() functions return on the stack instead of the heap. 4 https://bugs.webkit.org/show_bug.cgi?id=158215 5 6 Reviewed by Darin Adler. 7 8 No new tests (Refactor, no change in behavior). 9 10 * Modules/indexeddb/client/IDBConnectionProxy.h: 11 12 * Modules/indexeddb/server/IDBServer.cpp: 13 (WebCore::IDBServer::IDBServer::postDatabaseTask): 14 (WebCore::IDBServer::IDBServer::postDatabaseTaskReply): 15 (WebCore::IDBServer::IDBServer::databaseRunLoop): 16 * Modules/indexeddb/server/IDBServer.h: 17 18 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 19 (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTask): 20 (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply): 21 * Modules/indexeddb/server/UniqueIDBDatabase.h: 22 23 * dom/ScriptExecutionContext.h: 24 (WebCore::ScriptExecutionContext::postCrossThreadTask): 25 26 * fileapi/ThreadableBlobRegistry.cpp: 27 (WebCore::threadableQueue): 28 1 29 2016-05-31 Dave Hyatt <hyatt@apple.com> 2 30 -
trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h
r201504 r201518 32 32 #include "TransactionOperation.h" 33 33 #include <functional> 34 #include <wtf/CrossThreadQueue.h> 34 35 #include <wtf/CrossThreadTask.h> 35 36 #include <wtf/HashMap.h> … … 158 159 Lock m_transactionOperationLock; 159 160 160 MessageQueue<CrossThreadTask> m_mainThreadQueue;161 CrossThreadQueue<CrossThreadTask> m_mainThreadQueue; 161 162 Lock m_mainThreadTaskLock; 162 163 RefPtr<IDBConnectionToServer> m_mainThreadProtector; -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp
r201504 r201518 432 432 } 433 433 434 void IDBServer::postDatabaseTask( std::unique_ptr<CrossThreadTask>&& task)434 void IDBServer::postDatabaseTask(CrossThreadTask&& task) 435 435 { 436 436 ASSERT(isMainThread()); … … 438 438 } 439 439 440 void IDBServer::postDatabaseTaskReply( std::unique_ptr<CrossThreadTask>&& task)440 void IDBServer::postDatabaseTaskReply(CrossThreadTask&& task) 441 441 { 442 442 ASSERT(!isMainThread()); … … 468 468 } 469 469 470 while ( auto task = m_databaseQueue.waitForMessage())471 task->performTask();470 while (!m_databaseQueue.isKilled()) 471 m_databaseQueue.waitForMessage().performTask(); 472 472 } 473 473 -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h
r201504 r201518 32 32 #include "UniqueIDBDatabase.h" 33 33 #include "UniqueIDBDatabaseConnection.h" 34 #include <wtf/CrossThreadQueue.h> 34 35 #include <wtf/CrossThreadTask.h> 35 36 #include <wtf/HashMap.h> … … 85 86 WEBCORE_EXPORT void getAllDatabaseNames(uint64_t serverConnectionIdentifier, const SecurityOriginData& mainFrameOrigin, const SecurityOriginData& openingOrigin, uint64_t callbackID); 86 87 87 void postDatabaseTask( std::unique_ptr<CrossThreadTask>&&);88 void postDatabaseTaskReply( std::unique_ptr<CrossThreadTask>&&);88 void postDatabaseTask(CrossThreadTask&&); 89 void postDatabaseTaskReply(CrossThreadTask&&); 89 90 90 91 void registerDatabaseConnection(UniqueIDBDatabaseConnection&); … … 125 126 bool m_mainThreadReplyScheduled { false }; 126 127 127 MessageQueue<CrossThreadTask> m_databaseQueue;128 MessageQueue<CrossThreadTask> m_databaseReplyQueue;128 CrossThreadQueue<CrossThreadTask> m_databaseQueue; 129 CrossThreadQueue<CrossThreadTask> m_databaseReplyQueue; 129 130 130 131 HashMap<uint64_t, UniqueIDBDatabaseConnection*> m_databaseConnections; -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
r201461 r201518 1506 1506 } 1507 1507 1508 void UniqueIDBDatabase::postDatabaseTask( std::unique_ptr<CrossThreadTask>&& task)1508 void UniqueIDBDatabase::postDatabaseTask(CrossThreadTask&& task) 1509 1509 { 1510 1510 ASSERT(isMainThread()); … … 1515 1515 } 1516 1516 1517 void UniqueIDBDatabase::postDatabaseTaskReply( std::unique_ptr<CrossThreadTask>&& task)1517 void UniqueIDBDatabase::postDatabaseTaskReply(CrossThreadTask&& task) 1518 1518 { 1519 1519 ASSERT(!isMainThread()); -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
r201504 r201518 38 38 #include "UniqueIDBDatabaseConnection.h" 39 39 #include "UniqueIDBDatabaseTransaction.h" 40 #include <wtf/CrossThreadQueue.h> 40 41 #include <wtf/CrossThreadTask.h> 41 42 #include <wtf/Deque.h> … … 196 197 bool prepareToFinishTransaction(UniqueIDBDatabaseTransaction&); 197 198 198 void postDatabaseTask( std::unique_ptr<CrossThreadTask>&&);199 void postDatabaseTaskReply( std::unique_ptr<CrossThreadTask>&&);199 void postDatabaseTask(CrossThreadTask&&); 200 void postDatabaseTaskReply(CrossThreadTask&&); 200 201 void executeNextDatabaseTask(); 201 202 void executeNextDatabaseTaskReply(); … … 243 244 bool m_deleteBackingStoreInProgress { false }; 244 245 245 MessageQueue<CrossThreadTask> m_databaseQueue;246 MessageQueue<CrossThreadTask> m_databaseReplyQueue;246 CrossThreadQueue<CrossThreadTask> m_databaseQueue; 247 CrossThreadQueue<CrossThreadTask> m_databaseReplyQueue; 247 248 std::atomic<uint64_t> m_queuedTaskCount { 0 }; 248 249 -
trunk/Source/WebCore/dom/ScriptExecutionContext.h
r201504 r201518 173 173 void postCrossThreadTask(Arguments&&... arguments) 174 174 { 175 auto crossThreadTask = createCrossThreadTask(arguments...); 176 auto* rawTask = crossThreadTask.release(); 177 postTask([=](ScriptExecutionContext&) { 178 std::unique_ptr<CrossThreadTask> task(rawTask); 179 task->performTask(); 175 postTask([crossThreadTask = createCrossThreadTask(arguments...)](ScriptExecutionContext&) mutable { 176 crossThreadTask.performTask(); 180 177 }); 181 178 } -
trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp
r201504 r201518 38 38 #include "SecurityOrigin.h" 39 39 #include <mutex> 40 #include <wtf/CrossThreadQueue.h> 40 41 #include <wtf/CrossThreadTask.h> 41 42 #include <wtf/HashMap.h> … … 101 102 } 102 103 103 static MessageQueue<CrossThreadTask>& threadableQueue()104 static CrossThreadQueue<CrossThreadTask>& threadableQueue() 104 105 { 105 106 static std::once_flag onceFlag; 106 static MessageQueue<CrossThreadTask>* queue;107 static CrossThreadQueue<CrossThreadTask>* queue; 107 108 std::call_once(onceFlag, [] { 108 queue = new MessageQueue<CrossThreadTask>;109 queue = new CrossThreadQueue<CrossThreadTask>; 109 110 }); 110 111 -
trunk/Source/WebKit2/ChangeLog
r201507 r201518 1 2016-05-31 Brady Eidson <beidson@apple.com> 2 3 Make createCrossThreadTask() functions return on the stack instead of the heap. 4 https://bugs.webkit.org/show_bug.cgi?id=158215 5 6 Reviewed by Darin Adler. 7 8 * DatabaseProcess/DatabaseProcess.cpp: 9 (WebKit::DatabaseProcess::postDatabaseTask): 10 (WebKit::DatabaseProcess::performNextDatabaseTask): 11 (WebKit::DatabaseProcess::fetchWebsiteData): 12 * DatabaseProcess/DatabaseProcess.h: 13 1 14 2016-05-31 Carlos Garcia Campos <cgarcia@igalia.com> 2 15 -
trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp
r201506 r201518 144 144 #endif 145 145 146 void DatabaseProcess::postDatabaseTask( std::unique_ptr<CrossThreadTask>task)146 void DatabaseProcess::postDatabaseTask(CrossThreadTask&& task) 147 147 { 148 148 ASSERT(RunLoop::isMain()); … … 161 161 ASSERT(!RunLoop::isMain()); 162 162 163 std::unique_ptr<CrossThreadTask>task;163 CrossThreadTask task; 164 164 { 165 165 LockHolder locker(m_databaseTaskMutex); … … 168 168 } 169 169 170 task ->performTask();170 task.performTask(); 171 171 } 172 172 … … 224 224 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) { 225 225 // FIXME: Pick the right database store based on the session ID. 226 postDatabaseTask( std::make_unique<CrossThreadTask>([callbackAggregator, websiteDataTypes, this] {226 postDatabaseTask(CrossThreadTask([callbackAggregator, websiteDataTypes, this] { 227 227 228 228 Vector<RefPtr<SecurityOrigin>> securityOrigins = indexedDatabaseOrigins(); -
trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h
r201504 r201518 69 69 WorkQueue& queue() { return m_queue.get(); } 70 70 71 void postDatabaseTask( std::unique_ptr<CrossThreadTask>);71 void postDatabaseTask(CrossThreadTask&&); 72 72 73 73 #if ENABLE(INDEXED_DATABASE) … … 127 127 HashMap<uint64_t, std::function<void (const SandboxExtension::HandleArray&)>> m_sandboxExtensionForBlobsCompletionHandlers; 128 128 129 Deque< std::unique_ptr<CrossThreadTask>> m_databaseTasks;129 Deque<CrossThreadTask> m_databaseTasks; 130 130 Lock m_databaseTaskMutex; 131 131 };
Note:
See TracChangeset
for help on using the changeset viewer.