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
3 // found in the LICENSE file.
5 #include "android_webview/browser/gl_view_renderer_manager.h"
7 #include "base/logging.h"
8 #include "base/threading/platform_thread.h"
10 namespace android_webview
{
15 base::LazyInstance
<GLViewRendererManager
>::Leaky g_view_renderer_manager
=
16 LAZY_INSTANCE_INITIALIZER
;
20 GLViewRendererManager
* GLViewRendererManager::GetInstance() {
21 return g_view_renderer_manager
.Pointer();
24 GLViewRendererManager::GLViewRendererManager() {}
26 GLViewRendererManager::~GLViewRendererManager() {}
28 bool GLViewRendererManager::OnRenderThread() const {
29 AutoLock
auto_lock(lock_
);
30 return render_thread_
.is_equal(base::PlatformThread::CurrentHandle());
33 void GLViewRendererManager::MarkRenderThread() {
34 lock_
.AssertAcquired();
35 if (render_thread_
.is_null())
36 render_thread_
= base::PlatformThread::CurrentHandle();
37 DCHECK(render_thread_
.is_equal(base::PlatformThread::CurrentHandle()));
40 GLViewRendererManager::Key
GLViewRendererManager::DidDrawGL(Key key
,
42 AutoLock
auto_lock(lock_
);
45 if (key
== mru_list_
.end()) {
46 DCHECK(mru_list_
.end() ==
47 std::find(mru_list_
.begin(), mru_list_
.end(), view
));
48 mru_list_
.push_front(view
);
49 return mru_list_
.begin();
52 mru_list_
.splice(mru_list_
.begin(), mru_list_
, key
);
57 void GLViewRendererManager::NoLongerExpectsDrawGL(Key key
) {
58 AutoLock
auto_lock(lock_
);
59 DCHECK(mru_list_
.end() != key
);
63 GLViewRendererManager::RendererType
64 GLViewRendererManager::GetMostRecentlyDrawn() const {
65 AutoLock
auto_lock(lock_
);
66 if (mru_list_
.begin() == mru_list_
.end())
68 return *mru_list_
.begin();
71 GLViewRendererManager::Key
GLViewRendererManager::NullKey() {
72 AutoLock
auto_lock(lock_
);
73 return mru_list_
.end();
76 } // namespace android_webview