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

Unified Diff: cc/surfaces/display.cc

Issue 2029323004: Get rid of virtual Display::CreateScheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@onscreendisplayclient
Patch Set: displaytest: androids Created 4 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/surfaces/display.h ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/display.cc
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index 1619092afda73a44963b0b8cec69cd1d8264bcb2..8d41cb2a22a4a04aafddd5454cebcd6bcec258b3 100644
--- a/cc/surfaces/display.cc
+++ b/cc/surfaces/display.cc
@@ -47,16 +47,63 @@ Display::Display(SurfaceManager* manager,
const RendererSettings& settings,
uint32_t compositor_surface_namespace,
base::SingleThreadTaskRunner* task_runner,
+ BeginFrameSource* begin_frame_source,
std::unique_ptr<OutputSurface> output_surface)
: surface_manager_(manager),
bitmap_manager_(bitmap_manager),
gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
settings_(settings),
compositor_surface_namespace_(compositor_surface_namespace),
- task_runner_(task_runner),
output_surface_(std::move(output_surface)),
texture_mailbox_deleter_(task_runner) {
surface_manager_->AddObserver(this);
+
+ if (begin_frame_source) {
enne (OOO) 2016/06/02 18:15:20 I'm not sure I understand this logic. Should this
danakj 2016/06/02 18:27:21 Oh, this replaces the InitializeSynchronous(), see
enne (OOO) 2016/06/02 18:58:09 Ohhhh ok ok, then can you remove the DCHECKs about
danakj 2016/06/03 01:28:35 Soo... why remove 2 DCHECKs when we can change who
+ if (!task_runner) {
+ // WebView doesn't have a task runner or a real begin frame source,
+ // so just create something fake here.
+ DCHECK(!begin_frame_source);
+ internal_begin_frame_source_.reset(new EmptyBeginFrameSource());
+ vsync_begin_frame_source_ = internal_begin_frame_source_.get();
+ observed_begin_frame_source_ = vsync_begin_frame_source_;
+ } else {
+ DCHECK(begin_frame_source);
+ vsync_begin_frame_source_ = begin_frame_source;
+ observed_begin_frame_source_ = vsync_begin_frame_source_;
+ if (settings_.disable_display_vsync) {
+ internal_begin_frame_source_.reset(
+ new BackToBackBeginFrameSource(task_runner));
+ observed_begin_frame_source_ = internal_begin_frame_source_.get();
+ }
+ }
+
+ scheduler_.reset(new DisplayScheduler(
+ this, observed_begin_frame_source_, task_runner,
+ output_surface_->capabilities().max_frames_pending));
+ surface_manager_->RegisterBeginFrameSource(observed_begin_frame_source_,
+ compositor_surface_namespace_);
+ }
+}
+
+Display::Display(SurfaceManager* manager,
+ SharedBitmapManager* bitmap_manager,
+ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+ const RendererSettings& settings,
+ uint32_t compositor_surface_namespace,
+ base::SingleThreadTaskRunner* task_runner,
+ BeginFrameSource* begin_frame_source,
+ std::unique_ptr<OutputSurface> output_surface,
+ std::unique_ptr<DisplayScheduler> display_scheduler_for_tests)
+ : Display(manager,
+ bitmap_manager,
+ gpu_memory_buffer_manager,
+ settings,
+ compositor_surface_namespace,
+ task_runner,
+ begin_frame_source,
+ std::move(output_surface)) {
+ DCHECK_EQ(!!begin_frame_source, !!display_scheduler_for_tests);
+ scheduler_ = std::move(display_scheduler_for_tests);
}
Display::~Display() {
@@ -72,45 +119,10 @@ Display::~Display() {
}
}
-void Display::CreateScheduler() {
- DCHECK(!scheduler_);
- if (!task_runner_) {
- // WebView doesn't have a task runner or a real begin frame source,
- // so just create something fake here.
- internal_begin_frame_source_.reset(new EmptyBeginFrameSource());
- vsync_begin_frame_source_ = internal_begin_frame_source_.get();
- observed_begin_frame_source_ = vsync_begin_frame_source_;
- } else {
- DCHECK(vsync_begin_frame_source_);
-
- observed_begin_frame_source_ = vsync_begin_frame_source_;
- if (settings_.disable_display_vsync) {
- internal_begin_frame_source_.reset(
- new BackToBackBeginFrameSource(task_runner_));
- observed_begin_frame_source_ = internal_begin_frame_source_.get();
- }
- }
-
- scheduler_.reset(
- new DisplayScheduler(this, observed_begin_frame_source_, task_runner_,
- output_surface_->capabilities().max_frames_pending));
- surface_manager_->RegisterBeginFrameSource(observed_begin_frame_source_,
- compositor_surface_namespace_);
-}
-
bool Display::Initialize(DisplayClient* client) {
client_ = client;
if (!output_surface_->BindToClient(this))
return false;
- CreateScheduler();
- return true;
-}
-
-bool Display::InitializeSynchronous(DisplayClient* client) {
- client_ = client;
- if (!output_surface_->BindToClient(this))
- return false;
- // No scheduler created here.
return true;
}
@@ -354,15 +366,16 @@ void Display::DidSwapBuffersComplete() {
renderer_->SwapBuffersComplete();
}
+void Display::CommitVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval) {
+ // Display uses a BeginFrameSource instead.
+ NOTREACHED();
+}
+
void Display::SetBeginFrameSource(BeginFrameSource* source) {
- // It's expected that there's only a single source from the
- // BrowserCompositorOutputSurface that corresponds to vsync. The BFS is
- // passed BrowserCompositorOutputSurface -> Display -> DisplayScheduler as an
- // input. DisplayScheduler makes a decision about which BFS to use and
- // calls back to Display as DisplaySchedulerClient to register for that
- // surface id.
- DCHECK(!vsync_begin_frame_source_);
- vsync_begin_frame_source_ = source;
+ // The BeginFrameSource is set from the constructor, it doesn't come
+ // from the OutputSurface for the Display.
+ NOTREACHED();
}
void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698