| 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 <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 887 preferred_color_type); | 887 preferred_color_type); |
| 888 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", | 888 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", |
| 889 base::TimeTicks::Now() - start_time); | 889 base::TimeTicks::Now() - start_time); |
| 890 return; | 890 return; |
| 891 } | 891 } |
| 892 | 892 |
| 893 ui::WindowAndroidCompositor* compositor = | 893 ui::WindowAndroidCompositor* compositor = |
| 894 content_view_core_->GetWindowAndroid()->GetCompositor(); | 894 content_view_core_->GetWindowAndroid()->GetCompositor(); |
| 895 DCHECK(compositor); | 895 DCHECK(compositor); |
| 896 DCHECK(!surface_id_.is_null()); | 896 DCHECK(!surface_id_.is_null()); |
| 897 scoped_refptr<cc::Layer> layer = |
| 898 CreateSurfaceLayer(surface_id_, texture_size_in_layer_); |
| 899 layer->SetHideLayerAndSubtree(true); |
| 900 compositor->AttachLayerForReadback(layer); |
| 901 |
| 897 std::unique_ptr<cc::CopyOutputRequest> request = | 902 std::unique_ptr<cc::CopyOutputRequest> request = |
| 898 cc::CopyOutputRequest::CreateRequest(base::Bind( | 903 cc::CopyOutputRequest::CreateRequest( |
| 899 &PrepareTextureCopyOutputResult, weak_ptr_factory_.GetWeakPtr(), | 904 base::Bind(&PrepareTextureCopyOutputResult, |
| 900 dst_size_in_pixel, preferred_color_type, start_time, callback)); | 905 weak_ptr_factory_.GetWeakPtr(), layer, dst_size_in_pixel, |
| 906 preferred_color_type, start_time, callback)); |
| 907 |
| 901 if (!src_subrect_in_pixel.IsEmpty()) | 908 if (!src_subrect_in_pixel.IsEmpty()) |
| 902 request->set_area(src_subrect_in_pixel); | 909 request->set_area(src_subrect_in_pixel); |
| 903 // Make sure the current frame doesn't get deleted until we fulfill the | 910 // Make sure the current frame doesn't get deleted until we fulfill the |
| 904 // request. | 911 // request. |
| 905 LockCompositingSurface(); | 912 LockCompositingSurface(); |
| 906 surface_factory_->RequestCopyOfSurface(surface_id_, std::move(request)); | 913 surface_factory_->RequestCopyOfSurface(surface_id_, std::move(request)); |
| 907 } | 914 } |
| 908 | 915 |
| 909 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( | 916 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( |
| 910 const gfx::Rect& src_subrect, | 917 const gfx::Rect& src_subrect, |
| (...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1868 } | 1875 } |
| 1869 | 1876 |
| 1870 // TODO(wjmaclean): There is significant overlap between | 1877 // TODO(wjmaclean): There is significant overlap between |
| 1871 // PrepareTextureCopyOutputResult and CopyFromCompositingSurfaceFinished in | 1878 // PrepareTextureCopyOutputResult and CopyFromCompositingSurfaceFinished in |
| 1872 // this file, and the versions in surface_utils.cc. They should | 1879 // this file, and the versions in surface_utils.cc. They should |
| 1873 // be merged. See https://crbug.com/582955 | 1880 // be merged. See https://crbug.com/582955 |
| 1874 | 1881 |
| 1875 // static | 1882 // static |
| 1876 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 1883 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
| 1877 base::WeakPtr<RenderWidgetHostViewAndroid> rwhva, | 1884 base::WeakPtr<RenderWidgetHostViewAndroid> rwhva, |
| 1885 scoped_refptr<cc::Layer> readback_layer, |
| 1878 const gfx::Size& dst_size_in_pixel, | 1886 const gfx::Size& dst_size_in_pixel, |
| 1879 SkColorType color_type, | 1887 SkColorType color_type, |
| 1880 const base::TimeTicks& start_time, | 1888 const base::TimeTicks& start_time, |
| 1881 const ReadbackRequestCallback& callback, | 1889 const ReadbackRequestCallback& callback, |
| 1882 std::unique_ptr<cc::CopyOutputResult> result) { | 1890 std::unique_ptr<cc::CopyOutputResult> result) { |
| 1883 base::ScopedClosureRunner scoped_callback_runner( | 1891 base::ScopedClosureRunner scoped_callback_runner( |
| 1884 base::Bind(callback, SkBitmap(), READBACK_FAILED)); | 1892 base::Bind(callback, SkBitmap(), READBACK_FAILED)); |
| 1885 TRACE_EVENT0("cc", | 1893 TRACE_EVENT0("cc", |
| 1886 "RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult"); | 1894 "RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult"); |
| 1895 readback_layer->RemoveFromParent(); |
| 1887 if (rwhva) | 1896 if (rwhva) |
| 1888 rwhva->UnlockCompositingSurface(); | 1897 rwhva->UnlockCompositingSurface(); |
| 1889 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) | 1898 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |
| 1890 return; | 1899 return; |
| 1891 cc::TextureMailbox texture_mailbox; | 1900 cc::TextureMailbox texture_mailbox; |
| 1892 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 1901 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
| 1893 result->TakeTexture(&texture_mailbox, &release_callback); | 1902 result->TakeTexture(&texture_mailbox, &release_callback); |
| 1894 DCHECK(texture_mailbox.IsTexture()); | 1903 DCHECK(texture_mailbox.IsTexture()); |
| 1895 if (!texture_mailbox.IsTexture()) | 1904 if (!texture_mailbox.IsTexture()) |
| 1896 return; | 1905 return; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1993 case ui::MotionEvent::ACTION_UP: | 2002 case ui::MotionEvent::ACTION_UP: |
| 1994 case ui::MotionEvent::ACTION_POINTER_UP: | 2003 case ui::MotionEvent::ACTION_POINTER_UP: |
| 1995 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.OS.TOUCH_RELEASED", | 2004 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.OS.TOUCH_RELEASED", |
| 1996 delta.InMicroseconds(), 1, 1000000, 50); | 2005 delta.InMicroseconds(), 1, 1000000, 50); |
| 1997 default: | 2006 default: |
| 1998 return; | 2007 return; |
| 1999 } | 2008 } |
| 2000 } | 2009 } |
| 2001 | 2010 |
| 2002 } // namespace content | 2011 } // namespace content |
| OLD | NEW |