Home | History | Annotate | Download | only in browser
      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
     64