Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / android_webview / browser / gl_view_renderer_manager.cc
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.
4
5 #include "android_webview/browser/gl_view_renderer_manager.h"
6
7 #include "base/logging.h"
8 #include "base/threading/platform_thread.h"
9
10 namespace android_webview {
11
12 using base::AutoLock;
13
14 namespace {
15 base::LazyInstance<GLViewRendererManager>::Leaky g_view_renderer_manager =
16     LAZY_INSTANCE_INITIALIZER;
17 }  // namespace
18
19 // static
20 GLViewRendererManager* GLViewRendererManager::GetInstance() {
21   return g_view_renderer_manager.Pointer();
22 }
23
24 GLViewRendererManager::GLViewRendererManager() {}
25
26 GLViewRendererManager::~GLViewRendererManager() {}
27
28 GLViewRendererManager::Key GLViewRendererManager::NullKey() {
29   AutoLock auto_lock(lock_);
30   return mru_list_.end();
31 }
32
33 GLViewRendererManager::Key GLViewRendererManager::PushBack(RendererType view) {
34   AutoLock auto_lock(lock_);
35   DCHECK(mru_list_.end() ==
36          std::find(mru_list_.begin(), mru_list_.end(), view));
37   mru_list_.push_back(view);
38   Key back = mru_list_.end();
39   back--;
40   return back;
41 }
42
43 void GLViewRendererManager::DidDrawGL(Key key) {
44   AutoLock auto_lock(lock_);
45   DCHECK(mru_list_.end() != key);
46   mru_list_.splice(mru_list_.begin(), mru_list_, key);
47 }
48
49 void GLViewRendererManager::Remove(Key key) {
50   AutoLock auto_lock(lock_);
51   DCHECK(mru_list_.end() != key);
52   mru_list_.erase(key);
53 }
54
55 GLViewRendererManager::RendererType
56 GLViewRendererManager::GetMostRecentlyDrawn() const {
57   AutoLock auto_lock(lock_);
58   if (mru_list_.begin() == mru_list_.end())
59     return NULL;
60   return *mru_list_.begin();
61 }
62
63 }  // namespace android_webview