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/android/build_info.h" | 9 #include "base/android/build_info.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 const gfx::Display& display = | 404 const gfx::Display& display = |
405 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 405 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
406 float device_scale_factor = display.device_scale_factor(); | 406 float device_scale_factor = display.device_scale_factor(); |
407 DCHECK_GT(device_scale_factor, 0); | 407 DCHECK_GT(device_scale_factor, 0); |
408 gfx::Size dst_size( | 408 gfx::Size dst_size( |
409 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); | 409 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); |
410 CopyFromCompositingSurface( | 410 CopyFromCompositingSurface( |
411 src_subrect, dst_size, result_callback, color_type); | 411 src_subrect, dst_size, result_callback, color_type); |
412 } | 412 } |
413 | 413 |
| 414 scoped_refptr<cc::DelegatedRendererLayer> |
| 415 RenderWidgetHostViewAndroid::CreateDelegatedLayerForFrameProvider() const { |
| 416 DCHECK(frame_provider_); |
| 417 |
| 418 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = |
| 419 cc::DelegatedRendererLayer::Create(frame_provider_); |
| 420 delegated_layer->SetBounds(content_size_in_layer_); |
| 421 delegated_layer->SetIsDrawable(true); |
| 422 delegated_layer->SetContentsOpaque(true); |
| 423 |
| 424 return delegated_layer; |
| 425 } |
| 426 |
414 bool RenderWidgetHostViewAndroid::HasValidFrame() const { | 427 bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
415 if (!content_view_core_) | 428 if (!content_view_core_) |
416 return false; | 429 return false; |
417 if (!layer_) | 430 if (!layer_) |
418 return false; | 431 return false; |
419 | 432 |
420 if (texture_size_in_layer_.IsEmpty()) | 433 if (texture_size_in_layer_.IsEmpty()) |
421 return false; | 434 return false; |
422 // This tell us whether a valid frame has arrived or not. | 435 // This tell us whether a valid frame has arrived or not. |
423 if (!frame_evictor_->HasFrame()) | 436 if (!frame_evictor_->HasFrame()) |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 | 870 |
858 scoped_ptr<cc::CopyOutputRequest> request; | 871 scoped_ptr<cc::CopyOutputRequest> request; |
859 scoped_refptr<cc::Layer> readback_layer; | 872 scoped_refptr<cc::Layer> readback_layer; |
860 DCHECK(content_view_core_); | 873 DCHECK(content_view_core_); |
861 DCHECK(content_view_core_->GetWindowAndroid()); | 874 DCHECK(content_view_core_->GetWindowAndroid()); |
862 ui::WindowAndroidCompositor* compositor = | 875 ui::WindowAndroidCompositor* compositor = |
863 content_view_core_->GetWindowAndroid()->GetCompositor(); | 876 content_view_core_->GetWindowAndroid()->GetCompositor(); |
864 DCHECK(compositor); | 877 DCHECK(compositor); |
865 DCHECK(frame_provider_); | 878 DCHECK(frame_provider_); |
866 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = | 879 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = |
867 cc::DelegatedRendererLayer::Create(frame_provider_); | 880 CreateDelegatedLayerForFrameProvider(); |
868 delegated_layer->SetBounds(content_size_in_layer_); | |
869 delegated_layer->SetHideLayerAndSubtree(true); | 881 delegated_layer->SetHideLayerAndSubtree(true); |
870 delegated_layer->SetIsDrawable(true); | |
871 delegated_layer->SetContentsOpaque(true); | |
872 compositor->AttachLayerForReadback(delegated_layer); | 882 compositor->AttachLayerForReadback(delegated_layer); |
873 | 883 |
874 readback_layer = delegated_layer; | 884 readback_layer = delegated_layer; |
875 request = cc::CopyOutputRequest::CreateRequest( | 885 request = cc::CopyOutputRequest::CreateRequest( |
876 base::Bind(&RenderWidgetHostViewAndroid:: | 886 base::Bind(&RenderWidgetHostViewAndroid:: |
877 PrepareTextureCopyOutputResultForDelegatedReadback, | 887 PrepareTextureCopyOutputResultForDelegatedReadback, |
878 dst_size_in_pixel, | 888 dst_size_in_pixel, |
879 color_type, | 889 color_type, |
880 start_time, | 890 start_time, |
881 readback_layer, | 891 readback_layer, |
(...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1856 results->orientationAngle = display.RotationAsDegree(); | 1866 results->orientationAngle = display.RotationAsDegree(); |
1857 results->orientationType = | 1867 results->orientationType = |
1858 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 1868 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
1859 gfx::DeviceDisplayInfo info; | 1869 gfx::DeviceDisplayInfo info; |
1860 results->depth = info.GetBitsPerPixel(); | 1870 results->depth = info.GetBitsPerPixel(); |
1861 results->depthPerComponent = info.GetBitsPerComponent(); | 1871 results->depthPerComponent = info.GetBitsPerComponent(); |
1862 results->isMonochrome = (results->depthPerComponent == 0); | 1872 results->isMonochrome = (results->depthPerComponent == 0); |
1863 } | 1873 } |
1864 | 1874 |
1865 } // namespace content | 1875 } // namespace content |
OLD | NEW |