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

Side by Side Diff: services/surfaces/display_impl.cc

Issue 1116883002: Automatically redraw the display on resume. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/surfaces/display_impl.h" 5 #include "services/surfaces/display_impl.h"
6 6
7 #include "base/bind.h"
7 #include "cc/output/compositor_frame.h" 8 #include "cc/output/compositor_frame.h"
8 #include "cc/surfaces/display.h" 9 #include "cc/surfaces/display.h"
9 #include "mojo/converters/geometry/geometry_type_converters.h" 10 #include "mojo/converters/geometry/geometry_type_converters.h"
10 #include "mojo/converters/surfaces/surfaces_type_converters.h" 11 #include "mojo/converters/surfaces/surfaces_type_converters.h"
11 #include "services/surfaces/context_provider_mojo.h" 12 #include "services/surfaces/context_provider_mojo.h"
12 #include "services/surfaces/surfaces_output_surface.h" 13 #include "services/surfaces/surfaces_output_surface.h"
13 #include "services/surfaces/surfaces_scheduler.h" 14 #include "services/surfaces/surfaces_scheduler.h"
14 15
15 namespace surfaces { 16 namespace surfaces {
16 namespace { 17 namespace {
17 void CallCallback(const mojo::Closure& callback, cc::SurfaceDrawStatus status) { 18 void CallCallback(const mojo::Closure& callback, cc::SurfaceDrawStatus status) {
18 callback.Run(); 19 callback.Run();
19 } 20 }
20 } 21 }
21 22
22 DisplayImpl::DisplayImpl(cc::SurfaceManager* manager, 23 DisplayImpl::DisplayImpl(cc::SurfaceManager* manager,
23 cc::SurfaceId cc_id, 24 cc::SurfaceId cc_id,
24 SurfacesScheduler* scheduler, 25 SurfacesScheduler* scheduler,
25 mojo::ContextProviderPtr context_provider, 26 mojo::ContextProviderPtr context_provider,
26 mojo::ResourceReturnerPtr returner, 27 mojo::ResourceReturnerPtr returner,
27 mojo::InterfaceRequest<mojo::Display> display_request) 28 mojo::InterfaceRequest<mojo::Display> display_request)
28 : manager_(manager), 29 : manager_(manager),
29 factory_(manager, this), 30 factory_(manager, this),
30 cc_id_(cc_id), 31 cc_id_(cc_id),
31 scheduler_(scheduler), 32 scheduler_(scheduler),
32 context_provider_(context_provider.Pass()), 33 context_provider_(context_provider.Pass()),
33 returner_(returner.Pass()), 34 returner_(returner.Pass()),
34 viewport_param_binding_(this), 35 viewport_param_binding_(this),
35 display_binding_(this, display_request.Pass()) { 36 display_binding_(this, display_request.Pass()) {
37 context_provider_->NotifyOnViewportCreated(
38 base::Bind(&DisplayImpl::OnViewportCreated, base::Unretained(this)));
39
36 mojo::ViewportParameterListenerPtr viewport_parameter_listener; 40 mojo::ViewportParameterListenerPtr viewport_parameter_listener;
37 viewport_param_binding_.Bind(GetProxy(&viewport_parameter_listener)); 41 viewport_param_binding_.Bind(GetProxy(&viewport_parameter_listener));
38 context_provider_->Create( 42 context_provider_->Create(
39 viewport_parameter_listener.Pass(), 43 viewport_parameter_listener.Pass(),
40 base::Bind(&DisplayImpl::OnContextCreated, base::Unretained(this))); 44 base::Bind(&DisplayImpl::OnContextCreated, base::Unretained(this)));
41 factory_.Create(cc_id_); 45 factory_.Create(cc_id_);
42 } 46 }
43 47
44 void DisplayImpl::OnContextCreated(mojo::CommandBufferPtr gles2_client) { 48 void DisplayImpl::OnContextCreated(mojo::CommandBufferPtr gles2_client) {
45 DCHECK(!display_); 49 DCHECK(!display_);
(...skipping 24 matching lines...) Expand all
70 pending_callback_ = callback; 74 pending_callback_ = callback;
71 if (display_) 75 if (display_)
72 Draw(); 76 Draw();
73 } 77 }
74 78
75 void DisplayImpl::Draw() { 79 void DisplayImpl::Draw() {
76 gfx::Size frame_size = 80 gfx::Size frame_size =
77 pending_frame_->passes[0]->output_rect.To<gfx::Rect>().size(); 81 pending_frame_->passes[0]->output_rect.To<gfx::Rect>().size();
78 last_submitted_frame_size_ = frame_size; 82 last_submitted_frame_size_ = frame_size;
79 display_->Resize(frame_size); 83 display_->Resize(frame_size);
80 factory_.SubmitFrame(cc_id_, 84 factory_.SubmitFrame(
81 pending_frame_.To<scoped_ptr<cc::CompositorFrame>>(), 85 cc_id_, pending_frame_.Clone().To<scoped_ptr<cc::CompositorFrame>>(),
82 base::Bind(&CallCallback, pending_callback_)); 86 base::Bind(&CallCallback, pending_callback_));
83 scheduler_->SetNeedsDraw(); 87 scheduler_->SetNeedsDraw();
84 pending_frame_.reset();
85 pending_callback_.reset(); 88 pending_callback_.reset();
86 } 89 }
87 90
91 void DisplayImpl::OnViewportCreated() {
92 if (display_ && pending_frame_) {
93 Draw();
94 }
95 context_provider_->NotifyOnViewportCreated(
96 base::Bind(&DisplayImpl::OnViewportCreated, base::Unretained(this)));
97 }
98
88 void DisplayImpl::DisplayDamaged() { 99 void DisplayImpl::DisplayDamaged() {
89 } 100 }
90 101
91 void DisplayImpl::DidSwapBuffers() { 102 void DisplayImpl::DidSwapBuffers() {
92 } 103 }
93 104
94 void DisplayImpl::DidSwapBuffersComplete() { 105 void DisplayImpl::DidSwapBuffersComplete() {
95 } 106 }
96 107
97 void DisplayImpl::CommitVSyncParameters(base::TimeTicks timebase, 108 void DisplayImpl::CommitVSyncParameters(base::TimeTicks timebase,
(...skipping 29 matching lines...) Expand all
127 DCHECK(returner_); 138 DCHECK(returner_);
128 139
129 mojo::Array<mojo::ReturnedResourcePtr> ret(resources.size()); 140 mojo::Array<mojo::ReturnedResourcePtr> ret(resources.size());
130 for (size_t i = 0; i < resources.size(); ++i) { 141 for (size_t i = 0; i < resources.size(); ++i) {
131 ret[i] = mojo::ReturnedResource::From(resources[i]); 142 ret[i] = mojo::ReturnedResource::From(resources[i]);
132 } 143 }
133 returner_->ReturnResources(ret.Pass()); 144 returner_->ReturnResources(ret.Pass());
134 } 145 }
135 146
136 } // namespace surfaces 147 } // namespace surfaces
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698