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" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 return latency_info; | 132 return latency_info; |
133 } | 133 } |
134 | 134 |
135 } // anonymous namespace | 135 } // anonymous namespace |
136 | 136 |
137 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 137 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
138 RenderWidgetHostImpl* widget_host, | 138 RenderWidgetHostImpl* widget_host, |
139 ContentViewCoreImpl* content_view_core) | 139 ContentViewCoreImpl* content_view_core) |
140 : host_(widget_host), | 140 : host_(widget_host), |
141 needs_begin_frame_(false), | 141 needs_begin_frame_(false), |
142 are_layers_attached_(!widget_host->is_hidden()), | 142 is_showing_(!widget_host->is_hidden()), |
143 content_view_core_(NULL), | 143 content_view_core_(NULL), |
144 ime_adapter_android_(this), | 144 ime_adapter_android_(this), |
145 cached_background_color_(SK_ColorWHITE), | 145 cached_background_color_(SK_ColorWHITE), |
146 texture_id_in_layer_(0), | 146 texture_id_in_layer_(0), |
147 last_output_surface_id_(kUndefinedOutputSurfaceId), | 147 last_output_surface_id_(kUndefinedOutputSurfaceId), |
148 weak_ptr_factory_(this), | 148 weak_ptr_factory_(this), |
149 overscroll_effect_enabled_( | 149 overscroll_effect_enabled_( |
150 !CommandLine::ForCurrentProcess()-> | 150 !CommandLine::ForCurrentProcess()-> |
151 HasSwitch(switches::kDisableOverscrollEdgeEffect)), | 151 HasSwitch(switches::kDisableOverscrollEdgeEffect)), |
152 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), | 152 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 // Ignore the given size as only the Java code has the power to | 252 // Ignore the given size as only the Java code has the power to |
253 // resize the view on Android. | 253 // resize the view on Android. |
254 default_size_ = size; | 254 default_size_ = size; |
255 WasResized(); | 255 WasResized(); |
256 } | 256 } |
257 | 257 |
258 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { | 258 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { |
259 SetSize(rect.size()); | 259 SetSize(rect.size()); |
260 } | 260 } |
261 | 261 |
262 blink::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture( | 262 void RenderWidgetHostViewAndroid::GetScaledContentBitmap( |
263 float scale, | 263 float scale, |
264 gfx::Size* out_size) { | 264 gfx::Size* out_size, |
265 gfx::Size size(gfx::ToCeiledSize( | 265 const base::Callback<void(bool, const SkBitmap&)>& callback) { |
266 gfx::ScaleSize(texture_size_in_layer_, scale))); | 266 gfx::Size bounds = layer_->bounds(); |
267 | 267 gfx::Rect src_subrect(bounds); |
268 if (!CompositorImpl::IsInitialized() || | 268 const gfx::Display& display = |
269 texture_id_in_layer_ == 0 || | 269 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
270 texture_size_in_layer_.IsEmpty() || | 270 float device_scale_factor = display.device_scale_factor(); |
271 size.IsEmpty()) { | 271 DCHECK_GT(device_scale_factor, 0); |
272 if (out_size) | 272 gfx::Size dst_size( |
273 out_size->SetSize(0, 0); | 273 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); |
274 | 274 *out_size = dst_size; |
275 return 0; | 275 CopyFromCompositingSurface( |
276 } | 276 src_subrect, dst_size, callback, SkBitmap::kARGB_8888_Config); |
277 | |
278 if (out_size) | |
279 *out_size = size; | |
280 | |
281 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); | |
282 return helper->CopyAndScaleTexture(texture_id_in_layer_, | |
283 texture_size_in_layer_, | |
284 size, | |
285 true, | |
286 GLHelper::SCALER_QUALITY_FAST); | |
287 } | 277 } |
288 | 278 |
289 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { | 279 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { |
290 if (!CompositorImpl::IsInitialized() || | 280 if (!CompositorImpl::IsInitialized() || |
291 texture_id_in_layer_ == 0 || | 281 texture_id_in_layer_ == 0 || |
292 texture_size_in_layer_.IsEmpty()) | 282 texture_size_in_layer_.IsEmpty()) |
293 return false; | 283 return false; |
294 | 284 |
295 gfx::JavaBitmap bitmap(jbitmap); | 285 gfx::JavaBitmap bitmap(jbitmap); |
296 | 286 |
(...skipping 19 matching lines...) Expand all Loading... |
316 gpu::gles2::GLES2Interface* gl = | 306 gpu::gles2::GLES2Interface* gl = |
317 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); | 307 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); |
318 gl->DeleteTextures(1, &texture); | 308 gl->DeleteTextures(1, &texture); |
319 | 309 |
320 return true; | 310 return true; |
321 } | 311 } |
322 | 312 |
323 bool RenderWidgetHostViewAndroid::HasValidFrame() const { | 313 bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
324 if (!content_view_core_) | 314 if (!content_view_core_) |
325 return false; | 315 return false; |
| 316 if (!layer_) |
| 317 return false; |
| 318 |
326 if (texture_size_in_layer_.IsEmpty()) | 319 if (texture_size_in_layer_.IsEmpty()) |
327 return false; | 320 return false; |
328 | 321 |
329 if (UsingDelegatedRenderer()) { | 322 if (UsingDelegatedRenderer()) { |
330 if (!delegated_renderer_layer_.get()) | 323 if (!delegated_renderer_layer_.get()) |
331 return false; | 324 return false; |
332 } else { | 325 } else { |
333 if (texture_id_in_layer_ == 0) | 326 if (texture_id_in_layer_ == 0) |
334 return false; | 327 return false; |
335 } | 328 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 return false; // ContentViewCore not created yet. | 373 return false; // ContentViewCore not created yet. |
381 | 374 |
382 return content_view_core_->HasFocus(); | 375 return content_view_core_->HasFocus(); |
383 } | 376 } |
384 | 377 |
385 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 378 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
386 return HasValidFrame(); | 379 return HasValidFrame(); |
387 } | 380 } |
388 | 381 |
389 void RenderWidgetHostViewAndroid::Show() { | 382 void RenderWidgetHostViewAndroid::Show() { |
390 if (are_layers_attached_) | 383 if (is_showing_) |
391 return; | 384 return; |
392 | 385 |
393 are_layers_attached_ = true; | 386 is_showing_ = true; |
394 AttachLayers(); | 387 if (layer_) |
| 388 layer_->SetHideLayerAndSubtree(false); |
395 | 389 |
396 frame_evictor_->SetVisible(true); | 390 frame_evictor_->SetVisible(true); |
397 WasShown(); | 391 WasShown(); |
398 } | 392 } |
399 | 393 |
400 void RenderWidgetHostViewAndroid::Hide() { | 394 void RenderWidgetHostViewAndroid::Hide() { |
401 if (!are_layers_attached_) | 395 if (!is_showing_) |
402 return; | 396 return; |
403 | 397 |
404 are_layers_attached_ = false; | 398 is_showing_ = false; |
405 RemoveLayers(); | 399 if (layer_) |
| 400 layer_->SetHideLayerAndSubtree(true); |
406 | 401 |
407 frame_evictor_->SetVisible(false); | 402 frame_evictor_->SetVisible(false); |
408 WasHidden(); | 403 WasHidden(); |
409 } | 404 } |
410 | 405 |
411 bool RenderWidgetHostViewAndroid::IsShowing() { | 406 bool RenderWidgetHostViewAndroid::IsShowing() { |
412 // ContentViewCoreImpl represents the native side of the Java | 407 // ContentViewCoreImpl represents the native side of the Java |
413 // ContentViewCore. It being NULL means that it is not attached | 408 // ContentViewCore. It being NULL means that it is not attached |
414 // to the View system yet, so we treat this RWHVA as hidden. | 409 // to the View system yet, so we treat this RWHVA as hidden. |
415 return are_layers_attached_ && content_view_core_; | 410 return is_showing_ && content_view_core_; |
416 } | 411 } |
417 | 412 |
418 void RenderWidgetHostViewAndroid::LockResources() { | 413 void RenderWidgetHostViewAndroid::LockResources() { |
419 DCHECK(HasValidFrame()); | 414 DCHECK(HasValidFrame()); |
420 DCHECK(host_); | 415 DCHECK(host_); |
421 DCHECK(!host_->is_hidden()); | 416 DCHECK(!host_->is_hidden()); |
422 frame_evictor_->LockFrame(); | 417 frame_evictor_->LockFrame(); |
423 } | 418 } |
424 | 419 |
425 void RenderWidgetHostViewAndroid::UnlockResources() { | 420 void RenderWidgetHostViewAndroid::UnlockResources() { |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 output_surface_id, | 727 output_surface_id, |
733 host_->GetProcess()->GetID(), | 728 host_->GetProcess()->GetID(), |
734 ack); | 729 ack); |
735 } | 730 } |
736 | 731 |
737 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { | 732 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { |
738 // TODO(danakj): If no ack is pending, collect and send resources now. | 733 // TODO(danakj): If no ack is pending, collect and send resources now. |
739 } | 734 } |
740 | 735 |
741 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { | 736 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { |
742 if (are_layers_attached_) | 737 RemoveLayers(); |
743 RemoveLayers(); | |
744 frame_provider_ = NULL; | 738 frame_provider_ = NULL; |
745 delegated_renderer_layer_ = NULL; | 739 delegated_renderer_layer_ = NULL; |
746 layer_ = NULL; | 740 layer_ = NULL; |
747 } | 741 } |
748 | 742 |
749 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( | 743 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
750 uint32 output_surface_id, | 744 uint32 output_surface_id, |
751 scoped_ptr<cc::DelegatedFrameData> frame_data) { | 745 scoped_ptr<cc::DelegatedFrameData> frame_data) { |
752 bool has_content = !texture_size_in_layer_.IsEmpty(); | 746 bool has_content = !texture_size_in_layer_.IsEmpty(); |
753 | 747 |
(...skipping 15 matching lines...) Expand all Loading... |
769 | 763 |
770 if (!has_content) { | 764 if (!has_content) { |
771 DestroyDelegatedContent(); | 765 DestroyDelegatedContent(); |
772 } else { | 766 } else { |
773 if (!resource_collection_.get()) { | 767 if (!resource_collection_.get()) { |
774 resource_collection_ = new cc::DelegatedFrameResourceCollection; | 768 resource_collection_ = new cc::DelegatedFrameResourceCollection; |
775 resource_collection_->SetClient(this); | 769 resource_collection_->SetClient(this); |
776 } | 770 } |
777 if (!frame_provider_ || | 771 if (!frame_provider_ || |
778 texture_size_in_layer_ != frame_provider_->frame_size()) { | 772 texture_size_in_layer_ != frame_provider_->frame_size()) { |
779 if (are_layers_attached_) | 773 RemoveLayers(); |
780 RemoveLayers(); | |
781 frame_provider_ = new cc::DelegatedFrameProvider( | 774 frame_provider_ = new cc::DelegatedFrameProvider( |
782 resource_collection_.get(), frame_data.Pass()); | 775 resource_collection_.get(), frame_data.Pass()); |
783 delegated_renderer_layer_ = | 776 delegated_renderer_layer_ = |
784 cc::DelegatedRendererLayer::Create(frame_provider_); | 777 cc::DelegatedRendererLayer::Create(frame_provider_); |
785 layer_ = delegated_renderer_layer_; | 778 layer_ = delegated_renderer_layer_; |
786 if (are_layers_attached_) | 779 AttachLayers(); |
787 AttachLayers(); | |
788 } else { | 780 } else { |
789 frame_provider_->SetFrameData(frame_data.Pass()); | 781 frame_provider_->SetFrameData(frame_data.Pass()); |
790 } | 782 } |
791 } | 783 } |
792 | 784 |
793 if (delegated_renderer_layer_.get()) { | 785 if (delegated_renderer_layer_.get()) { |
794 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); | 786 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); |
795 delegated_renderer_layer_->SetIsDrawable(true); | 787 delegated_renderer_layer_->SetIsDrawable(true); |
796 delegated_renderer_layer_->SetContentsOpaque(true); | 788 delegated_renderer_layer_->SetContentsOpaque(true); |
797 delegated_renderer_layer_->SetBounds(content_size_in_layer_); | 789 delegated_renderer_layer_->SetBounds(content_size_in_layer_); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 | 828 |
837 DCHECK(frame->delegated_frame_data); | 829 DCHECK(frame->delegated_frame_data); |
838 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); | 830 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
839 | 831 |
840 cc::RenderPass* root_pass = | 832 cc::RenderPass* root_pass = |
841 frame->delegated_frame_data->render_pass_list.back(); | 833 frame->delegated_frame_data->render_pass_list.back(); |
842 texture_size_in_layer_ = root_pass->output_rect.size(); | 834 texture_size_in_layer_ = root_pass->output_rect.size(); |
843 ComputeContentsSize(frame->metadata); | 835 ComputeContentsSize(frame->metadata); |
844 | 836 |
845 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); | 837 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
| 838 frame_evictor_->SwappedFrame(!host_->is_hidden()); |
846 return; | 839 return; |
847 } | 840 } |
848 | 841 |
849 DCHECK(!UsingDelegatedRenderer()); | 842 DCHECK(!UsingDelegatedRenderer()); |
850 | 843 |
851 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) | 844 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) |
852 return; | 845 return; |
853 | 846 |
854 if (output_surface_id != last_output_surface_id_) { | 847 if (output_surface_id != last_output_surface_id_) { |
855 current_mailbox_ = gpu::Mailbox(); | 848 current_mailbox_ = gpu::Mailbox(); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 | 981 |
989 void RenderWidgetHostViewAndroid::AttachLayers() { | 982 void RenderWidgetHostViewAndroid::AttachLayers() { |
990 if (!content_view_core_) | 983 if (!content_view_core_) |
991 return; | 984 return; |
992 if (!layer_.get()) | 985 if (!layer_.get()) |
993 return; | 986 return; |
994 | 987 |
995 content_view_core_->AttachLayer(layer_); | 988 content_view_core_->AttachLayer(layer_); |
996 if (overscroll_effect_enabled_) | 989 if (overscroll_effect_enabled_) |
997 overscroll_effect_->Enable(); | 990 overscroll_effect_->Enable(); |
| 991 layer_->SetHideLayerAndSubtree(!is_showing_); |
998 } | 992 } |
999 | 993 |
1000 void RenderWidgetHostViewAndroid::RemoveLayers() { | 994 void RenderWidgetHostViewAndroid::RemoveLayers() { |
1001 if (!content_view_core_) | 995 if (!content_view_core_) |
1002 return; | 996 return; |
1003 if (!layer_.get()) | 997 if (!layer_.get()) |
1004 return; | 998 return; |
1005 | 999 |
1006 content_view_core_->RemoveLayer(layer_); | 1000 content_view_core_->RemoveLayer(layer_); |
1007 overscroll_effect_->Disable(); | 1001 overscroll_effect_->Disable(); |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1319 (offset.y() + clipped_content.height()) * uv_scale.y())); | 1313 (offset.y() + clipped_content.height()) * uv_scale.y())); |
1320 } | 1314 } |
1321 | 1315 |
1322 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1316 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1323 return cached_background_color_; | 1317 return cached_background_color_; |
1324 } | 1318 } |
1325 | 1319 |
1326 void RenderWidgetHostViewAndroid::OnOverscrolled( | 1320 void RenderWidgetHostViewAndroid::OnOverscrolled( |
1327 gfx::Vector2dF accumulated_overscroll, | 1321 gfx::Vector2dF accumulated_overscroll, |
1328 gfx::Vector2dF current_fling_velocity) { | 1322 gfx::Vector2dF current_fling_velocity) { |
1329 if (!content_view_core_ || !are_layers_attached_) | 1323 if (!content_view_core_ || !layer_ || !is_showing_) |
1330 return; | 1324 return; |
1331 | 1325 |
1332 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), | 1326 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), |
1333 base::TimeTicks::Now(), | 1327 base::TimeTicks::Now(), |
1334 accumulated_overscroll, | 1328 accumulated_overscroll, |
1335 current_fling_velocity)) { | 1329 current_fling_velocity)) { |
1336 content_view_core_->SetNeedsAnimate(); | 1330 content_view_core_->SetNeedsAnimate(); |
1337 } | 1331 } |
1338 } | 1332 } |
1339 | 1333 |
1340 void RenderWidgetHostViewAndroid::DidStopFlinging() { | 1334 void RenderWidgetHostViewAndroid::DidStopFlinging() { |
1341 if (content_view_core_) | 1335 if (content_view_core_) |
1342 content_view_core_->DidStopFlinging(); | 1336 content_view_core_->DidStopFlinging(); |
1343 } | 1337 } |
1344 | 1338 |
1345 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1339 void RenderWidgetHostViewAndroid::SetContentViewCore( |
1346 ContentViewCoreImpl* content_view_core) { | 1340 ContentViewCoreImpl* content_view_core) { |
1347 RunAckCallbacks(); | 1341 RunAckCallbacks(); |
1348 | 1342 |
1349 if (are_layers_attached_) | 1343 RemoveLayers(); |
1350 RemoveLayers(); | |
1351 | |
1352 if (content_view_core_ && !using_synchronous_compositor_) | 1344 if (content_view_core_ && !using_synchronous_compositor_) |
1353 content_view_core_->GetWindowAndroid()->RemoveObserver(this); | 1345 content_view_core_->GetWindowAndroid()->RemoveObserver(this); |
1354 | 1346 |
1355 content_view_core_ = content_view_core; | 1347 content_view_core_ = content_view_core; |
1356 | 1348 |
1357 if (GetBrowserAccessibilityManager()) { | 1349 if (GetBrowserAccessibilityManager()) { |
1358 base::android::ScopedJavaLocalRef<jobject> obj; | 1350 base::android::ScopedJavaLocalRef<jobject> obj; |
1359 if (content_view_core_) | 1351 if (content_view_core_) |
1360 obj = content_view_core_->GetJavaObject(); | 1352 obj = content_view_core_->GetJavaObject(); |
1361 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> | 1353 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> |
1362 SetContentViewCore(obj); | 1354 SetContentViewCore(obj); |
1363 } | 1355 } |
1364 | 1356 |
1365 if (are_layers_attached_) { | 1357 AttachLayers(); |
1366 AttachLayers(); | 1358 if (content_view_core_ && !using_synchronous_compositor_) |
1367 if (content_view_core_ && !using_synchronous_compositor_) | 1359 content_view_core_->GetWindowAndroid()->AddObserver(this); |
1368 content_view_core_->GetWindowAndroid()->AddObserver(this); | |
1369 } | |
1370 | 1360 |
1371 // Ensure ContentsViewCore is aware of the current touch handling state, eg. | 1361 // Ensure ContentsViewCore is aware of the current touch handling state, eg. |
1372 // in case we've already been running JS for the page as part of preload. | 1362 // in case we've already been running JS for the page as part of preload. |
1373 if (content_view_core_ && host_) | 1363 if (content_view_core_ && host_) |
1374 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler()); | 1364 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler()); |
1375 } | 1365 } |
1376 | 1366 |
1377 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1367 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
1378 while (!ack_callbacks_.empty()) { | 1368 while (!ack_callbacks_.empty()) { |
1379 ack_callbacks_.front().Run(); | 1369 ack_callbacks_.front().Run(); |
(...skipping 26 matching lines...) Expand all Loading... |
1406 RunAckCallbacks(); | 1396 RunAckCallbacks(); |
1407 } | 1397 } |
1408 | 1398 |
1409 // static | 1399 // static |
1410 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 1400 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
1411 const gfx::Size& dst_size_in_pixel, | 1401 const gfx::Size& dst_size_in_pixel, |
1412 const SkBitmap::Config bitmap_config, | 1402 const SkBitmap::Config bitmap_config, |
1413 const base::TimeTicks& start_time, | 1403 const base::TimeTicks& start_time, |
1414 const base::Callback<void(bool, const SkBitmap&)>& callback, | 1404 const base::Callback<void(bool, const SkBitmap&)>& callback, |
1415 scoped_ptr<cc::CopyOutputResult> result) { | 1405 scoped_ptr<cc::CopyOutputResult> result) { |
1416 DCHECK(result->HasTexture()); | |
1417 base::ScopedClosureRunner scoped_callback_runner( | 1406 base::ScopedClosureRunner scoped_callback_runner( |
1418 base::Bind(callback, false, SkBitmap())); | 1407 base::Bind(callback, false, SkBitmap())); |
1419 | 1408 |
1420 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) | 1409 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |
1421 return; | 1410 return; |
1422 | 1411 |
1423 scoped_ptr<SkBitmap> bitmap(new SkBitmap); | 1412 scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
1424 bitmap->setConfig(bitmap_config, | 1413 bitmap->setConfig(bitmap_config, |
1425 dst_size_in_pixel.width(), | 1414 dst_size_in_pixel.width(), |
1426 dst_size_in_pixel.height(), | 1415 dst_size_in_pixel.height(), |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1510 // RenderWidgetHostView, public: | 1499 // RenderWidgetHostView, public: |
1511 | 1500 |
1512 // static | 1501 // static |
1513 RenderWidgetHostView* | 1502 RenderWidgetHostView* |
1514 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1503 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
1515 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1504 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
1516 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1505 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
1517 } | 1506 } |
1518 | 1507 |
1519 } // namespace content | 1508 } // namespace content |
OLD | NEW |