| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 : m_mode(mode) | 91 : m_mode(mode) |
| 92 , m_defaultMode(mode == WorkerRunLoop::defaultMode()) | 92 , m_defaultMode(mode == WorkerRunLoop::defaultMode()) |
| 93 { | 93 { |
| 94 } | 94 } |
| 95 | 95 |
| 96 bool isDefaultMode() const | 96 bool isDefaultMode() const |
| 97 { | 97 { |
| 98 return m_defaultMode; | 98 return m_defaultMode; |
| 99 } | 99 } |
| 100 | 100 |
| 101 bool operator()(PassRefPtr<WorkerRunLoop::Task> task) | 101 bool operator()(PassRefPtr<WorkerRunLoop::Task> task) const |
| 102 { | 102 { |
| 103 return m_defaultMode || m_mode == task->mode(); | 103 return m_defaultMode || m_mode == task->mode(); |
| 104 } | 104 } |
| 105 | 105 |
| 106 private: | 106 private: |
| 107 String m_mode; | 107 String m_mode; |
| 108 bool m_defaultMode; | 108 bool m_defaultMode; |
| 109 }; | 109 }; |
| 110 | 110 |
| 111 WorkerRunLoop::WorkerRunLoop() | 111 WorkerRunLoop::WorkerRunLoop() |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 } | 156 } |
| 157 | 157 |
| 158 MessageQueueWaitResult WorkerRunLoop::runInMode(WorkerContext* context, const St
ring& mode) | 158 MessageQueueWaitResult WorkerRunLoop::runInMode(WorkerContext* context, const St
ring& mode) |
| 159 { | 159 { |
| 160 RunLoopSetup setup(*this); | 160 RunLoopSetup setup(*this); |
| 161 ModePredicate modePredicate(mode); | 161 ModePredicate modePredicate(mode); |
| 162 MessageQueueWaitResult result = runInMode(context, modePredicate); | 162 MessageQueueWaitResult result = runInMode(context, modePredicate); |
| 163 return result; | 163 return result; |
| 164 } | 164 } |
| 165 | 165 |
| 166 MessageQueueWaitResult WorkerRunLoop::runInMode(WorkerContext* context, ModePred
icate& predicate) | 166 MessageQueueWaitResult WorkerRunLoop::runInMode(WorkerContext* context, const Mo
dePredicate& predicate) |
| 167 { | 167 { |
| 168 ASSERT(context); | 168 ASSERT(context); |
| 169 ASSERT(context->thread()); | 169 ASSERT(context->thread()); |
| 170 ASSERT(context->thread()->threadID() == currentThread()); | 170 ASSERT(context->thread()->threadID() == currentThread()); |
| 171 | 171 |
| 172 double absoluteTime = (predicate.isDefaultMode() && m_sharedTimer->isActive(
)) ? m_sharedTimer->fireTime() : MessageQueue<RefPtr<Task> >::infiniteTime(); |
| 172 RefPtr<Task> task; | 173 RefPtr<Task> task; |
| 173 MessageQueueWaitResult result; | 174 MessageQueueWaitResult result = m_messageQueue.waitForMessageFilteredWithTim
eout(task, predicate, absoluteTime); |
| 174 if (predicate.isDefaultMode()) { | |
| 175 if (m_sharedTimer->isActive()) | |
| 176 result = m_messageQueue.waitForMessageTimed(task, m_sharedTimer->fir
eTime()); | |
| 177 else | |
| 178 result = m_messageQueue.waitForMessage(task) ? MessageQueueMessageRe
ceived : MessageQueueTerminated; | |
| 179 } else | |
| 180 result = m_messageQueue.waitForMessageFiltered(task, predicate); | |
| 181 | 175 |
| 182 switch (result) { | 176 switch (result) { |
| 183 case MessageQueueTerminated: | 177 case MessageQueueTerminated: |
| 184 break; | 178 break; |
| 185 | 179 |
| 186 case MessageQueueMessageReceived: | 180 case MessageQueueMessageReceived: |
| 187 task->performTask(context); | 181 task->performTask(context); |
| 188 break; | 182 break; |
| 189 | 183 |
| 190 case MessageQueueTimeout: | 184 case MessageQueueTimeout: |
| (...skipping 15 matching lines...) Expand all Loading... |
| 206 } | 200 } |
| 207 | 201 |
| 208 void WorkerRunLoop::postTaskForMode(PassRefPtr<ScriptExecutionContext::Task> tas
k, const String& mode) | 202 void WorkerRunLoop::postTaskForMode(PassRefPtr<ScriptExecutionContext::Task> tas
k, const String& mode) |
| 209 { | 203 { |
| 210 m_messageQueue.append(Task::create(task, mode.copy())); | 204 m_messageQueue.append(Task::create(task, mode.copy())); |
| 211 } | 205 } |
| 212 | 206 |
| 213 } // namespace WebCore | 207 } // namespace WebCore |
| 214 | 208 |
| 215 #endif // ENABLE(WORKERS) | 209 #endif // ENABLE(WORKERS) |
| OLD | NEW |