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