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

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

Issue 149123008: Implement GLHelperReadbackSupport for GLHelper usage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unused gl_helper member. Created 6 years, 9 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
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 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 void RenderWidgetHostViewAndroid::SetBackground(const SkBitmap& background) { 586 void RenderWidgetHostViewAndroid::SetBackground(const SkBitmap& background) {
587 RenderWidgetHostViewBase::SetBackground(background); 587 RenderWidgetHostViewBase::SetBackground(background);
588 host_->Send(new ViewMsg_SetBackground(host_->GetRoutingID(), background)); 588 host_->Send(new ViewMsg_SetBackground(host_->GetRoutingID(), background));
589 } 589 }
590 590
591 void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( 591 void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
592 const gfx::Rect& src_subrect, 592 const gfx::Rect& src_subrect,
593 const gfx::Size& dst_size, 593 const gfx::Size& dst_size,
594 const base::Callback<void(bool, const SkBitmap&)>& callback, 594 const base::Callback<void(bool, const SkBitmap&)>& callback,
595 const SkBitmap::Config bitmap_config) { 595 const SkBitmap::Config bitmap_config) {
596 // Only ARGB888 and RGB565 supported as of now. 596 if (!IsReadbackConfigSupported(bitmap_config)) {
597 bool format_support = ((bitmap_config == SkBitmap::kRGB_565_Config) ||
598 (bitmap_config == SkBitmap::kARGB_8888_Config));
599 if (!format_support) {
600 DCHECK(format_support);
601 callback.Run(false, SkBitmap()); 597 callback.Run(false, SkBitmap());
602 return; 598 return;
603 } 599 }
604 base::TimeTicks start_time = base::TimeTicks::Now(); 600 base::TimeTicks start_time = base::TimeTicks::Now();
605 if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) { 601 if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) {
606 callback.Run(false, SkBitmap()); 602 callback.Run(false, SkBitmap());
607 return; 603 return;
608 } 604 }
609 ImageTransportFactoryAndroid* factory =
610 ImageTransportFactoryAndroid::GetInstance();
611 GLHelper* gl_helper = factory->GetGLHelper();
612 if (!gl_helper)
613 return;
614 bool check_rgb565_support = gl_helper->CanUseRgb565Readback();
615 if ((bitmap_config == SkBitmap::kRGB_565_Config) &&
616 !check_rgb565_support) {
617 LOG(ERROR) << "Readbackformat rgb565 not supported";
618 callback.Run(false, SkBitmap());
619 return;
620 }
621 const gfx::Display& display = 605 const gfx::Display& display =
622 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 606 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
623 float device_scale_factor = display.device_scale_factor(); 607 float device_scale_factor = display.device_scale_factor();
624 gfx::Size dst_size_in_pixel = 608 gfx::Size dst_size_in_pixel =
625 ConvertRectToPixel(device_scale_factor, gfx::Rect(dst_size)).size(); 609 ConvertRectToPixel(device_scale_factor, gfx::Rect(dst_size)).size();
626 gfx::Rect src_subrect_in_pixel = 610 gfx::Rect src_subrect_in_pixel =
627 ConvertRectToPixel(device_scale_factor, src_subrect); 611 ConvertRectToPixel(device_scale_factor, src_subrect);
628 612
629 if (using_synchronous_compositor_) { 613 if (using_synchronous_compositor_) {
630 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback, 614 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback,
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 bitmap->setConfig(bitmap_config, 1302 bitmap->setConfig(bitmap_config,
1319 dst_size_in_pixel.width(), 1303 dst_size_in_pixel.width(),
1320 dst_size_in_pixel.height(), 1304 dst_size_in_pixel.height(),
1321 0, kOpaque_SkAlphaType); 1305 0, kOpaque_SkAlphaType);
1322 if (!bitmap->allocPixels()) 1306 if (!bitmap->allocPixels())
1323 return; 1307 return;
1324 1308
1325 ImageTransportFactoryAndroid* factory = 1309 ImageTransportFactoryAndroid* factory =
1326 ImageTransportFactoryAndroid::GetInstance(); 1310 ImageTransportFactoryAndroid::GetInstance();
1327 GLHelper* gl_helper = factory->GetGLHelper(); 1311 GLHelper* gl_helper = factory->GetGLHelper();
1312
1328 if (!gl_helper) 1313 if (!gl_helper)
1329 return; 1314 return;
1330 1315
1331 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock( 1316 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock(
1332 new SkAutoLockPixels(*bitmap)); 1317 new SkAutoLockPixels(*bitmap));
1333 uint8* pixels = static_cast<uint8*>(bitmap->getPixels()); 1318 uint8* pixels = static_cast<uint8*>(bitmap->getPixels());
1334 1319
1335 cc::TextureMailbox texture_mailbox; 1320 cc::TextureMailbox texture_mailbox;
1336 scoped_ptr<cc::SingleReleaseCallback> release_callback; 1321 scoped_ptr<cc::SingleReleaseCallback> release_callback;
1337 result->TakeTexture(&texture_mailbox, &release_callback); 1322 result->TakeTexture(&texture_mailbox, &release_callback);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1384 DCHECK_EQ(source->width(), dst_size_in_pixel.width()); 1369 DCHECK_EQ(source->width(), dst_size_in_pixel.width());
1385 DCHECK_EQ(source->height(), dst_size_in_pixel.height()); 1370 DCHECK_EQ(source->height(), dst_size_in_pixel.height());
1386 1371
1387 ignore_result(scoped_callback_runner.Release()); 1372 ignore_result(scoped_callback_runner.Release());
1388 UMA_HISTOGRAM_TIMES(kAsyncReadBackString, 1373 UMA_HISTOGRAM_TIMES(kAsyncReadBackString,
1389 base::TimeTicks::Now() - start_time); 1374 base::TimeTicks::Now() - start_time);
1390 1375
1391 callback.Run(true, *source); 1376 callback.Run(true, *source);
1392 } 1377 }
1393 1378
1379 bool RenderWidgetHostViewAndroid::IsReadbackConfigSupported(
1380 SkBitmap::Config bitmap_config) {
1381 ImageTransportFactoryAndroid* factory =
1382 ImageTransportFactoryAndroid::GetInstance();
1383 GLHelper* gl_helper = factory->GetGLHelper();
1384 if (!gl_helper)
1385 return false;
1386 return gl_helper->IsReadbackConfigSupported(bitmap_config);
1387 }
1388
1394 // static 1389 // static
1395 void RenderWidgetHostViewPort::GetDefaultScreenInfo( 1390 void RenderWidgetHostViewPort::GetDefaultScreenInfo(
1396 blink::WebScreenInfo* results) { 1391 blink::WebScreenInfo* results) {
1397 const gfx::Display& display = 1392 const gfx::Display& display =
1398 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 1393 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
1399 results->rect = display.bounds(); 1394 results->rect = display.bounds();
1400 // TODO(husky): Remove any system controls from availableRect. 1395 // TODO(husky): Remove any system controls from availableRect.
1401 results->availableRect = display.work_area(); 1396 results->availableRect = display.work_area();
1402 results->deviceScaleFactor = display.device_scale_factor(); 1397 results->deviceScaleFactor = display.device_scale_factor();
1403 gfx::DeviceDisplayInfo info; 1398 gfx::DeviceDisplayInfo info;
1404 results->depth = info.GetBitsPerPixel(); 1399 results->depth = info.GetBitsPerPixel();
1405 results->depthPerComponent = info.GetBitsPerComponent(); 1400 results->depthPerComponent = info.GetBitsPerComponent();
1406 results->isMonochrome = (results->depthPerComponent == 0); 1401 results->isMonochrome = (results->depthPerComponent == 0);
1407 } 1402 }
1408 1403
1409 //////////////////////////////////////////////////////////////////////////////// 1404 ////////////////////////////////////////////////////////////////////////////////
1410 // RenderWidgetHostView, public: 1405 // RenderWidgetHostView, public:
1411 1406
1412 // static 1407 // static
1413 RenderWidgetHostView* 1408 RenderWidgetHostView*
1414 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1409 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1415 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1410 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1416 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1411 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1417 } 1412 }
1418 1413
1419 } // namespace content 1414 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_android.h ('k') | content/common/gpu/client/gl_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698