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

Unified Diff: cc/trees/thread_proxy.cc

Issue 279013002: Remove CompositeAndReadback from LayerTreeHost(Impl) and the Proxys. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm-cnr-lth-proxy-renderer: rebase-on-drawresult Created 6 years, 7 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
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/thread_proxy.cc
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index bacfed6c19296e0f64eb928cc8a8b9a5f57a007d..ee7f2ee8f8063d31aeeacfb36c01e80398614575 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -49,13 +49,6 @@ class SwapPromiseChecker {
namespace cc {
-struct ThreadProxy::ReadbackRequest {
- CompletionEvent completion;
- bool success;
- void* pixels;
- gfx::Rect rect;
-};
-
struct ThreadProxy::CommitPendingRequest {
CompletionEvent completion;
bool commit_pending;
@@ -92,7 +85,6 @@ ThreadProxy::MainThreadOnly::MainThreadOnly(ThreadProxy* proxy,
commit_requested(false),
commit_request_sent_to_impl_thread(false),
started(false),
- in_composite_and_readback(false),
manage_tiles_pending(false),
can_cancel_commit(true),
defer_commits(false),
@@ -117,8 +109,6 @@ ThreadProxy::CompositorThreadOnly::CompositorThreadOnly(ThreadProxy* proxy,
int layer_tree_host_id)
: layer_tree_host_id(layer_tree_host_id),
contents_texture_manager(NULL),
- begin_main_frame_sent_completion_event(NULL),
- readback_request(NULL),
commit_completion_event(NULL),
completion_event_for_commit_held_on_tree_activation(NULL),
next_frame_is_newly_committed_frame(false),
@@ -138,82 +128,6 @@ ThreadProxy::~ThreadProxy() {
DCHECK(!main().started);
}
-bool ThreadProxy::CompositeAndReadback(void* pixels, const gfx::Rect& rect) {
- TRACE_EVENT0("cc", "ThreadProxy::CompositeAndReadback");
- DCHECK(IsMainThread());
- DCHECK(layer_tree_host());
-
- if (main().defer_commits) {
- TRACE_EVENT0("cc", "CompositeAndReadback_DeferCommit");
- return false;
- }
-
- if (!layer_tree_host()->InitializeOutputSurfaceIfNeeded()) {
- TRACE_EVENT_INSTANT0("cc",
- "CompositeAndReadback_EarlyOut_LR_Uninitialized",
- TRACE_EVENT_SCOPE_THREAD);
- return false;
- }
-
- // Perform a synchronous commit with an associated readback.
- ReadbackRequest request;
- request.rect = rect;
- request.pixels = pixels;
- {
- DebugScopedSetMainThreadBlocked main_thread_blocked(this);
- CompletionEvent begin_main_frame_sent_completion;
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::ForceCommitForReadbackOnImplThread,
- impl_thread_weak_ptr_,
- &begin_main_frame_sent_completion,
- &request));
- begin_main_frame_sent_completion.Wait();
- }
-
- main().in_composite_and_readback = true;
- // This is the forced commit.
- // Note: The Impl thread also queues a separate BeginMainFrame on the
- // main thread, which will be called after this CompositeAndReadback
- // completes, to replace the forced commit.
- BeginMainFrame(scoped_ptr<BeginMainFrameAndCommitState>());
- main().in_composite_and_readback = false;
-
- // Composite and readback requires a second commit to undo any changes
- // that it made.
- main().can_cancel_commit = false;
-
- request.completion.Wait();
- return request.success;
-}
-
-void ThreadProxy::ForceCommitForReadbackOnImplThread(
- CompletionEvent* begin_main_frame_sent_completion,
- ReadbackRequest* request) {
- TRACE_EVENT0("cc", "ThreadProxy::ForceCommitForReadbackOnImplThread");
- DCHECK(IsImplThread());
- DCHECK(!impl().begin_main_frame_sent_completion_event);
- DCHECK(!impl().readback_request);
-
- if (!impl().layer_tree_host_impl) {
- begin_main_frame_sent_completion->Signal();
- request->success = false;
- request->completion.Signal();
- return;
- }
-
- impl().readback_request = request;
-
- impl().scheduler->SetNeedsForcedCommitForReadback();
- if (impl().scheduler->IsBeginMainFrameSent()) {
- begin_main_frame_sent_completion->Signal();
- return;
- }
-
- impl().begin_main_frame_sent_completion_event =
- begin_main_frame_sent_completion;
-}
-
void ThreadProxy::FinishAllRendering() {
DCHECK(Proxy::IsMainThread());
DCHECK(!main().defer_commits);
@@ -787,10 +701,6 @@ void ThreadProxy::ScheduledActionSendBeginMainFrame() {
base::Passed(&begin_main_frame_state)));
devtools_instrumentation::DidRequestMainThreadFrame(
impl().layer_tree_host_id);
- if (impl().begin_main_frame_sent_completion_event) {
- impl().begin_main_frame_sent_completion_event->Signal();
- impl().begin_main_frame_sent_completion_event = NULL;
- }
impl().timing_history.DidBeginMainFrame();
}
@@ -829,7 +739,7 @@ void ThreadProxy::BeginMainFrame(
// callbacks will trigger another frame.
main().animate_requested = false;
- if (!main().in_composite_and_readback && !layer_tree_host()->visible()) {
+ if (!layer_tree_host()->visible()) {
main().commit_requested = false;
main().commit_request_sent_to_impl_thread = false;
@@ -843,41 +753,31 @@ void ThreadProxy::BeginMainFrame(
return;
}
- if (begin_main_frame_state) {
- layer_tree_host()->ApplyScrollAndScale(
- *begin_main_frame_state->scroll_info);
- }
+ layer_tree_host()->ApplyScrollAndScale(*begin_main_frame_state->scroll_info);
layer_tree_host()->WillBeginMainFrame();
- if (begin_main_frame_state) {
- layer_tree_host()->UpdateClientAnimations(
- begin_main_frame_state->monotonic_frame_begin_time);
- layer_tree_host()->AnimateLayers(
- begin_main_frame_state->monotonic_frame_begin_time);
- blocked_main().last_monotonic_frame_begin_time =
- begin_main_frame_state->monotonic_frame_begin_time;
- }
+ layer_tree_host()->UpdateClientAnimations(
+ begin_main_frame_state->monotonic_frame_begin_time);
+ layer_tree_host()->AnimateLayers(
+ begin_main_frame_state->monotonic_frame_begin_time);
+ blocked_main().last_monotonic_frame_begin_time =
+ begin_main_frame_state->monotonic_frame_begin_time;
// Unlink any backings that the impl thread has evicted, so that we know to
// re-paint them in UpdateLayers.
if (blocked_main().contents_texture_manager()) {
blocked_main().contents_texture_manager()->UnlinkAndClearEvictedBackings();
- if (begin_main_frame_state) {
- blocked_main().contents_texture_manager()->SetMaxMemoryLimitBytes(
- begin_main_frame_state->memory_allocation_limit_bytes);
- blocked_main().contents_texture_manager()->SetExternalPriorityCutoff(
- begin_main_frame_state->memory_allocation_priority_cutoff);
- }
+ blocked_main().contents_texture_manager()->SetMaxMemoryLimitBytes(
+ begin_main_frame_state->memory_allocation_limit_bytes);
+ blocked_main().contents_texture_manager()->SetExternalPriorityCutoff(
+ begin_main_frame_state->memory_allocation_priority_cutoff);
}
// Recreate all UI resources if there were evicted UI resources when the impl
// thread initiated the commit.
- bool evicted_ui_resources = begin_main_frame_state
- ? begin_main_frame_state->evicted_ui_resources
- : false;
- if (evicted_ui_resources)
+ if (begin_main_frame_state->evicted_ui_resources)
layer_tree_host()->RecreateUIResources();
layer_tree_host()->Layout();
@@ -888,9 +788,8 @@ void ThreadProxy::BeginMainFrame(
// UpdateLayers.
main().commit_requested = false;
main().commit_request_sent_to_impl_thread = false;
- bool can_cancel_this_commit = main().can_cancel_commit &&
- !main().in_composite_and_readback &&
- !evicted_ui_resources;
+ bool can_cancel_this_commit =
+ main().can_cancel_commit && !begin_main_frame_state->evicted_ui_resources;
main().can_cancel_commit = true;
scoped_ptr<ResourceUpdateQueue> queue =
@@ -1115,10 +1014,7 @@ void ThreadProxy::ScheduledActionBeginOutputSurfaceCreation() {
main_thread_weak_ptr_));
}
-DrawResult ThreadProxy::DrawSwapReadbackInternal(
- bool forced_draw,
- bool swap_requested,
- bool readback_requested) {
+DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) {
TRACE_EVENT_SYNTHETIC_DELAY("cc.DrawAndSwap");
DrawResult result;
@@ -1148,26 +1044,12 @@ DrawResult ThreadProxy::DrawSwapReadbackInternal(
// DrawLayers() depends on the result of PrepareToDraw(), it is guarded on
// CanDraw() as well.
- bool drawing_for_readback = readback_requested && !!impl().readback_request;
- bool can_do_readback =
- impl().layer_tree_host_impl->renderer()->CanReadPixels();
-
LayerTreeHostImpl::FrameData frame;
bool draw_frame = false;
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 =
- impl().layer_tree_host_impl->PrepareToDraw(&frame, readback_rect);
- draw_frame = forced_draw || result == DRAW_SUCCESS;
- } else {
- result = DRAW_ABORTED_CANT_READBACK;
- }
+ result = impl().layer_tree_host_impl->PrepareToDraw(&frame);
+ draw_frame = forced_draw || result == DRAW_SUCCESS;
} else {
result = DRAW_ABORTED_CANT_DRAW;
}
@@ -1195,24 +1077,7 @@ DrawResult ThreadProxy::DrawSwapReadbackInternal(
bool start_ready_animations = draw_frame;
impl().layer_tree_host_impl->UpdateAnimationState(start_ready_animations);
- // Check for a pending CompositeAndReadback.
- if (drawing_for_readback) {
- DCHECK(!swap_requested);
- bool did_readback = false;
- if (draw_frame) {
- if (!impl().layer_tree_host_impl->IsContextLost()) {
- impl().layer_tree_host_impl->Readback(impl().readback_request->pixels,
- impl().readback_request->rect);
- did_readback = true;
- } else {
- result = DRAW_ABORTED_CONTEXT_LOST;
- }
- }
- impl().readback_request->success = did_readback;
- impl().readback_request->completion.Signal();
- impl().readback_request = NULL;
- } else if (draw_frame) {
- DCHECK(swap_requested);
+ if (draw_frame) {
bool did_request_swap = impl().layer_tree_host_impl->SwapBuffers(frame);
// We don't know if we have incomplete tiles if we didn't actually swap.
@@ -1278,28 +1143,19 @@ DrawResult ThreadProxy::ScheduledActionDrawAndSwapIfPossible() {
DCHECK(impl().layer_tree_host_impl->CanDraw());
bool forced_draw = false;
- bool swap_requested = true;
- bool readback_requested = false;
- return DrawSwapReadbackInternal(
- forced_draw, swap_requested, readback_requested);
+ return DrawSwapInternal(forced_draw);
}
DrawResult ThreadProxy::ScheduledActionDrawAndSwapForced() {
TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndSwapForced");
bool forced_draw = true;
- bool swap_requested = true;
- bool readback_requested = false;
- return DrawSwapReadbackInternal(
- forced_draw, swap_requested, readback_requested);
+ return DrawSwapInternal(forced_draw);
}
DrawResult ThreadProxy::ScheduledActionDrawAndReadback() {
TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndReadback");
- bool forced_draw = true;
- bool swap_requested = false;
- bool readback_requested = true;
- return DrawSwapReadbackInternal(
- forced_draw, swap_requested, readback_requested);
+ NOTREACHED();
+ return INVALID_RESULT;
}
void ThreadProxy::DidAnticipatedDrawTimeChange(base::TimeTicks time) {
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698