summaryrefslogtreecommitdiffstats
path: root/chrome/browser/android/compositor/compositor_view.h
blob: 4edb26d3e3d1512882615f51e12526c4224683d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_COMPOSITOR_VIEW_H_
#define CHROME_BROWSER_ANDROID_COMPOSITOR_COMPOSITOR_VIEW_H_

#include <jni.h>

#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "base/containers/scoped_ptr_hash_map.h"
#include "base/memory/weak_ptr.h"
#include "cc/layers/layer_lists.h"
#include "cc/resources/ui_resource_client.h"
#include "content/public/browser/android/compositor_client.h"
#include "content/public/browser/browser_child_process_observer.h"
#include "third_party/skia/include/core/SkColor.h"

class DecorationBackground;
class DecorationCounter;
class SkBitmap;
class TabLayerContainer;

namespace cc {
class Layer;
class SolidColorLayer;
class TextureLayer;
class UIResourceBitmap;
}

namespace gfx {
class JavaBitmap;
}

namespace content {
class Compositor;
}

namespace ui {
class WindowAndroid;
class ResourceManager;
class UIResourceProvider;
}

namespace chrome {
namespace android {

class LayerTitleCache;
class SceneLayer;
class TabContentManager;
class ToolbarLayer;

class CompositorView : public content::CompositorClient,
                       public content::BrowserChildProcessObserver {
 public:
  CompositorView(JNIEnv* env,
                 jobject obj,
                 jint empty_background_color,
                 jboolean low_mem_device,
                 ui::WindowAndroid* window_android,
                 LayerTitleCache* layer_title_cache,
                 TabContentManager* tab_content_manager);

  void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& object);

  ui::ResourceManager* GetResourceManager();
  base::android::ScopedJavaLocalRef<jobject> GetResourceManager(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj);
  void SetNeedsComposite(JNIEnv* env,
                         const base::android::JavaParamRef<jobject>& object);
  void FinalizeLayers(JNIEnv* env,
                      const base::android::JavaParamRef<jobject>& jobj);
  void SetLayoutViewport(JNIEnv* env,
                         const base::android::JavaParamRef<jobject>& object,
                         jfloat x,
                         jfloat y,
                         jfloat width,
                         jfloat height,
                         jfloat visible_x_offset,
                         jfloat visible_y_offset,
                         jfloat overdraw_bottom_height,
                         jfloat dp_to_pixel);
  void UpdateToolbarLayer(JNIEnv* env,
                          const base::android::JavaParamRef<jobject>& object,
                          jint toolbar_resource_id,
                          jint toolbar_background_color,
                          jint url_bar_resource_id,
                          jfloat url_bar_alpha,
                          jfloat top_offset,
                          jfloat brightness,
                          bool visible,
                          bool show_shadow);
  void UpdateProgressBar(JNIEnv* env,
                         const base::android::JavaParamRef<jobject>& object,
                         jint progress_bar_x,
                         jint progress_bar_y,
                         jint progress_bar_width,
                         jint progress_bar_height,
                         jint progress_bar_color,
                         jint progress_bar_background_x,
                         jint progress_bar_background_y,
                         jint progress_bar_background_width,
                         jint progress_bar_background_height,
                         jint progress_bar_background_color);

  void SurfaceCreated(JNIEnv* env,
                      const base::android::JavaParamRef<jobject>& object);
  void SurfaceDestroyed(JNIEnv* env,
                        const base::android::JavaParamRef<jobject>& object);
  void SurfaceChanged(JNIEnv* env,
                      const base::android::JavaParamRef<jobject>& object,
                      jint format,
                      jint width,
                      jint height,
                      const base::android::JavaParamRef<jobject>& surface);

  void SetOverlayVideoMode(JNIEnv* env,
                           const base::android::JavaParamRef<jobject>& object,
                           bool enabled);
  void SetSceneLayer(JNIEnv* env,
                     const base::android::JavaParamRef<jobject>& object,
                     const base::android::JavaParamRef<jobject>& jscene_layer);

  // CompositorClient implementation:
  void UpdateLayerTreeHost() override;
  void OnSwapBuffersCompleted(int pending_swap_buffers) override;
  ui::UIResourceProvider* GetUIResourceProvider();

 private:
  ~CompositorView() override;

  // content::BrowserChildProcessObserver implementation:
  void BrowserChildProcessHostDisconnected(
      const content::ChildProcessData& data) override;
  void BrowserChildProcessCrashed(const content::ChildProcessData& data,
                                  int exit_code) override;

  void SetBackground(bool visible, SkColor color);

  int GetUsableContentHeight();

  base::android::ScopedJavaGlobalRef<jobject> obj_;
  scoped_ptr<content::Compositor> compositor_;
  LayerTitleCache* layer_title_cache_;
  TabContentManager* tab_content_manager_;

  scoped_refptr<cc::SolidColorLayer> root_layer_;
  scoped_refptr<ToolbarLayer> toolbar_layer_;
  SceneLayer* scene_layer_;
  scoped_refptr<cc::Layer> scene_layer_layer_;

  int current_surface_format_;
  int content_width_;
  int content_height_;
  int overdraw_bottom_height_;
  bool overlay_video_mode_;
  SkColor empty_background_color_;

  base::WeakPtrFactory<CompositorView> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(CompositorView);
};

bool RegisterCompositorView(JNIEnv* env);

}  // namespace android
}  // namespace chrome

#endif  // CHROME_BROWSER_ANDROID_COMPOSITOR_COMPOSITOR_VIEW_H_