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 |