cc: Make a FakeResourceProvider and use it in tests to construct.
[chromium-blink-merge.git] / cc / surfaces / onscreen_display_client.cc
blob6fc63ce50b147f5f601545432cfcbbad79df5d60
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "cc/surfaces/onscreen_display_client.h"
7 #include "base/trace_event/trace_event.h"
8 #include "cc/output/output_surface.h"
9 #include "cc/scheduler/begin_frame_source.h"
10 #include "cc/surfaces/display_scheduler.h"
11 #include "cc/surfaces/surface_display_output_surface.h"
12 #include "cc/surfaces/surface_factory.h"
13 #include "cc/surfaces/surface_manager.h"
15 namespace cc {
17 OnscreenDisplayClient::OnscreenDisplayClient(
18 scoped_ptr<OutputSurface> output_surface,
19 SurfaceManager* manager,
20 SharedBitmapManager* bitmap_manager,
21 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
22 const RendererSettings& settings,
23 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
24 : output_surface_(output_surface.Pass()),
25 display_(new Display(this,
26 manager,
27 bitmap_manager,
28 gpu_memory_buffer_manager,
29 settings)),
30 task_runner_(task_runner),
31 output_surface_lost_(false) {
34 OnscreenDisplayClient::~OnscreenDisplayClient() {
37 bool OnscreenDisplayClient::Initialize() {
38 int max_frames_pending =
39 output_surface_ ? output_surface_->capabilities().max_frames_pending : 0;
40 if (max_frames_pending <= 0)
41 max_frames_pending = OutputSurface::DEFAULT_MAX_FRAMES_PENDING;
43 synthetic_begin_frame_source_ = SyntheticBeginFrameSource::Create(
44 task_runner_.get(), base::TimeTicks(), BeginFrameArgs::DefaultInterval());
45 scheduler_.reset(new DisplayScheduler(display_.get(),
46 synthetic_begin_frame_source_.get(),
47 task_runner_, max_frames_pending));
48 return display_->Initialize(output_surface_.Pass(), scheduler_.get());
51 void OnscreenDisplayClient::CommitVSyncParameters(base::TimeTicks timebase,
52 base::TimeDelta interval) {
53 if (interval == base::TimeDelta()) {
54 // TODO(brianderson): We should not be receiving 0 intervals.
55 interval = BeginFrameArgs::DefaultInterval();
58 surface_display_output_surface_->ReceivedVSyncParameters(timebase, interval);
59 if (synthetic_begin_frame_source_)
60 synthetic_begin_frame_source_->OnUpdateVSyncParameters(timebase, interval);
63 void OnscreenDisplayClient::OutputSurfaceLost() {
64 output_surface_lost_ = true;
65 surface_display_output_surface_->DidLoseOutputSurface();
68 void OnscreenDisplayClient::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
69 surface_display_output_surface_->SetMemoryPolicy(policy);
72 } // namespace cc