Chromium Code Reviews| 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 a20849731707fc6014b209a35ff2f86496452d22..7fce2bdf66f438c74a75588ef52f2ff28f29b60a 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
| @@ -124,10 +124,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; |
| @@ -137,7 +137,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_; |
| @@ -145,9 +146,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; |
| } |
| @@ -158,8 +159,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(), |
| @@ -177,7 +178,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()); |
| @@ -192,7 +193,7 @@ GLHelperHolder::CreateContext3D() { |
| attrs.shareResources = true; |
| GURL url("chrome://gpu/RenderWidgetHostViewAndroid"); |
| static const size_t kBytesPerPixel = 4; |
| - gfx::DeviceDisplayInfo display_info; |
| + gfx::DeviceDisplayInfo display_info(nativeWindow->GetJavaObject().obj()); |
| size_t full_screen_texture_size_in_bytes = display_info.GetDisplayHeight() * |
| display_info.GetDisplayWidth() * |
| kBytesPerPixel; |
| @@ -224,7 +225,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()) { |
| @@ -233,7 +234,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(); |
| } |
| @@ -244,13 +245,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(); |
| } |
| @@ -948,7 +950,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()); |
| @@ -1927,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 |
| @@ -1939,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)); |
| @@ -1954,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)) |
| @@ -1996,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); |
| } |
| @@ -2039,7 +2046,8 @@ void RenderWidgetHostViewBase::GetDefaultScreenInfo( |
| results->orientationAngle = display.RotationAsDegree(); |
| results->orientationType = |
| RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
| - gfx::DeviceDisplayInfo info; |
| + gfx::DeviceDisplayInfo info; // TODO since we don't have a Native Window here |
| + // we can only use the primary display? |
|
boliu
2015/06/01 15:30:18
Yes
Although should double check that any caller
gsennton
2015/06/04 14:10:29
This is called from two places:
1. GetScreenInfo
boliu
2015/06/05 04:57:51
You are right. Comment assumes android only has a
|
| results->depth = info.GetBitsPerPixel(); |
| results->depthPerComponent = info.GetBitsPerComponent(); |
| results->isMonochrome = (results->depthPerComponent == 0); |