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

Side by Side Diff: cc/scheduler/scheduler.cc

Issue 619843002: cc: Make separate interface for BeginFrame ipc from OutputSurface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8
8 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
9 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
10 #include "base/debug/trace_event_argument.h" 11 #include "base/debug/trace_event_argument.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
12 #include "base/single_thread_task_runner.h" 13 #include "base/single_thread_task_runner.h"
13 #include "cc/debug/devtools_instrumentation.h" 14 #include "cc/debug/devtools_instrumentation.h"
14 #include "cc/debug/traced_value.h" 15 #include "cc/debug/traced_value.h"
15 #include "cc/scheduler/delay_based_time_source.h" 16 #include "cc/scheduler/delay_based_time_source.h"
16 #include "ui/gfx/frame_time.h" 17 #include "ui/gfx/frame_time.h"
17 18
18 namespace cc { 19 namespace cc {
19 20
20 BeginFrameSource* SchedulerFrameSourcesConstructor::ConstructPrimaryFrameSource( 21 BeginFrameSource* SchedulerFrameSourcesConstructor::ConstructPrimaryFrameSource(
21 Scheduler* scheduler) { 22 Scheduler* scheduler) {
22 if (!scheduler->settings_.throttle_frame_production) { 23 if (!scheduler->settings_.throttle_frame_production) {
23 TRACE_EVENT1("cc", 24 TRACE_EVENT1("cc",
24 "Scheduler::Scheduler()", 25 "Scheduler::Scheduler()",
25 "PrimaryFrameSource", 26 "PrimaryFrameSource",
26 "BackToBackBeginFrameSource"); 27 "BackToBackBeginFrameSource");
27 DCHECK(!scheduler->primary_frame_source_internal_); 28 DCHECK(!scheduler->primary_frame_source_internal_);
28 scheduler->primary_frame_source_internal_ = 29 scheduler->primary_frame_source_internal_ =
29 BackToBackBeginFrameSource::Create(scheduler->task_runner_.get()); 30 BackToBackBeginFrameSource::Create(scheduler->task_runner_.get());
30 return scheduler->primary_frame_source_internal_.get(); 31 return scheduler->primary_frame_source_internal_.get();
31 } else if (scheduler->settings_.begin_frame_scheduling_enabled) { 32 } else if (scheduler->settings_.begin_frame_scheduling_enabled) {
32 TRACE_EVENT1("cc", 33 TRACE_EVENT1("cc",
33 "Scheduler::Scheduler()", 34 "Scheduler::Scheduler()",
34 "PrimaryFrameSource", 35 "PrimaryFrameSource",
35 "SchedulerClient"); 36 "ExternalBeginFrameSource");
36 return scheduler->client_->ExternalBeginFrameSource(); 37 return scheduler->external_begin_frame_source_internal_.get();
37 } else { 38 } else {
38 TRACE_EVENT1("cc", 39 TRACE_EVENT1("cc",
39 "Scheduler::Scheduler()", 40 "Scheduler::Scheduler()",
40 "PrimaryFrameSource", 41 "PrimaryFrameSource",
41 "SyntheticBeginFrameSource"); 42 "SyntheticBeginFrameSource");
42 scoped_ptr<SyntheticBeginFrameSource> synthetic_source = 43 scoped_ptr<SyntheticBeginFrameSource> synthetic_source =
43 SyntheticBeginFrameSource::Create(scheduler->task_runner_.get(), 44 SyntheticBeginFrameSource::Create(scheduler->task_runner_.get(),
44 scheduler->Now(), 45 scheduler->Now(),
45 BeginFrameArgs::DefaultInterval()); 46 BeginFrameArgs::DefaultInterval());
46 47
(...skipping 19 matching lines...) Expand all
66 scheduler->Now(), 67 scheduler->Now(),
67 base::TimeDelta::FromSeconds(1)); 68 base::TimeDelta::FromSeconds(1));
68 return scheduler->background_frame_source_internal_.get(); 69 return scheduler->background_frame_source_internal_.get();
69 } 70 }
70 71
71 Scheduler::Scheduler( 72 Scheduler::Scheduler(
72 SchedulerClient* client, 73 SchedulerClient* client,
73 const SchedulerSettings& scheduler_settings, 74 const SchedulerSettings& scheduler_settings,
74 int layer_tree_host_id, 75 int layer_tree_host_id,
75 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 76 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
77 scoped_ptr<ExternalBeginFrameSource> external_begin_frame_source,
76 SchedulerFrameSourcesConstructor* frame_sources_constructor) 78 SchedulerFrameSourcesConstructor* frame_sources_constructor)
77 : frame_source_(), 79 : frame_source_(),
78 primary_frame_source_(NULL), 80 primary_frame_source_(NULL),
79 background_frame_source_(NULL), 81 background_frame_source_(NULL),
80 primary_frame_source_internal_(), 82 primary_frame_source_internal_(),
81 background_frame_source_internal_(), 83 background_frame_source_internal_(),
84 external_begin_frame_source_internal_(external_begin_frame_source.Pass()),
mithro-old 2014/10/13 02:56:20 Can we just store this in the primary_frame_source
simonhong 2014/10/15 01:04:21 external_begin_frame_source is changed to ref-coun
82 vsync_observer_(NULL), 85 vsync_observer_(NULL),
83 settings_(scheduler_settings), 86 settings_(scheduler_settings),
84 client_(client), 87 client_(client),
85 layer_tree_host_id_(layer_tree_host_id), 88 layer_tree_host_id_(layer_tree_host_id),
86 task_runner_(task_runner), 89 task_runner_(task_runner),
87 begin_retro_frame_posted_(false), 90 begin_retro_frame_posted_(false),
88 state_machine_(scheduler_settings), 91 state_machine_(scheduler_settings),
89 inside_process_scheduled_actions_(false), 92 inside_process_scheduled_actions_(false),
90 inside_action_(SchedulerStateMachine::ACTION_NONE), 93 inside_action_(SchedulerStateMachine::ACTION_NONE),
91 weak_factory_(this) { 94 weak_factory_(this) {
92 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), 95 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"),
93 "Scheduler::Scheduler", 96 "Scheduler::Scheduler",
94 "settings", 97 "settings",
95 settings_.AsValue()); 98 settings_.AsValue());
96 DCHECK(client_); 99 DCHECK(client_);
97 DCHECK(!state_machine_.BeginFrameNeeded()); 100 DCHECK(!state_machine_.BeginFrameNeeded());
98 101
102 if (settings_.begin_frame_scheduling_enabled) {
103 DCHECK(external_begin_frame_source_internal_.get());
104 external_begin_frame_source_internal_->SetClientReady();
mithro-old 2014/10/13 02:56:20 I'm unsure what the "SetClientReady" function is f
simonhong 2014/10/15 01:04:21 SetClientReady() will be used if BeginFrameSource
105 } else {
106 DCHECK(!external_begin_frame_source_internal_.get());
107 }
108
99 begin_retro_frame_closure_ = 109 begin_retro_frame_closure_ =
100 base::Bind(&Scheduler::BeginRetroFrame, weak_factory_.GetWeakPtr()); 110 base::Bind(&Scheduler::BeginRetroFrame, weak_factory_.GetWeakPtr());
101 begin_impl_frame_deadline_closure_ = base::Bind( 111 begin_impl_frame_deadline_closure_ = base::Bind(
102 &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr()); 112 &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr());
103 poll_for_draw_triggers_closure_ = base::Bind( 113 poll_for_draw_triggers_closure_ = base::Bind(
104 &Scheduler::PollForAnticipatedDrawTriggers, weak_factory_.GetWeakPtr()); 114 &Scheduler::PollForAnticipatedDrawTriggers, weak_factory_.GetWeakPtr());
105 advance_commit_state_closure_ = base::Bind( 115 advance_commit_state_closure_ = base::Bind(
106 &Scheduler::PollToAdvanceCommitState, weak_factory_.GetWeakPtr()); 116 &Scheduler::PollToAdvanceCommitState, weak_factory_.GetWeakPtr());
107 117
108 frame_source_ = BeginFrameSourceMultiplexer::Create(); 118 frame_source_ = BeginFrameSourceMultiplexer::Create();
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 } 756 }
747 757
748 bool Scheduler::IsBeginMainFrameSentOrStarted() const { 758 bool Scheduler::IsBeginMainFrameSentOrStarted() const {
749 return (state_machine_.commit_state() == 759 return (state_machine_.commit_state() ==
750 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || 760 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
751 state_machine_.commit_state() == 761 state_machine_.commit_state() ==
752 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); 762 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED);
753 } 763 }
754 764
755 } // namespace cc 765 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698