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.
5 #ifndef CONTENT_BROWSER_COMPOSITOR_EVASGL_DELEGATED_FRAME_HOST_H_
6 #define CONTENT_BROWSER_COMPOSITOR_EVASGL_DELEGATED_FRAME_HOST_H_
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"
16 // TODO(prashant.n): Include gl_renderer.h in evasgl_delegated_frame_host.cc
17 // file and forward declare required classes here.
21 class EvasGLContextProvider;
22 class EvasGLOutputSurfaceClient;
24 class CONTENT_EXPORT EvasGLDelegatedFrameHostClient {
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,
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;
39 class CONTENT_EXPORT EvasGLDelegatedFrameHost
40 : public base::SupportsWeakPtr<EvasGLDelegatedFrameHost> {
42 explicit EvasGLDelegatedFrameHost(EvasGLDelegatedFrameHostClient* client);
43 ~EvasGLDelegatedFrameHost();
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();
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,
59 void ClearRenderPasses();
62 EvasGLDelegatedFrameHostClient* client_;
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_;
71 #if defined(OS_TIZEN_TV_PRODUCT)
72 uint32_t compositor_frame_sink_id_;
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_;
83 } // namespace content
85 #endif // CONTENT_BROWSER_COMPOSITOR_EVASGL_DELEGATED_FRAME_HOST_H_