| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/render_widget_host_view_android.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_android.h" |
| 6 | 6 |
| 7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback_helpers.h" | 11 #include "base/callback_helpers.h" |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/threading/worker_pool.h" | 16 #include "base/threading/worker_pool.h" |
| 17 #include "cc/layers/delegated_renderer_layer.h" | 17 #include "cc/layers/delegated_renderer_layer.h" |
| 18 #include "cc/layers/layer.h" | 18 #include "cc/layers/layer.h" |
| 19 #include "cc/layers/texture_layer.h" | 19 #include "cc/layers/texture_layer.h" |
| 20 #include "cc/output/compositor_frame.h" | 20 #include "cc/output/compositor_frame.h" |
| 21 #include "cc/output/compositor_frame_ack.h" | 21 #include "cc/output/compositor_frame_ack.h" |
| 22 #include "cc/output/copy_output_request.h" | 22 #include "cc/output/copy_output_request.h" |
| 23 #include "cc/output/copy_output_result.h" | 23 #include "cc/output/copy_output_result.h" |
| 24 #include "cc/resources/single_release_callback.h" |
| 24 #include "cc/trees/layer_tree_host.h" | 25 #include "cc/trees/layer_tree_host.h" |
| 25 #include "content/browser/accessibility/browser_accessibility_manager_android.h" | 26 #include "content/browser/accessibility/browser_accessibility_manager_android.h" |
| 26 #include "content/browser/android/content_view_core_impl.h" | 27 #include "content/browser/android/content_view_core_impl.h" |
| 27 #include "content/browser/android/in_process/synchronous_compositor_impl.h" | 28 #include "content/browser/android/in_process/synchronous_compositor_impl.h" |
| 28 #include "content/browser/android/overscroll_glow.h" | 29 #include "content/browser/android/overscroll_glow.h" |
| 29 #include "content/browser/gpu/gpu_surface_tracker.h" | 30 #include "content/browser/gpu/gpu_surface_tracker.h" |
| 30 #include "content/browser/renderer_host/compositor_impl_android.h" | 31 #include "content/browser/renderer_host/compositor_impl_android.h" |
| 31 #include "content/browser/renderer_host/dip_util.h" | 32 #include "content/browser/renderer_host/dip_util.h" |
| 32 #include "content/browser/renderer_host/generic_touch_gesture_android.h" | 33 #include "content/browser/renderer_host/generic_touch_gesture_android.h" |
| 33 #include "content/browser/renderer_host/image_transport_factory_android.h" | 34 #include "content/browser/renderer_host/image_transport_factory_android.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 route_id, output_surface_id, renderer_host_id, ack); | 84 route_id, output_surface_id, renderer_host_id, ack); |
| 84 } | 85 } |
| 85 | 86 |
| 86 // Sends an acknowledgement to the renderer of a processed IME event. | 87 // Sends an acknowledgement to the renderer of a processed IME event. |
| 87 void SendImeEventAck(RenderWidgetHostImpl* host) { | 88 void SendImeEventAck(RenderWidgetHostImpl* host) { |
| 88 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID())); | 89 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID())); |
| 89 } | 90 } |
| 90 | 91 |
| 91 void CopyFromCompositingSurfaceFinished( | 92 void CopyFromCompositingSurfaceFinished( |
| 92 const base::Callback<void(bool, const SkBitmap&)>& callback, | 93 const base::Callback<void(bool, const SkBitmap&)>& callback, |
| 93 const cc::TextureMailbox::ReleaseCallback& release_callback, | 94 scoped_ptr<cc::SingleReleaseCallback> release_callback, |
| 94 scoped_ptr<SkBitmap> bitmap, | 95 scoped_ptr<SkBitmap> bitmap, |
| 95 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock, | 96 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock, |
| 96 bool result) { | 97 bool result) { |
| 97 bitmap_pixels_lock.reset(); | 98 bitmap_pixels_lock.reset(); |
| 98 release_callback.Run(0, false); | 99 release_callback->Run(0, false); |
| 99 callback.Run(result, *bitmap); | 100 callback.Run(result, *bitmap); |
| 100 } | 101 } |
| 101 | 102 |
| 102 } // anonymous namespace | 103 } // anonymous namespace |
| 103 | 104 |
| 104 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 105 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
| 105 RenderWidgetHostImpl* widget_host, | 106 RenderWidgetHostImpl* widget_host, |
| 106 ContentViewCoreImpl* content_view_core) | 107 ContentViewCoreImpl* content_view_core) |
| 107 : host_(widget_host), | 108 : host_(widget_host), |
| 108 needs_begin_frame_(false), | 109 needs_begin_frame_(false), |
| (...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 void RenderWidgetHostViewAndroid::DidCommitFrameData() { | 1193 void RenderWidgetHostViewAndroid::DidCommitFrameData() { |
| 1193 RunAckCallbacks(); | 1194 RunAckCallbacks(); |
| 1194 } | 1195 } |
| 1195 | 1196 |
| 1196 WebKit::WebGraphicsContext3D* RenderWidgetHostViewAndroid::Context3d() { | 1197 WebKit::WebGraphicsContext3D* RenderWidgetHostViewAndroid::Context3d() { |
| 1197 return ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); | 1198 return ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); |
| 1198 } | 1199 } |
| 1199 | 1200 |
| 1200 bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( | 1201 bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( |
| 1201 cc::TextureMailbox* mailbox, | 1202 cc::TextureMailbox* mailbox, |
| 1203 scoped_ptr<cc::SingleReleaseCallback>* release_callback, |
| 1202 bool use_shared_memory) { | 1204 bool use_shared_memory) { |
| 1203 return false; | 1205 return false; |
| 1204 } | 1206 } |
| 1205 | 1207 |
| 1206 void RenderWidgetHostViewAndroid::OnLostResources() { | 1208 void RenderWidgetHostViewAndroid::OnLostResources() { |
| 1207 if (texture_layer_) | 1209 if (texture_layer_) |
| 1208 texture_layer_->SetIsDrawable(false); | 1210 texture_layer_->SetIsDrawable(false); |
| 1209 texture_id_in_layer_ = 0; | 1211 texture_id_in_layer_ = 0; |
| 1210 RunAckCallbacks(); | 1212 RunAckCallbacks(); |
| 1211 } | 1213 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1232 ImageTransportFactoryAndroid* factory = | 1234 ImageTransportFactoryAndroid* factory = |
| 1233 ImageTransportFactoryAndroid::GetInstance(); | 1235 ImageTransportFactoryAndroid::GetInstance(); |
| 1234 GLHelper* gl_helper = factory->GetGLHelper(); | 1236 GLHelper* gl_helper = factory->GetGLHelper(); |
| 1235 if (!gl_helper) | 1237 if (!gl_helper) |
| 1236 return; | 1238 return; |
| 1237 | 1239 |
| 1238 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock( | 1240 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock( |
| 1239 new SkAutoLockPixels(*bitmap)); | 1241 new SkAutoLockPixels(*bitmap)); |
| 1240 uint8* pixels = static_cast<uint8*>(bitmap->getPixels()); | 1242 uint8* pixels = static_cast<uint8*>(bitmap->getPixels()); |
| 1241 | 1243 |
| 1242 scoped_ptr<cc::TextureMailbox> texture_mailbox = result->TakeTexture(); | 1244 cc::TextureMailbox texture_mailbox; |
| 1243 DCHECK(texture_mailbox->IsTexture()); | 1245 scoped_ptr<cc::SingleReleaseCallback> release_callback; |
| 1244 if (!texture_mailbox->IsTexture()) | 1246 result->TakeTexture(&texture_mailbox, &release_callback); |
| 1247 DCHECK(texture_mailbox.IsTexture()); |
| 1248 if (!texture_mailbox.IsTexture()) |
| 1245 return; | 1249 return; |
| 1246 | 1250 |
| 1247 ignore_result(scoped_callback_runner.Release()); | 1251 ignore_result(scoped_callback_runner.Release()); |
| 1248 | 1252 |
| 1249 gl_helper->CropScaleReadbackAndCleanMailbox( | 1253 gl_helper->CropScaleReadbackAndCleanMailbox( |
| 1250 texture_mailbox->name(), | 1254 texture_mailbox.name(), |
| 1251 texture_mailbox->sync_point(), | 1255 texture_mailbox.sync_point(), |
| 1252 result->size(), | 1256 result->size(), |
| 1253 gfx::Rect(result->size()), | 1257 gfx::Rect(result->size()), |
| 1254 dst_size_in_pixel, | 1258 dst_size_in_pixel, |
| 1255 pixels, | 1259 pixels, |
| 1256 base::Bind(&CopyFromCompositingSurfaceFinished, | 1260 base::Bind(&CopyFromCompositingSurfaceFinished, |
| 1257 callback, | 1261 callback, |
| 1258 texture_mailbox->callback(), | 1262 base::Passed(&release_callback), |
| 1259 base::Passed(&bitmap), | 1263 base::Passed(&bitmap), |
| 1260 base::Passed(&bitmap_pixels_lock))); | 1264 base::Passed(&bitmap_pixels_lock))); |
| 1261 } | 1265 } |
| 1262 | 1266 |
| 1263 // static | 1267 // static |
| 1264 void RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult( | 1268 void RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult( |
| 1265 const gfx::Size& dst_size_in_pixel, | 1269 const gfx::Size& dst_size_in_pixel, |
| 1266 const base::Callback<void(bool, const SkBitmap&)>& callback, | 1270 const base::Callback<void(bool, const SkBitmap&)>& callback, |
| 1267 scoped_ptr<cc::CopyOutputResult> result) { | 1271 scoped_ptr<cc::CopyOutputResult> result) { |
| 1268 DCHECK(result->HasBitmap()); | 1272 DCHECK(result->HasBitmap()); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 // RenderWidgetHostView, public: | 1307 // RenderWidgetHostView, public: |
| 1304 | 1308 |
| 1305 // static | 1309 // static |
| 1306 RenderWidgetHostView* | 1310 RenderWidgetHostView* |
| 1307 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1311 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1308 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1312 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1309 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1313 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1310 } | 1314 } |
| 1311 | 1315 |
| 1312 } // namespace content | 1316 } // namespace content |
| OLD | NEW |