Chromium Code Reviews| 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 view->ResetClipping(); |
|
no sievers
2014/01/28 20:47:21
Not sure how this is used by the app, it's really
powei
2014/01/29 13:53:17
Done. Not affecting delegated rendering so remove
| |
| 276 } | 276 CopyFromCompositingSurface(src_subrect, dst_size, callback, false); |
| 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 18 matching lines...) Expand all Loading... | |
| 315 | 305 |
| 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; |
|
no sievers
2014/01/28 20:47:21
nit: Can we just check for !layer_ here.
If the l
powei
2014/01/29 13:53:17
Done
| |
| 316 if (!layer_ || !layer_->parent()) | |
| 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 AttachLayers(); |
|
no sievers
2014/01/28 20:47:21
Can this just call layer_->SetHideLayerAndSubtree(
powei
2014/01/29 13:53:17
Done.
| |
| 395 | 388 |
| 396 frame_evictor_->SetVisible(true); | 389 frame_evictor_->SetVisible(true); |
| 397 WasShown(); | 390 WasShown(); |
| 398 } | 391 } |
| 399 | 392 |
| 400 void RenderWidgetHostViewAndroid::Hide() { | 393 void RenderWidgetHostViewAndroid::Hide() { |
| 401 if (!are_layers_attached_) | 394 if (!is_showing_) |
| 402 return; | 395 return; |
| 403 | 396 |
| 404 are_layers_attached_ = false; | 397 is_showing_ = false; |
| 405 RemoveLayers(); | 398 AttachLayers(); |
|
no sievers
2014/01/28 20:47:21
Can this just call layer_->SetHideLayerAndSubtree(
powei
2014/01/29 13:53:17
Done.
| |
| 406 | 399 |
| 407 frame_evictor_->SetVisible(false); | 400 frame_evictor_->SetVisible(false); |
| 408 WasHidden(); | 401 WasHidden(); |
| 409 } | 402 } |
| 410 | 403 |
| 411 bool RenderWidgetHostViewAndroid::IsShowing() { | 404 bool RenderWidgetHostViewAndroid::IsShowing() { |
| 412 // ContentViewCoreImpl represents the native side of the Java | 405 // ContentViewCoreImpl represents the native side of the Java |
| 413 // ContentViewCore. It being NULL means that it is not attached | 406 // ContentViewCore. It being NULL means that it is not attached |
| 414 // to the View system yet, so we treat this RWHVA as hidden. | 407 // to the View system yet, so we treat this RWHVA as hidden. |
| 415 return are_layers_attached_ && content_view_core_; | 408 return is_showing_ && content_view_core_; |
| 416 } | 409 } |
| 417 | 410 |
| 418 void RenderWidgetHostViewAndroid::LockResources() { | 411 void RenderWidgetHostViewAndroid::LockResources() { |
| 419 DCHECK(HasValidFrame()); | 412 DCHECK(HasValidFrame()); |
| 420 DCHECK(host_); | 413 DCHECK(host_); |
| 421 DCHECK(!host_->is_hidden()); | 414 DCHECK(!host_->is_hidden()); |
| 422 frame_evictor_->LockFrame(); | 415 frame_evictor_->LockFrame(); |
| 423 } | 416 } |
| 424 | 417 |
| 425 void RenderWidgetHostViewAndroid::UnlockResources() { | 418 void RenderWidgetHostViewAndroid::UnlockResources() { |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 683 start_time, | 676 start_time, |
| 684 callback)); | 677 callback)); |
| 685 } else { | 678 } else { |
| 686 request = cc::CopyOutputRequest::CreateRequest(base::Bind( | 679 request = cc::CopyOutputRequest::CreateRequest(base::Bind( |
| 687 &RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult, | 680 &RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult, |
| 688 dst_size_in_pixel, | 681 dst_size_in_pixel, |
| 689 bitmap_config, | 682 bitmap_config, |
| 690 start_time, | 683 start_time, |
| 691 callback)); | 684 callback)); |
| 692 } | 685 } |
| 686 | |
| 693 request->set_area(src_subrect_in_pixel); | 687 request->set_area(src_subrect_in_pixel); |
| 694 layer_->RequestCopyOfOutput(request.Pass()); | 688 layer_->RequestCopyOfOutput(request.Pass()); |
| 695 } | 689 } |
| 696 | 690 |
| 697 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( | 691 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( |
| 698 const gfx::Rect& src_subrect, | 692 const gfx::Rect& src_subrect, |
| 699 const scoped_refptr<media::VideoFrame>& target, | 693 const scoped_refptr<media::VideoFrame>& target, |
| 700 const base::Callback<void(bool)>& callback) { | 694 const base::Callback<void(bool)>& callback) { |
| 701 NOTIMPLEMENTED(); | 695 NOTIMPLEMENTED(); |
| 702 callback.Run(false); | 696 callback.Run(false); |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 732 output_surface_id, | 726 output_surface_id, |
| 733 host_->GetProcess()->GetID(), | 727 host_->GetProcess()->GetID(), |
| 734 ack); | 728 ack); |
| 735 } | 729 } |
| 736 | 730 |
| 737 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { | 731 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { |
| 738 // TODO(danakj): If no ack is pending, collect and send resources now. | 732 // TODO(danakj): If no ack is pending, collect and send resources now. |
| 739 } | 733 } |
| 740 | 734 |
| 741 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { | 735 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { |
| 742 if (are_layers_attached_) | 736 RemoveLayers(); |
| 743 RemoveLayers(); | |
| 744 frame_provider_ = NULL; | 737 frame_provider_ = NULL; |
| 745 delegated_renderer_layer_ = NULL; | 738 delegated_renderer_layer_ = NULL; |
| 746 layer_ = NULL; | 739 layer_ = NULL; |
| 747 } | 740 } |
| 748 | 741 |
| 749 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( | 742 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
| 750 uint32 output_surface_id, | 743 uint32 output_surface_id, |
| 751 scoped_ptr<cc::DelegatedFrameData> frame_data) { | 744 scoped_ptr<cc::DelegatedFrameData> frame_data) { |
| 752 bool has_content = !texture_size_in_layer_.IsEmpty(); | 745 bool has_content = !texture_size_in_layer_.IsEmpty(); |
| 753 | 746 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 769 | 762 |
| 770 if (!has_content) { | 763 if (!has_content) { |
| 771 DestroyDelegatedContent(); | 764 DestroyDelegatedContent(); |
| 772 } else { | 765 } else { |
| 773 if (!resource_collection_.get()) { | 766 if (!resource_collection_.get()) { |
| 774 resource_collection_ = new cc::DelegatedFrameResourceCollection; | 767 resource_collection_ = new cc::DelegatedFrameResourceCollection; |
| 775 resource_collection_->SetClient(this); | 768 resource_collection_->SetClient(this); |
| 776 } | 769 } |
| 777 if (!frame_provider_ || | 770 if (!frame_provider_ || |
| 778 texture_size_in_layer_ != frame_provider_->frame_size()) { | 771 texture_size_in_layer_ != frame_provider_->frame_size()) { |
| 779 if (are_layers_attached_) | 772 RemoveLayers(); |
| 780 RemoveLayers(); | |
| 781 frame_provider_ = new cc::DelegatedFrameProvider( | 773 frame_provider_ = new cc::DelegatedFrameProvider( |
| 782 resource_collection_.get(), frame_data.Pass()); | 774 resource_collection_.get(), frame_data.Pass()); |
| 783 delegated_renderer_layer_ = | 775 delegated_renderer_layer_ = |
| 784 cc::DelegatedRendererLayer::Create(frame_provider_); | 776 cc::DelegatedRendererLayer::Create(frame_provider_); |
| 785 layer_ = delegated_renderer_layer_; | 777 layer_ = delegated_renderer_layer_; |
| 786 if (are_layers_attached_) | 778 AttachLayers(); |
| 787 AttachLayers(); | |
| 788 } else { | 779 } else { |
| 789 frame_provider_->SetFrameData(frame_data.Pass()); | 780 frame_provider_->SetFrameData(frame_data.Pass()); |
| 790 } | 781 } |
| 791 } | 782 } |
| 792 | 783 |
| 793 if (delegated_renderer_layer_.get()) { | 784 if (delegated_renderer_layer_.get()) { |
| 794 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); | 785 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); |
| 795 delegated_renderer_layer_->SetIsDrawable(true); | 786 delegated_renderer_layer_->SetIsDrawable(true); |
| 796 delegated_renderer_layer_->SetContentsOpaque(true); | 787 delegated_renderer_layer_->SetContentsOpaque(true); |
| 797 delegated_renderer_layer_->SetBounds(content_size_in_layer_); | 788 delegated_renderer_layer_->SetBounds(content_size_in_layer_); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 836 | 827 |
| 837 DCHECK(frame->delegated_frame_data); | 828 DCHECK(frame->delegated_frame_data); |
| 838 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); | 829 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
| 839 | 830 |
| 840 cc::RenderPass* root_pass = | 831 cc::RenderPass* root_pass = |
| 841 frame->delegated_frame_data->render_pass_list.back(); | 832 frame->delegated_frame_data->render_pass_list.back(); |
| 842 texture_size_in_layer_ = root_pass->output_rect.size(); | 833 texture_size_in_layer_ = root_pass->output_rect.size(); |
| 843 ComputeContentsSize(frame->metadata); | 834 ComputeContentsSize(frame->metadata); |
| 844 | 835 |
| 845 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); | 836 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
| 837 frame_evictor_->SwappedFrame(!host_->is_hidden()); | |
| 846 return; | 838 return; |
| 847 } | 839 } |
| 848 | 840 |
| 849 DCHECK(!UsingDelegatedRenderer()); | 841 DCHECK(!UsingDelegatedRenderer()); |
| 850 | 842 |
| 851 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) | 843 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) |
| 852 return; | 844 return; |
| 853 | 845 |
| 854 if (output_surface_id != last_output_surface_id_) { | 846 if (output_surface_id != last_output_surface_id_) { |
| 855 current_mailbox_ = gpu::Mailbox(); | 847 current_mailbox_ = gpu::Mailbox(); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 988 | 980 |
| 989 void RenderWidgetHostViewAndroid::AttachLayers() { | 981 void RenderWidgetHostViewAndroid::AttachLayers() { |
| 990 if (!content_view_core_) | 982 if (!content_view_core_) |
| 991 return; | 983 return; |
| 992 if (!layer_.get()) | 984 if (!layer_.get()) |
| 993 return; | 985 return; |
| 994 | 986 |
| 995 content_view_core_->AttachLayer(layer_); | 987 content_view_core_->AttachLayer(layer_); |
| 996 if (overscroll_effect_enabled_) | 988 if (overscroll_effect_enabled_) |
| 997 overscroll_effect_->Enable(); | 989 overscroll_effect_->Enable(); |
| 990 layer_->SetHideLayerAndSubtree(!is_showing_); | |
| 998 } | 991 } |
| 999 | 992 |
| 1000 void RenderWidgetHostViewAndroid::RemoveLayers() { | 993 void RenderWidgetHostViewAndroid::RemoveLayers() { |
| 1001 if (!content_view_core_) | 994 if (!content_view_core_) |
| 1002 return; | 995 return; |
| 1003 if (!layer_.get()) | 996 if (!layer_.get()) |
| 1004 return; | 997 return; |
| 1005 | 998 |
| 1006 content_view_core_->RemoveLayer(layer_); | 999 content_view_core_->RemoveLayer(layer_); |
| 1007 overscroll_effect_->Disable(); | 1000 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())); | 1312 (offset.y() + clipped_content.height()) * uv_scale.y())); |
| 1320 } | 1313 } |
| 1321 | 1314 |
| 1322 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1315 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
| 1323 return cached_background_color_; | 1316 return cached_background_color_; |
| 1324 } | 1317 } |
| 1325 | 1318 |
| 1326 void RenderWidgetHostViewAndroid::OnOverscrolled( | 1319 void RenderWidgetHostViewAndroid::OnOverscrolled( |
| 1327 gfx::Vector2dF accumulated_overscroll, | 1320 gfx::Vector2dF accumulated_overscroll, |
| 1328 gfx::Vector2dF current_fling_velocity) { | 1321 gfx::Vector2dF current_fling_velocity) { |
| 1329 if (!content_view_core_ || !are_layers_attached_) | 1322 if (!content_view_core_ || !layer_ || !is_showing_) |
| 1330 return; | 1323 return; |
| 1331 | 1324 |
| 1332 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), | 1325 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), |
| 1333 base::TimeTicks::Now(), | 1326 base::TimeTicks::Now(), |
| 1334 accumulated_overscroll, | 1327 accumulated_overscroll, |
| 1335 current_fling_velocity)) { | 1328 current_fling_velocity)) { |
| 1336 content_view_core_->SetNeedsAnimate(); | 1329 content_view_core_->SetNeedsAnimate(); |
| 1337 } | 1330 } |
| 1338 } | 1331 } |
| 1339 | 1332 |
| 1340 void RenderWidgetHostViewAndroid::DidStopFlinging() { | 1333 void RenderWidgetHostViewAndroid::DidStopFlinging() { |
| 1341 if (content_view_core_) | 1334 if (content_view_core_) |
| 1342 content_view_core_->DidStopFlinging(); | 1335 content_view_core_->DidStopFlinging(); |
| 1343 } | 1336 } |
| 1344 | 1337 |
| 1345 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1338 void RenderWidgetHostViewAndroid::SetContentViewCore( |
| 1346 ContentViewCoreImpl* content_view_core) { | 1339 ContentViewCoreImpl* content_view_core) { |
| 1347 RunAckCallbacks(); | 1340 RunAckCallbacks(); |
| 1348 | 1341 |
| 1349 if (are_layers_attached_) | 1342 RemoveLayers(); |
| 1350 RemoveLayers(); | |
| 1351 | |
| 1352 if (content_view_core_ && !using_synchronous_compositor_) | 1343 if (content_view_core_ && !using_synchronous_compositor_) |
| 1353 content_view_core_->GetWindowAndroid()->RemoveObserver(this); | 1344 content_view_core_->GetWindowAndroid()->RemoveObserver(this); |
| 1354 | 1345 |
| 1355 content_view_core_ = content_view_core; | 1346 content_view_core_ = content_view_core; |
| 1356 | 1347 |
| 1357 if (GetBrowserAccessibilityManager()) { | 1348 if (GetBrowserAccessibilityManager()) { |
| 1358 base::android::ScopedJavaLocalRef<jobject> obj; | 1349 base::android::ScopedJavaLocalRef<jobject> obj; |
| 1359 if (content_view_core_) | 1350 if (content_view_core_) |
| 1360 obj = content_view_core_->GetJavaObject(); | 1351 obj = content_view_core_->GetJavaObject(); |
| 1361 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> | 1352 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> |
| 1362 SetContentViewCore(obj); | 1353 SetContentViewCore(obj); |
| 1363 } | 1354 } |
| 1364 | 1355 |
| 1365 if (are_layers_attached_) { | 1356 AttachLayers(); |
| 1366 AttachLayers(); | 1357 if (content_view_core_ && !using_synchronous_compositor_) |
| 1367 if (content_view_core_ && !using_synchronous_compositor_) | 1358 content_view_core_->GetWindowAndroid()->AddObserver(this); |
| 1368 content_view_core_->GetWindowAndroid()->AddObserver(this); | |
| 1369 } | |
| 1370 | 1359 |
| 1371 // Ensure ContentsViewCore is aware of the current touch handling state, eg. | 1360 // 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. | 1361 // in case we've already been running JS for the page as part of preload. |
| 1373 if (content_view_core_ && host_) | 1362 if (content_view_core_ && host_) |
| 1374 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler()); | 1363 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler()); |
| 1375 } | 1364 } |
| 1376 | 1365 |
| 1377 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1366 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
| 1378 while (!ack_callbacks_.empty()) { | 1367 while (!ack_callbacks_.empty()) { |
| 1379 ack_callbacks_.front().Run(); | 1368 ack_callbacks_.front().Run(); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 1406 RunAckCallbacks(); | 1395 RunAckCallbacks(); |
| 1407 } | 1396 } |
| 1408 | 1397 |
| 1409 // static | 1398 // static |
| 1410 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 1399 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
| 1411 const gfx::Size& dst_size_in_pixel, | 1400 const gfx::Size& dst_size_in_pixel, |
| 1412 const SkBitmap::Config bitmap_config, | 1401 const SkBitmap::Config bitmap_config, |
| 1413 const base::TimeTicks& start_time, | 1402 const base::TimeTicks& start_time, |
| 1414 const base::Callback<void(bool, const SkBitmap&)>& callback, | 1403 const base::Callback<void(bool, const SkBitmap&)>& callback, |
| 1415 scoped_ptr<cc::CopyOutputResult> result) { | 1404 scoped_ptr<cc::CopyOutputResult> result) { |
| 1416 DCHECK(result->HasTexture()); | |
|
no sievers
2014/01/28 20:47:21
just wondering: when is this failing?
powei
2014/01/29 13:53:17
Don't have a consistent repo, but I do hit this so
| |
| 1417 base::ScopedClosureRunner scoped_callback_runner( | 1405 base::ScopedClosureRunner scoped_callback_runner( |
| 1418 base::Bind(callback, false, SkBitmap())); | 1406 base::Bind(callback, false, SkBitmap())); |
| 1419 | 1407 |
| 1420 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) | 1408 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |
| 1421 return; | 1409 return; |
| 1422 | 1410 |
| 1423 scoped_ptr<SkBitmap> bitmap(new SkBitmap); | 1411 scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
| 1424 bitmap->setConfig(bitmap_config, | 1412 bitmap->setConfig(bitmap_config, |
| 1425 dst_size_in_pixel.width(), | 1413 dst_size_in_pixel.width(), |
| 1426 dst_size_in_pixel.height(), | 1414 dst_size_in_pixel.height(), |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1510 // RenderWidgetHostView, public: | 1498 // RenderWidgetHostView, public: |
| 1511 | 1499 |
| 1512 // static | 1500 // static |
| 1513 RenderWidgetHostView* | 1501 RenderWidgetHostView* |
| 1514 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1502 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1515 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1503 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1516 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1504 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1517 } | 1505 } |
| 1518 | 1506 |
| 1519 } // namespace content | 1507 } // namespace content |
| OLD | NEW |