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

Unified Diff: cc/trees/thread_proxy.cc

Issue 162473003: cc: Add more DrawSwapReadbackResult enums (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More checks 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: cc/trees/thread_proxy.cc
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index 860144b6151adc3f4adf99f2c3212f164f516cd9..9bf4d381c1a35d06568f28a2280be81634f96181 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;
}
@@ -1309,6 +1320,12 @@ void ThreadProxy::ScheduledActionManageTiles() {
DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndSwapIfPossible() {
TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndSwap");
+
+ // SchedulerStateMachine::DidDrawIfPossibleCompleted isn't set up to
+ // handle DRAW_ABORTED_CANT_DRAW. Moreover, the scheduler should
+ // never generate this call when it can't draw.
+ DCHECK(impl().layer_tree_host_impl->CanDraw());
+
bool forced_draw = false;
bool swap_requested = true;
bool readback_requested = false;
« cc/scheduler/scheduler_state_machine.cc ('K') | « cc/scheduler/scheduler_state_machine_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698