Upstream version 7.36.149.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::PushBack(RendererType view) {
29   AutoLock auto_lock(lock_);
30   DCHECK(mru_list_.end() ==
31          std::find(mru_list_.begin(), mru_list_.end(), view));
32   mru_list_.push_back(view);
33   Key back = mru_list_.end();
34   back--;
35   return back;
36 }
37
38 void GLViewRendererManager::DidDrawGL(Key key) {
39   AutoLock auto_lock(lock_);
40   DCHECK(mru_list_.end() != key);
41   mru_list_.splice(mru_list_.begin(), mru_list_, key);
42 }
43
44 void GLViewRendererManager::Remove(Key key) {
45   AutoLock auto_lock(lock_);
46   DCHECK(mru_list_.end() != key);
47   mru_list_.erase(key);
48 }
49
50 GLViewRendererManager::RendererType
51 GLViewRendererManager::GetMostRecentlyDrawn() const {
52   AutoLock auto_lock(lock_);
53   if (mru_list_.begin() == mru_list_.end())
54     return NULL;
55   return *mru_list_.begin();
56 }
57
58 }  // namespace android_webview