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

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

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

Powered by Google App Engine
This is Rietveld 408576698