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); |