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

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

Issue 593503003: Support error handling for Surface readbacks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Formatted code and fixed build issue in test. Created 6 years, 1 month 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 f86d262a78b4dc6f823a1a2ceee0f6d59b49ce48..1eb646dec7997ebc2bdebda61842c9f7b7d06c5b 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -99,7 +99,7 @@ void SendImeEventAck(RenderWidgetHostImpl* host) {
}
void CopyFromCompositingSurfaceFinished(
- const base::Callback<void(bool, const SkBitmap&)>& callback,
+ ReadbackRequestCallback& callback,
scoped_ptr<cc::SingleReleaseCallback> release_callback,
scoped_ptr<SkBitmap> bitmap,
const base::TimeTicks& start_time,
@@ -118,7 +118,8 @@ void CopyFromCompositingSurfaceFinished(
release_callback->Run(sync_point, lost_resource);
UMA_HISTOGRAM_TIMES(kAsyncReadBackString,
base::TimeTicks::Now() - start_time);
- callback.Run(result, *bitmap);
+ ReadbackResponse response = result ? READBACK_SUCCESS : READBACK_FAILED;
+ callback.Run(*bitmap, response);
}
ui::LatencyInfo CreateLatencyInfo(const blink::WebInputEvent& event) {
@@ -239,11 +240,10 @@ bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
} // anonymous namespace
-ReadbackRequest::ReadbackRequest(
- float scale,
- SkColorType color_type,
- gfx::Rect src_subrect,
- const base::Callback<void(bool, const SkBitmap&)>& result_callback)
+ReadbackRequest::ReadbackRequest(float scale,
+ SkColorType color_type,
+ gfx::Rect src_subrect,
+ ReadbackRequestCallback& result_callback)
: scale_(scale),
color_type_(color_type),
src_subrect_(src_subrect),
@@ -380,7 +380,7 @@ void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
void RenderWidgetHostViewAndroid::AbortPendingReadbackRequests() {
while (!readbacks_waiting_for_frame_.empty()) {
ReadbackRequest& readback_request = readbacks_waiting_for_frame_.front();
- readback_request.GetResultCallback().Run(false, SkBitmap());
+ readback_request.GetResultCallback().Run(SkBitmap(), READBACK_FAILED);
readbacks_waiting_for_frame_.pop();
}
}
@@ -389,9 +389,9 @@ void RenderWidgetHostViewAndroid::GetScaledContentBitmap(
float scale,
SkColorType color_type,
gfx::Rect src_subrect,
- CopyFromCompositingSurfaceCallback& result_callback) {
+ ReadbackRequestCallback& result_callback) {
if (!host_ || host_->is_hidden()) {
- result_callback.Run(false, SkBitmap());
+ result_callback.Run(SkBitmap(), READBACK_NOT_SUPPORTED);
return;
}
if (!IsSurfaceAvailableForCopy()) {
@@ -833,17 +833,17 @@ void RenderWidgetHostViewAndroid::SetBackgroundColor(SkColor color) {
void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
const gfx::Rect& src_subrect,
const gfx::Size& dst_size,
- CopyFromCompositingSurfaceCallback& callback,
+ ReadbackRequestCallback& callback,
const SkColorType color_type) {
TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::CopyFromCompositingSurface");
if ((!host_ || host_->is_hidden()) ||
!IsReadbackConfigSupported(color_type)) {
- callback.Run(false, SkBitmap());
+ callback.Run(SkBitmap(), READBACK_FORMAT_NOT_SUPPORTED);
return;
}
base::TimeTicks start_time = base::TimeTicks::Now();
if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) {
- callback.Run(false, SkBitmap());
+ callback.Run(SkBitmap(), READBACK_NOT_SUPPORTED);
return;
}
const gfx::Display& display =
@@ -1193,13 +1193,13 @@ scoped_ptr<TouchHandleDrawable> RenderWidgetHostViewAndroid::CreateDrawable() {
void RenderWidgetHostViewAndroid::SynchronousCopyContents(
const gfx::Rect& src_subrect_in_pixel,
const gfx::Size& dst_size_in_pixel,
- const base::Callback<void(bool, const SkBitmap&)>& callback,
+ ReadbackRequestCallback& callback,
const SkColorType color_type) {
SynchronousCompositor* compositor =
SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(),
host_->GetRoutingID());
if (!compositor) {
- callback.Run(false, SkBitmap());
+ callback.Run(SkBitmap(), READBACK_FAILED);
return;
}
@@ -1213,7 +1213,7 @@ void RenderWidgetHostViewAndroid::SynchronousCopyContents(
(float)dst_size_in_pixel.width() / (float)src_subrect_in_pixel.width(),
(float)dst_size_in_pixel.height() / (float)src_subrect_in_pixel.height());
compositor->DemandDrawSw(&canvas);
- callback.Run(true, bitmap);
+ callback.Run(bitmap, READBACK_SUCCESS);
}
void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
@@ -1688,7 +1688,7 @@ RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResultForDelegatedReadback(
const SkColorType color_type,
const base::TimeTicks& start_time,
scoped_refptr<cc::Layer> readback_layer,
- const base::Callback<void(bool, const SkBitmap&)>& callback,
+ ReadbackRequestCallback& callback,
scoped_ptr<cc::CopyOutputResult> result) {
readback_layer->RemoveFromParent();
PrepareTextureCopyOutputResult(
@@ -1700,10 +1700,10 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
const gfx::Size& dst_size_in_pixel,
const SkColorType color_type,
const base::TimeTicks& start_time,
- const base::Callback<void(bool, const SkBitmap&)>& callback,
+ ReadbackRequestCallback& callback,
scoped_ptr<cc::CopyOutputResult> result) {
base::ScopedClosureRunner scoped_callback_runner(
- base::Bind(callback, false, SkBitmap()));
+ base::Bind(callback, SkBitmap(), READBACK_FAILED));
TRACE_EVENT0("cc",
"RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult");

Powered by Google App Engine
This is Rietveld 408576698