| Index: cc/trees/thread_proxy.cc
|
| diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
|
| index 860144b6151adc3f4adf99f2c3212f164f516cd9..8e9fa1c0ea3e4b13f3d21d56c3a7f4bdb5f8fdb5 100644
|
| --- a/cc/trees/thread_proxy.cc
|
| +++ b/cc/trees/thread_proxy.cc
|
| @@ -1160,17 +1160,22 @@ DrawSwapReadbackResult ThreadProxy::DrawSwapReadbackInternal(
|
| LayerTreeHostImpl::FrameData frame;
|
| bool draw_frame = false;
|
|
|
| - if (impl().layer_tree_host_impl->CanDraw() &&
|
| - (!drawing_for_readback || can_do_readback)) {
|
| - // If it is for a readback, make sure we draw the portion being read back.
|
| - gfx::Rect readback_rect;
|
| - if (drawing_for_readback)
|
| - readback_rect = impl().readback_request->rect;
|
| -
|
| - result.draw_result =
|
| - impl().layer_tree_host_impl->PrepareToDraw(&frame, readback_rect);
|
| - draw_frame = forced_draw ||
|
| - result.draw_result == DrawSwapReadbackResult::DRAW_SUCCESS;
|
| + if (impl().layer_tree_host_impl->CanDraw()) {
|
| + if (!drawing_for_readback || can_do_readback) {
|
| + // If it is for a readback, make sure we draw the portion being read back.
|
| + gfx::Rect readback_rect;
|
| + if (drawing_for_readback)
|
| + readback_rect = impl().readback_request->rect;
|
| +
|
| + result.draw_result =
|
| + impl().layer_tree_host_impl->PrepareToDraw(&frame, readback_rect);
|
| + draw_frame = forced_draw ||
|
| + result.draw_result == DrawSwapReadbackResult::DRAW_SUCCESS;
|
| + } else {
|
| + result.draw_result = DrawSwapReadbackResult::DRAW_ABORTED_CANT_READBACK;
|
| + }
|
| + } else {
|
| + result.draw_result = DrawSwapReadbackResult::DRAW_ABORTED_CANT_DRAW;
|
| }
|
|
|
| if (draw_frame) {
|
| @@ -1202,10 +1207,14 @@ DrawSwapReadbackResult ThreadProxy::DrawSwapReadbackInternal(
|
| if (drawing_for_readback) {
|
| DCHECK(!swap_requested);
|
| result.did_readback = false;
|
| - if (draw_frame && !impl().layer_tree_host_impl->IsContextLost()) {
|
| - impl().layer_tree_host_impl->Readback(impl().readback_request->pixels,
|
| - impl().readback_request->rect);
|
| - result.did_readback = true;
|
| + if (draw_frame) {
|
| + if (!impl().layer_tree_host_impl->IsContextLost()) {
|
| + impl().layer_tree_host_impl->Readback(impl().readback_request->pixels,
|
| + impl().readback_request->rect);
|
| + result.did_readback = true;
|
| + } else {
|
| + result.draw_result = DrawSwapReadbackResult::DRAW_ABORTED_CONTEXT_LOST;
|
| + }
|
| }
|
| impl().readback_request->success = result.did_readback;
|
| impl().readback_request->completion.Signal();
|
| @@ -1229,9 +1238,10 @@ DrawSwapReadbackResult ThreadProxy::DrawSwapReadbackInternal(
|
| base::Bind(&ThreadProxy::DidCommitAndDrawFrame, main_thread_weak_ptr_));
|
| }
|
|
|
| - if (draw_frame) {
|
| + if (draw_frame)
|
| CheckOutputSurfaceStatusOnImplThread();
|
|
|
| + if (result.draw_result == DrawSwapReadbackResult::DRAW_SUCCESS) {
|
| base::TimeDelta draw_duration = impl().timing_history.DidFinishDrawing();
|
|
|
| base::TimeDelta draw_duration_overestimate;
|
| @@ -1257,6 +1267,7 @@ DrawSwapReadbackResult ThreadProxy::DrawSwapReadbackInternal(
|
| 50);
|
| }
|
|
|
| + DCHECK_NE(DrawSwapReadbackResult::INVALID_RESULT, result.draw_result);
|
| return result;
|
| }
|
|
|
|
|