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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 is_showing_(!widget_host->is_hidden()), | 142 are_layers_attached_(!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 Loading... |
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 void RenderWidgetHostViewAndroid::GetScaledContentBitmap( | 262 blink::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture( |
263 float scale, | 263 float scale, |
264 gfx::Size* out_size, | 264 gfx::Size* out_size) { |
265 const base::Callback<void(bool, const SkBitmap&)>& result_callback) { | 265 gfx::Size size(gfx::ToCeiledSize( |
266 if (!IsSurfaceAvailableForCopy()) { | 266 gfx::ScaleSize(texture_size_in_layer_, scale))); |
267 result_callback.Run(false, SkBitmap()); | 267 |
268 return; | 268 if (!CompositorImpl::IsInitialized() || |
| 269 texture_id_in_layer_ == 0 || |
| 270 texture_size_in_layer_.IsEmpty() || |
| 271 size.IsEmpty()) { |
| 272 if (out_size) |
| 273 out_size->SetSize(0, 0); |
| 274 |
| 275 return 0; |
269 } | 276 } |
270 | 277 |
271 gfx::Size bounds = layer_->bounds(); | 278 if (out_size) |
272 gfx::Rect src_subrect(bounds); | 279 *out_size = size; |
273 const gfx::Display& display = | 280 |
274 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 281 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); |
275 float device_scale_factor = display.device_scale_factor(); | 282 return helper->CopyAndScaleTexture(texture_id_in_layer_, |
276 DCHECK_GT(device_scale_factor, 0); | 283 texture_size_in_layer_, |
277 gfx::Size dst_size( | 284 size, |
278 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); | 285 true, |
279 *out_size = dst_size; | 286 GLHelper::SCALER_QUALITY_FAST); |
280 CopyFromCompositingSurface( | |
281 src_subrect, dst_size, result_callback, SkBitmap::kARGB_8888_Config); | |
282 } | 287 } |
283 | 288 |
284 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { | 289 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { |
285 if (!CompositorImpl::IsInitialized() || | 290 if (!CompositorImpl::IsInitialized() || |
286 texture_id_in_layer_ == 0 || | 291 texture_id_in_layer_ == 0 || |
287 texture_size_in_layer_.IsEmpty()) | 292 texture_size_in_layer_.IsEmpty()) |
288 return false; | 293 return false; |
289 | 294 |
290 gfx::JavaBitmap bitmap(jbitmap); | 295 gfx::JavaBitmap bitmap(jbitmap); |
291 | 296 |
(...skipping 19 matching lines...) Expand all Loading... |
311 gpu::gles2::GLES2Interface* gl = | 316 gpu::gles2::GLES2Interface* gl = |
312 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); | 317 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); |
313 gl->DeleteTextures(1, &texture); | 318 gl->DeleteTextures(1, &texture); |
314 | 319 |
315 return true; | 320 return true; |
316 } | 321 } |
317 | 322 |
318 bool RenderWidgetHostViewAndroid::HasValidFrame() const { | 323 bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
319 if (!content_view_core_) | 324 if (!content_view_core_) |
320 return false; | 325 return false; |
321 if (!layer_) | |
322 return false; | |
323 | |
324 if (texture_size_in_layer_.IsEmpty()) | 326 if (texture_size_in_layer_.IsEmpty()) |
325 return false; | 327 return false; |
326 | 328 |
327 if (UsingDelegatedRenderer()) { | 329 if (UsingDelegatedRenderer()) { |
328 if (!delegated_renderer_layer_.get()) | 330 if (!delegated_renderer_layer_.get()) |
329 return false; | 331 return false; |
330 } else { | 332 } else { |
331 if (texture_id_in_layer_ == 0) | 333 if (texture_id_in_layer_ == 0) |
332 return false; | 334 return false; |
333 } | 335 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 return false; // ContentViewCore not created yet. | 380 return false; // ContentViewCore not created yet. |
379 | 381 |
380 return content_view_core_->HasFocus(); | 382 return content_view_core_->HasFocus(); |
381 } | 383 } |
382 | 384 |
383 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 385 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
384 return HasValidFrame(); | 386 return HasValidFrame(); |
385 } | 387 } |
386 | 388 |
387 void RenderWidgetHostViewAndroid::Show() { | 389 void RenderWidgetHostViewAndroid::Show() { |
388 if (is_showing_) | 390 if (are_layers_attached_) |
389 return; | 391 return; |
390 | 392 |
391 is_showing_ = true; | 393 are_layers_attached_ = true; |
392 if (layer_) | 394 AttachLayers(); |
393 layer_->SetHideLayerAndSubtree(false); | |
394 | 395 |
395 frame_evictor_->SetVisible(true); | 396 frame_evictor_->SetVisible(true); |
396 WasShown(); | 397 WasShown(); |
397 } | 398 } |
398 | 399 |
399 void RenderWidgetHostViewAndroid::Hide() { | 400 void RenderWidgetHostViewAndroid::Hide() { |
400 if (!is_showing_) | 401 if (!are_layers_attached_) |
401 return; | 402 return; |
402 | 403 |
403 is_showing_ = false; | 404 are_layers_attached_ = false; |
404 if (layer_) | 405 RemoveLayers(); |
405 layer_->SetHideLayerAndSubtree(true); | |
406 | 406 |
407 frame_evictor_->SetVisible(false); | 407 frame_evictor_->SetVisible(false); |
408 WasHidden(); | 408 WasHidden(); |
409 } | 409 } |
410 | 410 |
411 bool RenderWidgetHostViewAndroid::IsShowing() { | 411 bool RenderWidgetHostViewAndroid::IsShowing() { |
412 // ContentViewCoreImpl represents the native side of the Java | 412 // ContentViewCoreImpl represents the native side of the Java |
413 // ContentViewCore. It being NULL means that it is not attached | 413 // ContentViewCore. It being NULL means that it is not attached |
414 // to the View system yet, so we treat this RWHVA as hidden. | 414 // to the View system yet, so we treat this RWHVA as hidden. |
415 return is_showing_ && content_view_core_; | 415 return are_layers_attached_ && content_view_core_; |
416 } | 416 } |
417 | 417 |
418 void RenderWidgetHostViewAndroid::LockResources() { | 418 void RenderWidgetHostViewAndroid::LockResources() { |
419 DCHECK(HasValidFrame()); | 419 DCHECK(HasValidFrame()); |
420 DCHECK(host_); | 420 DCHECK(host_); |
421 DCHECK(!host_->is_hidden()); | 421 DCHECK(!host_->is_hidden()); |
422 frame_evictor_->LockFrame(); | 422 frame_evictor_->LockFrame(); |
423 } | 423 } |
424 | 424 |
425 void RenderWidgetHostViewAndroid::UnlockResources() { | 425 void RenderWidgetHostViewAndroid::UnlockResources() { |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
749 ack); | 749 ack); |
750 } | 750 } |
751 | 751 |
752 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { | 752 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { |
753 if (ack_callbacks_.size()) | 753 if (ack_callbacks_.size()) |
754 return; | 754 return; |
755 SendReturnedDelegatedResources(last_output_surface_id_); | 755 SendReturnedDelegatedResources(last_output_surface_id_); |
756 } | 756 } |
757 | 757 |
758 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { | 758 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { |
759 RemoveLayers(); | 759 if (are_layers_attached_) |
| 760 RemoveLayers(); |
760 frame_provider_ = NULL; | 761 frame_provider_ = NULL; |
761 delegated_renderer_layer_ = NULL; | 762 delegated_renderer_layer_ = NULL; |
762 layer_ = NULL; | 763 layer_ = NULL; |
763 } | 764 } |
764 | 765 |
765 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( | 766 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
766 uint32 output_surface_id, | 767 uint32 output_surface_id, |
767 scoped_ptr<cc::DelegatedFrameData> frame_data) { | 768 scoped_ptr<cc::DelegatedFrameData> frame_data) { |
768 bool has_content = !texture_size_in_layer_.IsEmpty(); | 769 bool has_content = !texture_size_in_layer_.IsEmpty(); |
769 | 770 |
(...skipping 14 matching lines...) Expand all Loading... |
784 | 785 |
785 if (!has_content) { | 786 if (!has_content) { |
786 DestroyDelegatedContent(); | 787 DestroyDelegatedContent(); |
787 } else { | 788 } else { |
788 if (!resource_collection_.get()) { | 789 if (!resource_collection_.get()) { |
789 resource_collection_ = new cc::DelegatedFrameResourceCollection; | 790 resource_collection_ = new cc::DelegatedFrameResourceCollection; |
790 resource_collection_->SetClient(this); | 791 resource_collection_->SetClient(this); |
791 } | 792 } |
792 if (!frame_provider_ || | 793 if (!frame_provider_ || |
793 texture_size_in_layer_ != frame_provider_->frame_size()) { | 794 texture_size_in_layer_ != frame_provider_->frame_size()) { |
794 RemoveLayers(); | 795 if (are_layers_attached_) |
| 796 RemoveLayers(); |
795 frame_provider_ = new cc::DelegatedFrameProvider( | 797 frame_provider_ = new cc::DelegatedFrameProvider( |
796 resource_collection_.get(), frame_data.Pass()); | 798 resource_collection_.get(), frame_data.Pass()); |
797 delegated_renderer_layer_ = | 799 delegated_renderer_layer_ = |
798 cc::DelegatedRendererLayer::Create(frame_provider_); | 800 cc::DelegatedRendererLayer::Create(frame_provider_); |
799 layer_ = delegated_renderer_layer_; | 801 layer_ = delegated_renderer_layer_; |
800 AttachLayers(); | 802 if (are_layers_attached_) |
| 803 AttachLayers(); |
801 } else { | 804 } else { |
802 frame_provider_->SetFrameData(frame_data.Pass()); | 805 frame_provider_->SetFrameData(frame_data.Pass()); |
803 } | 806 } |
804 } | 807 } |
805 | 808 |
806 if (delegated_renderer_layer_.get()) { | 809 if (delegated_renderer_layer_.get()) { |
807 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); | 810 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); |
808 delegated_renderer_layer_->SetIsDrawable(true); | 811 delegated_renderer_layer_->SetIsDrawable(true); |
809 delegated_renderer_layer_->SetContentsOpaque(true); | 812 delegated_renderer_layer_->SetContentsOpaque(true); |
810 delegated_renderer_layer_->SetBounds(content_size_in_layer_); | 813 delegated_renderer_layer_->SetBounds(content_size_in_layer_); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 | 852 |
850 DCHECK(frame->delegated_frame_data); | 853 DCHECK(frame->delegated_frame_data); |
851 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); | 854 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
852 | 855 |
853 cc::RenderPass* root_pass = | 856 cc::RenderPass* root_pass = |
854 frame->delegated_frame_data->render_pass_list.back(); | 857 frame->delegated_frame_data->render_pass_list.back(); |
855 texture_size_in_layer_ = root_pass->output_rect.size(); | 858 texture_size_in_layer_ = root_pass->output_rect.size(); |
856 ComputeContentsSize(frame->metadata); | 859 ComputeContentsSize(frame->metadata); |
857 | 860 |
858 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); | 861 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
859 frame_evictor_->SwappedFrame(!host_->is_hidden()); | |
860 return; | 862 return; |
861 } | 863 } |
862 | 864 |
863 DCHECK(!UsingDelegatedRenderer()); | 865 DCHECK(!UsingDelegatedRenderer()); |
864 | 866 |
865 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) | 867 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) |
866 return; | 868 return; |
867 | 869 |
868 if (output_surface_id != last_output_surface_id_) { | 870 if (output_surface_id != last_output_surface_id_) { |
869 current_mailbox_ = gpu::Mailbox(); | 871 current_mailbox_ = gpu::Mailbox(); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1002 | 1004 |
1003 void RenderWidgetHostViewAndroid::AttachLayers() { | 1005 void RenderWidgetHostViewAndroid::AttachLayers() { |
1004 if (!content_view_core_) | 1006 if (!content_view_core_) |
1005 return; | 1007 return; |
1006 if (!layer_.get()) | 1008 if (!layer_.get()) |
1007 return; | 1009 return; |
1008 | 1010 |
1009 content_view_core_->AttachLayer(layer_); | 1011 content_view_core_->AttachLayer(layer_); |
1010 if (overscroll_effect_enabled_) | 1012 if (overscroll_effect_enabled_) |
1011 overscroll_effect_->Enable(); | 1013 overscroll_effect_->Enable(); |
1012 layer_->SetHideLayerAndSubtree(!is_showing_); | |
1013 } | 1014 } |
1014 | 1015 |
1015 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1016 void RenderWidgetHostViewAndroid::RemoveLayers() { |
1016 if (!content_view_core_) | 1017 if (!content_view_core_) |
1017 return; | 1018 return; |
1018 if (!layer_.get()) | 1019 if (!layer_.get()) |
1019 return; | 1020 return; |
1020 | 1021 |
1021 content_view_core_->RemoveLayer(layer_); | 1022 content_view_core_->RemoveLayer(layer_); |
1022 overscroll_effect_->Disable(); | 1023 overscroll_effect_->Disable(); |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1323 (offset.y() + clipped_content.height()) * uv_scale.y())); | 1324 (offset.y() + clipped_content.height()) * uv_scale.y())); |
1324 } | 1325 } |
1325 | 1326 |
1326 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1327 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1327 return cached_background_color_; | 1328 return cached_background_color_; |
1328 } | 1329 } |
1329 | 1330 |
1330 void RenderWidgetHostViewAndroid::OnOverscrolled( | 1331 void RenderWidgetHostViewAndroid::OnOverscrolled( |
1331 gfx::Vector2dF accumulated_overscroll, | 1332 gfx::Vector2dF accumulated_overscroll, |
1332 gfx::Vector2dF current_fling_velocity) { | 1333 gfx::Vector2dF current_fling_velocity) { |
1333 if (!content_view_core_ || !layer_ || !is_showing_) | 1334 if (!content_view_core_ || !are_layers_attached_) |
1334 return; | 1335 return; |
1335 | 1336 |
1336 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), | 1337 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), |
1337 base::TimeTicks::Now(), | 1338 base::TimeTicks::Now(), |
1338 accumulated_overscroll, | 1339 accumulated_overscroll, |
1339 current_fling_velocity)) { | 1340 current_fling_velocity)) { |
1340 content_view_core_->SetNeedsAnimate(); | 1341 content_view_core_->SetNeedsAnimate(); |
1341 } | 1342 } |
1342 } | 1343 } |
1343 | 1344 |
1344 void RenderWidgetHostViewAndroid::DidStopFlinging() { | 1345 void RenderWidgetHostViewAndroid::DidStopFlinging() { |
1345 if (content_view_core_) | 1346 if (content_view_core_) |
1346 content_view_core_->DidStopFlinging(); | 1347 content_view_core_->DidStopFlinging(); |
1347 } | 1348 } |
1348 | 1349 |
1349 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1350 void RenderWidgetHostViewAndroid::SetContentViewCore( |
1350 ContentViewCoreImpl* content_view_core) { | 1351 ContentViewCoreImpl* content_view_core) { |
1351 RunAckCallbacks(); | 1352 RunAckCallbacks(); |
1352 | 1353 |
1353 RemoveLayers(); | 1354 if (are_layers_attached_) |
| 1355 RemoveLayers(); |
| 1356 |
1354 if (content_view_core_ && !using_synchronous_compositor_) | 1357 if (content_view_core_ && !using_synchronous_compositor_) |
1355 content_view_core_->GetWindowAndroid()->RemoveObserver(this); | 1358 content_view_core_->GetWindowAndroid()->RemoveObserver(this); |
1356 | 1359 |
1357 content_view_core_ = content_view_core; | 1360 content_view_core_ = content_view_core; |
1358 | 1361 |
1359 if (GetBrowserAccessibilityManager()) { | 1362 if (GetBrowserAccessibilityManager()) { |
1360 base::android::ScopedJavaLocalRef<jobject> obj; | 1363 base::android::ScopedJavaLocalRef<jobject> obj; |
1361 if (content_view_core_) | 1364 if (content_view_core_) |
1362 obj = content_view_core_->GetJavaObject(); | 1365 obj = content_view_core_->GetJavaObject(); |
1363 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> | 1366 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> |
1364 SetContentViewCore(obj); | 1367 SetContentViewCore(obj); |
1365 } | 1368 } |
1366 | 1369 |
1367 AttachLayers(); | 1370 if (are_layers_attached_) { |
1368 if (content_view_core_ && !using_synchronous_compositor_) | 1371 AttachLayers(); |
1369 content_view_core_->GetWindowAndroid()->AddObserver(this); | 1372 if (content_view_core_ && !using_synchronous_compositor_) |
| 1373 content_view_core_->GetWindowAndroid()->AddObserver(this); |
| 1374 } |
1370 } | 1375 } |
1371 | 1376 |
1372 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1377 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
1373 while (!ack_callbacks_.empty()) { | 1378 while (!ack_callbacks_.empty()) { |
1374 ack_callbacks_.front().Run(); | 1379 ack_callbacks_.front().Run(); |
1375 ack_callbacks_.pop(); | 1380 ack_callbacks_.pop(); |
1376 } | 1381 } |
1377 } | 1382 } |
1378 | 1383 |
1379 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { | 1384 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { |
(...skipping 15 matching lines...) Expand all Loading... |
1395 RunAckCallbacks(); | 1400 RunAckCallbacks(); |
1396 } | 1401 } |
1397 | 1402 |
1398 // static | 1403 // static |
1399 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 1404 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
1400 const gfx::Size& dst_size_in_pixel, | 1405 const gfx::Size& dst_size_in_pixel, |
1401 const SkBitmap::Config bitmap_config, | 1406 const SkBitmap::Config bitmap_config, |
1402 const base::TimeTicks& start_time, | 1407 const base::TimeTicks& start_time, |
1403 const base::Callback<void(bool, const SkBitmap&)>& callback, | 1408 const base::Callback<void(bool, const SkBitmap&)>& callback, |
1404 scoped_ptr<cc::CopyOutputResult> result) { | 1409 scoped_ptr<cc::CopyOutputResult> result) { |
| 1410 DCHECK(result->HasTexture()); |
1405 base::ScopedClosureRunner scoped_callback_runner( | 1411 base::ScopedClosureRunner scoped_callback_runner( |
1406 base::Bind(callback, false, SkBitmap())); | 1412 base::Bind(callback, false, SkBitmap())); |
1407 | 1413 |
1408 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) | 1414 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |
1409 return; | 1415 return; |
1410 | 1416 |
1411 scoped_ptr<SkBitmap> bitmap(new SkBitmap); | 1417 scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
1412 bitmap->setConfig(bitmap_config, | 1418 bitmap->setConfig(bitmap_config, |
1413 dst_size_in_pixel.width(), | 1419 dst_size_in_pixel.width(), |
1414 dst_size_in_pixel.height(), | 1420 dst_size_in_pixel.height(), |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1498 // RenderWidgetHostView, public: | 1504 // RenderWidgetHostView, public: |
1499 | 1505 |
1500 // static | 1506 // static |
1501 RenderWidgetHostView* | 1507 RenderWidgetHostView* |
1502 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1508 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
1503 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1509 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
1504 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1510 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
1505 } | 1511 } |
1506 | 1512 |
1507 } // namespace content | 1513 } // namespace content |
OLD | NEW |