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

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: 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
11 GLViewRendererManager::GLViewRendererManager() {} 12 GLViewRendererManager::GLViewRendererManager() {}
12 13
13 GLViewRendererManager::~GLViewRendererManager() {} 14 GLViewRendererManager::~GLViewRendererManager() {}
14 15
16 bool GLViewRendererManager::OnRenderThread() const {
no sievers 2014/02/19 21:12:19 You probably want a lock here and in MarkRenderThr
boliu 2014/02/19 21:33:40 Done. Actually this whole class will need to be p
17 return render_thread_.is_equal(base::PlatformThread::CurrentHandle());
18 }
19
20 void GLViewRendererManager::MarkRenderThread() {
21 if (render_thread_.is_null())
22 render_thread_ = base::PlatformThread::CurrentHandle();
23 DCHECK(OnRenderThread());
24 }
25
15 GLViewRendererManager::Key GLViewRendererManager::DidDrawGL( 26 GLViewRendererManager::Key GLViewRendererManager::DidDrawGL(
16 Key key, 27 Key key,
17 BrowserViewRenderer* view) { 28 BrowserViewRenderer* view) {
29 MarkRenderThread();
30
18 if (key == mru_list_.end()) { 31 if (key == mru_list_.end()) {
19 DCHECK(mru_list_.end() == 32 DCHECK(mru_list_.end() ==
20 std::find(mru_list_.begin(), mru_list_.end(), view)); 33 std::find(mru_list_.begin(), mru_list_.end(), view));
21 mru_list_.push_front(view); 34 mru_list_.push_front(view);
22 return mru_list_.begin(); 35 return mru_list_.begin();
23 } else { 36 } else {
24 DCHECK(*key == view); 37 DCHECK(*key == view);
25 mru_list_.splice(mru_list_.begin(), mru_list_, key); 38 mru_list_.splice(mru_list_.begin(), mru_list_, key);
26 return key; 39 return key;
27 } 40 }
28 } 41 }
29 42
30 void GLViewRendererManager::NoLongerExpectsDrawGL(Key key) { 43 void GLViewRendererManager::NoLongerExpectsDrawGL(Key key) {
31 DCHECK(mru_list_.end() != key); 44 DCHECK(mru_list_.end() != key);
32 mru_list_.erase(key); 45 mru_list_.erase(key);
33 } 46 }
34 47
35 BrowserViewRenderer* GLViewRendererManager::GetMostRecentlyDrawn() const { 48 BrowserViewRenderer* GLViewRendererManager::GetMostRecentlyDrawn() const {
36 if (mru_list_.begin() == mru_list_.end()) 49 if (mru_list_.begin() == mru_list_.end())
37 return NULL; 50 return NULL;
38 return *mru_list_.begin(); 51 return *mru_list_.begin();
39 } 52 }
40 53
41 GLViewRendererManager::Key GLViewRendererManager::NullKey() { 54 GLViewRendererManager::Key GLViewRendererManager::NullKey() {
42 return mru_list_.end(); 55 return mru_list_.end();
43 } 56 }
44 57
45 } // namespace android_webview 58 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698