compositor.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright (c) 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 CONTENT_PUBLIC_BROWSER_ANDROID_COMPOSITOR_H_
6#define CONTENT_PUBLIC_BROWSER_ANDROID_COMPOSITOR_H_
7
8#include "base/callback.h"
9#include "cc/resources/ui_resource_bitmap.h"
10#include "cc/resources/ui_resource_client.h"
11#include "content/common/content_export.h"
12#include "ui/gfx/native_widget_types.h"
13#include "ui/gfx/rect.h"
14#include "ui/gfx/size.h"
15
16class SkBitmap;
17
18namespace cc {
19class Layer;
20}
21
22namespace gfx {
23class JavaBitmap;
24}
25
26namespace content {
27class CompositorClient;
28
29// An interface to the browser-side compositor.
30class CONTENT_EXPORT Compositor {
31 public:
32  virtual ~Compositor() {}
33
34  // Performs the global initialization needed before any compositor
35  // instance can be used. This should be called only once.
36  static void Initialize();
37
38  // Creates and returns a compositor instance.  |root_window| needs to outlive
39  // the compositor as it manages callbacks on the compositor.
40  static Compositor* Create(CompositorClient* client,
41                            gfx::NativeWindow root_window);
42
43  // Attaches the layer tree.
44  virtual void SetRootLayer(scoped_refptr<cc::Layer> root) = 0;
45
46  // Set the scale factor from DIP to pixel.
47  virtual void setDeviceScaleFactor(float factor) = 0;
48
49  // Set the output surface bounds.
50  virtual void SetWindowBounds(const gfx::Size& size) = 0;
51
52  // Sets the window visibility. When becoming invisible, resources will get
53  // freed and other calls into the compositor are not allowed until after
54  // having been made visible again.
55  virtual void SetVisible(bool visible) = 0;
56
57  // Set the output surface handle which the compositor renders into.
58  // DEPRECATED: Use SetSurface() which takes a Java Surface object.
59  virtual void SetWindowSurface(ANativeWindow* window) = 0;
60
61  // Set the output surface which the compositor renders into.
62  virtual void SetSurface(jobject surface) = 0;
63
64  // Tells the view tree to assume a transparent background when rendering.
65  virtual void SetHasTransparentBackground(bool flag) = 0;
66
67  // Request layout and draw. You only need to call this if you need to trigger
68  // Composite *without* having modified the layer tree.
69  virtual void SetNeedsComposite() = 0;
70
71  // Generates a UIResource and returns a UIResourceId.  |is_transient|
72  // indicates whether or not to release the resource once the bitmap
73  // has been uploaded. May return 0.
74  virtual cc::UIResourceId GenerateUIResource(const SkBitmap& bitmap,
75                                              bool is_transient) = 0;
76
77  // Generates an ETC1 compressed UIResource.  See above for |is_transient|.
78  // May return 0.
79  virtual cc::UIResourceId GenerateCompressedUIResource(const gfx::Size& size,
80                                                        void* pixels,
81                                                        bool is_transient) = 0;
82
83  // Deletes a UIResource.
84  virtual void DeleteUIResource(cc::UIResourceId resource_id) = 0;
85
86 protected:
87  Compositor() {}
88};
89
90}  // namespace content
91
92#endif  // CONTENT_PUBLIC_BROWSER_ANDROID_COMPOSITOR_H_
93