Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1362)

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 1144333004: Make WebView work for external displays (over Presentations). Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move screen_android.cc from ui/gfx/ to ui/android/. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_android.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index abdb9eba431b6d22f2f20412fe2d875069cc7470..0eae9be00bfc17288484d07a22dd4d7b4960ba7f 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -5,6 +5,7 @@
#include "content/browser/renderer_host/render_widget_host_view_android.h"
#include <android/bitmap.h>
+#include <memory>
#include "base/android/build_info.h"
#include "base/basictypes.h"
@@ -125,10 +126,10 @@ void SendImeEventAck(RenderWidgetHostImpl* host) {
class GLHelperHolder
: public blink::WebGraphicsContext3D::WebGraphicsContextLostCallback {
public:
- static GLHelperHolder* Create();
+ static GLHelperHolder* Create(gfx::NativeWindow nativeWindow);
~GLHelperHolder() override;
- void Initialize();
+ void Initialize(gfx::NativeWindow nativeWindow);
// WebGraphicsContextLostCallback implementation.
void onContextLost() override;
@@ -138,7 +139,8 @@ class GLHelperHolder
private:
GLHelperHolder();
- static scoped_ptr<WebGraphicsContext3DCommandBufferImpl> CreateContext3D();
+ static scoped_ptr<WebGraphicsContext3DCommandBufferImpl>
+ CreateContext3D(gfx::NativeWindow nativeWindow);
scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context_;
scoped_ptr<GLHelper> gl_helper_;
@@ -146,9 +148,9 @@ class GLHelperHolder
DISALLOW_COPY_AND_ASSIGN(GLHelperHolder);
};
-GLHelperHolder* GLHelperHolder::Create() {
+GLHelperHolder* GLHelperHolder::Create(gfx::NativeWindow nativeWindow) {
GLHelperHolder* holder = new GLHelperHolder;
- holder->Initialize();
+ holder->Initialize(nativeWindow);
return holder;
}
@@ -159,8 +161,8 @@ GLHelperHolder::GLHelperHolder() {
GLHelperHolder::~GLHelperHolder() {
}
-void GLHelperHolder::Initialize() {
- context_ = CreateContext3D();
+void GLHelperHolder::Initialize(gfx::NativeWindow nativeWindow) {
+ context_ = CreateContext3D(nativeWindow);
if (context_) {
context_->setContextLostCallback(this);
gl_helper_.reset(new GLHelper(context_->GetImplementation(),
@@ -178,7 +180,7 @@ void GLHelperHolder::onContextLost() {
}
scoped_ptr<WebGraphicsContext3DCommandBufferImpl>
-GLHelperHolder::CreateContext3D() {
+GLHelperHolder::CreateContext3D(gfx::NativeWindow nativeWindow) {
BrowserGpuChannelHostFactory* factory =
BrowserGpuChannelHostFactory::instance();
scoped_refptr<GpuChannelHost> gpu_channel_host(factory->GetGpuChannel());
@@ -193,9 +195,10 @@ GLHelperHolder::CreateContext3D() {
attrs.shareResources = true;
GURL url("chrome://gpu/RenderWidgetHostViewAndroid");
static const size_t kBytesPerPixel = 4;
- gfx::DeviceDisplayInfo display_info;
- size_t full_screen_texture_size_in_bytes = display_info.GetDisplayHeight() *
- display_info.GetDisplayWidth() *
+ std::shared_ptr<gfx::DeviceDisplayInfo> display_info =
+ nativeWindow->GetDeviceDisplayInfo();
+ size_t full_screen_texture_size_in_bytes = display_info->GetDisplayHeight() *
+ display_info->GetDisplayWidth() *
kBytesPerPixel;
WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits limits;
limits.command_buffer_size = 64 * 1024;
@@ -226,7 +229,7 @@ GLHelperHolder::CreateContext3D() {
// This can only be used for readback postprocessing. It may return null if the
// channel was lost and not reestablished yet.
-GLHelper* GetPostReadbackGLHelper() {
+GLHelper* GetPostReadbackGLHelper(gfx::NativeWindow nativeWindow) {
static GLHelperHolder* g_readback_helper_holder = nullptr;
if (g_readback_helper_holder && g_readback_helper_holder->IsLost()) {
@@ -235,7 +238,7 @@ GLHelper* GetPostReadbackGLHelper() {
}
if (!g_readback_helper_holder)
- g_readback_helper_holder = GLHelperHolder::Create();
+ g_readback_helper_holder = GLHelperHolder::Create(nativeWindow);
return g_readback_helper_holder->GetGLHelper();
}
@@ -246,13 +249,14 @@ void CopyFromCompositingSurfaceFinished(
scoped_ptr<SkBitmap> bitmap,
const base::TimeTicks& start_time,
scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock,
+ gfx::NativeWindow nativeWindow,
bool result) {
TRACE_EVENT0(
"cc", "RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceFinished");
bitmap_pixels_lock.reset();
uint32 sync_point = 0;
if (result) {
- GLHelper* gl_helper = GetPostReadbackGLHelper();
+ GLHelper* gl_helper = GetPostReadbackGLHelper(nativeWindow);
if (gl_helper)
sync_point = gl_helper->InsertSyncPoint();
}
@@ -929,7 +933,7 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
base::Bind(&RenderWidgetHostViewAndroid::
PrepareTextureCopyOutputResultForDelegatedReadback,
dst_size_in_pixel, preferred_color_type, start_time,
- readback_layer, callback));
+ readback_layer, callback, content_view_core_window_android_));
if (!src_subrect_in_pixel.IsEmpty())
request->set_area(src_subrect_in_pixel);
readback_layer->RequestCopyOfOutput(request.Pass());
@@ -1547,7 +1551,7 @@ bool RenderWidgetHostViewAndroid::HasAcceleratedSurface(
void RenderWidgetHostViewAndroid::GetScreenInfo(blink::WebScreenInfo* result) {
// ScreenInfo isn't tied to the widget on Android. Always return the default.
- RenderWidgetHostViewBase::GetDefaultScreenInfo(result);
+ RenderWidgetHostViewBase::GetDefaultScreenInfo(result); // TODO fix
}
// TODO(jrg): Find out the implications and answer correctly here,
@@ -1925,10 +1929,12 @@ void RenderWidgetHostViewAndroid::
const base::TimeTicks& start_time,
scoped_refptr<cc::Layer> readback_layer,
ReadbackRequestCallback& callback,
+ gfx::NativeWindow nativeWindow,
scoped_ptr<cc::CopyOutputResult> result) {
readback_layer->RemoveFromParent();
PrepareTextureCopyOutputResult(
- dst_size_in_pixel, color_type, start_time, callback, result.Pass());
+ dst_size_in_pixel, color_type, start_time, callback, nativeWindow,
+ result.Pass());
}
// static
@@ -1937,6 +1943,7 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
SkColorType color_type,
const base::TimeTicks& start_time,
ReadbackRequestCallback& callback,
+ gfx::NativeWindow nativeWindow,
scoped_ptr<cc::CopyOutputResult> result) {
base::ScopedClosureRunner scoped_callback_runner(
base::Bind(callback, SkBitmap(), READBACK_FAILED));
@@ -1952,7 +1959,8 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
else
output_size_in_pixel = dst_size_in_pixel;
- GLHelper* gl_helper = GetPostReadbackGLHelper();
+ GLHelper* gl_helper =
+ GetPostReadbackGLHelper(nativeWindow);
if (!gl_helper)
return;
if (!gl_helper->IsReadbackConfigSupported(color_type))
@@ -1994,7 +2002,8 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
base::Passed(&release_callback),
base::Passed(&bitmap),
start_time,
- base::Passed(&bitmap_pixels_lock)),
+ base::Passed(&bitmap_pixels_lock),
+ nativeWindow),
GLHelper::SCALER_QUALITY_GOOD);
}

Powered by Google App Engine
This is Rietveld 408576698