summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-12 23:47:23 +0000
committerpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-12 23:47:23 +0000
commit66f7b0167f9cea8f840b034da8aed97f59267411 (patch)
treea92adb3984d570bbab755971d999f962146fb448
parent5cb8eb22c86aa1c1461a8a55865945cb2da6cc16 (diff)
downloadchromium_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.cc26
-rw-r--r--webkit/glue/webkitplatformsupport_impl.h4
-rw-r--r--webkit/glue/webthread_impl.cc22
-rw-r--r--webkit/glue/webthread_impl.h20
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