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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 RunLoopSetup setup(*this, m_context); | 172 RunLoopSetup setup(*this, m_context); |
173 return run(m_debuggerMessageQueue, waitMode); | 173 return run(m_debuggerMessageQueue, waitMode); |
174 } | 174 } |
175 | 175 |
176 MessageQueueWaitResult WorkerRunLoop::run(MessageQueue<blink::WebThread::Task>&
queue, WaitMode waitMode) | 176 MessageQueueWaitResult WorkerRunLoop::run(MessageQueue<blink::WebThread::Task>&
queue, WaitMode waitMode) |
177 { | 177 { |
178 ASSERT(m_context); | 178 ASSERT(m_context); |
179 ASSERT(m_context->thread()); | 179 ASSERT(m_context->thread()); |
180 ASSERT(m_context->thread()->isCurrentThread()); | 180 ASSERT(m_context->thread()->isCurrentThread()); |
181 | 181 |
| 182 bool isDebuggerQueue = (&queue == &m_debuggerMessageQueue); |
182 bool nextTimeoutEventIsIdleWatchdog; | 183 bool nextTimeoutEventIsIdleWatchdog; |
183 MessageQueueWaitResult result; | 184 MessageQueueWaitResult result; |
184 OwnPtr<blink::WebThread::Task> task; | 185 OwnPtr<blink::WebThread::Task> task; |
185 do { | 186 do { |
186 double absoluteTime = 0.0; | 187 double absoluteTime = 0.0; |
187 nextTimeoutEventIsIdleWatchdog = false; | 188 nextTimeoutEventIsIdleWatchdog = false; |
188 if (waitMode == WaitForMessage) { | 189 if (waitMode == WaitForMessage) { |
189 absoluteTime = m_sharedTimer->isActive() ? m_sharedTimer->fireTime()
: MessageQueue<blink::WebThread::Task>::infiniteTime(); | 190 absoluteTime = !isDebuggerQueue && m_sharedTimer->isActive() ? m_sha
redTimer->fireTime() : MessageQueue<blink::WebThread::Task>::infiniteTime(); |
190 | 191 |
191 // Do a script engine idle notification if the next event is distant
enough. | 192 // Do a script engine idle notification if the next event is distant
enough. |
192 const double kMinIdleTimespan = 0.3; // seconds | 193 const double kMinIdleTimespan = 0.3; // seconds |
193 if (queue.isEmpty() && absoluteTime > currentTime() + kMinIdleTimesp
an) { | 194 if (queue.isEmpty() && absoluteTime > currentTime() + kMinIdleTimesp
an) { |
194 bool hasMoreWork = !m_context->idleNotification(); | 195 bool hasMoreWork = !m_context->idleNotification(); |
195 if (hasMoreWork) { | 196 if (hasMoreWork) { |
196 // Schedule a watchdog, so if there are no events within a p
articular time interval | 197 // Schedule a watchdog, so if there are no events within a p
articular time interval |
197 // idle notifications won't stop firing. | 198 // idle notifications won't stop firing. |
198 const double kWatchdogInterval = 3; // seconds | 199 const double kWatchdogInterval = 3; // seconds |
199 double nextWatchdogTime = currentTime() + kWatchdogInterval; | 200 double nextWatchdogTime = currentTime() + kWatchdogInterval; |
(...skipping 18 matching lines...) Expand all Loading... |
218 case MessageQueueTerminated: | 219 case MessageQueueTerminated: |
219 break; | 220 break; |
220 | 221 |
221 case MessageQueueMessageReceived: | 222 case MessageQueueMessageReceived: |
222 InspectorInstrumentation::willProcessTask(m_context); | 223 InspectorInstrumentation::willProcessTask(m_context); |
223 task->run(); | 224 task->run(); |
224 InspectorInstrumentation::didProcessTask(m_context); | 225 InspectorInstrumentation::didProcessTask(m_context); |
225 break; | 226 break; |
226 | 227 |
227 case MessageQueueTimeout: | 228 case MessageQueueTimeout: |
| 229 ASSERT(!isDebuggerQueue || waitMode != WaitForMessage); |
228 if (!m_context->isClosing()) | 230 if (!m_context->isClosing()) |
229 m_sharedTimer->fire(); | 231 m_sharedTimer->fire(); |
230 break; | 232 break; |
231 } | 233 } |
232 | 234 |
233 return result; | 235 return result; |
234 } | 236 } |
235 | 237 |
236 void WorkerRunLoop::runCleanupTasks() | 238 void WorkerRunLoop::runCleanupTasks() |
237 { | 239 { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 272 |
271 bool WorkerRunLoop::postDebuggerTask(PassOwnPtr<ExecutionContextTask> task) | 273 bool WorkerRunLoop::postDebuggerTask(PassOwnPtr<ExecutionContextTask> task) |
272 { | 274 { |
273 bool posted = m_debuggerMessageQueue.append(WorkerRunLoopTask::create(*this,
task)); | 275 bool posted = m_debuggerMessageQueue.append(WorkerRunLoopTask::create(*this,
task)); |
274 if (posted) | 276 if (posted) |
275 postTask(TickleDebuggerQueueTask::create(this)); | 277 postTask(TickleDebuggerQueueTask::create(this)); |
276 return posted; | 278 return posted; |
277 } | 279 } |
278 | 280 |
279 } // namespace WebCore | 281 } // namespace WebCore |
OLD | NEW |