#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);