Changeset 156972 in webkit
- Timestamp:
- Oct 5, 2013 2:53:59 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r156969 r156972 1 2013-10-05 Anders Carlsson <andersca@apple.com> 2 3 Clean up MessageQueue.h 4 https://bugs.webkit.org/show_bug.cgi?id=122392 5 6 Reviewed by Andreas Kling. 7 8 Make MessageQueue use std::unique_ptr and change findIf and removeIf to take const references. 9 10 * wtf/Deque.h: 11 Change findIf to take an rvalue reference. 12 13 * wtf/MessageQueue.h: 14 (WTF::::append): 15 (WTF::::appendAndKill): 16 (WTF::::appendAndCheckEmpty): 17 (WTF::::prepend): 18 (WTF::::removeIf): 19 1 20 2013-10-05 Anders Carlsson <andersca@apple.com> 2 21 -
trunk/Source/WTF/wtf/Deque.h
r155898 r156972 89 89 90 90 template<typename Predicate> 91 iterator findIf(Predicate& );91 iterator findIf(Predicate&&); 92 92 93 93 private: … … 354 354 template<typename T, size_t inlineCapacity> 355 355 template<typename Predicate> 356 inline auto Deque<T, inlineCapacity>::findIf(Predicate& predicate) -> iterator356 inline auto Deque<T, inlineCapacity>::findIf(Predicate&& predicate) -> iterator 357 357 { 358 358 iterator end_iterator = end(); -
trunk/Source/WTF/wtf/MessageQueue.h
r155900 r156972 47 47 // The queue takes ownership of messages and transfer it to the new owner 48 48 // when messages are fetched from the queue. 49 // Essentially, MessageQueue acts as a queue of OwnPtr<DataType>.49 // Essentially, MessageQueue acts as a queue of std::unique_ptr<DataType>. 50 50 template<typename DataType> 51 51 class MessageQueue { … … 55 55 ~MessageQueue(); 56 56 57 void append( OwnPtr<DataType>);58 void appendAndKill( OwnPtr<DataType>);59 bool appendAndCheckEmpty( OwnPtr<DataType>);60 void prepend( OwnPtr<DataType>);61 62 OwnPtr<DataType> waitForMessage();63 OwnPtr<DataType> tryGetMessage();64 OwnPtr<DataType> tryGetMessageIgnoringKilled();57 void append(std::unique_ptr<DataType>); 58 void appendAndKill(std::unique_ptr<DataType>); 59 bool appendAndCheckEmpty(std::unique_ptr<DataType>); 60 void prepend(std::unique_ptr<DataType>); 61 62 std::unique_ptr<DataType> waitForMessage(); 63 std::unique_ptr<DataType> tryGetMessage(); 64 std::unique_ptr<DataType> tryGetMessageIgnoringKilled(); 65 65 template<typename Predicate> 66 OwnPtr<DataType> waitForMessageFilteredWithTimeout(MessageQueueWaitResult&, Predicate&, double absoluteTime);66 std::unique_ptr<DataType> waitForMessageFilteredWithTimeout(MessageQueueWaitResult&, Predicate&&, double absoluteTime); 67 67 68 68 template<typename Predicate> 69 void removeIf(Predicate& );69 void removeIf(Predicate&&); 70 70 71 71 void kill(); … … 78 78 79 79 private: 80 static bool alwaysTruePredicate(const OwnPtr<DataType>&) { return true; }81 82 80 mutable Mutex m_mutex; 83 81 ThreadCondition m_condition; 84 Deque< OwnPtr<DataType>> m_queue;82 Deque<std::unique_ptr<DataType>> m_queue; 85 83 bool m_killed; 86 84 }; … … 92 90 93 91 template<typename DataType> 94 inline void MessageQueue<DataType>::append( OwnPtr<DataType> message)92 inline void MessageQueue<DataType>::append(std::unique_ptr<DataType> message) 95 93 { 96 94 MutexLocker lock(m_mutex); … … 100 98 101 99 template<typename DataType> 102 inline void MessageQueue<DataType>::appendAndKill( OwnPtr<DataType> message)100 inline void MessageQueue<DataType>::appendAndKill(std::unique_ptr<DataType> message) 103 101 { 104 102 MutexLocker lock(m_mutex); … … 110 108 // Returns true if the queue was empty before the item was added. 111 109 template<typename DataType> 112 inline bool MessageQueue<DataType>::appendAndCheckEmpty( OwnPtr<DataType> message)110 inline bool MessageQueue<DataType>::appendAndCheckEmpty(std::unique_ptr<DataType> message) 113 111 { 114 112 MutexLocker lock(m_mutex); … … 120 118 121 119 template<typename DataType> 122 inline void MessageQueue<DataType>::prepend( OwnPtr<DataType> message)120 inline void MessageQueue<DataType>::prepend(std::unique_ptr<DataType> message) 123 121 { 124 122 MutexLocker lock(m_mutex); … … 128 126 129 127 template<typename DataType> 130 inline auto MessageQueue<DataType>::waitForMessage() -> OwnPtr<DataType>128 inline auto MessageQueue<DataType>::waitForMessage() -> std::unique_ptr<DataType> 131 129 { 132 130 MessageQueueWaitResult exitReason; 133 OwnPtr<DataType> result = waitForMessageFilteredWithTimeout(exitReason, MessageQueue<DataType>::alwaysTruePredicate, infiniteTime());131 std::unique_ptr<DataType> result = waitForMessageFilteredWithTimeout(exitReason, [](const DataType&) { return true; }, infiniteTime()); 134 132 ASSERT(exitReason == MessageQueueTerminated || exitReason == MessageQueueMessageReceived); 135 133 return result; … … 138 136 template<typename DataType> 139 137 template<typename Predicate> 140 inline auto MessageQueue<DataType>::waitForMessageFilteredWithTimeout(MessageQueueWaitResult& result, Predicate& predicate, double absoluteTime) -> OwnPtr<DataType>138 inline auto MessageQueue<DataType>::waitForMessageFilteredWithTimeout(MessageQueueWaitResult& result, Predicate&& predicate, double absoluteTime) -> std::unique_ptr<DataType> 141 139 { 142 140 MutexLocker lock(m_mutex); … … 144 142 145 143 auto found = m_queue.end(); 146 while (!m_killed && !timedOut && (found = m_queue.findIf(predicate)) == m_queue.end()) 144 while (!m_killed && !timedOut) { 145 found = m_queue.findIf([&predicate](const std::unique_ptr<DataType>& ptr) -> bool { 146 ASSERT(ptr); 147 return predicate(*ptr); 148 }); 149 if (found != m_queue.end()) 150 break; 151 147 152 timedOut = !m_condition.timedWait(m_mutex, absoluteTime); 153 } 148 154 149 155 ASSERT(!timedOut || absoluteTime != infiniteTime()); … … 160 166 161 167 ASSERT(found != m_queue.end()); 162 OwnPtr<DataType> message = std::move(*found);168 std::unique_ptr<DataType> message = std::move(*found); 163 169 m_queue.remove(found); 164 170 result = MessageQueueMessageReceived; … … 167 173 168 174 template<typename DataType> 169 inline auto MessageQueue<DataType>::tryGetMessage() -> OwnPtr<DataType>175 inline auto MessageQueue<DataType>::tryGetMessage() -> std::unique_ptr<DataType> 170 176 { 171 177 MutexLocker lock(m_mutex); … … 179 185 180 186 template<typename DataType> 181 inline auto MessageQueue<DataType>::tryGetMessageIgnoringKilled() -> OwnPtr<DataType>187 inline auto MessageQueue<DataType>::tryGetMessageIgnoringKilled() -> std::unique_ptr<DataType> 182 188 { 183 189 MutexLocker lock(m_mutex); … … 190 196 template<typename DataType> 191 197 template<typename Predicate> 192 inline void MessageQueue<DataType>::removeIf(Predicate& predicate) 193 { 194 MutexLocker lock(m_mutex); 195 auto found = m_queue.end(); 196 // FIXME: I think the predicate here should really take a const DataType& 197 // instead of a const OwnPtr<DataType>&. 198 while ((found = m_queue.findIf(predicate)) != m_queue.end()) { 199 OwnPtr<DataType> message = std::move(*found); 198 inline void MessageQueue<DataType>::removeIf(Predicate&& predicate) 199 { 200 MutexLocker lock(m_mutex); 201 while (true) { 202 auto found = m_queue.findIf([&predicate](const std::unique_ptr<DataType>& ptr) -> bool { 203 ASSERT(ptr); 204 return predicate(*ptr); 205 }); 206 207 if (found == m_queue.end()) 208 break; 209 200 210 m_queue.remove(found); 201 211 } -
trunk/Source/WebCore/ChangeLog
r156971 r156972 1 2013-10-05 Anders Carlsson <andersca@apple.com> 2 3 Clean up MessageQueue.h 4 https://bugs.webkit.org/show_bug.cgi?id=122392 5 6 Reviewed by Andreas Kling. 7 8 Update for changes to MessageQueue, mostly changing create functions to return std::unique_ptr. 9 I intentionally avoided using std::make_unique in a couple of places because I didn't want to make nested classes 10 public, and I believe that we can change some of this code to use std::function. 11 12 * Modules/webaudio/AsyncAudioDecoder.cpp: 13 (WebCore::AsyncAudioDecoder::decodeAsync): 14 (WebCore::AsyncAudioDecoder::runLoop): 15 (WebCore::AsyncAudioDecoder::DecodingTask::create): 16 * Modules/webaudio/AsyncAudioDecoder.h: 17 * Modules/webdatabase/Database.cpp: 18 (WebCore::Database::markAsDeletedAndClose): 19 (WebCore::Database::tableNames): 20 * Modules/webdatabase/DatabaseBackend.cpp: 21 (WebCore::DatabaseBackend::openAndVerifyVersion): 22 (WebCore::DatabaseBackend::scheduleTransaction): 23 (WebCore::DatabaseBackend::scheduleTransactionStep): 24 * Modules/webdatabase/DatabaseTask.h: 25 (WebCore::DatabaseBackend::DatabaseOpenTask::create): 26 (WebCore::DatabaseBackend::DatabaseCloseTask::create): 27 (WebCore::DatabaseBackend::DatabaseTransactionTask::create): 28 (WebCore::DatabaseBackend::DatabaseTableNamesTask::create): 29 * Modules/webdatabase/DatabaseThread.cpp: 30 (WebCore::DatabaseThread::databaseThread): 31 (WebCore::DatabaseThread::scheduleTask): 32 (WebCore::DatabaseThread::scheduleImmediateTask): 33 (WebCore::SameDatabasePredicate::operator()): 34 * Modules/webdatabase/DatabaseThread.h: 35 * dom/default/PlatformMessagePortChannel.cpp: 36 (WebCore::PlatformMessagePortChannel::EventData::create): 37 (WebCore::MessagePortChannel::tryGetMessageFromRemote): 38 * dom/default/PlatformMessagePortChannel.h: 39 (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage): 40 (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty): 41 * fileapi/FileThread.cpp: 42 (WebCore::FileThread::postTask): 43 (WebCore::SameInstancePredicate::operator()): 44 (WebCore::FileThread::runLoop): 45 * fileapi/FileThread.h: 46 * fileapi/FileThreadTask.h: 47 (WebCore::createFileThreadTask): 48 * storage/StorageThread.cpp: 49 (WebCore::StorageThread::threadEntryPoint): 50 (WebCore::StorageThread::dispatch): 51 (WebCore::StorageThread::terminate): 52 * workers/WorkerRunLoop.cpp: 53 (WebCore::ModePredicate::operator()): 54 (WebCore::WorkerRunLoop::runInMode): 55 (WebCore::WorkerRunLoop::runCleanupTasks): 56 (WebCore::WorkerRunLoop::Task::create): 57 * workers/WorkerRunLoop.h: 58 1 59 2013-10-04 Dean Jackson <dino@apple.com> 2 60 -
trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp
r153728 r156972 61 61 return; 62 62 63 OwnPtr<DecodingTask>decodingTask = DecodingTask::create(audioData, sampleRate, successCallback, errorCallback);64 m_queue.append( decodingTask.release()); // note that ownership of the task is effectively taken by the queue.63 auto decodingTask = DecodingTask::create(audioData, sampleRate, successCallback, errorCallback); 64 m_queue.append(std::move(decodingTask)); // note that ownership of the task is effectively taken by the queue. 65 65 } 66 66 … … 83 83 84 84 // Keep running decoding tasks until we're killed. 85 while ( OwnPtr<DecodingTask>decodingTask = m_queue.waitForMessage()) {85 while (auto decodingTask = m_queue.waitForMessage()) { 86 86 // Let the task take care of its own ownership. 87 87 // See DecodingTask::notifyComplete() for cleanup. 88 decodingTask. leakPtr()->decode();88 decodingTask.release()->decode(); 89 89 } 90 90 } 91 91 92 PassOwnPtr<AsyncAudioDecoder::DecodingTask> AsyncAudioDecoder::DecodingTask::create(ArrayBuffer* audioData, float sampleRate, PassRefPtr<AudioBufferCallback> successCallback, PassRefPtr<AudioBufferCallback> errorCallback)92 std::unique_ptr<AsyncAudioDecoder::DecodingTask> AsyncAudioDecoder::DecodingTask::create(ArrayBuffer* audioData, float sampleRate, PassRefPtr<AudioBufferCallback> successCallback, PassRefPtr<AudioBufferCallback> errorCallback) 93 93 { 94 return adoptPtr(new DecodingTask(audioData, sampleRate, successCallback, errorCallback));94 return std::unique_ptr<DecodingTask>(new DecodingTask(audioData, sampleRate, successCallback, errorCallback)); 95 95 } 96 96 -
trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.h
r153728 r156972 58 58 WTF_MAKE_NONCOPYABLE(DecodingTask); 59 59 public: 60 static PassOwnPtr<DecodingTask> create(JSC::ArrayBuffer* audioData, float sampleRate, PassRefPtr<AudioBufferCallback> successCallback, PassRefPtr<AudioBufferCallback> errorCallback);60 static std::unique_ptr<DecodingTask> create(JSC::ArrayBuffer* audioData, float sampleRate, PassRefPtr<AudioBufferCallback> successCallback, PassRefPtr<AudioBufferCallback> errorCallback); 61 61 62 62 void decode(); -
trunk/Source/WebCore/Modules/webdatabase/Database.cpp
r147796 r156972 152 152 } 153 153 154 OwnPtr<DatabaseCloseTask>task = DatabaseCloseTask::create(this, &synchronizer);155 databaseContext()->databaseThread()->scheduleImmediateTask( task.release());154 auto task = DatabaseCloseTask::create(this, &synchronizer); 155 databaseContext()->databaseThread()->scheduleImmediateTask(std::move(task)); 156 156 synchronizer.waitForTaskCompletion(); 157 157 } … … 268 268 return result; 269 269 270 OwnPtr<DatabaseTableNamesTask>task = DatabaseTableNamesTask::create(this, &synchronizer, result);271 databaseContext()->databaseThread()->scheduleImmediateTask( task.release());270 auto task = DatabaseTableNamesTask::create(this, &synchronizer, result); 271 databaseContext()->databaseThread()->scheduleImmediateTask(std::move(task)); 272 272 synchronizer.waitForTaskCompletion(); 273 273 -
trunk/Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp
r155414 r156972 57 57 58 58 bool success = false; 59 OwnPtr<DatabaseOpenTask>task = DatabaseOpenTask::create(this, setVersionInNewDatabase, &synchronizer, error, errorMessage, success);60 databaseContext()->databaseThread()->scheduleImmediateTask( task.release());59 auto task = DatabaseOpenTask::create(this, setVersionInNewDatabase, &synchronizer, error, errorMessage, success); 60 databaseContext()->databaseThread()->scheduleImmediateTask(std::move(task)); 61 61 synchronizer.waitForTaskCompletion(); 62 62 … … 145 145 146 146 if (transaction && databaseContext()->databaseThread()) { 147 OwnPtr<DatabaseTransactionTask>task = DatabaseTransactionTask::create(transaction);147 auto task = DatabaseTransactionTask::create(transaction); 148 148 LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for transaction %p\n", task.get(), task->transaction()); 149 149 m_transactionInProgress = true; 150 databaseContext()->databaseThread()->scheduleTask( task.release());150 databaseContext()->databaseThread()->scheduleTask(std::move(task)); 151 151 } else 152 152 m_transactionInProgress = false; … … 158 158 return; 159 159 160 OwnPtr<DatabaseTransactionTask>task = DatabaseTransactionTask::create(transaction);160 auto task = DatabaseTransactionTask::create(transaction); 161 161 LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for the transaction step\n", task.get()); 162 databaseContext()->databaseThread()->scheduleTask( task.release());162 databaseContext()->databaseThread()->scheduleTask(std::move(task)); 163 163 } 164 164 -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h
r143551 r156972 101 101 class DatabaseBackend::DatabaseOpenTask : public DatabaseTask { 102 102 public: 103 static PassOwnPtr<DatabaseOpenTask> create(DatabaseBackend* db, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)103 static std::unique_ptr<DatabaseOpenTask> create(DatabaseBackend* db, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success) 104 104 { 105 return adoptPtr(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success));105 return std::unique_ptr<DatabaseOpenTask>(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success)); 106 106 } 107 107 … … 122 122 class DatabaseBackend::DatabaseCloseTask : public DatabaseTask { 123 123 public: 124 static PassOwnPtr<DatabaseCloseTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer)124 static std::unique_ptr<DatabaseCloseTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer) 125 125 { 126 return adoptPtr(new DatabaseCloseTask(db, synchronizer));126 return std::unique_ptr<DatabaseCloseTask>(new DatabaseCloseTask(db, synchronizer)); 127 127 } 128 128 … … 141 141 142 142 // Transaction task is never synchronous, so no 'synchronizer' parameter. 143 static PassOwnPtr<DatabaseTransactionTask> create(PassRefPtr<SQLTransactionBackend> transaction)143 static std::unique_ptr<DatabaseTransactionTask> create(PassRefPtr<SQLTransactionBackend> transaction) 144 144 { 145 return adoptPtr(new DatabaseTransactionTask(transaction));145 return std::unique_ptr<DatabaseTransactionTask>(new DatabaseTransactionTask(transaction)); 146 146 } 147 147 … … 162 162 class DatabaseBackend::DatabaseTableNamesTask : public DatabaseTask { 163 163 public: 164 static PassOwnPtr<DatabaseTableNamesTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names)164 static std::unique_ptr<DatabaseTableNamesTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names) 165 165 { 166 return adoptPtr(new DatabaseTableNamesTask(db, synchronizer, names));166 return std::unique_ptr<DatabaseTableNamesTask>(new DatabaseTableNamesTask(db, synchronizer, names)); 167 167 } 168 168 -
trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp
r155900 r156972 107 107 } 108 108 109 while ( OwnPtr<DatabaseTask>task = m_queue.waitForMessage()) {109 while (auto task = m_queue.waitForMessage()) { 110 110 AutodrainedPool pool; 111 111 … … 157 157 } 158 158 159 void DatabaseThread::scheduleTask( PassOwnPtr<DatabaseTask> task)159 void DatabaseThread::scheduleTask(std::unique_ptr<DatabaseTask> task) 160 160 { 161 161 ASSERT(!task->hasSynchronizer() || task->hasCheckedForTermination()); 162 m_queue.append( task);162 m_queue.append(std::move(task)); 163 163 } 164 164 165 void DatabaseThread::scheduleImmediateTask( PassOwnPtr<DatabaseTask> task)165 void DatabaseThread::scheduleImmediateTask(std::unique_ptr<DatabaseTask> task) 166 166 { 167 167 ASSERT(!task->hasSynchronizer() || task->hasCheckedForTermination()); 168 m_queue.prepend( task);168 m_queue.prepend(std::move(task)); 169 169 } 170 170 … … 172 172 public: 173 173 SameDatabasePredicate(const DatabaseBackend* database) : m_database(database) { } 174 bool operator()(const OwnPtr<DatabaseTask>& task) const { return task->database() == m_database; }174 bool operator()(const DatabaseTask& task) const { return task.database() == m_database; } 175 175 private: 176 176 const DatabaseBackend* m_database; -
trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h
r143551 r156972 59 59 bool terminationRequested(DatabaseTaskSynchronizer* taskSynchronizer = 0) const; 60 60 61 void scheduleTask( PassOwnPtr<DatabaseTask>);62 void scheduleImmediateTask( PassOwnPtr<DatabaseTask>); // This just adds the task to the front of the queue - the caller needs to be extremely careful not to create deadlocks when waiting for completion.61 void scheduleTask(std::unique_ptr<DatabaseTask>); 62 void scheduleImmediateTask(std::unique_ptr<DatabaseTask>); // This just adds the task to the front of the queue - the caller needs to be extremely careful not to create deadlocks when waiting for completion. 63 63 void unscheduleDatabaseTasks(DatabaseBackend*); 64 64 -
trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp
r146151 r156972 38 38 namespace WebCore { 39 39 40 PassOwnPtr<PlatformMessagePortChannel::EventData> PlatformMessagePortChannel::EventData::create(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels)40 std::unique_ptr<PlatformMessagePortChannel::EventData> PlatformMessagePortChannel::EventData::create(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels) 41 41 { 42 return adoptPtr(new EventData(message, channels));42 return std::unique_ptr<EventData>(new EventData(message, channels)); 43 43 } 44 44 … … 105 105 { 106 106 MutexLocker lock(m_channel->m_mutex); 107 OwnPtr<PlatformMessagePortChannel::EventData>result = m_channel->m_incomingQueue->tryGetMessage();107 auto result = m_channel->m_incomingQueue->tryGetMessage(); 108 108 if (!result) 109 109 return false; -
trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.h
r155900 r156972 50 50 WTF_MAKE_NONCOPYABLE(EventData); WTF_MAKE_FAST_ALLOCATED; 51 51 public: 52 static PassOwnPtr<EventData> create(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>);52 static std::unique_ptr<EventData> create(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>); 53 53 54 54 PassRefPtr<SerializedScriptValue> message() { return m_message; } … … 66 66 static PassRefPtr<MessagePortQueue> create() { return adoptRef(new MessagePortQueue()); } 67 67 68 OwnPtr<PlatformMessagePortChannel::EventData> tryGetMessage()68 std::unique_ptr<PlatformMessagePortChannel::EventData> tryGetMessage() 69 69 { 70 70 return m_queue.tryGetMessage(); 71 71 } 72 72 73 bool appendAndCheckEmpty( PassOwnPtr<PlatformMessagePortChannel::EventData> message)73 bool appendAndCheckEmpty(std::unique_ptr<PlatformMessagePortChannel::EventData> message) 74 74 { 75 return m_queue.appendAndCheckEmpty( message);75 return m_queue.appendAndCheckEmpty(std::move(message)); 76 76 } 77 77 -
trunk/Source/WebCore/fileapi/FileThread.cpp
r155900 r156972 65 65 } 66 66 67 void FileThread::postTask( PassOwnPtr<Task> task)67 void FileThread::postTask(std::unique_ptr<Task> task) 68 68 { 69 m_queue.append( task);69 m_queue.append(std::move(task)); 70 70 } 71 71 … … 73 73 public: 74 74 SameInstancePredicate(const void* instance) : m_instance(instance) { } 75 bool operator()( const OwnPtr<FileThread::Task>& task) const { return task->instance() == m_instance; }75 bool operator()(FileThread::Task& task) const { return task.instance() == m_instance; } 76 76 private: 77 77 const void* m_instance; … … 99 99 } 100 100 101 while ( OwnPtr<Task>task = m_queue.waitForMessage()) {101 while (auto task = m_queue.waitForMessage()) { 102 102 AutodrainedPool pool; 103 103 -
trunk/Source/WebCore/fileapi/FileThread.h
r110231 r156972 66 66 }; 67 67 68 void postTask( PassOwnPtr<Task> task);68 void postTask(std::unique_ptr<Task>); 69 69 70 70 void unscheduleTasks(const void* instance); -
trunk/Source/WebCore/fileapi/FileThreadTask.h
r95901 r156972 46 46 typedef FileThreadTask0<T> FileThreadTaskImpl; 47 47 48 static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method)49 {50 return adoptPtr(new FileThreadTaskImpl(instance, method));51 }52 53 private:54 48 FileThreadTask0(T* instance, Method method) 55 49 : FileThread::Task(instance) … … 58 52 } 59 53 54 private: 60 55 virtual void performTask() 61 56 { … … 74 69 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 75 70 76 static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1)77 {78 return adoptPtr(new FileThreadTaskImpl(instance, method, parameter1));79 }80 81 private:82 71 FileThreadTask1(T* instance, Method method, Param1 parameter1) 83 72 : FileThread::Task(instance) … … 87 76 } 88 77 78 private: 89 79 virtual void performTask() 90 80 { … … 105 95 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 106 96 107 static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2)108 {109 return adoptPtr(new FileThreadTaskImpl(instance, method, parameter1, parameter2));110 }111 112 private:113 97 FileThreadTask2(T* instance, Method method, Param1 parameter1, Param2 parameter2) 114 98 : FileThread::Task(instance) … … 119 103 } 120 104 105 private: 121 106 virtual void performTask() 122 107 { … … 139 124 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 140 125 141 static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)142 {143 return adoptPtr(new FileThreadTaskImpl(instance, method, parameter1, parameter2, parameter3));144 }145 146 private:147 126 FileThreadTask3(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) 148 127 : FileThread::Task(instance) … … 154 133 } 155 134 135 private: 156 136 virtual void performTask() 157 137 { … … 167 147 168 148 template<typename T> 169 PassOwnPtr<FileThread::Task> createFileThreadTask(149 std::unique_ptr<FileThread::Task> createFileThreadTask( 170 150 T* const callee, 171 151 void (T::*method)()); 172 152 173 153 template<typename T> 174 PassOwnPtr<FileThread::Task> createFileThreadTask(154 std::unique_ptr<FileThread::Task> createFileThreadTask( 175 155 T* const callee, 176 156 void (T::*method)()) 177 157 { 178 return FileThreadTask0<T>::create(158 return std::make_unique<FileThreadTask0<T>>( 179 159 callee, 180 160 method); … … 182 162 183 163 template<typename T, typename P1, typename MP1> 184 PassOwnPtr<FileThread::Task> createFileThreadTask(164 std::unique_ptr<FileThread::Task> createFileThreadTask( 185 165 T* const callee, 186 166 void (T::*method)(MP1), 187 167 const P1& parameter1) 188 168 { 189 return FileThreadTask1<T, typename CrossThreadCopier<P1>::Type, MP1>::create(169 return std::make_unique<FileThreadTask1<T, typename CrossThreadCopier<P1>::Type, MP1>>( 190 170 callee, 191 171 method, … … 194 174 195 175 template<typename T, typename P1, typename MP1, typename P2, typename MP2> 196 PassOwnPtr<FileThread::Task> createFileThreadTask(176 std::unique_ptr<FileThread::Task> createFileThreadTask( 197 177 T* const callee, 198 178 void (T::*method)(MP1, MP2), … … 200 180 const P2& parameter2) 201 181 { 202 return FileThreadTask2<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create(182 return std::make_unique<FileThreadTask2<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>>( 203 183 callee, 204 184 method, … … 208 188 209 189 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> 210 PassOwnPtr<FileThread::Task> createFileThreadTask(190 std::unique_ptr<FileThread::Task> createFileThreadTask( 211 191 T* const callee, 212 192 void (T::*method)(MP1, MP2, MP3), … … 215 195 const P3& parameter3) 216 196 { 217 return FileThreadTask3<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create(197 return std::make_unique<FileThreadTask3<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>>( 218 198 callee, 219 199 method, -
trunk/Source/WebCore/storage/StorageThread.cpp
r149297 r156972 76 76 ASSERT(!isMainThread()); 77 77 78 while ( OwnPtr<Function<void ()> >function = m_queue.waitForMessage()) {78 while (auto function = m_queue.waitForMessage()) { 79 79 AutodrainedPool pool; 80 80 (*function)(); … … 86 86 ASSERT(isMainThread()); 87 87 ASSERT(!m_queue.killed() && m_threadID); 88 m_queue.append( adoptPtr(new Function<void ()>(function)));88 m_queue.append(std::make_unique<Function<void ()>>(function)); 89 89 } 90 90 … … 98 98 return; 99 99 100 m_queue.append( adoptPtr(new Function<void ()>((bind(&StorageThread::performTerminate, this)))));100 m_queue.append(std::make_unique<Function<void ()>>(bind(&StorageThread::performTerminate, this))); 101 101 waitForThreadCompletion(m_threadID); 102 102 ASSERT(m_queue.killed()); -
trunk/Source/WebCore/workers/WorkerRunLoop.cpp
r155900 r156972 79 79 } 80 80 81 bool operator()(const OwnPtr<WorkerRunLoop::Task>& task) const82 { 83 return m_defaultMode || m_mode == task ->mode();81 bool operator()(const WorkerRunLoop::Task& task) const 82 { 83 return m_defaultMode || m_mode == task.mode(); 84 84 } 85 85 … … 156 156 absoluteTime = (predicate.isDefaultMode() && m_sharedTimer->isActive()) ? m_sharedTimer->fireTime() : MessageQueue<Task>::infiniteTime(); 157 157 MessageQueueWaitResult result; 158 OwnPtr<WorkerRunLoop::Task>task = m_messageQueue.waitForMessageFilteredWithTimeout(result, predicate, absoluteTime);158 auto task = m_messageQueue.waitForMessageFilteredWithTimeout(result, predicate, absoluteTime); 159 159 160 160 // If the context is closing, don't execute any further JavaScript tasks (per section 4.1.1 of the Web Workers spec). However, there may be implementation cleanup tasks in the queue, so keep running through it. … … 185 185 186 186 while (true) { 187 OwnPtr<WorkerRunLoop::Task>task = m_messageQueue.tryGetMessageIgnoringKilled();187 auto task = m_messageQueue.tryGetMessageIgnoringKilled(); 188 188 if (!task) 189 189 return; … … 212 212 } 213 213 214 PassOwnPtr<WorkerRunLoop::Task> WorkerRunLoop::Task::create(PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode)215 { 216 return adoptPtr(new Task(task, mode));214 std::unique_ptr<WorkerRunLoop::Task> WorkerRunLoop::Task::create(PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode) 215 { 216 return std::unique_ptr<Task>(new Task(task, mode)); 217 217 } 218 218 -
trunk/Source/WebCore/workers/WorkerRunLoop.h
r152080 r156972 72 72 WTF_MAKE_NONCOPYABLE(Task); WTF_MAKE_FAST_ALLOCATED; 73 73 public: 74 static PassOwnPtr<Task> create(PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode);74 static std::unique_ptr<Task> create(PassOwnPtr<ScriptExecutionContext::Task>, const String& mode); 75 75 ~Task() { } 76 76 const String& mode() const { return m_mode; }
Note: See TracChangeset
for help on using the changeset viewer.