Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: android_webview/browser/gl_view_renderer_manager.cc

Issue 172793002: aw: Do not assume functor will be called on UI thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: dcheck Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "android_webview/browser/gl_view_renderer_manager.h" 5 #include "android_webview/browser/gl_view_renderer_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/threading/platform_thread.h"
8 9
9 namespace android_webview { 10 namespace android_webview {
10 11
12 using base::AutoLock;
13
11 GLViewRendererManager::GLViewRendererManager() {} 14 GLViewRendererManager::GLViewRendererManager() {}
12 15
13 GLViewRendererManager::~GLViewRendererManager() {} 16 GLViewRendererManager::~GLViewRendererManager() {}
14 17
18 bool GLViewRendererManager::OnRenderThread() const {
19 AutoLock auto_lock(lock_);
20 return render_thread_.is_equal(base::PlatformThread::CurrentHandle());
21 }
22
23 void GLViewRendererManager::MarkRenderThread() {
24 lock_.AssertAcquired();
25 if (render_thread_.is_null())
26 render_thread_ = base::PlatformThread::CurrentHandle();
27 DCHECK(render_thread_.is_equal(base::PlatformThread::CurrentHandle()));
28 }
29
15 GLViewRendererManager::Key GLViewRendererManager::DidDrawGL( 30 GLViewRendererManager::Key GLViewRendererManager::DidDrawGL(
16 Key key, 31 Key key,
17 BrowserViewRenderer* view) { 32 BrowserViewRenderer* view) {
33 AutoLock auto_lock(lock_);
34 MarkRenderThread();
35
18 if (key == mru_list_.end()) { 36 if (key == mru_list_.end()) {
19 DCHECK(mru_list_.end() == 37 DCHECK(mru_list_.end() ==
20 std::find(mru_list_.begin(), mru_list_.end(), view)); 38 std::find(mru_list_.begin(), mru_list_.end(), view));
21 mru_list_.push_front(view); 39 mru_list_.push_front(view);
22 return mru_list_.begin(); 40 return mru_list_.begin();
23 } else { 41 } else {
24 DCHECK(*key == view); 42 DCHECK(*key == view);
25 mru_list_.splice(mru_list_.begin(), mru_list_, key); 43 mru_list_.splice(mru_list_.begin(), mru_list_, key);
26 return key; 44 return key;
27 } 45 }
28 } 46 }
29 47
30 void GLViewRendererManager::NoLongerExpectsDrawGL(Key key) { 48 void GLViewRendererManager::NoLongerExpectsDrawGL(Key key) {
49 AutoLock auto_lock(lock_);
31 DCHECK(mru_list_.end() != key); 50 DCHECK(mru_list_.end() != key);
32 mru_list_.erase(key); 51 mru_list_.erase(key);
33 } 52 }
34 53
35 BrowserViewRenderer* GLViewRendererManager::GetMostRecentlyDrawn() const { 54 BrowserViewRenderer* GLViewRendererManager::GetMostRecentlyDrawn() const {
55 AutoLock auto_lock(lock_);
36 if (mru_list_.begin() == mru_list_.end()) 56 if (mru_list_.begin() == mru_list_.end())
37 return NULL; 57 return NULL;
38 return *mru_list_.begin(); 58 return *mru_list_.begin();
39 } 59 }
40 60
41 GLViewRendererManager::Key GLViewRendererManager::NullKey() { 61 GLViewRendererManager::Key GLViewRendererManager::NullKey() {
62 AutoLock auto_lock(lock_);
42 return mru_list_.end(); 63 return mru_list_.end();
43 } 64 }
44 65
45 } // namespace android_webview 66 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/gl_view_renderer_manager.h ('k') | android_webview/browser/in_process_view_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698