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

Side by Side Diff: mojo/services/html_viewer/web_layer_tree_view_impl.cc

Issue 1099303002: Move html_viewer from mojo/services to components. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 8 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
(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 #include "mojo/services/html_viewer/web_layer_tree_view_impl.h"
6
7 #include "base/message_loop/message_loop_proxy.h"
8 #include "cc/blink/web_layer_impl.h"
9 #include "cc/layers/layer.h"
10 #include "cc/output/begin_frame_args.h"
11 #include "cc/scheduler/begin_frame_source.h"
12 #include "cc/trees/layer_tree_host.h"
13 #include "mojo/cc/context_provider_mojo.h"
14 #include "mojo/cc/output_surface_mojo.h"
15 #include "mojo/converters/surfaces/surfaces_type_converters.h"
16 #include "third_party/WebKit/public/web/WebWidget.h"
17 #include "third_party/mojo_services/src/view_manager/public/cpp/view.h"
18
19 namespace html_viewer {
20
21 WebLayerTreeViewImpl::WebLayerTreeViewImpl(
22 scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy,
23 mojo::SurfacePtr surface,
24 mojo::GpuPtr gpu_service)
25 : widget_(NULL),
26 view_(NULL),
27 main_thread_compositor_task_runner_(base::MessageLoopProxy::current()),
28 weak_factory_(this) {
29 main_thread_bound_weak_ptr_ = weak_factory_.GetWeakPtr();
30
31 cc::LayerTreeSettings settings;
32
33 // For web contents, layer transforms should scale up the contents of layers
34 // to keep content always crisp when possible.
35 settings.layer_transforms_should_scale_layer_contents = true;
36
37 cc::SharedBitmapManager* shared_bitmap_manager = nullptr;
38 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = nullptr;
39 cc::TaskGraphRunner* task_graph_runner = nullptr;
40
41 layer_tree_host_ =
42 cc::LayerTreeHost::CreateThreaded(this,
43 shared_bitmap_manager,
44 gpu_memory_buffer_manager,
45 task_graph_runner,
46 settings,
47 base::MessageLoopProxy::current(),
48 compositor_message_loop_proxy,
49 nullptr);
50 DCHECK(layer_tree_host_);
51
52 if (surface && gpu_service) {
53 mojo::CommandBufferPtr cb;
54 gpu_service->CreateOffscreenGLES2Context(GetProxy(&cb));
55 scoped_refptr<cc::ContextProvider> context_provider(
56 new mojo::ContextProviderMojo(cb.PassMessagePipe()));
57 output_surface_.reset(
58 new mojo::OutputSurfaceMojo(this, context_provider, surface.Pass()));
59 }
60 layer_tree_host_->SetLayerTreeHostClientReady();
61 }
62
63 WebLayerTreeViewImpl::~WebLayerTreeViewImpl() {
64 }
65
66 void WebLayerTreeViewImpl::WillBeginMainFrame() {
67 }
68
69 void WebLayerTreeViewImpl::DidBeginMainFrame() {
70 }
71
72 void WebLayerTreeViewImpl::BeginMainFrameNotExpectedSoon() {
73 }
74
75 void WebLayerTreeViewImpl::BeginMainFrame(const cc::BeginFrameArgs& args) {
76 VLOG(2) << "WebLayerTreeViewImpl::BeginMainFrame";
77 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF();
78 double deadline_sec = (args.deadline - base::TimeTicks()).InSecondsF();
79 double interval_sec = args.interval.InSecondsF();
80 blink::WebBeginFrameArgs web_begin_frame_args(
81 frame_time_sec, deadline_sec, interval_sec);
82 widget_->beginFrame(web_begin_frame_args);
83 }
84
85 void WebLayerTreeViewImpl::Layout() {
86 widget_->layout();
87 }
88
89 void WebLayerTreeViewImpl::ApplyViewportDeltas(
90 const gfx::Vector2dF& inner_delta,
91 const gfx::Vector2dF& outer_delta,
92 const gfx::Vector2dF& elastic_overscroll_delta,
93 float page_scale,
94 float top_controls_delta) {
95 widget_->applyViewportDeltas(
96 inner_delta,
97 outer_delta,
98 elastic_overscroll_delta,
99 page_scale,
100 top_controls_delta);
101 }
102
103 void WebLayerTreeViewImpl::ApplyViewportDeltas(
104 const gfx::Vector2d& scroll_delta,
105 float page_scale,
106 float top_controls_delta) {
107 widget_->applyViewportDeltas(scroll_delta, page_scale, top_controls_delta);
108 }
109
110 void WebLayerTreeViewImpl::RequestNewOutputSurface() {
111 if (output_surface_.get())
112 layer_tree_host_->SetOutputSurface(output_surface_.Pass());
113 }
114
115 void WebLayerTreeViewImpl::DidFailToInitializeOutputSurface() {
116 RequestNewOutputSurface();
117 }
118
119 void WebLayerTreeViewImpl::DidInitializeOutputSurface() {
120 }
121
122 void WebLayerTreeViewImpl::WillCommit() {
123 }
124
125 void WebLayerTreeViewImpl::DidCommit() {
126 }
127
128 void WebLayerTreeViewImpl::DidCommitAndDrawFrame() {
129 }
130
131 void WebLayerTreeViewImpl::DidCompleteSwapBuffers() {
132 }
133
134 void WebLayerTreeViewImpl::setRootLayer(const blink::WebLayer& layer) {
135 layer_tree_host_->SetRootLayer(
136 static_cast<const cc_blink::WebLayerImpl*>(&layer)->layer());
137 }
138
139 void WebLayerTreeViewImpl::clearRootLayer() {
140 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>());
141 }
142
143 void WebLayerTreeViewImpl::setViewportSize(
144 const blink::WebSize& device_viewport_size) {
145 layer_tree_host_->SetViewportSize(device_viewport_size);
146 }
147
148 blink::WebSize WebLayerTreeViewImpl::deviceViewportSize() const {
149 return layer_tree_host_->device_viewport_size();
150 }
151
152 void WebLayerTreeViewImpl::setDeviceScaleFactor(float device_scale_factor) {
153 layer_tree_host_->SetDeviceScaleFactor(device_scale_factor);
154 }
155
156 float WebLayerTreeViewImpl::deviceScaleFactor() const {
157 return layer_tree_host_->device_scale_factor();
158 }
159
160 void WebLayerTreeViewImpl::setBackgroundColor(blink::WebColor color) {
161 layer_tree_host_->set_background_color(color);
162 }
163
164 void WebLayerTreeViewImpl::setHasTransparentBackground(
165 bool has_transparent_background) {
166 layer_tree_host_->set_has_transparent_background(has_transparent_background);
167 }
168
169 void WebLayerTreeViewImpl::setVisible(bool visible) {
170 layer_tree_host_->SetVisible(visible);
171 }
172
173 void WebLayerTreeViewImpl::setPageScaleFactorAndLimits(float page_scale_factor,
174 float minimum,
175 float maximum) {
176 layer_tree_host_->SetPageScaleFactorAndLimits(
177 page_scale_factor, minimum, maximum);
178 }
179
180 void WebLayerTreeViewImpl::registerForAnimations(blink::WebLayer* layer) {
181 cc::Layer* cc_layer = static_cast<cc_blink::WebLayerImpl*>(layer)->layer();
182 cc_layer->layer_animation_controller()->SetAnimationRegistrar(
183 layer_tree_host_->animation_registrar());
184 }
185
186 void WebLayerTreeViewImpl::registerViewportLayers(
187 const blink::WebLayer* overscrollElasticityLayer,
188 const blink::WebLayer* pageScaleLayer,
189 const blink::WebLayer* innerViewportScrollLayer,
190 const blink::WebLayer* outerViewportScrollLayer) {
191 layer_tree_host_->RegisterViewportLayers(
192 // The scroll elasticity layer will only exist when using pinch virtual
193 // viewports.
194 overscrollElasticityLayer
195 ? static_cast<const cc_blink::WebLayerImpl*>(
196 overscrollElasticityLayer)->layer()
197 : NULL,
198 static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
199 static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
200 ->layer(),
201 // The outer viewport layer will only exist when using pinch virtual
202 // viewports.
203 outerViewportScrollLayer
204 ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
205 ->layer()
206 : NULL);
207 }
208
209 void WebLayerTreeViewImpl::clearViewportLayers() {
210 layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(),
211 scoped_refptr<cc::Layer>(),
212 scoped_refptr<cc::Layer>(),
213 scoped_refptr<cc::Layer>());
214 }
215
216 void WebLayerTreeViewImpl::startPageScaleAnimation(
217 const blink::WebPoint& destination,
218 bool use_anchor,
219 float new_page_scale,
220 double duration_sec) {
221 base::TimeDelta duration = base::TimeDelta::FromMicroseconds(
222 duration_sec * base::Time::kMicrosecondsPerSecond);
223 layer_tree_host_->StartPageScaleAnimation(
224 gfx::Vector2d(destination.x, destination.y),
225 use_anchor,
226 new_page_scale,
227 duration);
228 }
229
230 void WebLayerTreeViewImpl::setNeedsAnimate() {
231 layer_tree_host_->SetNeedsAnimate();
232 }
233
234 bool WebLayerTreeViewImpl::commitRequested() const {
235 return layer_tree_host_->CommitRequested();
236 }
237
238 void WebLayerTreeViewImpl::finishAllRendering() {
239 layer_tree_host_->FinishAllRendering();
240 }
241
242 void WebLayerTreeViewImpl::DidCreateSurface(cc::SurfaceId id) {
243 main_thread_compositor_task_runner_->PostTask(
244 FROM_HERE,
245 base::Bind(&WebLayerTreeViewImpl::DidCreateSurfaceOnMainThread,
246 main_thread_bound_weak_ptr_,
247 id));
248 }
249
250 void WebLayerTreeViewImpl::DidCreateSurfaceOnMainThread(cc::SurfaceId id) {
251 view_->SetSurfaceId(mojo::SurfaceId::From(id));
252 }
253
254 } // namespace html_viewer
OLDNEW
« no previous file with comments | « mojo/services/html_viewer/web_layer_tree_view_impl.h ('k') | mojo/services/html_viewer/web_media_player_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698