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"
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,
28 gpu_memory_buffer_manager
,
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
);