diff options
author | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-12 23:47:23 +0000 |
---|---|---|
committer | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-12 23:47:23 +0000 |
commit | 66f7b0167f9cea8f840b034da8aed97f59267411 (patch) | |
tree | a92adb3984d570bbab755971d999f962146fb448 | |
parent | 5cb8eb22c86aa1c1461a8a55865945cb2da6cc16 (diff) | |
download | chromium_src-66f7b0167f9cea8f840b034da8aed97f59267411.zip chromium_src-66f7b0167f9cea8f840b034da8aed97f59267411.tar.gz chromium_src-66f7b0167f9cea8f840b034da8aed97f59267411.tar.bz2 |
Implement WebKitPlatformSupport::currentThread
BUG=None
TEST=Webkit compositor in Chrome.
Review URL: http://codereview.chromium.org/8228025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105206 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | webkit/glue/webkitplatformsupport_impl.cc | 26 | ||||
-rw-r--r-- | webkit/glue/webkitplatformsupport_impl.h | 4 | ||||
-rw-r--r-- | webkit/glue/webthread_impl.cc | 22 | ||||
-rw-r--r-- | webkit/glue/webthread_impl.h | 20 |
4 files changed, 60 insertions, 12 deletions
diff --git a/webkit/glue/webkitplatformsupport_impl.cc b/webkit/glue/webkitplatformsupport_impl.cc index 8d2941c..bfa6ec0 100644 --- a/webkit/glue/webkitplatformsupport_impl.cc +++ b/webkit/glue/webkitplatformsupport_impl.cc @@ -210,7 +210,8 @@ WebKitPlatformSupportImpl::WebKitPlatformSupportImpl() : main_loop_(MessageLoop::current()), shared_timer_func_(NULL), shared_timer_fire_time_(0.0), - shared_timer_suspended_(0) { + shared_timer_suspended_(0), + current_thread_slot_(&DestroyCurrentThread) { } WebKitPlatformSupportImpl::~WebKitPlatformSupportImpl() { @@ -545,6 +546,22 @@ WebKit::WebThread* WebKitPlatformSupportImpl::createThread(const char* name) { return new WebThreadImpl(name); } +WebKit::WebThread* WebKitPlatformSupportImpl::currentThread() { + WebThreadImplForMessageLoop* thread = + static_cast<WebThreadImplForMessageLoop*>(current_thread_slot_.Get()); + if (thread) + return (thread); + + scoped_refptr<base::MessageLoopProxy> message_loop = + base::MessageLoopProxy::current(); + if (!message_loop) + return NULL; + + thread = new WebThreadImplForMessageLoop(message_loop); + current_thread_slot_.Set(thread); + return thread; +} + base::PlatformFile WebKitPlatformSupportImpl::databaseOpenFile( const WebKit::WebString& vfs_file_name, int desired_flags) { return base::kInvalidPlatformFileValue; @@ -657,4 +674,11 @@ void WebKitPlatformSupportImpl::ResumeSharedTimer() { } } +// static +void WebKitPlatformSupportImpl::DestroyCurrentThread(void* thread) { + WebThreadImplForMessageLoop* impl = + static_cast<WebThreadImplForMessageLoop*>(thread); + delete impl; +} + } // namespace webkit_glue diff --git a/webkit/glue/webkitplatformsupport_impl.h b/webkit/glue/webkitplatformsupport_impl.h index c429087..16f8020 100644 --- a/webkit/glue/webkitplatformsupport_impl.h +++ b/webkit/glue/webkitplatformsupport_impl.h @@ -6,6 +6,7 @@ #define WEBKIT_PLATFORM_SUPPORT_IMPL_H_ #include "base/platform_file.h" +#include "base/threading/thread_local_storage.h" #include "base/timer.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebKitPlatformSupport.h" #if defined(OS_WIN) @@ -78,6 +79,7 @@ class WebKitPlatformSupportImpl : public WebKit::WebKitPlatformSupport { virtual void stopSharedTimer(); virtual void callOnMainThread(void (*func)(void*), void* context); virtual WebKit::WebThread* createThread(const char* name); + virtual WebKit::WebThread* currentThread(); void SuspendSharedTimer(); void ResumeSharedTimer(); @@ -87,6 +89,7 @@ class WebKitPlatformSupportImpl : public WebKit::WebKitPlatformSupport { if (shared_timer_func_ && !shared_timer_suspended_) shared_timer_func_(); } + static void DestroyCurrentThread(void*); MessageLoop* main_loop_; base::OneShotTimer<WebKitPlatformSupportImpl> shared_timer_; @@ -94,6 +97,7 @@ class WebKitPlatformSupportImpl : public WebKit::WebKitPlatformSupport { double shared_timer_fire_time_; int shared_timer_suspended_; // counter WebThemeEngineImpl theme_engine_; + base::ThreadLocalStorage::Slot current_thread_slot_; }; } // namespace webkit_glue diff --git a/webkit/glue/webthread_impl.cc b/webkit/glue/webthread_impl.cc index 60e44ac..26ce1a3 100644 --- a/webkit/glue/webthread_impl.cc +++ b/webkit/glue/webthread_impl.cc @@ -31,13 +31,8 @@ void WebThreadImpl::postTask(Task* task) { thread_->message_loop()->PostTask(FROM_HERE, new TaskAdapter(task)); } -#ifdef WEBTHREAD_HAS_LONGLONG_CHANGE void WebThreadImpl::postDelayedTask( Task* task, long long delay_ms) { -#else -void WebThreadImpl::postDelayedTask( - Task* task, int64 delay_ms) { -#endif thread_->message_loop()->PostDelayedTask( FROM_HERE, new TaskAdapter(task), delay_ms); } @@ -46,4 +41,21 @@ WebThreadImpl::~WebThreadImpl() { thread_->Stop(); } +WebThreadImplForMessageLoop::WebThreadImplForMessageLoop( + base::MessageLoopProxy* message_loop) + : message_loop_(message_loop) { +} + +void WebThreadImplForMessageLoop::postTask(Task* task) { + message_loop_->PostTask(FROM_HERE, new TaskAdapter(task)); +} + +void WebThreadImplForMessageLoop::postDelayedTask( + Task* task, long long delay_ms) { + message_loop_->PostDelayedTask(FROM_HERE, new TaskAdapter(task), delay_ms); +} + +WebThreadImplForMessageLoop::~WebThreadImplForMessageLoop() { +} + } diff --git a/webkit/glue/webthread_impl.h b/webkit/glue/webthread_impl.h index 50869d6..842c8c6 100644 --- a/webkit/glue/webthread_impl.h +++ b/webkit/glue/webthread_impl.h @@ -15,12 +15,8 @@ class WebThreadImpl : public WebKit::WebThread { WebThreadImpl(const char* name); virtual ~WebThreadImpl(); - virtual void postTask(Task* task); -#ifdef WEBTHREAD_HAS_LONGLONG_CHANGE - virtual void postDelayedTask(Task* task, long long delay_ms); -#else - virtual void postDelayedTask(Task* task, int64 delay_ms); -#endif + virtual void postTask(Task* task) OVERRIDE; + virtual void postDelayedTask(Task* task, long long delay_ms) OVERRIDE; MessageLoop* message_loop() const { return thread_->message_loop(); } @@ -28,6 +24,18 @@ class WebThreadImpl : public WebKit::WebThread { scoped_ptr<base::Thread> thread_; }; +class WebThreadImplForMessageLoop : public WebKit::WebThread { + public: + WebThreadImplForMessageLoop(base::MessageLoopProxy* message_loop); + virtual ~WebThreadImplForMessageLoop(); + + virtual void postTask(Task* task) OVERRIDE; + virtual void postDelayedTask(Task* task, long long delay_ms) OVERRIDE; + + protected: + scoped_refptr<base::MessageLoopProxy> message_loop_; +}; + } // namespace webkit_glue #endif |