Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / android_webview / browser / gl_view_renderer_manager.h
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
15 namespace android_webview {
16
17 class SharedRendererState;
18
19 class 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   // TODO(boliu): Move RenderThread checking out of this class.
32   bool OnRenderThread() const;
33
34   Key PushBack(RendererType view);
35
36   // |key| must be already in manager. Move renderer corresponding to |key| to
37   // most recent.
38   void DidDrawGL(Key key);
39
40   void Remove(Key key);
41
42   RendererType GetMostRecentlyDrawn() const;
43
44  private:
45   friend struct base::DefaultLazyInstanceTraits<GLViewRendererManager>;
46
47   GLViewRendererManager();
48   ~GLViewRendererManager();
49
50   void MarkRenderThread();
51
52   mutable base::Lock lock_;
53   base::PlatformThreadHandle render_thread_;
54   ListType mru_list_;
55
56   DISALLOW_COPY_AND_ASSIGN(GLViewRendererManager);
57 };
58
59 }  // namespace android_webview
60
61 #endif  // ANDROID_WEBVIEW_BROWSER_GL_VIEW_RENDERER_MANAGER_H_