81012e25b1e8fc923484a566384d1f4fa59c1be7
[platform/framework/web/crosswalk-tizen.git] /
1 // Copyright 2015 Samsung Electronics. 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 CONTENT_BROWSER_COMPOSITOR_EVASGL_DELEGATED_FRAME_HOST_H_
6 #define CONTENT_BROWSER_COMPOSITOR_EVASGL_DELEGATED_FRAME_HOST_H_
7
8 #include <Evas_GL.h>
9
10 #include "base/memory/weak_ptr.h"
11 #include "cc/output/compositor_frame.h"
12 #include "cc/output/direct_renderer.h"
13 #include "cc/trees/blocking_task_runner.h"
14 #include "content/common/content_export.h"
15
16 // TODO(prashant.n): Include gl_renderer.h in evasgl_delegated_frame_host.cc
17 // file and forward declare required classes here.
18
19 namespace content {
20
21 class EvasGLContextProvider;
22 class EvasGLOutputSurfaceClient;
23
24 class CONTENT_EXPORT EvasGLDelegatedFrameHostClient {
25  public:
26   // TODO(prashant.n): Remove GetEvasGLAPI() after decoupling context provider
27   // and surface from EvasGLDelegatedFrameHost.
28   virtual Evas_GL_API* GetEvasGLAPI() = 0;
29   virtual void DelegatedFrameHostSendReclaimCompositorResources(
30       int compositor_frame_sink_id,
31       bool is_swap_ack,
32       const cc::ReturnedResourceArray& resources) = 0;
33   virtual int DelegatedFrameHostGetGpuMemoryBufferClientId() const = 0;
34   virtual Evas_GL* GetEvasGL() = 0;
35   virtual bool MakeCurrent() = 0;
36   virtual void ClearBrowserFrame(SkColor) = 0;
37 };
38
39 class CONTENT_EXPORT EvasGLDelegatedFrameHost
40     : public base::SupportsWeakPtr<EvasGLDelegatedFrameHost> {
41  public:
42   explicit EvasGLDelegatedFrameHost(EvasGLDelegatedFrameHostClient* client);
43   ~EvasGLDelegatedFrameHost();
44   void Initialize();
45   void SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
46                           cc::CompositorFrame frame);
47   void RenderDelegatedFrame(const gfx::Rect& bounds);
48 #if defined(OS_TIZEN_TV_PRODUCT)
49   void ClearAllTilesResources();
50 #endif
51
52  private:
53   void UnrefResources(const cc::ReturnedResourceArray& resources,
54                       cc::BlockingTaskRunner* /* main_thread_task_runner */);
55   bool ShouldTransformRootRenderPass(int rotation);
56   void TransformRootRenderPass(cc::RenderPass* root_render_pass,
57                              const gfx::Rect& bounds,
58                              int rotation);
59   void ClearRenderPasses();
60   void ClearChildId();
61
62   EvasGLDelegatedFrameHostClient* client_;
63
64   // TODO(prashant.n): Decouple context provider and surface from this class.
65   scoped_refptr<EvasGLContextProvider> context_provider_;
66   std::unique_ptr<EvasGLOutputSurfaceClient> output_surface_client_;
67   std::unique_ptr<cc::OutputSurface> output_surface_;
68   cc::RendererSettings settings_;
69   std::unique_ptr<cc::ResourceProvider> resource_provider_;
70   int child_id_;
71 #if defined(OS_TIZEN_TV_PRODUCT)
72   uint32_t compositor_frame_sink_id_;
73 #endif
74
75   cc::RenderPassList render_pass_list_;
76   cc::ResourceProvider::ResourceIdSet resources_in_frame_;
77   cc::ReturnedResourceArray returned_resources_;
78   std::unique_ptr<cc::DirectRenderer> renderer_;
79   SkColor background_color_ = SK_ColorTRANSPARENT;
80   base::WeakPtrFactory<EvasGLDelegatedFrameHost> weak_ptr_factory_;
81 };
82
83 }  // namespace content
84
85 #endif  // CONTENT_BROWSER_COMPOSITOR_EVASGL_DELEGATED_FRAME_HOST_H_