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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 151103010: Revert of 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: 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_android.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index dd8e37f01b8cdbe2c6f168cbdc2aa569b2bd2818..aca1c5801b9212072e22a4d9d578feaefd47d44e 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -139,7 +139,7 @@
ContentViewCoreImpl* content_view_core)
: host_(widget_host),
needs_begin_frame_(false),
- is_showing_(!widget_host->is_hidden()),
+ are_layers_attached_(!widget_host->is_hidden()),
content_view_core_(NULL),
ime_adapter_android_(this),
cached_background_color_(SK_ColorWHITE),
@@ -259,26 +259,31 @@
SetSize(rect.size());
}
-void RenderWidgetHostViewAndroid::GetScaledContentBitmap(
+blink::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture(
float scale,
- gfx::Size* out_size,
- const base::Callback<void(bool, const SkBitmap&)>& result_callback) {
- if (!IsSurfaceAvailableForCopy()) {
- result_callback.Run(false, SkBitmap());
- return;
- }
-
- gfx::Size bounds = layer_->bounds();
- gfx::Rect src_subrect(bounds);
- const gfx::Display& display =
- gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
- float device_scale_factor = display.device_scale_factor();
- DCHECK_GT(device_scale_factor, 0);
- gfx::Size dst_size(
- gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor)));
- *out_size = dst_size;
- CopyFromCompositingSurface(
- src_subrect, dst_size, result_callback, SkBitmap::kARGB_8888_Config);
+ gfx::Size* out_size) {
+ gfx::Size size(gfx::ToCeiledSize(
+ gfx::ScaleSize(texture_size_in_layer_, scale)));
+
+ if (!CompositorImpl::IsInitialized() ||
+ texture_id_in_layer_ == 0 ||
+ texture_size_in_layer_.IsEmpty() ||
+ size.IsEmpty()) {
+ if (out_size)
+ out_size->SetSize(0, 0);
+
+ return 0;
+ }
+
+ if (out_size)
+ *out_size = size;
+
+ GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper();
+ return helper->CopyAndScaleTexture(texture_id_in_layer_,
+ texture_size_in_layer_,
+ size,
+ true,
+ GLHelper::SCALER_QUALITY_FAST);
}
bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
@@ -318,9 +323,6 @@
bool RenderWidgetHostViewAndroid::HasValidFrame() const {
if (!content_view_core_)
return false;
- if (!layer_)
- return false;
-
if (texture_size_in_layer_.IsEmpty())
return false;
@@ -385,24 +387,22 @@
}
void RenderWidgetHostViewAndroid::Show() {
- if (is_showing_)
- return;
-
- is_showing_ = true;
- if (layer_)
- layer_->SetHideLayerAndSubtree(false);
+ if (are_layers_attached_)
+ return;
+
+ are_layers_attached_ = true;
+ AttachLayers();
frame_evictor_->SetVisible(true);
WasShown();
}
void RenderWidgetHostViewAndroid::Hide() {
- if (!is_showing_)
- return;
-
- is_showing_ = false;
- if (layer_)
- layer_->SetHideLayerAndSubtree(true);
+ if (!are_layers_attached_)
+ return;
+
+ are_layers_attached_ = false;
+ RemoveLayers();
frame_evictor_->SetVisible(false);
WasHidden();
@@ -412,7 +412,7 @@
// ContentViewCoreImpl represents the native side of the Java
// ContentViewCore. It being NULL means that it is not attached
// to the View system yet, so we treat this RWHVA as hidden.
- return is_showing_ && content_view_core_;
+ return are_layers_attached_ && content_view_core_;
}
void RenderWidgetHostViewAndroid::LockResources() {
@@ -739,7 +739,8 @@
}
void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
- RemoveLayers();
+ if (are_layers_attached_)
+ RemoveLayers();
frame_provider_ = NULL;
delegated_renderer_layer_ = NULL;
layer_ = NULL;
@@ -775,13 +776,15 @@
}
if (!frame_provider_ ||
texture_size_in_layer_ != frame_provider_->frame_size()) {
- RemoveLayers();
+ if (are_layers_attached_)
+ RemoveLayers();
frame_provider_ = new cc::DelegatedFrameProvider(
resource_collection_.get(), frame_data.Pass());
delegated_renderer_layer_ =
cc::DelegatedRendererLayer::Create(frame_provider_);
layer_ = delegated_renderer_layer_;
- AttachLayers();
+ if (are_layers_attached_)
+ AttachLayers();
} else {
frame_provider_->SetFrameData(frame_data.Pass());
}
@@ -840,7 +843,6 @@
ComputeContentsSize(frame->metadata);
SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
- frame_evictor_->SwappedFrame(!host_->is_hidden());
return;
}
@@ -993,7 +995,6 @@
content_view_core_->AttachLayer(layer_);
if (overscroll_effect_enabled_)
overscroll_effect_->Enable();
- layer_->SetHideLayerAndSubtree(!is_showing_);
}
void RenderWidgetHostViewAndroid::RemoveLayers() {
@@ -1314,7 +1315,7 @@
void RenderWidgetHostViewAndroid::OnOverscrolled(
gfx::Vector2dF accumulated_overscroll,
gfx::Vector2dF current_fling_velocity) {
- if (!content_view_core_ || !layer_ || !is_showing_)
+ if (!content_view_core_ || !are_layers_attached_)
return;
if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(),
@@ -1334,7 +1335,9 @@
ContentViewCoreImpl* content_view_core) {
RunAckCallbacks();
- RemoveLayers();
+ if (are_layers_attached_)
+ RemoveLayers();
+
if (content_view_core_ && !using_synchronous_compositor_)
content_view_core_->GetWindowAndroid()->RemoveObserver(this);
@@ -1348,9 +1351,11 @@
SetContentViewCore(obj);
}
- AttachLayers();
- if (content_view_core_ && !using_synchronous_compositor_)
- content_view_core_->GetWindowAndroid()->AddObserver(this);
+ if (are_layers_attached_) {
+ AttachLayers();
+ if (content_view_core_ && !using_synchronous_compositor_)
+ content_view_core_->GetWindowAndroid()->AddObserver(this);
+ }
}
void RenderWidgetHostViewAndroid::RunAckCallbacks() {
@@ -1390,6 +1395,7 @@
const base::TimeTicks& start_time,
const base::Callback<void(bool, const SkBitmap&)>& callback,
scoped_ptr<cc::CopyOutputResult> result) {
+ DCHECK(result->HasTexture());
base::ScopedClosureRunner scoped_callback_runner(
base::Bind(callback, false, SkBitmap()));
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_android.h ('k') | content/public/browser/android/compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698