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&)>& result_callback) { |
266 gfx::ScaleSize(texture_size_in_layer_, scale))); | 266 if (!IsSurfaceAvailableForCopy()) { |
267 | 267 result_callback.Run(false, SkBitmap()); |
268 if (!CompositorImpl::IsInitialized() || | 268 return; |
269 texture_id_in_layer_ == 0 || | |
270 texture_size_in_layer_.IsEmpty() || | |
271 size.IsEmpty()) { | |
272 if (out_size) | |
273 out_size->SetSize(0, 0); | |
274 | |
275 return 0; | |
276 } | 269 } |
277 | 270 |
278 if (out_size) | 271 gfx::Size bounds = layer_->bounds(); |
279 *out_size = size; | 272 gfx::Rect src_subrect(bounds); |
280 | 273 const gfx::Display& display = |
281 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); | 274 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
282 return helper->CopyAndScaleTexture(texture_id_in_layer_, | 275 float device_scale_factor = display.device_scale_factor(); |
283 texture_size_in_layer_, | 276 DCHECK_GT(device_scale_factor, 0); |
284 size, | 277 gfx::Size dst_size( |
285 true, | 278 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); |
286 GLHelper::SCALER_QUALITY_FAST); | 279 *out_size = dst_size; |
| 280 CopyFromCompositingSurface( |
| 281 src_subrect, dst_size, result_callback, SkBitmap::kARGB_8888_Config); |
287 } | 282 } |
288 | 283 |
289 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { | 284 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { |
290 if (!CompositorImpl::IsInitialized() || | 285 if (!CompositorImpl::IsInitialized() || |
291 texture_id_in_layer_ == 0 || | 286 texture_id_in_layer_ == 0 || |
292 texture_size_in_layer_.IsEmpty()) | 287 texture_size_in_layer_.IsEmpty()) |
293 return false; | 288 return false; |
294 | 289 |
295 gfx::JavaBitmap bitmap(jbitmap); | 290 gfx::JavaBitmap bitmap(jbitmap); |
296 | 291 |
(...skipping 19 matching lines...) Expand all Loading... |
316 gpu::gles2::GLES2Interface* gl = | 311 gpu::gles2::GLES2Interface* gl = |
317 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); | 312 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); |
318 gl->DeleteTextures(1, &texture); | 313 gl->DeleteTextures(1, &texture); |
319 | 314 |
320 return true; | 315 return true; |
321 } | 316 } |
322 | 317 |
323 bool RenderWidgetHostViewAndroid::HasValidFrame() const { | 318 bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
324 if (!content_view_core_) | 319 if (!content_view_core_) |
325 return false; | 320 return false; |
| 321 if (!layer_) |
| 322 return false; |
| 323 |
326 if (texture_size_in_layer_.IsEmpty()) | 324 if (texture_size_in_layer_.IsEmpty()) |
327 return false; | 325 return false; |
328 | 326 |
329 if (UsingDelegatedRenderer()) { | 327 if (UsingDelegatedRenderer()) { |
330 if (!delegated_renderer_layer_.get()) | 328 if (!delegated_renderer_layer_.get()) |
331 return false; | 329 return false; |
332 } else { | 330 } else { |
333 if (texture_id_in_layer_ == 0) | 331 if (texture_id_in_layer_ == 0) |
334 return false; | 332 return false; |
335 } | 333 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 return false; // ContentViewCore not created yet. | 378 return false; // ContentViewCore not created yet. |
381 | 379 |
382 return content_view_core_->HasFocus(); | 380 return content_view_core_->HasFocus(); |
383 } | 381 } |
384 | 382 |
385 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 383 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
386 return HasValidFrame(); | 384 return HasValidFrame(); |
387 } | 385 } |
388 | 386 |
389 void RenderWidgetHostViewAndroid::Show() { | 387 void RenderWidgetHostViewAndroid::Show() { |
390 if (are_layers_attached_) | 388 if (is_showing_) |
391 return; | 389 return; |
392 | 390 |
393 are_layers_attached_ = true; | 391 is_showing_ = true; |
394 AttachLayers(); | 392 if (layer_) |
| 393 layer_->SetHideLayerAndSubtree(false); |
395 | 394 |
396 frame_evictor_->SetVisible(true); | 395 frame_evictor_->SetVisible(true); |
397 WasShown(); | 396 WasShown(); |
398 } | 397 } |
399 | 398 |
400 void RenderWidgetHostViewAndroid::Hide() { | 399 void RenderWidgetHostViewAndroid::Hide() { |
401 if (!are_layers_attached_) | 400 if (!is_showing_) |
402 return; | 401 return; |
403 | 402 |
404 are_layers_attached_ = false; | 403 is_showing_ = false; |
405 RemoveLayers(); | 404 if (layer_) |
| 405 layer_->SetHideLayerAndSubtree(true); |
406 | 406 |
407 frame_evictor_->SetVisible(false); | 407 frame_evictor_->SetVisible(false); |
408 WasHidden(); | 408 WasHidden(); |
409 } | 409 } |
410 | 410 |
411 bool RenderWidgetHostViewAndroid::IsShowing() { | 411 bool RenderWidgetHostViewAndroid::IsShowing() { |
412 // ContentViewCoreImpl represents the native side of the Java | 412 // ContentViewCoreImpl represents the native side of the Java |
413 // ContentViewCore. It being NULL means that it is not attached | 413 // ContentViewCore. It being NULL means that it is not attached |
414 // to the View system yet, so we treat this RWHVA as hidden. | 414 // to the View system yet, so we treat this RWHVA as hidden. |
415 return are_layers_attached_ && content_view_core_; | 415 return is_showing_ && content_view_core_; |
416 } | 416 } |
417 | 417 |
418 void RenderWidgetHostViewAndroid::LockResources() { | 418 void RenderWidgetHostViewAndroid::LockResources() { |
419 DCHECK(HasValidFrame()); | 419 DCHECK(HasValidFrame()); |
420 DCHECK(host_); | 420 DCHECK(host_); |
421 DCHECK(!host_->is_hidden()); | 421 DCHECK(!host_->is_hidden()); |
422 frame_evictor_->LockFrame(); | 422 frame_evictor_->LockFrame(); |
423 } | 423 } |
424 | 424 |
425 void RenderWidgetHostViewAndroid::UnlockResources() { | 425 void RenderWidgetHostViewAndroid::UnlockResources() { |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 bool check_rgb565_support = gl_helper->CanUseRgb565Readback(); | 654 bool check_rgb565_support = gl_helper->CanUseRgb565Readback(); |
655 if ((bitmap_config == SkBitmap::kRGB_565_Config) && | 655 if ((bitmap_config == SkBitmap::kRGB_565_Config) && |
656 !check_rgb565_support) { | 656 !check_rgb565_support) { |
657 LOG(ERROR) << "Readbackformat rgb565 not supported"; | 657 LOG(ERROR) << "Readbackformat rgb565 not supported"; |
658 callback.Run(false, SkBitmap()); | 658 callback.Run(false, SkBitmap()); |
659 return; | 659 return; |
660 } | 660 } |
661 const gfx::Display& display = | 661 const gfx::Display& display = |
662 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 662 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
663 float device_scale_factor = display.device_scale_factor(); | 663 float device_scale_factor = display.device_scale_factor(); |
664 | 664 gfx::Size dst_size_in_pixel = |
665 DCHECK_EQ(device_scale_factor, | 665 ConvertRectToPixel(device_scale_factor, gfx::Rect(dst_size)).size(); |
666 ui::GetImageScale(GetScaleFactorForView(this))); | |
667 | |
668 const gfx::Size& dst_size_in_pixel = ConvertViewSizeToPixel(this, dst_size); | |
669 gfx::Rect src_subrect_in_pixel = | 666 gfx::Rect src_subrect_in_pixel = |
670 ConvertRectToPixel(device_scale_factor, src_subrect); | 667 ConvertRectToPixel(device_scale_factor, src_subrect); |
671 | 668 |
672 if (using_synchronous_compositor_) { | 669 if (using_synchronous_compositor_) { |
673 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback); | 670 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback); |
674 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", | 671 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", |
675 base::TimeTicks::Now() - start_time); | 672 base::TimeTicks::Now() - start_time); |
676 return; | 673 return; |
677 } | 674 } |
678 scoped_ptr<cc::CopyOutputRequest> request; | 675 scoped_ptr<cc::CopyOutputRequest> request; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
749 ack); | 746 ack); |
750 } | 747 } |
751 | 748 |
752 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { | 749 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { |
753 if (ack_callbacks_.size()) | 750 if (ack_callbacks_.size()) |
754 return; | 751 return; |
755 SendReturnedDelegatedResources(last_output_surface_id_); | 752 SendReturnedDelegatedResources(last_output_surface_id_); |
756 } | 753 } |
757 | 754 |
758 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { | 755 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { |
759 if (are_layers_attached_) | 756 RemoveLayers(); |
760 RemoveLayers(); | |
761 frame_provider_ = NULL; | 757 frame_provider_ = NULL; |
762 delegated_renderer_layer_ = NULL; | 758 delegated_renderer_layer_ = NULL; |
763 layer_ = NULL; | 759 layer_ = NULL; |
764 } | 760 } |
765 | 761 |
766 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( | 762 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
767 uint32 output_surface_id, | 763 uint32 output_surface_id, |
768 scoped_ptr<cc::DelegatedFrameData> frame_data) { | 764 scoped_ptr<cc::DelegatedFrameData> frame_data) { |
769 bool has_content = !texture_size_in_layer_.IsEmpty(); | 765 bool has_content = !texture_size_in_layer_.IsEmpty(); |
770 | 766 |
(...skipping 14 matching lines...) Expand all Loading... |
785 | 781 |
786 if (!has_content) { | 782 if (!has_content) { |
787 DestroyDelegatedContent(); | 783 DestroyDelegatedContent(); |
788 } else { | 784 } else { |
789 if (!resource_collection_.get()) { | 785 if (!resource_collection_.get()) { |
790 resource_collection_ = new cc::DelegatedFrameResourceCollection; | 786 resource_collection_ = new cc::DelegatedFrameResourceCollection; |
791 resource_collection_->SetClient(this); | 787 resource_collection_->SetClient(this); |
792 } | 788 } |
793 if (!frame_provider_ || | 789 if (!frame_provider_ || |
794 texture_size_in_layer_ != frame_provider_->frame_size()) { | 790 texture_size_in_layer_ != frame_provider_->frame_size()) { |
795 if (are_layers_attached_) | 791 RemoveLayers(); |
796 RemoveLayers(); | |
797 frame_provider_ = new cc::DelegatedFrameProvider( | 792 frame_provider_ = new cc::DelegatedFrameProvider( |
798 resource_collection_.get(), frame_data.Pass()); | 793 resource_collection_.get(), frame_data.Pass()); |
799 delegated_renderer_layer_ = | 794 delegated_renderer_layer_ = |
800 cc::DelegatedRendererLayer::Create(frame_provider_); | 795 cc::DelegatedRendererLayer::Create(frame_provider_); |
801 layer_ = delegated_renderer_layer_; | 796 layer_ = delegated_renderer_layer_; |
802 if (are_layers_attached_) | 797 AttachLayers(); |
803 AttachLayers(); | |
804 } else { | 798 } else { |
805 frame_provider_->SetFrameData(frame_data.Pass()); | 799 frame_provider_->SetFrameData(frame_data.Pass()); |
806 } | 800 } |
807 } | 801 } |
808 | 802 |
809 if (delegated_renderer_layer_.get()) { | 803 if (delegated_renderer_layer_.get()) { |
810 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); | 804 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); |
811 delegated_renderer_layer_->SetIsDrawable(true); | 805 delegated_renderer_layer_->SetIsDrawable(true); |
812 delegated_renderer_layer_->SetContentsOpaque(true); | 806 delegated_renderer_layer_->SetContentsOpaque(true); |
813 delegated_renderer_layer_->SetBounds(content_size_in_layer_); | 807 delegated_renderer_layer_->SetBounds(content_size_in_layer_); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 | 846 |
853 DCHECK(frame->delegated_frame_data); | 847 DCHECK(frame->delegated_frame_data); |
854 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); | 848 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
855 | 849 |
856 cc::RenderPass* root_pass = | 850 cc::RenderPass* root_pass = |
857 frame->delegated_frame_data->render_pass_list.back(); | 851 frame->delegated_frame_data->render_pass_list.back(); |
858 texture_size_in_layer_ = root_pass->output_rect.size(); | 852 texture_size_in_layer_ = root_pass->output_rect.size(); |
859 ComputeContentsSize(frame->metadata); | 853 ComputeContentsSize(frame->metadata); |
860 | 854 |
861 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); | 855 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
| 856 frame_evictor_->SwappedFrame(!host_->is_hidden()); |
862 return; | 857 return; |
863 } | 858 } |
864 | 859 |
865 DCHECK(!UsingDelegatedRenderer()); | 860 DCHECK(!UsingDelegatedRenderer()); |
866 | 861 |
867 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) | 862 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) |
868 return; | 863 return; |
869 | 864 |
870 if (output_surface_id != last_output_surface_id_) { | 865 if (output_surface_id != last_output_surface_id_) { |
871 current_mailbox_ = gpu::Mailbox(); | 866 current_mailbox_ = gpu::Mailbox(); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 | 999 |
1005 void RenderWidgetHostViewAndroid::AttachLayers() { | 1000 void RenderWidgetHostViewAndroid::AttachLayers() { |
1006 if (!content_view_core_) | 1001 if (!content_view_core_) |
1007 return; | 1002 return; |
1008 if (!layer_.get()) | 1003 if (!layer_.get()) |
1009 return; | 1004 return; |
1010 | 1005 |
1011 content_view_core_->AttachLayer(layer_); | 1006 content_view_core_->AttachLayer(layer_); |
1012 if (overscroll_effect_enabled_) | 1007 if (overscroll_effect_enabled_) |
1013 overscroll_effect_->Enable(); | 1008 overscroll_effect_->Enable(); |
| 1009 layer_->SetHideLayerAndSubtree(!is_showing_); |
1014 } | 1010 } |
1015 | 1011 |
1016 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1012 void RenderWidgetHostViewAndroid::RemoveLayers() { |
1017 if (!content_view_core_) | 1013 if (!content_view_core_) |
1018 return; | 1014 return; |
1019 if (!layer_.get()) | 1015 if (!layer_.get()) |
1020 return; | 1016 return; |
1021 | 1017 |
1022 content_view_core_->RemoveLayer(layer_); | 1018 content_view_core_->RemoveLayer(layer_); |
1023 overscroll_effect_->Disable(); | 1019 overscroll_effect_->Disable(); |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 (offset.y() + clipped_content.height()) * uv_scale.y())); | 1320 (offset.y() + clipped_content.height()) * uv_scale.y())); |
1325 } | 1321 } |
1326 | 1322 |
1327 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1323 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1328 return cached_background_color_; | 1324 return cached_background_color_; |
1329 } | 1325 } |
1330 | 1326 |
1331 void RenderWidgetHostViewAndroid::OnOverscrolled( | 1327 void RenderWidgetHostViewAndroid::OnOverscrolled( |
1332 gfx::Vector2dF accumulated_overscroll, | 1328 gfx::Vector2dF accumulated_overscroll, |
1333 gfx::Vector2dF current_fling_velocity) { | 1329 gfx::Vector2dF current_fling_velocity) { |
1334 if (!content_view_core_ || !are_layers_attached_) | 1330 if (!content_view_core_ || !layer_ || !is_showing_) |
1335 return; | 1331 return; |
1336 | 1332 |
1337 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), | 1333 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), |
1338 base::TimeTicks::Now(), | 1334 base::TimeTicks::Now(), |
1339 accumulated_overscroll, | 1335 accumulated_overscroll, |
1340 current_fling_velocity)) { | 1336 current_fling_velocity)) { |
1341 content_view_core_->SetNeedsAnimate(); | 1337 content_view_core_->SetNeedsAnimate(); |
1342 } | 1338 } |
1343 } | 1339 } |
1344 | 1340 |
1345 void RenderWidgetHostViewAndroid::DidStopFlinging() { | 1341 void RenderWidgetHostViewAndroid::DidStopFlinging() { |
1346 if (content_view_core_) | 1342 if (content_view_core_) |
1347 content_view_core_->DidStopFlinging(); | 1343 content_view_core_->DidStopFlinging(); |
1348 } | 1344 } |
1349 | 1345 |
1350 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1346 void RenderWidgetHostViewAndroid::SetContentViewCore( |
1351 ContentViewCoreImpl* content_view_core) { | 1347 ContentViewCoreImpl* content_view_core) { |
1352 RunAckCallbacks(); | 1348 RunAckCallbacks(); |
1353 | 1349 |
1354 if (are_layers_attached_) | 1350 RemoveLayers(); |
1355 RemoveLayers(); | |
1356 | |
1357 if (content_view_core_ && !using_synchronous_compositor_) | 1351 if (content_view_core_ && !using_synchronous_compositor_) |
1358 content_view_core_->GetWindowAndroid()->RemoveObserver(this); | 1352 content_view_core_->GetWindowAndroid()->RemoveObserver(this); |
1359 | 1353 |
1360 content_view_core_ = content_view_core; | 1354 content_view_core_ = content_view_core; |
1361 | 1355 |
1362 if (GetBrowserAccessibilityManager()) { | 1356 if (GetBrowserAccessibilityManager()) { |
1363 base::android::ScopedJavaLocalRef<jobject> obj; | 1357 base::android::ScopedJavaLocalRef<jobject> obj; |
1364 if (content_view_core_) | 1358 if (content_view_core_) |
1365 obj = content_view_core_->GetJavaObject(); | 1359 obj = content_view_core_->GetJavaObject(); |
1366 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> | 1360 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> |
1367 SetContentViewCore(obj); | 1361 SetContentViewCore(obj); |
1368 } | 1362 } |
1369 | 1363 |
1370 if (are_layers_attached_) { | 1364 AttachLayers(); |
1371 AttachLayers(); | 1365 if (content_view_core_ && !using_synchronous_compositor_) |
1372 if (content_view_core_ && !using_synchronous_compositor_) | 1366 content_view_core_->GetWindowAndroid()->AddObserver(this); |
1373 content_view_core_->GetWindowAndroid()->AddObserver(this); | |
1374 } | |
1375 } | 1367 } |
1376 | 1368 |
1377 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1369 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
1378 while (!ack_callbacks_.empty()) { | 1370 while (!ack_callbacks_.empty()) { |
1379 ack_callbacks_.front().Run(); | 1371 ack_callbacks_.front().Run(); |
1380 ack_callbacks_.pop(); | 1372 ack_callbacks_.pop(); |
1381 } | 1373 } |
1382 } | 1374 } |
1383 | 1375 |
1384 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { | 1376 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { |
(...skipping 15 matching lines...) Expand all Loading... |
1400 RunAckCallbacks(); | 1392 RunAckCallbacks(); |
1401 } | 1393 } |
1402 | 1394 |
1403 // static | 1395 // static |
1404 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 1396 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
1405 const gfx::Size& dst_size_in_pixel, | 1397 const gfx::Size& dst_size_in_pixel, |
1406 const SkBitmap::Config bitmap_config, | 1398 const SkBitmap::Config bitmap_config, |
1407 const base::TimeTicks& start_time, | 1399 const base::TimeTicks& start_time, |
1408 const base::Callback<void(bool, const SkBitmap&)>& callback, | 1400 const base::Callback<void(bool, const SkBitmap&)>& callback, |
1409 scoped_ptr<cc::CopyOutputResult> result) { | 1401 scoped_ptr<cc::CopyOutputResult> result) { |
1410 DCHECK(result->HasTexture()); | |
1411 base::ScopedClosureRunner scoped_callback_runner( | 1402 base::ScopedClosureRunner scoped_callback_runner( |
1412 base::Bind(callback, false, SkBitmap())); | 1403 base::Bind(callback, false, SkBitmap())); |
1413 | 1404 |
1414 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) | 1405 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |
1415 return; | 1406 return; |
1416 | 1407 |
1417 scoped_ptr<SkBitmap> bitmap(new SkBitmap); | 1408 scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
1418 bitmap->setConfig(bitmap_config, | 1409 bitmap->setConfig(bitmap_config, |
1419 dst_size_in_pixel.width(), | 1410 dst_size_in_pixel.width(), |
1420 dst_size_in_pixel.height(), | 1411 dst_size_in_pixel.height(), |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1504 // RenderWidgetHostView, public: | 1495 // RenderWidgetHostView, public: |
1505 | 1496 |
1506 // static | 1497 // static |
1507 RenderWidgetHostView* | 1498 RenderWidgetHostView* |
1508 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1499 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
1509 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1500 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
1510 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1501 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
1511 } | 1502 } |
1512 | 1503 |
1513 } // namespace content | 1504 } // namespace content |
OLD | NEW |