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

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
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_client.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "ui/gfx/frame_time.h"
17
18 namespace cc {
19
20 Display::Display(DisplayClient* client, SurfaceManager* manager)
21 : scheduled_draw_(false),
22 client_(client),
23 manager_(manager),
24 aggregator_(manager) {
25 }
26
27 Display::~Display() {
28 }
29
30 void Display::Resize(const gfx::Size& size) {
31 current_surface_.reset(new Surface(manager_, this, size));
32 }
33
34 bool Display::Draw() {
35 if (!current_surface_)
36 return false;
37
38 // TODO(jamesr): Use the surface aggregator instead.
39 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
40 CompositorFrame* current_frame = current_surface_->GetEligibleFrame();
41 frame_data->resource_list =
42 current_frame->delegated_frame_data->resource_list;
43 RenderPass::CopyAll(current_frame->delegated_frame_data->render_pass_list,
44 &frame_data->render_pass_list);
45
46 if (!layer_tree_host_) {
47 // TODO(jbauman): Switch to use ResourceProvider and GLRenderer directly,
48 // as using LayerTreeHost from here is a layering violation.
49 LayerTreeSettings settings;
50 layer_tree_host_ =
51 LayerTreeHost::CreateSingleThreaded(this, this, NULL, settings);
52 resource_collection_ = new DelegatedFrameResourceCollection;
53 resource_collection_->SetClient(this);
54 layer_tree_host_->SetLayerTreeHostClientReady();
55 }
56 if (!delegated_frame_provider_ ||
57 delegated_frame_provider_->frame_size() !=
58 frame_data->render_pass_list.back()->output_rect.size()) {
59 delegated_frame_provider_ =
60 new DelegatedFrameProvider(resource_collection_, frame_data.Pass());
61 delegated_layer_ =
62 DelegatedRendererLayer::Create(delegated_frame_provider_);
63
64 layer_tree_host_->SetRootLayer(delegated_layer_);
65 delegated_layer_->SetDisplaySize(current_surface_->size());
66 delegated_layer_->SetBounds(current_surface_->size());
67 delegated_layer_->SetContentsOpaque(true);
68 delegated_layer_->SetIsDrawable(true);
69 } else {
70 delegated_frame_provider_->SetFrameData(frame_data.Pass());
71 }
72 layer_tree_host_->SetViewportSize(current_surface_->size());
73
74 return true;
75 }
76
77 scoped_ptr<OutputSurface> Display::CreateOutputSurface(bool fallback) {
78 return client_->CreateOutputSurface();
79 }
80
81 void Display::ScheduleComposite() {
82 if (scheduled_draw_)
83 return;
84
85 scheduled_draw_ = true;
86
87 base::MessageLoop::current()->PostTask(
88 FROM_HERE, base::Bind(&Display::DoComposite, base::Unretained(this)));
89 }
90
91 void Display::ScheduleAnimation() {
92 ScheduleComposite();
93 }
94
95 void Display::DoComposite() {
96 scheduled_draw_ = false;
97 layer_tree_host_->Composite(gfx::FrameTime::Now());
98 }
99
100 int Display::CurrentSurfaceID() {
101 return current_surface_ ? current_surface_->surface_id() : 0;
102 }
103
104 void Display::ReturnResources(const ReturnedResourceArray& resources) {
105 // We never generate any resources, so we should never have any returned.
106 DCHECK(resources.empty());
107 }
108
109 } // namespace cc
110
111 #endif // CC_SURFACES_DISPLAY_H_
OLDNEW
« no previous file with comments | « 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