summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorpowei@chromium.org <powei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-20 00:05:45 +0000
committerpowei@chromium.org <powei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-20 00:05:45 +0000
commit0809f7e29c748f90c3e2a95e906e12ee56fca674 (patch)
tree934829c63a80a32bb05c7617bd1e9376c03b8a68 /ui
parenta035cf61635545d0343b2d441aa8da035625da8b (diff)
downloadchromium_src-0809f7e29c748f90c3e2a95e906e12ee56fca674.zip
chromium_src-0809f7e29c748f90c3e2a95e906e12ee56fca674.tar.gz
chromium_src-0809f7e29c748f90c3e2a95e906e12ee56fca674.tar.bz2
android: Readback using delegated rendering layer
Using a separate delegated rendering layer for readback allows us to keep the readback layer from being displayed. This in turn allows us to clip the content layer associated with RWHVAndroid when necessary. android= https://chrome-internal-review.googlesource.com/157016 BUG=344720 Review URL: https://codereview.chromium.org/197913002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258167 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/base/android/window_android.cc11
-rw-r--r--ui/base/android/window_android.h6
-rw-r--r--ui/base/android/window_android_compositor.h26
-rw-r--r--ui/base/ui_base.gyp1
4 files changed, 41 insertions, 3 deletions
diff --git a/ui/base/android/window_android.cc b/ui/base/android/window_android.cc
index bacf023..916e821 100644
--- a/ui/base/android/window_android.cc
+++ b/ui/base/android/window_android.cc
@@ -9,6 +9,7 @@
#include "base/android/jni_helper.h"
#include "base/android/scoped_java_ref.h"
#include "jni/WindowAndroid_jni.h"
+#include "ui/base/android/window_android_compositor.h"
#include "ui/base/android/window_android_observer.h"
namespace ui {
@@ -17,7 +18,8 @@ using base::android::AttachCurrentThread;
using base::android::ScopedJavaLocalRef;
WindowAndroid::WindowAndroid(JNIEnv* env, jobject obj)
- : weak_java_window_(env, obj) {
+ : weak_java_window_(env, obj),
+ compositor_(NULL) {
}
void WindowAndroid::Destroy(JNIEnv* env, jobject obj) {
@@ -66,13 +68,18 @@ void WindowAndroid::RemoveObserver(WindowAndroidObserver* observer) {
observer_list_.RemoveObserver(observer);
}
-void WindowAndroid::AttachCompositor() {
+void WindowAndroid::AttachCompositor(WindowAndroidCompositor* compositor) {
+ if (compositor_ && compositor != compositor_)
+ DetachCompositor();
+
+ compositor_ = compositor;
FOR_EACH_OBSERVER(WindowAndroidObserver,
observer_list_,
OnAttachCompositor());
}
void WindowAndroid::DetachCompositor() {
+ compositor_ = NULL;
FOR_EACH_OBSERVER(WindowAndroidObserver,
observer_list_,
OnDetachCompositor());
diff --git a/ui/base/android/window_android.h b/ui/base/android/window_android.h
index 5e6532e..2563679 100644
--- a/ui/base/android/window_android.h
+++ b/ui/base/android/window_android.h
@@ -15,6 +15,7 @@
namespace ui {
+class WindowAndroidCompositor;
class WindowAndroidObserver;
// Android implementation of the activity window.
@@ -40,17 +41,20 @@ class UI_BASE_EXPORT WindowAndroid {
// Compositor callback relay.
void OnCompositingDidCommit();
- void AttachCompositor();
+ void AttachCompositor(WindowAndroidCompositor* compositor);
void DetachCompositor();
void AddObserver(WindowAndroidObserver* observer);
void RemoveObserver(WindowAndroidObserver* observer);
+ WindowAndroidCompositor* GetCompositor() { return compositor_; }
+
private:
~WindowAndroid();
JavaObjectWeakGlobalRef weak_java_window_;
gfx::Vector2dF content_offset_;
+ WindowAndroidCompositor* compositor_;
ObserverList<WindowAndroidObserver> observer_list_;
diff --git a/ui/base/android/window_android_compositor.h b/ui/base/android/window_android_compositor.h
new file mode 100644
index 0000000..8f219fa
--- /dev/null
+++ b/ui/base/android/window_android_compositor.h
@@ -0,0 +1,26 @@
+// Copyright 2014 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 UI_BASE_ANDROID_WINDOW_ANDROID_COMPOSITOR_H_
+#define UI_BASE_ANDROID_WINDOW_ANDROID_COMPOSITOR_H_
+
+#include "ui/base/ui_base_export.h"
+
+namespace cc {
+class Layer;
+}
+
+namespace ui {
+
+// Android interface for compositor-related tasks.
+class UI_BASE_EXPORT WindowAndroidCompositor {
+ public:
+ virtual ~WindowAndroidCompositor() {}
+
+ virtual void AttachLayerForReadback(scoped_refptr<cc::Layer> layer) = 0;
+};
+
+} // namespace ui
+
+#endif // UI_BASE_ANDROID_WINDOW_ANDROID_COMPOSITOR_H_
diff --git a/ui/base/ui_base.gyp b/ui/base/ui_base.gyp
index 6f5953e..cab62df 100644
--- a/ui/base/ui_base.gyp
+++ b/ui/base/ui_base.gyp
@@ -51,6 +51,7 @@
'android/view_android.h',
'android/window_android.cc',
'android/window_android.h',
+ 'android/window_android_compositor.h',
'android/window_android_observer.h',
'base_window.cc',
'base_window.h',