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

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

Issue 143803004: android: Migrate old content readback to use async readback (and delegated renderer) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: turn clipping off for readback Created 6 years, 10 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 return latency_info; 132 return latency_info;
133 } 133 }
134 134
135 } // anonymous namespace 135 } // anonymous namespace
136 136
137 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 137 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
138 RenderWidgetHostImpl* widget_host, 138 RenderWidgetHostImpl* widget_host,
139 ContentViewCoreImpl* content_view_core) 139 ContentViewCoreImpl* content_view_core)
140 : host_(widget_host), 140 : host_(widget_host),
141 needs_begin_frame_(false), 141 needs_begin_frame_(false),
142 are_layers_attached_(!widget_host->is_hidden()), 142 is_showing_(!widget_host->is_hidden()),
143 content_view_core_(NULL), 143 content_view_core_(NULL),
144 ime_adapter_android_(this), 144 ime_adapter_android_(this),
145 cached_background_color_(SK_ColorWHITE), 145 cached_background_color_(SK_ColorWHITE),
146 texture_id_in_layer_(0), 146 texture_id_in_layer_(0),
147 last_output_surface_id_(kUndefinedOutputSurfaceId), 147 last_output_surface_id_(kUndefinedOutputSurfaceId),
148 weak_ptr_factory_(this), 148 weak_ptr_factory_(this),
149 overscroll_effect_enabled_( 149 overscroll_effect_enabled_(
150 !CommandLine::ForCurrentProcess()-> 150 !CommandLine::ForCurrentProcess()->
151 HasSwitch(switches::kDisableOverscrollEdgeEffect)), 151 HasSwitch(switches::kDisableOverscrollEdgeEffect)),
152 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), 152 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)),
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // Ignore the given size as only the Java code has the power to 252 // Ignore the given size as only the Java code has the power to
253 // resize the view on Android. 253 // resize the view on Android.
254 default_size_ = size; 254 default_size_ = size;
255 WasResized(); 255 WasResized();
256 } 256 }
257 257
258 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { 258 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
259 SetSize(rect.size()); 259 SetSize(rect.size());
260 } 260 }
261 261
262 blink::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture( 262 void RenderWidgetHostViewAndroid::GetScaledContentBitmap(
263 float scale, 263 float scale,
264 gfx::Size* out_size) { 264 gfx::Size* out_size,
265 gfx::Size size(gfx::ToCeiledSize( 265 const base::Callback<void(bool, const SkBitmap&)>& callback) {
266 gfx::ScaleSize(texture_size_in_layer_, scale))); 266 gfx::Size bounds = layer_->bounds();
267 267 gfx::Rect src_subrect(bounds);
268 if (!CompositorImpl::IsInitialized() || 268 const gfx::Display& display =
269 texture_id_in_layer_ == 0 || 269 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
270 texture_size_in_layer_.IsEmpty() || 270 float device_scale_factor = display.device_scale_factor();
271 size.IsEmpty()) { 271 DCHECK_GT(device_scale_factor, 0);
272 if (out_size) 272 gfx::Size dst_size(
273 out_size->SetSize(0, 0); 273 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor)));
274 274 *out_size = dst_size;
275 return 0; 275 view->ResetClipping();
no sievers 2014/01/28 20:47:21 Not sure how this is used by the app, it's really
powei 2014/01/29 13:53:17 Done. Not affecting delegated rendering so remove
276 } 276 CopyFromCompositingSurface(src_subrect, dst_size, callback, false);
277
278 if (out_size)
279 *out_size = size;
280
281 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper();
282 return helper->CopyAndScaleTexture(texture_id_in_layer_,
283 texture_size_in_layer_,
284 size,
285 true,
286 GLHelper::SCALER_QUALITY_FAST);
287 } 277 }
288 278
289 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { 279 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
290 if (!CompositorImpl::IsInitialized() || 280 if (!CompositorImpl::IsInitialized() ||
291 texture_id_in_layer_ == 0 || 281 texture_id_in_layer_ == 0 ||
292 texture_size_in_layer_.IsEmpty()) 282 texture_size_in_layer_.IsEmpty())
293 return false; 283 return false;
294 284
295 gfx::JavaBitmap bitmap(jbitmap); 285 gfx::JavaBitmap bitmap(jbitmap);
296 286
(...skipping 18 matching lines...) Expand all
315 305
316 gpu::gles2::GLES2Interface* gl = 306 gpu::gles2::GLES2Interface* gl =
317 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); 307 ImageTransportFactoryAndroid::GetInstance()->GetContextGL();
318 gl->DeleteTextures(1, &texture); 308 gl->DeleteTextures(1, &texture);
319 309
320 return true; 310 return true;
321 } 311 }
322 312
323 bool RenderWidgetHostViewAndroid::HasValidFrame() const { 313 bool RenderWidgetHostViewAndroid::HasValidFrame() const {
324 if (!content_view_core_) 314 if (!content_view_core_)
325 return false; 315 return false;
no sievers 2014/01/28 20:47:21 nit: Can we just check for !layer_ here. If the l
powei 2014/01/29 13:53:17 Done
316 if (!layer_ || !layer_->parent())
317 return false;
318
326 if (texture_size_in_layer_.IsEmpty()) 319 if (texture_size_in_layer_.IsEmpty())
327 return false; 320 return false;
328 321
329 if (UsingDelegatedRenderer()) { 322 if (UsingDelegatedRenderer()) {
330 if (!delegated_renderer_layer_.get()) 323 if (!delegated_renderer_layer_.get())
331 return false; 324 return false;
332 } else { 325 } else {
333 if (texture_id_in_layer_ == 0) 326 if (texture_id_in_layer_ == 0)
334 return false; 327 return false;
335 } 328 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 return false; // ContentViewCore not created yet. 373 return false; // ContentViewCore not created yet.
381 374
382 return content_view_core_->HasFocus(); 375 return content_view_core_->HasFocus();
383 } 376 }
384 377
385 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { 378 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const {
386 return HasValidFrame(); 379 return HasValidFrame();
387 } 380 }
388 381
389 void RenderWidgetHostViewAndroid::Show() { 382 void RenderWidgetHostViewAndroid::Show() {
390 if (are_layers_attached_) 383 if (is_showing_)
391 return; 384 return;
392 385
393 are_layers_attached_ = true; 386 is_showing_ = true;
394 AttachLayers(); 387 AttachLayers();
no sievers 2014/01/28 20:47:21 Can this just call layer_->SetHideLayerAndSubtree(
powei 2014/01/29 13:53:17 Done.
395 388
396 frame_evictor_->SetVisible(true); 389 frame_evictor_->SetVisible(true);
397 WasShown(); 390 WasShown();
398 } 391 }
399 392
400 void RenderWidgetHostViewAndroid::Hide() { 393 void RenderWidgetHostViewAndroid::Hide() {
401 if (!are_layers_attached_) 394 if (!is_showing_)
402 return; 395 return;
403 396
404 are_layers_attached_ = false; 397 is_showing_ = false;
405 RemoveLayers(); 398 AttachLayers();
no sievers 2014/01/28 20:47:21 Can this just call layer_->SetHideLayerAndSubtree(
powei 2014/01/29 13:53:17 Done.
406 399
407 frame_evictor_->SetVisible(false); 400 frame_evictor_->SetVisible(false);
408 WasHidden(); 401 WasHidden();
409 } 402 }
410 403
411 bool RenderWidgetHostViewAndroid::IsShowing() { 404 bool RenderWidgetHostViewAndroid::IsShowing() {
412 // ContentViewCoreImpl represents the native side of the Java 405 // ContentViewCoreImpl represents the native side of the Java
413 // ContentViewCore. It being NULL means that it is not attached 406 // ContentViewCore. It being NULL means that it is not attached
414 // to the View system yet, so we treat this RWHVA as hidden. 407 // to the View system yet, so we treat this RWHVA as hidden.
415 return are_layers_attached_ && content_view_core_; 408 return is_showing_ && content_view_core_;
416 } 409 }
417 410
418 void RenderWidgetHostViewAndroid::LockResources() { 411 void RenderWidgetHostViewAndroid::LockResources() {
419 DCHECK(HasValidFrame()); 412 DCHECK(HasValidFrame());
420 DCHECK(host_); 413 DCHECK(host_);
421 DCHECK(!host_->is_hidden()); 414 DCHECK(!host_->is_hidden());
422 frame_evictor_->LockFrame(); 415 frame_evictor_->LockFrame();
423 } 416 }
424 417
425 void RenderWidgetHostViewAndroid::UnlockResources() { 418 void RenderWidgetHostViewAndroid::UnlockResources() {
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 start_time, 676 start_time,
684 callback)); 677 callback));
685 } else { 678 } else {
686 request = cc::CopyOutputRequest::CreateRequest(base::Bind( 679 request = cc::CopyOutputRequest::CreateRequest(base::Bind(
687 &RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult, 680 &RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult,
688 dst_size_in_pixel, 681 dst_size_in_pixel,
689 bitmap_config, 682 bitmap_config,
690 start_time, 683 start_time,
691 callback)); 684 callback));
692 } 685 }
686
693 request->set_area(src_subrect_in_pixel); 687 request->set_area(src_subrect_in_pixel);
694 layer_->RequestCopyOfOutput(request.Pass()); 688 layer_->RequestCopyOfOutput(request.Pass());
695 } 689 }
696 690
697 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( 691 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame(
698 const gfx::Rect& src_subrect, 692 const gfx::Rect& src_subrect,
699 const scoped_refptr<media::VideoFrame>& target, 693 const scoped_refptr<media::VideoFrame>& target,
700 const base::Callback<void(bool)>& callback) { 694 const base::Callback<void(bool)>& callback) {
701 NOTIMPLEMENTED(); 695 NOTIMPLEMENTED();
702 callback.Run(false); 696 callback.Run(false);
(...skipping 29 matching lines...) Expand all
732 output_surface_id, 726 output_surface_id,
733 host_->GetProcess()->GetID(), 727 host_->GetProcess()->GetID(),
734 ack); 728 ack);
735 } 729 }
736 730
737 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { 731 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() {
738 // TODO(danakj): If no ack is pending, collect and send resources now. 732 // TODO(danakj): If no ack is pending, collect and send resources now.
739 } 733 }
740 734
741 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { 735 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
742 if (are_layers_attached_) 736 RemoveLayers();
743 RemoveLayers();
744 frame_provider_ = NULL; 737 frame_provider_ = NULL;
745 delegated_renderer_layer_ = NULL; 738 delegated_renderer_layer_ = NULL;
746 layer_ = NULL; 739 layer_ = NULL;
747 } 740 }
748 741
749 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( 742 void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
750 uint32 output_surface_id, 743 uint32 output_surface_id,
751 scoped_ptr<cc::DelegatedFrameData> frame_data) { 744 scoped_ptr<cc::DelegatedFrameData> frame_data) {
752 bool has_content = !texture_size_in_layer_.IsEmpty(); 745 bool has_content = !texture_size_in_layer_.IsEmpty();
753 746
(...skipping 15 matching lines...) Expand all
769 762
770 if (!has_content) { 763 if (!has_content) {
771 DestroyDelegatedContent(); 764 DestroyDelegatedContent();
772 } else { 765 } else {
773 if (!resource_collection_.get()) { 766 if (!resource_collection_.get()) {
774 resource_collection_ = new cc::DelegatedFrameResourceCollection; 767 resource_collection_ = new cc::DelegatedFrameResourceCollection;
775 resource_collection_->SetClient(this); 768 resource_collection_->SetClient(this);
776 } 769 }
777 if (!frame_provider_ || 770 if (!frame_provider_ ||
778 texture_size_in_layer_ != frame_provider_->frame_size()) { 771 texture_size_in_layer_ != frame_provider_->frame_size()) {
779 if (are_layers_attached_) 772 RemoveLayers();
780 RemoveLayers();
781 frame_provider_ = new cc::DelegatedFrameProvider( 773 frame_provider_ = new cc::DelegatedFrameProvider(
782 resource_collection_.get(), frame_data.Pass()); 774 resource_collection_.get(), frame_data.Pass());
783 delegated_renderer_layer_ = 775 delegated_renderer_layer_ =
784 cc::DelegatedRendererLayer::Create(frame_provider_); 776 cc::DelegatedRendererLayer::Create(frame_provider_);
785 layer_ = delegated_renderer_layer_; 777 layer_ = delegated_renderer_layer_;
786 if (are_layers_attached_) 778 AttachLayers();
787 AttachLayers();
788 } else { 779 } else {
789 frame_provider_->SetFrameData(frame_data.Pass()); 780 frame_provider_->SetFrameData(frame_data.Pass());
790 } 781 }
791 } 782 }
792 783
793 if (delegated_renderer_layer_.get()) { 784 if (delegated_renderer_layer_.get()) {
794 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); 785 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_);
795 delegated_renderer_layer_->SetIsDrawable(true); 786 delegated_renderer_layer_->SetIsDrawable(true);
796 delegated_renderer_layer_->SetContentsOpaque(true); 787 delegated_renderer_layer_->SetContentsOpaque(true);
797 delegated_renderer_layer_->SetBounds(content_size_in_layer_); 788 delegated_renderer_layer_->SetBounds(content_size_in_layer_);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 827
837 DCHECK(frame->delegated_frame_data); 828 DCHECK(frame->delegated_frame_data);
838 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); 829 DCHECK(!frame->delegated_frame_data->render_pass_list.empty());
839 830
840 cc::RenderPass* root_pass = 831 cc::RenderPass* root_pass =
841 frame->delegated_frame_data->render_pass_list.back(); 832 frame->delegated_frame_data->render_pass_list.back();
842 texture_size_in_layer_ = root_pass->output_rect.size(); 833 texture_size_in_layer_ = root_pass->output_rect.size();
843 ComputeContentsSize(frame->metadata); 834 ComputeContentsSize(frame->metadata);
844 835
845 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); 836 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
837 frame_evictor_->SwappedFrame(!host_->is_hidden());
846 return; 838 return;
847 } 839 }
848 840
849 DCHECK(!UsingDelegatedRenderer()); 841 DCHECK(!UsingDelegatedRenderer());
850 842
851 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) 843 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero())
852 return; 844 return;
853 845
854 if (output_surface_id != last_output_surface_id_) { 846 if (output_surface_id != last_output_surface_id_) {
855 current_mailbox_ = gpu::Mailbox(); 847 current_mailbox_ = gpu::Mailbox();
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 980
989 void RenderWidgetHostViewAndroid::AttachLayers() { 981 void RenderWidgetHostViewAndroid::AttachLayers() {
990 if (!content_view_core_) 982 if (!content_view_core_)
991 return; 983 return;
992 if (!layer_.get()) 984 if (!layer_.get())
993 return; 985 return;
994 986
995 content_view_core_->AttachLayer(layer_); 987 content_view_core_->AttachLayer(layer_);
996 if (overscroll_effect_enabled_) 988 if (overscroll_effect_enabled_)
997 overscroll_effect_->Enable(); 989 overscroll_effect_->Enable();
990 layer_->SetHideLayerAndSubtree(!is_showing_);
998 } 991 }
999 992
1000 void RenderWidgetHostViewAndroid::RemoveLayers() { 993 void RenderWidgetHostViewAndroid::RemoveLayers() {
1001 if (!content_view_core_) 994 if (!content_view_core_)
1002 return; 995 return;
1003 if (!layer_.get()) 996 if (!layer_.get())
1004 return; 997 return;
1005 998
1006 content_view_core_->RemoveLayer(layer_); 999 content_view_core_->RemoveLayer(layer_);
1007 overscroll_effect_->Disable(); 1000 overscroll_effect_->Disable();
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 (offset.y() + clipped_content.height()) * uv_scale.y())); 1312 (offset.y() + clipped_content.height()) * uv_scale.y()));
1320 } 1313 }
1321 1314
1322 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1315 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1323 return cached_background_color_; 1316 return cached_background_color_;
1324 } 1317 }
1325 1318
1326 void RenderWidgetHostViewAndroid::OnOverscrolled( 1319 void RenderWidgetHostViewAndroid::OnOverscrolled(
1327 gfx::Vector2dF accumulated_overscroll, 1320 gfx::Vector2dF accumulated_overscroll,
1328 gfx::Vector2dF current_fling_velocity) { 1321 gfx::Vector2dF current_fling_velocity) {
1329 if (!content_view_core_ || !are_layers_attached_) 1322 if (!content_view_core_ || !layer_ || !is_showing_)
1330 return; 1323 return;
1331 1324
1332 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), 1325 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(),
1333 base::TimeTicks::Now(), 1326 base::TimeTicks::Now(),
1334 accumulated_overscroll, 1327 accumulated_overscroll,
1335 current_fling_velocity)) { 1328 current_fling_velocity)) {
1336 content_view_core_->SetNeedsAnimate(); 1329 content_view_core_->SetNeedsAnimate();
1337 } 1330 }
1338 } 1331 }
1339 1332
1340 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1333 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1341 if (content_view_core_) 1334 if (content_view_core_)
1342 content_view_core_->DidStopFlinging(); 1335 content_view_core_->DidStopFlinging();
1343 } 1336 }
1344 1337
1345 void RenderWidgetHostViewAndroid::SetContentViewCore( 1338 void RenderWidgetHostViewAndroid::SetContentViewCore(
1346 ContentViewCoreImpl* content_view_core) { 1339 ContentViewCoreImpl* content_view_core) {
1347 RunAckCallbacks(); 1340 RunAckCallbacks();
1348 1341
1349 if (are_layers_attached_) 1342 RemoveLayers();
1350 RemoveLayers();
1351
1352 if (content_view_core_ && !using_synchronous_compositor_) 1343 if (content_view_core_ && !using_synchronous_compositor_)
1353 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1344 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1354 1345
1355 content_view_core_ = content_view_core; 1346 content_view_core_ = content_view_core;
1356 1347
1357 if (GetBrowserAccessibilityManager()) { 1348 if (GetBrowserAccessibilityManager()) {
1358 base::android::ScopedJavaLocalRef<jobject> obj; 1349 base::android::ScopedJavaLocalRef<jobject> obj;
1359 if (content_view_core_) 1350 if (content_view_core_)
1360 obj = content_view_core_->GetJavaObject(); 1351 obj = content_view_core_->GetJavaObject();
1361 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1352 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1362 SetContentViewCore(obj); 1353 SetContentViewCore(obj);
1363 } 1354 }
1364 1355
1365 if (are_layers_attached_) { 1356 AttachLayers();
1366 AttachLayers(); 1357 if (content_view_core_ && !using_synchronous_compositor_)
1367 if (content_view_core_ && !using_synchronous_compositor_) 1358 content_view_core_->GetWindowAndroid()->AddObserver(this);
1368 content_view_core_->GetWindowAndroid()->AddObserver(this);
1369 }
1370 1359
1371 // Ensure ContentsViewCore is aware of the current touch handling state, eg. 1360 // Ensure ContentsViewCore is aware of the current touch handling state, eg.
1372 // in case we've already been running JS for the page as part of preload. 1361 // in case we've already been running JS for the page as part of preload.
1373 if (content_view_core_ && host_) 1362 if (content_view_core_ && host_)
1374 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler()); 1363 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler());
1375 } 1364 }
1376 1365
1377 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1366 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1378 while (!ack_callbacks_.empty()) { 1367 while (!ack_callbacks_.empty()) {
1379 ack_callbacks_.front().Run(); 1368 ack_callbacks_.front().Run();
(...skipping 26 matching lines...) Expand all
1406 RunAckCallbacks(); 1395 RunAckCallbacks();
1407 } 1396 }
1408 1397
1409 // static 1398 // static
1410 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( 1399 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
1411 const gfx::Size& dst_size_in_pixel, 1400 const gfx::Size& dst_size_in_pixel,
1412 const SkBitmap::Config bitmap_config, 1401 const SkBitmap::Config bitmap_config,
1413 const base::TimeTicks& start_time, 1402 const base::TimeTicks& start_time,
1414 const base::Callback<void(bool, const SkBitmap&)>& callback, 1403 const base::Callback<void(bool, const SkBitmap&)>& callback,
1415 scoped_ptr<cc::CopyOutputResult> result) { 1404 scoped_ptr<cc::CopyOutputResult> result) {
1416 DCHECK(result->HasTexture());
no sievers 2014/01/28 20:47:21 just wondering: when is this failing?
powei 2014/01/29 13:53:17 Don't have a consistent repo, but I do hit this so
1417 base::ScopedClosureRunner scoped_callback_runner( 1405 base::ScopedClosureRunner scoped_callback_runner(
1418 base::Bind(callback, false, SkBitmap())); 1406 base::Bind(callback, false, SkBitmap()));
1419 1407
1420 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) 1408 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty())
1421 return; 1409 return;
1422 1410
1423 scoped_ptr<SkBitmap> bitmap(new SkBitmap); 1411 scoped_ptr<SkBitmap> bitmap(new SkBitmap);
1424 bitmap->setConfig(bitmap_config, 1412 bitmap->setConfig(bitmap_config,
1425 dst_size_in_pixel.width(), 1413 dst_size_in_pixel.width(),
1426 dst_size_in_pixel.height(), 1414 dst_size_in_pixel.height(),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 // RenderWidgetHostView, public: 1498 // RenderWidgetHostView, public:
1511 1499
1512 // static 1500 // static
1513 RenderWidgetHostView* 1501 RenderWidgetHostView*
1514 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1502 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1515 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1503 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1516 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1504 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1517 } 1505 }
1518 1506
1519 } // namespace content 1507 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698