| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ppapi/proxy/ppb_message_loop_proxy.h" | 5 #include "ppapi/proxy/ppb_message_loop_proxy.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 tracked_objects::Location from_here; | 48 tracked_objects::Location from_here; |
| 49 base::Closure closure; | 49 base::Closure closure; |
| 50 int64 delay_ms; | 50 int64 delay_ms; |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 // Returns true if the object is associated with the current thread. | 53 // Returns true if the object is associated with the current thread. |
| 54 bool IsCurrent() const; | 54 bool IsCurrent() const; |
| 55 | 55 |
| 56 // Handles posting to the message loop if there is one, or the pending queue | 56 // Handles posting to the message loop if there is one, or the pending queue |
| 57 // if there isn't. | 57 // if there isn't. |
| 58 // NOTE: The given closure will be run *WITHOUT* acquiring the Proxy lock. |
| 59 // This only makes sense for user code and completely thread-safe |
| 60 // proxy operations (e.g., MessageLoop::QuitClosure). |
| 58 void PostClosure(const tracked_objects::Location& from_here, | 61 void PostClosure(const tracked_objects::Location& from_here, |
| 59 const base::Closure& closure, | 62 const base::Closure& closure, |
| 60 int64 delay_ms); | 63 int64 delay_ms); |
| 61 | 64 |
| 62 // TLS destructor function. | 65 // TLS destructor function. |
| 63 static void ReleaseMessageLoop(void* value); | 66 static void ReleaseMessageLoop(void* value); |
| 64 | 67 |
| 65 // Created when we attach to the current thread, since MessageLoop assumes | 68 // Created when we attach to the current thread, since MessageLoop assumes |
| 66 // that it's created on the thread it will run on. | 69 // that it's created on the thread it will run on. |
| 67 scoped_ptr<MessageLoop> loop_; | 70 scoped_ptr<MessageLoop> loop_; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 return false; // Can't be current if there's nothing in the slot. | 193 return false; // Can't be current if there's nothing in the slot. |
| 191 return static_cast<const void*>(globals->msg_loop_slot()->Get()) == | 194 return static_cast<const void*>(globals->msg_loop_slot()->Get()) == |
| 192 static_cast<const void*>(this); | 195 static_cast<const void*>(this); |
| 193 } | 196 } |
| 194 | 197 |
| 195 void MessageLoopResource::PostClosure( | 198 void MessageLoopResource::PostClosure( |
| 196 const tracked_objects::Location& from_here, | 199 const tracked_objects::Location& from_here, |
| 197 const base::Closure& closure, | 200 const base::Closure& closure, |
| 198 int64 delay_ms) { | 201 int64 delay_ms) { |
| 199 if (loop_.get()) { | 202 if (loop_.get()) { |
| 200 loop_->PostDelayedTask( | 203 loop_->PostDelayedTask(from_here, |
| 201 from_here, closure, base::TimeDelta::FromMilliseconds(delay_ms)); | 204 closure, |
| 205 base::TimeDelta::FromMilliseconds(delay_ms)); |
| 202 } else { | 206 } else { |
| 203 TaskInfo info; | 207 TaskInfo info; |
| 204 info.from_here = FROM_HERE; | 208 info.from_here = FROM_HERE; |
| 205 info.closure = closure; | 209 info.closure = closure; |
| 206 info.delay_ms = delay_ms; | 210 info.delay_ms = delay_ms; |
| 207 pending_tasks_.push_back(info); | 211 pending_tasks_.push_back(info); |
| 208 } | 212 } |
| 209 } | 213 } |
| 210 | 214 |
| 211 // static | 215 // static |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 PPB_MessageLoop_Proxy::~PPB_MessageLoop_Proxy() { | 290 PPB_MessageLoop_Proxy::~PPB_MessageLoop_Proxy() { |
| 287 } | 291 } |
| 288 | 292 |
| 289 // static | 293 // static |
| 290 const PPB_MessageLoop_Dev_0_1* PPB_MessageLoop_Proxy::GetInterface() { | 294 const PPB_MessageLoop_Dev_0_1* PPB_MessageLoop_Proxy::GetInterface() { |
| 291 return &ppb_message_loop_interface; | 295 return &ppb_message_loop_interface; |
| 292 } | 296 } |
| 293 | 297 |
| 294 } // namespace proxy | 298 } // namespace proxy |
| 295 } // namespace ppapi | 299 } // namespace ppapi |
| OLD | NEW |