| Index: cc/trees/thread_proxy.cc
|
| diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
|
| index c50736a09c4c65e48657796ca388892f4d8a04d4..5bd9c71f5e985fae20731918a6c05fcb64e9e0e3 100644
|
| --- a/cc/trees/thread_proxy.cc
|
| +++ b/cc/trees/thread_proxy.cc
|
| @@ -595,6 +595,9 @@ void ThreadProxy::BeginMainFrame(
|
| benchmark_instrumentation::ScopedBeginFrameTask begin_frame_task(
|
| benchmark_instrumentation::kDoBeginFrame,
|
| begin_main_frame_state->begin_frame_id);
|
| +
|
| + base::TimeTicks begin_main_frame_start_time = base::TimeTicks::Now();
|
| +
|
| TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("cc.BeginMainFrame");
|
| DCHECK(IsMainThread());
|
| DCHECK_EQ(NO_PIPELINE_STAGE, main().current_pipeline_stage);
|
| @@ -603,7 +606,8 @@ void ThreadProxy::BeginMainFrame(
|
| TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit",
|
| TRACE_EVENT_SCOPE_THREAD);
|
| main().channel_main->BeginMainFrameAbortedOnImpl(
|
| - CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT);
|
| + CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT,
|
| + begin_main_frame_start_time);
|
| return;
|
| }
|
|
|
| @@ -618,7 +622,7 @@ void ThreadProxy::BeginMainFrame(
|
| if (!main().layer_tree_host->visible()) {
|
| TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD);
|
| main().channel_main->BeginMainFrameAbortedOnImpl(
|
| - CommitEarlyOutReason::ABORTED_NOT_VISIBLE);
|
| + CommitEarlyOutReason::ABORTED_NOT_VISIBLE, begin_main_frame_start_time);
|
| return;
|
| }
|
|
|
| @@ -626,7 +630,8 @@ void ThreadProxy::BeginMainFrame(
|
| TRACE_EVENT_INSTANT0(
|
| "cc", "EarlyOut_OutputSurfaceLost", TRACE_EVENT_SCOPE_THREAD);
|
| main().channel_main->BeginMainFrameAbortedOnImpl(
|
| - CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST);
|
| + CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST,
|
| + begin_main_frame_start_time);
|
| return;
|
| }
|
|
|
| @@ -667,7 +672,7 @@ void ThreadProxy::BeginMainFrame(
|
| if (!updated && can_cancel_this_commit) {
|
| TRACE_EVENT_INSTANT0("cc", "EarlyOut_NoUpdates", TRACE_EVENT_SCOPE_THREAD);
|
| main().channel_main->BeginMainFrameAbortedOnImpl(
|
| - CommitEarlyOutReason::FINISHED_NO_UPDATES);
|
| + CommitEarlyOutReason::FINISHED_NO_UPDATES, begin_main_frame_start_time);
|
|
|
| // Although the commit is internally aborted, this is because it has been
|
| // detected to be a no-op. From the perspective of an embedder, this commit
|
| @@ -696,6 +701,7 @@ void ThreadProxy::BeginMainFrame(
|
|
|
| CompletionEvent completion;
|
| main().channel_main->StartCommitOnImpl(&completion, main().layer_tree_host,
|
| + begin_main_frame_start_time,
|
| main().commit_waits_for_activation);
|
| completion.Wait();
|
| main().commit_waits_for_activation = false;
|
| @@ -714,6 +720,7 @@ void ThreadProxy::BeginMainFrameNotExpectedSoon() {
|
|
|
| void ThreadProxy::StartCommitOnImpl(CompletionEvent* completion,
|
| LayerTreeHost* layer_tree_host,
|
| + base::TimeTicks main_thread_start_time,
|
| bool hold_commit_for_activation) {
|
| TRACE_EVENT0("cc", "ThreadProxy::StartCommitOnImplThread");
|
| DCHECK(!impl().commit_completion_event);
|
| @@ -737,14 +744,16 @@ void ThreadProxy::StartCommitOnImpl(CompletionEvent* completion,
|
|
|
| // Ideally, we should inform to impl thread when BeginMainFrame is started.
|
| // But, we can avoid a PostTask in here.
|
| - impl().scheduler->NotifyBeginMainFrameStarted();
|
| + impl().scheduler->NotifyBeginMainFrameStarted(main_thread_start_time);
|
| impl().commit_completion_event = completion;
|
| DCHECK(!blocked_main_commit().layer_tree_host);
|
| blocked_main_commit().layer_tree_host = layer_tree_host;
|
| impl().scheduler->NotifyReadyToCommit();
|
| }
|
|
|
| -void ThreadProxy::BeginMainFrameAbortedOnImpl(CommitEarlyOutReason reason) {
|
| +void ThreadProxy::BeginMainFrameAbortedOnImpl(
|
| + CommitEarlyOutReason reason,
|
| + base::TimeTicks main_thread_start_time) {
|
| TRACE_EVENT1("cc", "ThreadProxy::BeginMainFrameAbortedOnImplThread", "reason",
|
| CommitEarlyOutReasonToString(reason));
|
| DCHECK(IsImplThread());
|
| @@ -758,6 +767,7 @@ void ThreadProxy::BeginMainFrameAbortedOnImpl(CommitEarlyOutReason reason) {
|
| impl().last_begin_main_frame_args;
|
| }
|
| impl().layer_tree_host_impl->BeginMainFrameAborted(reason);
|
| + impl().scheduler->NotifyBeginMainFrameStarted(main_thread_start_time);
|
| impl().scheduler->BeginMainFrameAborted(reason);
|
| }
|
|
|
|
|