Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / android_webview / browser / gl_view_renderer_manager.h
index 67595fb..5d6cb8d 100644 (file)
@@ -8,31 +8,47 @@
 #include <list>
 
 #include "base/basictypes.h"
+#include "base/lazy_instance.h"
+#include "base/synchronization/lock.h"
+#include "base/threading/platform_thread.h"
 
 namespace android_webview {
 
-class BrowserViewRenderer;
+class SharedRendererState;
 
 class GLViewRendererManager {
-  typedef std::list<BrowserViewRenderer*> ListType;
+ public:
+  typedef SharedRendererState* RendererType;
+
+ private:
+  typedef std::list<RendererType> ListType;
+
  public:
   typedef ListType::iterator Key;
 
-  GLViewRendererManager();
-  ~GLViewRendererManager();
+  static GLViewRendererManager* GetInstance();
 
-  // If |key| is NullKey(), then |view| is inserted at the front and a new key
-  // is returned. Otherwise |key| must point to |view| which is moved to the
-  // front.
-  Key DidDrawGL(Key key, BrowserViewRenderer* view);
+  Key NullKey() {
+    return mru_list_.end();
+  }
 
-  void NoLongerExpectsDrawGL(Key key);
+  Key PushBack(RendererType view);
 
-  BrowserViewRenderer* GetMostRecentlyDrawn() const;
+  // |key| must be already in manager. Move renderer corresponding to |key| to
+  // most recent.
+  void DidDrawGL(Key key);
 
-  Key NullKey();
+  void Remove(Key key);
+
+  RendererType GetMostRecentlyDrawn() const;
 
  private:
+  friend struct base::DefaultLazyInstanceTraits<GLViewRendererManager>;
+
+  GLViewRendererManager();
+  ~GLViewRendererManager();
+
+  mutable base::Lock lock_;
   ListType mru_list_;
 
   DISALLOW_COPY_AND_ASSIGN(GLViewRendererManager);