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

Side by Side Diff: cc/surfaces/display.cc

Issue 302903003: Add very simple cc::Display implementation for surfaces. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 #ifndef CC_SURFACES_DISPLAY_H_
6 #define CC_SURFACES_DISPLAY_H_
7
8 #include "cc/surfaces/display.h"
9
10 #include "base/message_loop/message_loop.h"
11 #include "cc/output/compositor_frame.h"
12 #include "cc/output/direct_renderer.h"
13 #include "cc/output/gl_renderer.h"
14 #include "cc/surfaces/display_client.h"
15 #include "cc/surfaces/surface.h"
16
17 namespace cc {
18
19 Display::Display(DisplayClient* client, SurfaceManager* manager)
20 : scheduled_draw_(false),
21 client_(client),
22 manager_(manager),
23 aggregator_(manager) {
24 }
25
26 Display::~Display() {
27 }
28
29 void Display::Resize(const gfx::Size& size) {
30 current_surface_.reset(new Surface(manager_, this, size));
31 }
32
33 bool Display::Draw() {
34 if (!current_surface_)
35 return false;
36
37 // TODO(jbauman): Use the surface aggregator instead.
38 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
39 CompositorFrame* current_frame = current_surface_->GetEligibleFrame();
40 frame_data->resource_list =
41 current_frame->delegated_frame_data->resource_list;
42 RenderPass::CopyAll(current_frame->delegated_frame_data->render_pass_list,
43 &frame_data->render_pass_list);
44
45 if (!layer_tree_host_) {
46 // TODO(jbauman): Switch to use ResourceProvider and GLRenderer directly,
47 // as using LayerTreeHost from here is a layering violation.
48 LayerTreeSettings settings;
49 layer_tree_host_ =
50 LayerTreeHost::CreateSingleThreaded(this, this, NULL, settings);
51 resource_collection_ = new DelegatedFrameResourceCollection;
52 resource_collection_->SetClient(this);
53 layer_tree_host_->SetLayerTreeHostClientReady();
54 }
55 if (!delegated_frame_provider_ ||
56 delegated_frame_provider_->frame_size() !=
57 frame_data->render_pass_list.back()->output_rect.size()) {
58 delegated_frame_provider_ =
59 new DelegatedFrameProvider(resource_collection_, frame_data.Pass());
60 delegated_layer_ =
61 DelegatedRendererLayer::Create(delegated_frame_provider_);
62
63 layer_tree_host_->SetRootLayer(delegated_layer_);
64 delegated_layer_->SetDisplaySize(current_surface_->size());
65 delegated_layer_->SetBounds(current_surface_->size());
66 delegated_layer_->SetContentsOpaque(true);
67 delegated_layer_->SetIsDrawable(true);
68 } else {
69 delegated_frame_provider_->SetFrameData(frame_data.Pass());
70 }
71 layer_tree_host_->SetViewportSize(current_surface_->size());
72
73 return true;
74 }
75
76 scoped_ptr<OutputSurface> Display::CreateOutputSurface(bool fallback) {
77 return client_->CreateOutputSurface();
78 }
79
80 void Display::ScheduleComposite() {
81 if (scheduled_draw_)
82 return;
83
84 scheduled_draw_ = true;
85
86 base::MessageLoop::current()->PostTask(
87 FROM_HERE, base::Bind(&Display::DoComposite, base::Unretained(this)));
88 }
89
90 void Display::DoComposite() {
91 scheduled_draw_ = false;
92 layer_tree_host_->Composite(base::TimeTicks::Now());
jamesr 2014/05/28 23:15:47 should this be a gfx::FrameTime::Now() instead?
93 }
94
95 int Display::CurrentSurfaceID() {
96 return current_surface_ ? current_surface_->surface_id() : 0;
97 }
98
99 void Display::ReturnResources(const ReturnedResourceArray& resources) {
100 // We never generate any resources, so we should never have any returned.
101 DCHECK(resources.empty());
102 }
103
104 } // namespace cc
105
106 #endif // CC_SURFACES_DISPLAY_H_
OLDNEW
« cc/surfaces/display.h ('K') | « cc/surfaces/display.h ('k') | cc/surfaces/display_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698