Index: android_webview/browser/gl_view_renderer_manager.cc |
diff --git a/android_webview/browser/gl_view_renderer_manager.cc b/android_webview/browser/gl_view_renderer_manager.cc |
index bca0d135f2c8a63f5b74ffde04735a0a53d7fe3a..6c9ab4a8d294cf7ccf0b649b95610c068f82da76 100644 |
--- a/android_webview/browser/gl_view_renderer_manager.cc |
+++ b/android_webview/browser/gl_view_renderer_manager.cc |
@@ -5,16 +5,34 @@ |
#include "android_webview/browser/gl_view_renderer_manager.h" |
#include "base/logging.h" |
+#include "base/threading/platform_thread.h" |
namespace android_webview { |
+using base::AutoLock; |
+ |
GLViewRendererManager::GLViewRendererManager() {} |
GLViewRendererManager::~GLViewRendererManager() {} |
+bool GLViewRendererManager::OnRenderThread() const { |
+ AutoLock auto_lock(lock_); |
+ return render_thread_.is_equal(base::PlatformThread::CurrentHandle()); |
+} |
+ |
+void GLViewRendererManager::MarkRenderThread() { |
+ lock_.AssertAcquired(); |
+ if (render_thread_.is_null()) |
+ render_thread_ = base::PlatformThread::CurrentHandle(); |
+ DCHECK(render_thread_.is_equal(base::PlatformThread::CurrentHandle())); |
+} |
+ |
GLViewRendererManager::Key GLViewRendererManager::DidDrawGL( |
Key key, |
BrowserViewRenderer* view) { |
+ AutoLock auto_lock(lock_); |
+ MarkRenderThread(); |
+ |
if (key == mru_list_.end()) { |
DCHECK(mru_list_.end() == |
std::find(mru_list_.begin(), mru_list_.end(), view)); |
@@ -28,17 +46,20 @@ GLViewRendererManager::Key GLViewRendererManager::DidDrawGL( |
} |
void GLViewRendererManager::NoLongerExpectsDrawGL(Key key) { |
+ AutoLock auto_lock(lock_); |
DCHECK(mru_list_.end() != key); |
mru_list_.erase(key); |
} |
BrowserViewRenderer* GLViewRendererManager::GetMostRecentlyDrawn() const { |
+ AutoLock auto_lock(lock_); |
if (mru_list_.begin() == mru_list_.end()) |
return NULL; |
return *mru_list_.begin(); |
} |
GLViewRendererManager::Key GLViewRendererManager::NullKey() { |
+ AutoLock auto_lock(lock_); |
return mru_list_.end(); |
} |