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

Unified Diff: cc/trees/thread_proxy.cc

Issue 1377063003: Split ThreadProxy methods to ProxyMain and ProxyImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing Created 5 years, 2 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') | cc/trees/threaded_channel.h » ('j') | 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 8f23e5c96b7abab620e3071ff2cc1ca4b4aa6f40..682ef2ce44f8eb9f324f88ef027ad79f56e3e713 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -138,13 +138,7 @@ void ThreadProxy::FinishAllRendering() {
// Make sure all GL drawing is finished on the impl thread.
DebugScopedSetMainThreadBlocked main_thread_blocked(this);
- CompletionEvent completion;
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::FinishAllRenderingOnImplThread,
- impl_thread_weak_ptr_,
- &completion));
- completion.Wait();
+ main().channel_main->FinishAllRenderingOnImpl();
}
bool ThreadProxy::IsStarted() const {
@@ -162,22 +156,13 @@ void ThreadProxy::SetVisible(bool visible) {
TRACE_EVENT1("cc", "ThreadProxy::SetVisible", "visible", visible);
DebugScopedSetMainThreadBlocked main_thread_blocked(this);
- CompletionEvent completion;
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::SetVisibleOnImplThread,
- impl_thread_weak_ptr_,
- &completion,
- visible));
- completion.Wait();
+ main().channel_main->SetVisibleOnImpl(visible);
danakj 2015/10/08 19:21:08 i'd like it if it was obvious which calls are goin
Khushal 2015/10/08 20:32:07 We will try to make some calls asynchronous for Bl
danakj 2015/10/09 17:54:43 I think we should mark everything as Sync that is
Khushal 2015/10/09 19:46:55 That would definitely be better. Just had one doub
}
-void ThreadProxy::SetVisibleOnImplThread(CompletionEvent* completion,
- bool visible) {
+void ThreadProxy::SetVisibleOnImpl(bool visible) {
TRACE_EVENT1("cc", "ThreadProxy::SetVisibleOnImplThread", "visible", visible);
impl().layer_tree_host_impl->SetVisible(visible);
impl().scheduler->SetVisible(visible);
- completion->Signal();
}
void ThreadProxy::SetThrottleFrameProduction(bool throttle) {
@@ -204,9 +189,7 @@ void ThreadProxy::RequestNewOutputSurface() {
}
void ThreadProxy::SetOutputSurface(OutputSurface* output_surface) {
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE, base::Bind(&ThreadProxy::InitializeOutputSurfaceOnImplThread,
- impl_thread_weak_ptr_, output_surface));
+ main().channel_main->InitializeOutputSurfaceOnImpl(output_surface);
}
void ThreadProxy::ReleaseOutputSurface() {
@@ -214,11 +197,7 @@ void ThreadProxy::ReleaseOutputSurface() {
DCHECK(layer_tree_host()->output_surface_lost());
DebugScopedSetMainThreadBlocked main_thread_blocked(this);
- CompletionEvent completion;
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE, base::Bind(&ThreadProxy::ReleaseOutputSurfaceOnImplThread,
- impl_thread_weak_ptr_, &completion));
- completion.Wait();
+ main().channel_main->ReleaseOutputSurfaceOnImpl();
}
void ThreadProxy::DidInitializeOutputSurface(
@@ -235,7 +214,7 @@ void ThreadProxy::DidInitializeOutputSurface(
layer_tree_host()->DidInitializeOutputSurface();
}
-void ThreadProxy::SetRendererCapabilitiesMainThreadCopy(
+void ThreadProxy::SetRendererCapabilitiesMainCopy(
const RendererCapabilities& capabilities) {
main().renderer_capabilities_main_thread_copy = capabilities;
}
@@ -308,21 +287,16 @@ void ThreadProxy::SetNeedsCommit() {
void ThreadProxy::UpdateRendererCapabilitiesOnImplThread() {
DCHECK(IsImplThread());
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::SetRendererCapabilitiesMainThreadCopy,
- main_thread_weak_ptr_,
- impl()
- .layer_tree_host_impl->GetRendererCapabilities()
- .MainThreadCapabilities()));
+ impl().channel_impl->SetRendererCapabilitiesMainCopy(
+ impl()
+ .layer_tree_host_impl->GetRendererCapabilities()
+ .MainThreadCapabilities());
}
void ThreadProxy::DidLoseOutputSurfaceOnImplThread() {
TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurfaceOnImplThread");
DCHECK(IsImplThread());
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::DidLoseOutputSurface, main_thread_weak_ptr_));
+ impl().channel_impl->DidLoseOutputSurface();
impl().scheduler->DidLoseOutputSurface();
}
@@ -402,11 +376,7 @@ void ThreadProxy::PostAnimationEventsToMainThreadOnImplThread(
TRACE_EVENT0("cc",
"ThreadProxy::PostAnimationEventsToMainThreadOnImplThread");
DCHECK(IsImplThread());
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::SetAnimationEvents,
- main_thread_weak_ptr_,
- base::Passed(&events)));
+ impl().channel_impl->SetAnimationEvents(events.Pass());
}
bool ThreadProxy::IsInsideDraw() { return impl().inside_draw; }
@@ -438,14 +408,10 @@ void ThreadProxy::SetDeferCommits(bool defer_commits) {
else
TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this);
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::SetDeferCommitsOnImplThread,
- impl_thread_weak_ptr_,
- defer_commits));
+ main().channel_main->SetDeferCommitsOnImpl(defer_commits);
}
-void ThreadProxy::SetDeferCommitsOnImplThread(bool defer_commits) const {
+void ThreadProxy::SetDeferCommitsOnImpl(bool defer_commits) {
DCHECK(IsImplThread());
impl().scheduler->SetDeferCommits(defer_commits);
}
@@ -488,27 +454,20 @@ void ThreadProxy::SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) {
void ThreadProxy::MainThreadHasStoppedFlinging() {
DCHECK(IsMainThread());
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::MainThreadHasStoppedFlingingOnImplThread,
- impl_thread_weak_ptr_));
+ main().channel_main->MainThreadHasStoppedFlingingOnImpl();
}
-void ThreadProxy::MainThreadHasStoppedFlingingOnImplThread() {
+void ThreadProxy::MainThreadHasStoppedFlingingOnImpl() {
DCHECK(IsImplThread());
impl().layer_tree_host_impl->MainThreadHasStoppedFlinging();
}
void ThreadProxy::NotifyInputThrottledUntilCommit() {
DCHECK(IsMainThread());
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::SetInputThrottledUntilCommitOnImplThread,
- impl_thread_weak_ptr_,
- true));
+ main().channel_main->SetInputThrottledUntilCommitOnImpl(true);
}
-void ThreadProxy::SetInputThrottledUntilCommitOnImplThread(bool is_throttled) {
+void ThreadProxy::SetInputThrottledUntilCommitOnImpl(bool is_throttled) {
DCHECK(IsImplThread());
if (is_throttled == impl().input_throttled_until_commit)
return;
@@ -584,14 +543,7 @@ void ThreadProxy::Stop() {
// renderer before shutting it down.
{
DebugScopedSetMainThreadBlocked main_thread_blocked(this);
-
- CompletionEvent completion;
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::FinishGLOnImplThread,
- impl_thread_weak_ptr_,
- &completion));
- completion.Wait();
+ main().channel_main->FinishGLOnImpl();
}
{
DebugScopedSetMainThreadBlocked main_thread_blocked(this);
@@ -614,11 +566,10 @@ bool ThreadProxy::SupportsImplScrolling() const {
return true;
}
-void ThreadProxy::FinishAllRenderingOnImplThread(CompletionEvent* completion) {
+void ThreadProxy::FinishAllRenderingOnImpl() {
TRACE_EVENT0("cc", "ThreadProxy::FinishAllRenderingOnImplThread");
DCHECK(IsImplThread());
impl().layer_tree_host_impl->FinishAllRendering();
- completion->Signal();
}
void ThreadProxy::ScheduledActionSendBeginMainFrame() {
@@ -650,9 +601,7 @@ void ThreadProxy::ScheduledActionSendBeginMainFrame() {
}
void ThreadProxy::SendBeginMainFrameNotExpectedSoon() {
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE, base::Bind(&ThreadProxy::BeginMainFrameNotExpectedSoon,
- main_thread_weak_ptr_));
+ impl().channel_impl->BeginMainFrameNotExpectedSoon();
}
void ThreadProxy::BeginMainFrame(
@@ -816,7 +765,7 @@ void ThreadProxy::BeginMainFrameAbortedOnImplThread(
DCHECK(!impl().layer_tree_host_impl->pending_tree());
if (CommitEarlyOutHandledCommit(reason)) {
- SetInputThrottledUntilCommitOnImplThread(false);
+ SetInputThrottledUntilCommitOnImpl(false);
impl().last_processed_begin_main_frame_args =
impl().last_begin_main_frame_args;
}
@@ -865,7 +814,7 @@ void ThreadProxy::ScheduledActionCommit() {
// often a good bit of work to update the tree and prepare the new frame.
impl().layer_tree_host_impl->CommitComplete();
- SetInputThrottledUntilCommitOnImplThread(false);
+ SetInputThrottledUntilCommitOnImpl(false);
impl().next_frame_is_newly_committed_frame = true;
}
@@ -879,9 +828,7 @@ void ThreadProxy::ScheduledActionActivateSyncTree() {
void ThreadProxy::ScheduledActionBeginOutputSurfaceCreation() {
TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionBeginOutputSurfaceCreation");
DCHECK(IsImplThread());
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::RequestNewOutputSurface, main_thread_weak_ptr_));
+ impl().channel_impl->RequestNewOutputSurface();
}
DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) {
@@ -937,9 +884,7 @@ DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) {
// Tell the main thread that the the newly-commited frame was drawn.
if (impl().next_frame_is_newly_committed_frame) {
impl().next_frame_is_newly_committed_frame = false;
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::DidCommitAndDrawFrame, main_thread_weak_ptr_));
+ impl().channel_impl->DidCommitAndDrawFrame();
}
DCHECK_NE(INVALID_RESULT, result);
@@ -1030,11 +975,11 @@ void ThreadProxy::InitializeImplOnImplThread(CompletionEvent* completion) {
DCHECK_EQ(impl().scheduler->visible(),
impl().layer_tree_host_impl->visible());
impl_thread_weak_ptr_ = impl().weak_factory.GetWeakPtr();
+ threaded_channel_->InitImplThreadWeakPtr();
completion->Signal();
}
-void ThreadProxy::InitializeOutputSurfaceOnImplThread(
- OutputSurface* output_surface) {
+void ThreadProxy::InitializeOutputSurfaceOnImpl(OutputSurface* output_surface) {
TRACE_EVENT0("cc", "ThreadProxy::InitializeOutputSurfaceOnImplThread");
DCHECK(IsImplThread());
@@ -1046,29 +991,22 @@ void ThreadProxy::InitializeOutputSurfaceOnImplThread(
host_impl->GetRendererCapabilities().MainThreadCapabilities();
}
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::DidInitializeOutputSurface,
- main_thread_weak_ptr_,
- success,
- capabilities));
+ impl().channel_impl->DidInitializeOutputSurface(success, capabilities);
if (success)
impl().scheduler->DidCreateAndInitializeOutputSurface();
}
-void ThreadProxy::ReleaseOutputSurfaceOnImplThread(
- CompletionEvent* completion) {
+void ThreadProxy::ReleaseOutputSurfaceOnImpl() {
DCHECK(IsImplThread());
// Unlike DidLoseOutputSurfaceOnImplThread, we don't need to call
// LayerTreeHost::DidLoseOutputSurface since it already knows.
impl().scheduler->DidLoseOutputSurface();
impl().layer_tree_host_impl->ReleaseOutputSurface();
- completion->Signal();
}
-void ThreadProxy::FinishGLOnImplThread(CompletionEvent* completion) {
+void ThreadProxy::FinishGLOnImpl() {
TRACE_EVENT0("cc", "ThreadProxy::FinishGLOnImplThread");
DCHECK(IsImplThread());
if (impl().layer_tree_host_impl->output_surface()) {
@@ -1077,7 +1015,6 @@ void ThreadProxy::FinishGLOnImplThread(CompletionEvent* completion) {
if (context_provider)
context_provider->ContextGL()->Finish();
}
- completion->Signal();
}
void ThreadProxy::LayerTreeHostClosedOnImplThread(CompletionEvent* completion) {
@@ -1088,6 +1025,7 @@ void ThreadProxy::LayerTreeHostClosedOnImplThread(CompletionEvent* completion) {
impl().external_begin_frame_source = nullptr;
impl().layer_tree_host_impl = nullptr;
impl().weak_factory.InvalidateWeakPtrs();
+ threaded_channel_->InvalidateImplThreadWeakPtr();
// We need to explicitly shutdown the notifier to destroy any weakptrs it is
// holding while still on the compositor thread. This also ensures any
// callbacks holding a ThreadProxy pointer are cancelled.
@@ -1103,17 +1041,11 @@ ThreadProxy::BeginMainFrameAndCommitState::~BeginMainFrameAndCommitState() {}
bool ThreadProxy::MainFrameWillHappenForTesting() {
DCHECK(IsMainThread());
- CompletionEvent completion;
bool main_frame_will_happen = false;
{
DebugScopedSetMainThreadBlocked main_thread_blocked(this);
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::MainFrameWillHappenOnImplThreadForTesting,
- impl_thread_weak_ptr_,
- &completion,
- &main_frame_will_happen));
- completion.Wait();
+ main().channel_main->MainFrameWillHappenOnImplForTesting(
+ &main_frame_will_happen);
}
return main_frame_will_happen;
}
@@ -1122,8 +1054,7 @@ void ThreadProxy::SetChildrenNeedBeginFrames(bool children_need_begin_frames) {
NOTREACHED() << "Only used by SingleThreadProxy";
}
-void ThreadProxy::MainFrameWillHappenOnImplThreadForTesting(
- CompletionEvent* completion,
+void ThreadProxy::MainFrameWillHappenOnImplForTesting(
bool* main_frame_will_happen) {
DCHECK(IsImplThread());
if (impl().layer_tree_host_impl->output_surface()) {
@@ -1131,7 +1062,6 @@ void ThreadProxy::MainFrameWillHappenOnImplThreadForTesting(
} else {
*main_frame_will_happen = false;
}
- completion->Signal();
}
void ThreadProxy::RenewTreePriority() {
@@ -1217,9 +1147,7 @@ void ThreadProxy::DidPrepareTiles() {
void ThreadProxy::DidCompletePageScaleAnimationOnImplThread() {
DCHECK(IsImplThread());
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE, base::Bind(&ThreadProxy::DidCompletePageScaleAnimation,
- main_thread_weak_ptr_));
+ impl().channel_impl->DidCompletePageScaleAnimation();
}
void ThreadProxy::OnDrawForOutputSurface() {
@@ -1231,14 +1159,11 @@ void ThreadProxy::PostFrameTimingEventsOnImplThread(
scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
DCHECK(IsImplThread());
- Proxy::MainThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::PostFrameTimingEvents, main_thread_weak_ptr_,
- base::Passed(composite_events.Pass()),
- base::Passed(main_frame_events.Pass())));
+ impl().channel_impl->PostFrameTimingEventsOnMain(composite_events.Pass(),
+ main_frame_events.Pass());
}
-void ThreadProxy::PostFrameTimingEvents(
+void ThreadProxy::PostFrameTimingEventsOnMain(
scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
DCHECK(IsMainThread());
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | cc/trees/threaded_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698