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

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 scoped_ptr<CompositorFrame> frame = current_surface_->TakeFrame();
38
39 if (!layer_tree_host_) {
40 LayerTreeSettings settings;
41 layer_tree_host_ =
42 LayerTreeHost::CreateSingleThreaded(this, this, NULL, settings);
43 resource_collection_ = new DelegatedFrameResourceCollection;
44 resource_collection_->SetClient(this);
45 layer_tree_host_->SetLayerTreeHostClientReady();
46 }
47 if (!delegated_frame_provider_ ||
48 delegated_frame_provider_->frame_size() !=
49 frame->delegated_frame_data->render_pass_list.back()
50 ->output_rect.size()) {
51 delegated_frame_provider_ = new DelegatedFrameProvider(
52 resource_collection_, frame->delegated_frame_data.Pass());
53 delegated_layer_ =
54 DelegatedRendererLayer::Create(delegated_frame_provider_);
55
56 layer_tree_host_->SetRootLayer(delegated_layer_);
57 delegated_layer_->SetDisplaySize(current_surface_->size());
58 delegated_layer_->SetBounds(current_surface_->size());
59 delegated_layer_->SetContentsOpaque(true);
60 delegated_layer_->SetIsDrawable(true);
61 } else {
62 delegated_frame_provider_->SetFrameData(frame->delegated_frame_data.Pass());
63 }
64 layer_tree_host_->SetViewportSize(current_surface_->size());
65
66 return true;
67 }
68
69 scoped_ptr<OutputSurface> Display::CreateOutputSurface(bool fallback) {
70 return client_->CreateOutputSurface();
71 }
72
73 void Display::ScheduleComposite() {
74 if (scheduled_draw_)
75 return;
76
77 scheduled_draw_ = true;
78
79 base::MessageLoop::current()->PostTask(
80 FROM_HERE, base::Bind(&Display::DoComposite, base::Unretained(this)));
81 }
82
83 void Display::DoComposite() {
84 scheduled_draw_ = false;
85 layer_tree_host_->Composite(base::TimeTicks::Now());
86 }
87
88 int Display::CurrentSurfaceID() {
89 return current_surface_ ? current_surface_->surface_id() : 0;
90 }
91
92 void Display::ReturnResources(const ReturnedResourceArray& resources) {
93 // We never generate any resources, so we should never have any returned.
94 DCHECK(resources.empty());
95 }
96
97 } // namespace cc
98
99 #endif // CC_SURFACES_DISPLAY_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698