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
10namespace android_webview {
11
12using base::AutoLock;
13
14namespace {
15base::LazyInstance<GLViewRendererManager>::Leaky g_view_renderer_manager =
16    LAZY_INSTANCE_INITIALIZER;
17}  // namespace
18
19// static
20GLViewRendererManager* GLViewRendererManager::GetInstance() {
21  return g_view_renderer_manager.Pointer();
22}
23
24GLViewRendererManager::GLViewRendererManager() {}
25
26GLViewRendererManager::~GLViewRendererManager() {}
27
28GLViewRendererManager::Key GLViewRendererManager::NullKey() {
29  AutoLock auto_lock(lock_);
30  return mru_list_.end();
31}
32
33GLViewRendererManager::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
43void 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
49void GLViewRendererManager::Remove(Key key) {
50  AutoLock auto_lock(lock_);
51  DCHECK(mru_list_.end() != key);
52  mru_list_.erase(key);
53}
54
55GLViewRendererManager::RendererType
56GLViewRendererManager::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
64