| 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 614 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   625  |   625  | 
|   626 void RenderWidgetHostViewAndroid::SetBackground(const SkBitmap& background) { |   626 void RenderWidgetHostViewAndroid::SetBackground(const SkBitmap& background) { | 
|   627   RenderWidgetHostViewBase::SetBackground(background); |   627   RenderWidgetHostViewBase::SetBackground(background); | 
|   628   host_->Send(new ViewMsg_SetBackground(host_->GetRoutingID(), background)); |   628   host_->Send(new ViewMsg_SetBackground(host_->GetRoutingID(), background)); | 
|   629 } |   629 } | 
|   630  |   630  | 
|   631 void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( |   631 void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( | 
|   632     const gfx::Rect& src_subrect, |   632     const gfx::Rect& src_subrect, | 
|   633     const gfx::Size& dst_size, |   633     const gfx::Size& dst_size, | 
|   634     const base::Callback<void(bool, const SkBitmap&)>& callback, |   634     const base::Callback<void(bool, const SkBitmap&)>& callback, | 
|   635     bool readback_config_rgb565) { |   635     const SkBitmap::Config bitmap_config) { | 
 |   636   // Only ARGB888 and RGB565 supported as of now. | 
 |   637   bool format_support = ((bitmap_config == SkBitmap::kRGB_565_Config) || | 
 |   638                          (bitmap_config == SkBitmap::kARGB_8888_Config)); | 
 |   639   if (!format_support) { | 
 |   640     DCHECK(format_support); | 
 |   641     callback.Run(false, SkBitmap()); | 
 |   642     return; | 
 |   643   } | 
|   636   base::TimeTicks start_time = base::TimeTicks::Now(); |   644   base::TimeTicks start_time = base::TimeTicks::Now(); | 
|   637   if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) { |   645   if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) { | 
|   638     callback.Run(false, SkBitmap()); |   646     callback.Run(false, SkBitmap()); | 
|   639     return; |   647     return; | 
|   640   } |   648   } | 
|   641   ImageTransportFactoryAndroid* factory = |   649   ImageTransportFactoryAndroid* factory = | 
|   642       ImageTransportFactoryAndroid::GetInstance(); |   650       ImageTransportFactoryAndroid::GetInstance(); | 
|   643   GLHelper* gl_helper = factory->GetGLHelper(); |   651   GLHelper* gl_helper = factory->GetGLHelper(); | 
|   644   if (!gl_helper) |   652   if (!gl_helper) | 
|   645     return; |   653     return; | 
|   646   bool check_rgb565_support = gl_helper->CanUseRgb565Readback(); |   654   bool check_rgb565_support = gl_helper->CanUseRgb565Readback(); | 
|   647   if (readback_config_rgb565 && !check_rgb565_support) { |   655   if ((bitmap_config == SkBitmap::kRGB_565_Config) && | 
 |   656       !check_rgb565_support) { | 
|   648     LOG(ERROR) << "Readbackformat rgb565  not supported"; |   657     LOG(ERROR) << "Readbackformat rgb565  not supported"; | 
|   649     callback.Run(false, SkBitmap()); |   658     callback.Run(false, SkBitmap()); | 
|   650     return; |   659     return; | 
|   651   } |   660   } | 
|   652   const gfx::Display& display = |   661   const gfx::Display& display = | 
|   653       gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |   662       gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 
|   654   float device_scale_factor = display.device_scale_factor(); |   663   float device_scale_factor = display.device_scale_factor(); | 
|   655  |   664  | 
|   656   DCHECK_EQ(device_scale_factor, |   665   DCHECK_EQ(device_scale_factor, | 
|   657             ui::GetImageScale(GetScaleFactorForView(this))); |   666             ui::GetImageScale(GetScaleFactorForView(this))); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   670   if (src_subrect_in_pixel.size() == dst_size_in_pixel) { |   679   if (src_subrect_in_pixel.size() == dst_size_in_pixel) { | 
|   671       request = cc::CopyOutputRequest::CreateBitmapRequest(base::Bind( |   680       request = cc::CopyOutputRequest::CreateBitmapRequest(base::Bind( | 
|   672           &RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult, |   681           &RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult, | 
|   673           dst_size_in_pixel, |   682           dst_size_in_pixel, | 
|   674           start_time, |   683           start_time, | 
|   675           callback)); |   684           callback)); | 
|   676   } else { |   685   } else { | 
|   677       request = cc::CopyOutputRequest::CreateRequest(base::Bind( |   686       request = cc::CopyOutputRequest::CreateRequest(base::Bind( | 
|   678           &RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult, |   687           &RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult, | 
|   679           dst_size_in_pixel, |   688           dst_size_in_pixel, | 
|   680           readback_config_rgb565, |   689           bitmap_config, | 
|   681           start_time, |   690           start_time, | 
|   682           callback)); |   691           callback)); | 
|   683   } |   692   } | 
|   684   request->set_area(src_subrect_in_pixel); |   693   request->set_area(src_subrect_in_pixel); | 
|   685   layer_->RequestCopyOfOutput(request.Pass()); |   694   layer_->RequestCopyOfOutput(request.Pass()); | 
|   686 } |   695 } | 
|   687  |   696  | 
|   688 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( |   697 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( | 
|   689       const gfx::Rect& src_subrect, |   698       const gfx::Rect& src_subrect, | 
|   690       const scoped_refptr<media::VideoFrame>& target, |   699       const scoped_refptr<media::VideoFrame>& target, | 
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1393     texture_layer_->SetIsDrawable(false); |  1402     texture_layer_->SetIsDrawable(false); | 
|  1394   if (delegated_renderer_layer_.get()) |  1403   if (delegated_renderer_layer_.get()) | 
|  1395     DestroyDelegatedContent(); |  1404     DestroyDelegatedContent(); | 
|  1396   texture_id_in_layer_ = 0; |  1405   texture_id_in_layer_ = 0; | 
|  1397   RunAckCallbacks(); |  1406   RunAckCallbacks(); | 
|  1398 } |  1407 } | 
|  1399  |  1408  | 
|  1400 // static |  1409 // static | 
|  1401 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |  1410 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 
|  1402     const gfx::Size& dst_size_in_pixel, |  1411     const gfx::Size& dst_size_in_pixel, | 
|  1403     bool readback_config_rgb565, |  1412     const SkBitmap::Config bitmap_config, | 
|  1404     const base::TimeTicks& start_time, |  1413     const base::TimeTicks& start_time, | 
|  1405     const base::Callback<void(bool, const SkBitmap&)>& callback, |  1414     const base::Callback<void(bool, const SkBitmap&)>& callback, | 
|  1406     scoped_ptr<cc::CopyOutputResult> result) { |  1415     scoped_ptr<cc::CopyOutputResult> result) { | 
|  1407   DCHECK(result->HasTexture()); |  1416   DCHECK(result->HasTexture()); | 
|  1408   base::ScopedClosureRunner scoped_callback_runner( |  1417   base::ScopedClosureRunner scoped_callback_runner( | 
|  1409       base::Bind(callback, false, SkBitmap())); |  1418       base::Bind(callback, false, SkBitmap())); | 
|  1410  |  1419  | 
|  1411   if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |  1420   if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) | 
|  1412     return; |  1421     return; | 
|  1413  |  1422  | 
|  1414   scoped_ptr<SkBitmap> bitmap(new SkBitmap); |  1423   scoped_ptr<SkBitmap> bitmap(new SkBitmap); | 
|  1415   SkBitmap::Config bitmap_config = readback_config_rgb565 ? |  | 
|  1416                                    SkBitmap::kRGB_565_Config : |  | 
|  1417                                    SkBitmap::kARGB_8888_Config; |  | 
|  1418   bitmap->setConfig(bitmap_config, |  1424   bitmap->setConfig(bitmap_config, | 
|  1419                     dst_size_in_pixel.width(), |  1425                     dst_size_in_pixel.width(), | 
|  1420                     dst_size_in_pixel.height(), |  1426                     dst_size_in_pixel.height(), | 
|  1421                     0, kOpaque_SkAlphaType); |  1427                     0, kOpaque_SkAlphaType); | 
|  1422   if (!bitmap->allocPixels()) |  1428   if (!bitmap->allocPixels()) | 
|  1423     return; |  1429     return; | 
|  1424  |  1430  | 
|  1425   ImageTransportFactoryAndroid* factory = |  1431   ImageTransportFactoryAndroid* factory = | 
|  1426       ImageTransportFactoryAndroid::GetInstance(); |  1432       ImageTransportFactoryAndroid::GetInstance(); | 
|  1427   GLHelper* gl_helper = factory->GetGLHelper(); |  1433   GLHelper* gl_helper = factory->GetGLHelper(); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  1441  |  1447  | 
|  1442   ignore_result(scoped_callback_runner.Release()); |  1448   ignore_result(scoped_callback_runner.Release()); | 
|  1443  |  1449  | 
|  1444   gl_helper->CropScaleReadbackAndCleanMailbox( |  1450   gl_helper->CropScaleReadbackAndCleanMailbox( | 
|  1445       texture_mailbox.name(), |  1451       texture_mailbox.name(), | 
|  1446       texture_mailbox.sync_point(), |  1452       texture_mailbox.sync_point(), | 
|  1447       result->size(), |  1453       result->size(), | 
|  1448       gfx::Rect(result->size()), |  1454       gfx::Rect(result->size()), | 
|  1449       dst_size_in_pixel, |  1455       dst_size_in_pixel, | 
|  1450       pixels, |  1456       pixels, | 
|  1451       readback_config_rgb565, |  1457       bitmap_config, | 
|  1452       base::Bind(&CopyFromCompositingSurfaceFinished, |  1458       base::Bind(&CopyFromCompositingSurfaceFinished, | 
|  1453                  callback, |  1459                  callback, | 
|  1454                  base::Passed(&release_callback), |  1460                  base::Passed(&release_callback), | 
|  1455                  base::Passed(&bitmap), |  1461                  base::Passed(&bitmap), | 
|  1456                  start_time, |  1462                  start_time, | 
|  1457                  base::Passed(&bitmap_pixels_lock))); |  1463                  base::Passed(&bitmap_pixels_lock))); | 
|  1458 } |  1464 } | 
|  1459  |  1465  | 
|  1460 // static |  1466 // static | 
|  1461 void RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult( |  1467 void RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult( | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1504 // RenderWidgetHostView, public: |  1510 // RenderWidgetHostView, public: | 
|  1505  |  1511  | 
|  1506 // static |  1512 // static | 
|  1507 RenderWidgetHostView* |  1513 RenderWidgetHostView* | 
|  1508 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |  1514 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 
|  1509   RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |  1515   RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 
|  1510   return new RenderWidgetHostViewAndroid(rwhi, NULL); |  1516   return new RenderWidgetHostViewAndroid(rwhi, NULL); | 
|  1511 } |  1517 } | 
|  1512  |  1518  | 
|  1513 } // namespace content |  1519 } // namespace content | 
| OLD | NEW |