• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 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 CC_OUTPUT_RENDERER_H_
6 #define CC_OUTPUT_RENDERER_H_
7 
8 #include "base/basictypes.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/quads/render_pass.h"
11 #include "cc/trees/layer_tree_host.h"
12 
13 namespace cc {
14 
15 class CompositorFrameAck;
16 class CompositorFrameMetadata;
17 class ScopedResource;
18 
19 struct RendererCapabilitiesImpl {
20   RendererCapabilitiesImpl();
21   ~RendererCapabilitiesImpl();
22 
23   // Capabilities copied to main thread.
24   ResourceFormat best_texture_format;
25   bool allow_partial_texture_updates;
26   bool using_offscreen_context3d;
27   int max_texture_size;
28   bool using_shared_memory_resources;
29 
30   // Capabilities used on compositor thread only.
31   bool using_partial_swap;
32   bool using_egl_image;
33   bool avoid_pow2_textures;
34   bool using_map_image;
35   bool using_discard_framebuffer;
36 
37   RendererCapabilities MainThreadCapabilities() const;
38 };
39 
40 class CC_EXPORT RendererClient {
41  public:
42   virtual void SetFullRootLayerDamage() = 0;
43 };
44 
45 class CC_EXPORT Renderer {
46  public:
~Renderer()47   virtual ~Renderer() {}
48 
49   virtual const RendererCapabilitiesImpl& Capabilities() const = 0;
50 
51   virtual bool CanReadPixels() const = 0;
52 
DecideRenderPassAllocationsForFrame(const RenderPassList & render_passes_in_draw_order)53   virtual void DecideRenderPassAllocationsForFrame(
54       const RenderPassList& render_passes_in_draw_order) {}
55   virtual bool HasAllocatedResourcesForTesting(RenderPass::Id id) const;
56 
57   // This passes ownership of the render passes to the renderer. It should
58   // consume them, and empty the list. The parameters here may change from frame
59   // to frame and should not be cached.
60   // The |device_viewport_rect| and |device_clip_rect| are in non-y-flipped
61   // window space.
62   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
63                          ContextProvider* offscreen_context_provider,
64                          float device_scale_factor,
65                          gfx::Rect device_viewport_rect,
66                          gfx::Rect device_clip_rect,
67                          bool allow_partial_swap,
68                          bool disable_picture_quad_image_filtering) = 0;
69 
70   // Waits for rendering to finish.
71   virtual void Finish() = 0;
72 
DoNoOp()73   virtual void DoNoOp() {}
74 
75   // Puts backbuffer onscreen.
76   virtual void SwapBuffers(const CompositorFrameMetadata& metadata) = 0;
ReceiveSwapBuffersAck(const CompositorFrameAck & ack)77   virtual void ReceiveSwapBuffersAck(const CompositorFrameAck& ack) {}
78 
79   virtual void GetFramebufferPixels(void* pixels, gfx::Rect rect) = 0;
80 
81   virtual bool IsContextLost();
82 
83   virtual void SetVisible(bool visible) = 0;
84 
85   virtual void SendManagedMemoryStats(size_t bytes_visible,
86                                       size_t bytes_visible_and_nearby,
87                                       size_t bytes_allocated) = 0;
88 
89  protected:
Renderer(RendererClient * client,const LayerTreeSettings * settings)90   explicit Renderer(RendererClient* client, const LayerTreeSettings* settings)
91       : client_(client), settings_(settings) {}
92 
93   RendererClient* client_;
94   const LayerTreeSettings* settings_;
95 
96  private:
97   DISALLOW_COPY_AND_ASSIGN(Renderer);
98 };
99 
100 }  // namespace cc
101 
102 #endif  // CC_OUTPUT_RENDERER_H_
103