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

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 DCHECK(scheduler->external_begin_frame_source_internal_.get());
38 scheduler->external_begin_frame_source_internal_->SetClientReady();
39 return scheduler->external_begin_frame_source_internal_.get();
37 } else { 40 } else {
38 TRACE_EVENT1("cc", 41 TRACE_EVENT1("cc",
39 "Scheduler::Scheduler()", 42 "Scheduler::Scheduler()",
40 "PrimaryFrameSource", 43 "PrimaryFrameSource",
41 "SyntheticBeginFrameSource"); 44 "SyntheticBeginFrameSource");
42 scoped_ptr<SyntheticBeginFrameSource> synthetic_source = 45 scoped_ptr<SyntheticBeginFrameSource> synthetic_source =
43 SyntheticBeginFrameSource::Create(scheduler->task_runner_.get(), 46 SyntheticBeginFrameSource::Create(scheduler->task_runner_.get(),
44 scheduler->Now(), 47 scheduler->Now(),
45 BeginFrameArgs::DefaultInterval()); 48 BeginFrameArgs::DefaultInterval());
46 49
(...skipping 19 matching lines...) Expand all
66 scheduler->Now(), 69 scheduler->Now(),
67 base::TimeDelta::FromSeconds(1)); 70 base::TimeDelta::FromSeconds(1));
68 return scheduler->background_frame_source_internal_.get(); 71 return scheduler->background_frame_source_internal_.get();
69 } 72 }
70 73
71 Scheduler::Scheduler( 74 Scheduler::Scheduler(
72 SchedulerClient* client, 75 SchedulerClient* client,
73 const SchedulerSettings& scheduler_settings, 76 const SchedulerSettings& scheduler_settings,
74 int layer_tree_host_id, 77 int layer_tree_host_id,
75 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 78 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
79 scoped_refptr<ExternalBeginFrameSource> external_begin_frame_source,
76 SchedulerFrameSourcesConstructor* frame_sources_constructor) 80 SchedulerFrameSourcesConstructor* frame_sources_constructor)
77 : frame_source_(), 81 : frame_source_(),
78 primary_frame_source_(NULL), 82 primary_frame_source_(NULL),
79 background_frame_source_(NULL), 83 background_frame_source_(NULL),
80 primary_frame_source_internal_(), 84 primary_frame_source_internal_(),
81 background_frame_source_internal_(), 85 background_frame_source_internal_(),
86 external_begin_frame_source_internal_(external_begin_frame_source),
82 vsync_observer_(NULL), 87 vsync_observer_(NULL),
83 settings_(scheduler_settings), 88 settings_(scheduler_settings),
84 client_(client), 89 client_(client),
85 layer_tree_host_id_(layer_tree_host_id), 90 layer_tree_host_id_(layer_tree_host_id),
86 task_runner_(task_runner), 91 task_runner_(task_runner),
87 begin_retro_frame_posted_(false), 92 begin_retro_frame_posted_(false),
88 state_machine_(scheduler_settings), 93 state_machine_(scheduler_settings),
89 inside_process_scheduled_actions_(false), 94 inside_process_scheduled_actions_(false),
90 inside_action_(SchedulerStateMachine::ACTION_NONE), 95 inside_action_(SchedulerStateMachine::ACTION_NONE),
91 weak_factory_(this) { 96 weak_factory_(this) {
(...skipping 21 matching lines...) Expand all
113 frame_sources_constructor->ConstructPrimaryFrameSource(this); 118 frame_sources_constructor->ConstructPrimaryFrameSource(this);
114 frame_source_->AddSource(primary_frame_source_); 119 frame_source_->AddSource(primary_frame_source_);
115 120
116 // Background ticking frame source 121 // Background ticking frame source
117 background_frame_source_ = 122 background_frame_source_ =
118 frame_sources_constructor->ConstructBackgroundFrameSource(this); 123 frame_sources_constructor->ConstructBackgroundFrameSource(this);
119 frame_source_->AddSource(background_frame_source_); 124 frame_source_->AddSource(background_frame_source_);
120 } 125 }
121 126
122 Scheduler::~Scheduler() { 127 Scheduler::~Scheduler() {
128 if (frame_source_->NeedsBeginFrames())
129 frame_source_->SetNeedsBeginFrames(false);
123 } 130 }
124 131
125 base::TimeTicks Scheduler::Now() const { 132 base::TimeTicks Scheduler::Now() const {
126 base::TimeTicks now = gfx::FrameTime::Now(); 133 base::TimeTicks now = gfx::FrameTime::Now();
127 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"), 134 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"),
128 "Scheduler::Now", 135 "Scheduler::Now",
129 "now", 136 "now",
130 now); 137 now);
131 return now; 138 return now;
132 } 139 }
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 } 753 }
747 754
748 bool Scheduler::IsBeginMainFrameSentOrStarted() const { 755 bool Scheduler::IsBeginMainFrameSentOrStarted() const {
749 return (state_machine_.commit_state() == 756 return (state_machine_.commit_state() ==
750 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || 757 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
751 state_machine_.commit_state() == 758 state_machine_.commit_state() ==
752 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); 759 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED);
753 } 760 }
754 761
755 } // namespace cc 762 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698