Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 374633002: SkBitmap::Config is deprecated, use SkColorType instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments from #4 Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 // resize the view on Android. 284 // resize the view on Android.
285 default_size_ = size; 285 default_size_ = size;
286 } 286 }
287 287
288 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { 288 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
289 SetSize(rect.size()); 289 SetSize(rect.size());
290 } 290 }
291 291
292 void RenderWidgetHostViewAndroid::GetScaledContentBitmap( 292 void RenderWidgetHostViewAndroid::GetScaledContentBitmap(
293 float scale, 293 float scale,
294 SkBitmap::Config bitmap_config, 294 SkColorType color_type,
295 gfx::Rect src_subrect, 295 gfx::Rect src_subrect,
296 const base::Callback<void(bool, const SkBitmap&)>& result_callback) { 296 const base::Callback<void(bool, const SkBitmap&)>& result_callback) {
297 if (!IsSurfaceAvailableForCopy()) { 297 if (!IsSurfaceAvailableForCopy()) {
298 result_callback.Run(false, SkBitmap()); 298 result_callback.Run(false, SkBitmap());
299 return; 299 return;
300 } 300 }
301 301
302 gfx::Size bounds = layer_->bounds(); 302 gfx::Size bounds = layer_->bounds();
303 if (src_subrect.IsEmpty()) 303 if (src_subrect.IsEmpty())
304 src_subrect = gfx::Rect(bounds); 304 src_subrect = gfx::Rect(bounds);
305 DCHECK_LE(src_subrect.width() + src_subrect.x(), bounds.width()); 305 DCHECK_LE(src_subrect.width() + src_subrect.x(), bounds.width());
306 DCHECK_LE(src_subrect.height() + src_subrect.y(), bounds.height()); 306 DCHECK_LE(src_subrect.height() + src_subrect.y(), bounds.height());
307 const gfx::Display& display = 307 const gfx::Display& display =
308 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 308 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
309 float device_scale_factor = display.device_scale_factor(); 309 float device_scale_factor = display.device_scale_factor();
310 DCHECK_GT(device_scale_factor, 0); 310 DCHECK_GT(device_scale_factor, 0);
311 gfx::Size dst_size( 311 gfx::Size dst_size(
312 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); 312 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor)));
313 CopyFromCompositingSurface( 313 CopyFromCompositingSurface(
314 src_subrect, dst_size, result_callback, bitmap_config); 314 src_subrect, dst_size, result_callback, color_type);
315 } 315 }
316 316
317 bool RenderWidgetHostViewAndroid::HasValidFrame() const { 317 bool RenderWidgetHostViewAndroid::HasValidFrame() const {
318 if (!content_view_core_) 318 if (!content_view_core_)
319 return false; 319 return false;
320 if (!layer_) 320 if (!layer_)
321 return false; 321 return false;
322 322
323 if (texture_size_in_layer_.IsEmpty()) 323 if (texture_size_in_layer_.IsEmpty())
324 return false; 324 return false;
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 657
658 void RenderWidgetHostViewAndroid::SetBackgroundOpaque(bool opaque) { 658 void RenderWidgetHostViewAndroid::SetBackgroundOpaque(bool opaque) {
659 RenderWidgetHostViewBase::SetBackgroundOpaque(opaque); 659 RenderWidgetHostViewBase::SetBackgroundOpaque(opaque);
660 host_->SetBackgroundOpaque(opaque); 660 host_->SetBackgroundOpaque(opaque);
661 } 661 }
662 662
663 void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( 663 void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
664 const gfx::Rect& src_subrect, 664 const gfx::Rect& src_subrect,
665 const gfx::Size& dst_size, 665 const gfx::Size& dst_size,
666 const base::Callback<void(bool, const SkBitmap&)>& callback, 666 const base::Callback<void(bool, const SkBitmap&)>& callback,
667 const SkBitmap::Config bitmap_config) { 667 const SkColorType color_type) {
668 if (!IsReadbackConfigSupported(bitmap_config)) { 668 if (!IsReadbackConfigSupported(color_type)) {
669 callback.Run(false, SkBitmap()); 669 callback.Run(false, SkBitmap());
670 return; 670 return;
671 } 671 }
672 base::TimeTicks start_time = base::TimeTicks::Now(); 672 base::TimeTicks start_time = base::TimeTicks::Now();
673 if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) { 673 if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) {
674 callback.Run(false, SkBitmap()); 674 callback.Run(false, SkBitmap());
675 return; 675 return;
676 } 676 }
677 const gfx::Display& display = 677 const gfx::Display& display =
678 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 678 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
679 float device_scale_factor = display.device_scale_factor(); 679 float device_scale_factor = display.device_scale_factor();
680 gfx::Size dst_size_in_pixel = 680 gfx::Size dst_size_in_pixel =
681 ConvertRectToPixel(device_scale_factor, gfx::Rect(dst_size)).size(); 681 ConvertRectToPixel(device_scale_factor, gfx::Rect(dst_size)).size();
682 gfx::Rect src_subrect_in_pixel = 682 gfx::Rect src_subrect_in_pixel =
683 ConvertRectToPixel(device_scale_factor, src_subrect); 683 ConvertRectToPixel(device_scale_factor, src_subrect);
684 684
685 if (using_synchronous_compositor_) { 685 if (using_synchronous_compositor_) {
686 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback, 686 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback,
687 bitmap_config); 687 color_type);
688 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", 688 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous",
689 base::TimeTicks::Now() - start_time); 689 base::TimeTicks::Now() - start_time);
690 return; 690 return;
691 } 691 }
692 692
693 scoped_ptr<cc::CopyOutputRequest> request; 693 scoped_ptr<cc::CopyOutputRequest> request;
694 scoped_refptr<cc::Layer> readback_layer; 694 scoped_refptr<cc::Layer> readback_layer;
695 DCHECK(content_view_core_); 695 DCHECK(content_view_core_);
696 DCHECK(content_view_core_->GetWindowAndroid()); 696 DCHECK(content_view_core_->GetWindowAndroid());
697 ui::WindowAndroidCompositor* compositor = 697 ui::WindowAndroidCompositor* compositor =
698 content_view_core_->GetWindowAndroid()->GetCompositor(); 698 content_view_core_->GetWindowAndroid()->GetCompositor();
699 DCHECK(compositor); 699 DCHECK(compositor);
700 DCHECK(frame_provider_); 700 DCHECK(frame_provider_);
701 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = 701 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer =
702 cc::DelegatedRendererLayer::Create(frame_provider_); 702 cc::DelegatedRendererLayer::Create(frame_provider_);
703 delegated_layer->SetBounds(content_size_in_layer_); 703 delegated_layer->SetBounds(content_size_in_layer_);
704 delegated_layer->SetHideLayerAndSubtree(true); 704 delegated_layer->SetHideLayerAndSubtree(true);
705 delegated_layer->SetIsDrawable(true); 705 delegated_layer->SetIsDrawable(true);
706 delegated_layer->SetContentsOpaque(true); 706 delegated_layer->SetContentsOpaque(true);
707 compositor->AttachLayerForReadback(delegated_layer); 707 compositor->AttachLayerForReadback(delegated_layer);
708 708
709 readback_layer = delegated_layer; 709 readback_layer = delegated_layer;
710 request = cc::CopyOutputRequest::CreateRequest( 710 request = cc::CopyOutputRequest::CreateRequest(
711 base::Bind(&RenderWidgetHostViewAndroid:: 711 base::Bind(&RenderWidgetHostViewAndroid::
712 PrepareTextureCopyOutputResultForDelegatedReadback, 712 PrepareTextureCopyOutputResultForDelegatedReadback,
713 dst_size_in_pixel, 713 dst_size_in_pixel,
714 bitmap_config, 714 color_type,
715 start_time, 715 start_time,
716 readback_layer, 716 readback_layer,
717 callback)); 717 callback));
718 request->set_area(src_subrect_in_pixel); 718 request->set_area(src_subrect_in_pixel);
719 readback_layer->RequestCopyOfOutput(request.Pass()); 719 readback_layer->RequestCopyOfOutput(request.Pass());
720 } 720 }
721 721
722 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( 722 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame(
723 const gfx::Rect& src_subrect, 723 const gfx::Rect& src_subrect,
724 const scoped_refptr<media::VideoFrame>& target, 724 const scoped_refptr<media::VideoFrame>& target,
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 948
949 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) { 949 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) {
950 if (layer_) 950 if (layer_)
951 layer_->SetContentsOpaque(!enabled); 951 layer_->SetContentsOpaque(!enabled);
952 } 952 }
953 953
954 void RenderWidgetHostViewAndroid::SynchronousCopyContents( 954 void RenderWidgetHostViewAndroid::SynchronousCopyContents(
955 const gfx::Rect& src_subrect_in_pixel, 955 const gfx::Rect& src_subrect_in_pixel,
956 const gfx::Size& dst_size_in_pixel, 956 const gfx::Size& dst_size_in_pixel,
957 const base::Callback<void(bool, const SkBitmap&)>& callback, 957 const base::Callback<void(bool, const SkBitmap&)>& callback,
958 const SkBitmap::Config config) { 958 const SkColorType color_type) {
959 SynchronousCompositor* compositor = 959 SynchronousCompositor* compositor =
960 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), 960 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(),
961 host_->GetRoutingID()); 961 host_->GetRoutingID());
962 if (!compositor) { 962 if (!compositor) {
963 callback.Run(false, SkBitmap()); 963 callback.Run(false, SkBitmap());
964 return; 964 return;
965 } 965 }
966 966
967 SkBitmap bitmap; 967 SkBitmap bitmap;
968 bitmap.allocPixels(SkImageInfo::Make(dst_size_in_pixel.width(), 968 bitmap.allocPixels(SkImageInfo::Make(dst_size_in_pixel.width(),
969 dst_size_in_pixel.height(), 969 dst_size_in_pixel.height(),
970 SkBitmapConfigToColorType(config), 970 color_type,
971 kPremul_SkAlphaType)); 971 kPremul_SkAlphaType));
972 SkCanvas canvas(bitmap); 972 SkCanvas canvas(bitmap);
973 canvas.scale( 973 canvas.scale(
974 (float)dst_size_in_pixel.width() / (float)src_subrect_in_pixel.width(), 974 (float)dst_size_in_pixel.width() / (float)src_subrect_in_pixel.width(),
975 (float)dst_size_in_pixel.height() / (float)src_subrect_in_pixel.height()); 975 (float)dst_size_in_pixel.height() / (float)src_subrect_in_pixel.height());
976 compositor->DemandDrawSw(&canvas); 976 compositor->DemandDrawSw(&canvas);
977 callback.Run(true, bitmap); 977 callback.Run(true, bitmap);
978 } 978 }
979 979
980 void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated( 980 void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 ReleaseLocksOnSurface(); 1348 ReleaseLocksOnSurface();
1349 if (layer_.get()) 1349 if (layer_.get())
1350 DestroyDelegatedContent(); 1350 DestroyDelegatedContent();
1351 DCHECK(ack_callbacks_.empty()); 1351 DCHECK(ack_callbacks_.empty());
1352 } 1352 }
1353 1353
1354 // static 1354 // static
1355 void 1355 void
1356 RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResultForDelegatedReadback( 1356 RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResultForDelegatedReadback(
1357 const gfx::Size& dst_size_in_pixel, 1357 const gfx::Size& dst_size_in_pixel,
1358 const SkBitmap::Config config, 1358 const SkColorType color_type,
1359 const base::TimeTicks& start_time, 1359 const base::TimeTicks& start_time,
1360 scoped_refptr<cc::Layer> readback_layer, 1360 scoped_refptr<cc::Layer> readback_layer,
1361 const base::Callback<void(bool, const SkBitmap&)>& callback, 1361 const base::Callback<void(bool, const SkBitmap&)>& callback,
1362 scoped_ptr<cc::CopyOutputResult> result) { 1362 scoped_ptr<cc::CopyOutputResult> result) {
1363 readback_layer->RemoveFromParent(); 1363 readback_layer->RemoveFromParent();
1364 PrepareTextureCopyOutputResult( 1364 PrepareTextureCopyOutputResult(
1365 dst_size_in_pixel, config, start_time, callback, result.Pass()); 1365 dst_size_in_pixel, color_type, start_time, callback, result.Pass());
1366 } 1366 }
1367 1367
1368 // static 1368 // static
1369 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( 1369 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
1370 const gfx::Size& dst_size_in_pixel, 1370 const gfx::Size& dst_size_in_pixel,
1371 const SkBitmap::Config bitmap_config, 1371 const SkColorType color_type,
1372 const base::TimeTicks& start_time, 1372 const base::TimeTicks& start_time,
1373 const base::Callback<void(bool, const SkBitmap&)>& callback, 1373 const base::Callback<void(bool, const SkBitmap&)>& callback,
1374 scoped_ptr<cc::CopyOutputResult> result) { 1374 scoped_ptr<cc::CopyOutputResult> result) {
1375 base::ScopedClosureRunner scoped_callback_runner( 1375 base::ScopedClosureRunner scoped_callback_runner(
1376 base::Bind(callback, false, SkBitmap())); 1376 base::Bind(callback, false, SkBitmap()));
1377 1377
1378 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) 1378 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty())
1379 return; 1379 return;
1380 1380
1381 scoped_ptr<SkBitmap> bitmap(new SkBitmap); 1381 scoped_ptr<SkBitmap> bitmap(new SkBitmap);
1382 SkColorType color_type = SkBitmapConfigToColorType(bitmap_config);
1383 if (!bitmap->allocPixels(SkImageInfo::Make(dst_size_in_pixel.width(), 1382 if (!bitmap->allocPixels(SkImageInfo::Make(dst_size_in_pixel.width(),
1384 dst_size_in_pixel.height(), 1383 dst_size_in_pixel.height(),
1385 color_type, 1384 color_type,
1386 kOpaque_SkAlphaType))) 1385 kOpaque_SkAlphaType)))
1387 return; 1386 return;
1388 1387
1389 ImageTransportFactoryAndroid* factory = 1388 ImageTransportFactoryAndroid* factory =
1390 ImageTransportFactoryAndroid::GetInstance(); 1389 ImageTransportFactoryAndroid::GetInstance();
1391 GLHelper* gl_helper = factory->GetGLHelper(); 1390 GLHelper* gl_helper = factory->GetGLHelper();
1392 1391
(...skipping 13 matching lines...) Expand all
1406 1405
1407 ignore_result(scoped_callback_runner.Release()); 1406 ignore_result(scoped_callback_runner.Release());
1408 1407
1409 gl_helper->CropScaleReadbackAndCleanMailbox( 1408 gl_helper->CropScaleReadbackAndCleanMailbox(
1410 texture_mailbox.mailbox(), 1409 texture_mailbox.mailbox(),
1411 texture_mailbox.sync_point(), 1410 texture_mailbox.sync_point(),
1412 result->size(), 1411 result->size(),
1413 gfx::Rect(result->size()), 1412 gfx::Rect(result->size()),
1414 dst_size_in_pixel, 1413 dst_size_in_pixel,
1415 pixels, 1414 pixels,
1416 bitmap_config, 1415 color_type,
1417 base::Bind(&CopyFromCompositingSurfaceFinished, 1416 base::Bind(&CopyFromCompositingSurfaceFinished,
1418 callback, 1417 callback,
1419 base::Passed(&release_callback), 1418 base::Passed(&release_callback),
1420 base::Passed(&bitmap), 1419 base::Passed(&bitmap),
1421 start_time, 1420 start_time,
1422 base::Passed(&bitmap_pixels_lock)), 1421 base::Passed(&bitmap_pixels_lock)),
1423 GLHelper::SCALER_QUALITY_GOOD); 1422 GLHelper::SCALER_QUALITY_GOOD);
1424 } 1423 }
1425 1424
1426 bool RenderWidgetHostViewAndroid::IsReadbackConfigSupported( 1425 bool RenderWidgetHostViewAndroid::IsReadbackConfigSupported(
1427 SkBitmap::Config bitmap_config) { 1426 SkColorType color_type) {
1428 ImageTransportFactoryAndroid* factory = 1427 ImageTransportFactoryAndroid* factory =
1429 ImageTransportFactoryAndroid::GetInstance(); 1428 ImageTransportFactoryAndroid::GetInstance();
1430 GLHelper* gl_helper = factory->GetGLHelper(); 1429 GLHelper* gl_helper = factory->GetGLHelper();
1431 if (!gl_helper) 1430 if (!gl_helper)
1432 return false; 1431 return false;
1433 return gl_helper->IsReadbackConfigSupported(bitmap_config); 1432 return gl_helper->IsReadbackConfigSupported(color_type);
1434 } 1433 }
1435 1434
1436 SkBitmap::Config RenderWidgetHostViewAndroid::PreferredReadbackFormat() { 1435 SkColorType RenderWidgetHostViewAndroid::PreferredReadbackFormat() {
1437 // Define the criteria here. If say the 16 texture readback is 1436 // Define the criteria here. If say the 16 texture readback is
1438 // supported we should go with that (this degrades quality) 1437 // supported we should go with that (this degrades quality)
1439 // or stick back to the default format. 1438 // or stick back to the default format.
1440 if (base::SysInfo::IsLowEndDevice()) { 1439 if (base::SysInfo::IsLowEndDevice()) {
1441 if (IsReadbackConfigSupported(SkBitmap::kRGB_565_Config)) 1440 if (IsReadbackConfigSupported(kRGB_565_SkColorType))
1442 return SkBitmap::kRGB_565_Config; 1441 return kRGB_565_SkColorType;
1443 } 1442 }
1444 return SkBitmap::kARGB_8888_Config; 1443 return kN32_SkColorType;
1445 } 1444 }
1446 1445
1447 void RenderWidgetHostViewAndroid::ShowSelectionHandlesAutomatically() { 1446 void RenderWidgetHostViewAndroid::ShowSelectionHandlesAutomatically() {
1448 if (content_view_core_) 1447 if (content_view_core_)
1449 content_view_core_->ShowSelectionHandlesAutomatically(); 1448 content_view_core_->ShowSelectionHandlesAutomatically();
1450 } 1449 }
1451 1450
1452 void RenderWidgetHostViewAndroid::SelectRange( 1451 void RenderWidgetHostViewAndroid::SelectRange(
1453 float x1, float y1, float x2, float y2) { 1452 float x1, float y1, float x2, float y2) {
1454 if (content_view_core_) 1453 if (content_view_core_)
(...skipping 26 matching lines...) Expand all
1481 results->orientationAngle = display.RotationAsDegree(); 1480 results->orientationAngle = display.RotationAsDegree();
1482 results->orientationType = 1481 results->orientationType =
1483 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); 1482 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display);
1484 gfx::DeviceDisplayInfo info; 1483 gfx::DeviceDisplayInfo info;
1485 results->depth = info.GetBitsPerPixel(); 1484 results->depth = info.GetBitsPerPixel();
1486 results->depthPerComponent = info.GetBitsPerComponent(); 1485 results->depthPerComponent = info.GetBitsPerComponent();
1487 results->isMonochrome = (results->depthPerComponent == 0); 1486 results->isMonochrome = (results->depthPerComponent == 0);
1488 } 1487 }
1489 1488
1490 } // namespace content 1489 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698