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#ifndef ANDROID_WEBVIEW_BROWSER_GL_VIEW_RENDERER_MANAGER_H_
6#define ANDROID_WEBVIEW_BROWSER_GL_VIEW_RENDERER_MANAGER_H_
7
8#include <list>
9
10#include "base/basictypes.h"
11#include "base/lazy_instance.h"
12#include "base/synchronization/lock.h"
13#include "base/threading/platform_thread.h"
14
15namespace android_webview {
16
17class SharedRendererState;
18
19class GLViewRendererManager {
20 public:
21  typedef SharedRendererState* RendererType;
22
23 private:
24  typedef std::list<RendererType> ListType;
25
26 public:
27  typedef ListType::iterator Key;
28
29  static GLViewRendererManager* GetInstance();
30
31  Key NullKey();
32
33  Key PushBack(RendererType view);
34
35  // |key| must be already in manager. Move renderer corresponding to |key| to
36  // most recent.
37  void DidDrawGL(Key key);
38
39  void Remove(Key key);
40
41  RendererType GetMostRecentlyDrawn() const;
42
43 private:
44  friend struct base::DefaultLazyInstanceTraits<GLViewRendererManager>;
45
46  GLViewRendererManager();
47  ~GLViewRendererManager();
48
49  mutable base::Lock lock_;
50  ListType mru_list_;
51
52  DISALLOW_COPY_AND_ASSIGN(GLViewRendererManager);
53};
54
55}  // namespace android_webview
56
57#endif  // ANDROID_WEBVIEW_BROWSER_GL_VIEW_RENDERER_MANAGER_H_
58