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

Side by Side Diff: components/html_viewer/web_layer_tree_view_impl.cc

Issue 1677293002: Bye bye Mandoline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Created 4 years, 10 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 "components/html_viewer/web_layer_tree_view_impl.h"
6
7 #include <stddef.h>
8 #include <utility>
9
10 #include "base/thread_task_runner_handle.h"
11 #include "cc/blink/web_layer_impl.h"
12 #include "cc/layers/layer.h"
13 #include "cc/output/begin_frame_args.h"
14 #include "cc/scheduler/begin_frame_source.h"
15 #include "cc/trees/layer_tree_host.h"
16 #include "components/mus/public/cpp/context_provider.h"
17 #include "components/mus/public/cpp/output_surface.h"
18 #include "components/mus/public/cpp/window.h"
19 #include "mojo/converters/surfaces/surfaces_type_converters.h"
20 #include "mojo/public/c/gles2/gles2.h"
21 #include "third_party/WebKit/public/web/WebWidget.h"
22 #include "ui/gfx/buffer_types.h"
23
24 namespace html_viewer {
25
26 WebLayerTreeViewImpl::WebLayerTreeViewImpl(
27 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner,
28 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
29 cc::TaskGraphRunner* task_graph_runner)
30 : widget_(nullptr),
31 window_(nullptr),
32 main_thread_compositor_task_runner_(base::ThreadTaskRunnerHandle::Get()),
33 weak_factory_(this) {
34 main_thread_bound_weak_ptr_ = weak_factory_.GetWeakPtr();
35
36 cc::LayerTreeSettings settings;
37
38 settings.use_image_texture_targets = std::vector<unsigned>(
39 static_cast<size_t>(gfx::BufferFormat::LAST) + 1, GL_TEXTURE_2D);
40 // TODO(jam): use multiple compositor raster threads and set gather_pixel_refs
41 // accordingly (see content).
42
43 // For web contents, layer transforms should scale up the contents of layers
44 // to keep content always crisp when possible.
45 settings.layer_transforms_should_scale_layer_contents = true;
46
47 // Use new animation system (cc::AnimationHost).
48 settings.use_compositor_animation_timelines = true;
49
50 // TODO(rjkroege): Not having a shared tile transport breaks
51 // software compositing. Add bitmap transport support.
52 cc::SharedBitmapManager* shared_bitmap_manager = nullptr;
53
54 cc::LayerTreeHost::InitParams params;
55 params.client = this;
56 params.shared_bitmap_manager = shared_bitmap_manager;
57 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
58 params.settings = &settings;
59 params.task_graph_runner = task_graph_runner;
60 params.main_task_runner = main_thread_compositor_task_runner_;
61
62 layer_tree_host_ =
63 cc::LayerTreeHost::CreateThreaded(compositor_task_runner, &params);
64 DCHECK(layer_tree_host_);
65 }
66
67 void WebLayerTreeViewImpl::Initialize(mus::mojom::GpuPtr gpu_service,
68 mus::Window* window,
69 blink::WebWidget* widget) {
70 window_ = window;
71 widget_ = widget;
72 if (gpu_service) {
73 mus::mojom::CommandBufferPtr cb;
74 gpu_service->CreateOffscreenGLES2Context(GetProxy(&cb));
75 scoped_refptr<cc::ContextProvider> context_provider(
76 new mus::ContextProvider(cb.PassInterface().PassHandle()));
77 output_surface_.reset(new mus::OutputSurface(
78 context_provider,
79 window_->RequestSurface(mus::mojom::SurfaceType::DEFAULT)));
80 }
81 layer_tree_host_->SetVisible(window_->visible());
82 }
83
84 WebLayerTreeViewImpl::~WebLayerTreeViewImpl() {
85 // Destroy the LayerTreeHost before anything else as doing so ensures we're
86 // not accessed on the compositor thread (we are the LayerTreeHostClient).
87 layer_tree_host_.reset();
88 }
89
90 void WebLayerTreeViewImpl::WillBeginMainFrame() {
91 }
92
93 void WebLayerTreeViewImpl::DidBeginMainFrame() {
94 }
95
96 void WebLayerTreeViewImpl::BeginMainFrameNotExpectedSoon() {
97 }
98
99 void WebLayerTreeViewImpl::BeginMainFrame(const cc::BeginFrameArgs& args) {
100 VLOG(2) << "WebLayerTreeViewImpl::BeginMainFrame";
101 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF();
102 widget_->beginFrame(frame_time_sec);
103 layer_tree_host_->SetNeedsAnimate();
104 }
105
106 void WebLayerTreeViewImpl::UpdateLayerTreeHost() {
107 widget_->updateAllLifecyclePhases();
108 }
109
110 void WebLayerTreeViewImpl::ApplyViewportDeltas(
111 const gfx::Vector2dF& inner_delta,
112 const gfx::Vector2dF& outer_delta,
113 const gfx::Vector2dF& elastic_overscroll_delta,
114 float page_scale,
115 float top_controls_delta) {
116 widget_->applyViewportDeltas(
117 inner_delta,
118 outer_delta,
119 elastic_overscroll_delta,
120 page_scale,
121 top_controls_delta);
122 }
123
124 void WebLayerTreeViewImpl::RequestNewOutputSurface() {
125 if (output_surface_.get())
126 layer_tree_host_->SetOutputSurface(std::move(output_surface_));
127 }
128
129 void WebLayerTreeViewImpl::DidFailToInitializeOutputSurface() {
130 RequestNewOutputSurface();
131 }
132
133 void WebLayerTreeViewImpl::DidInitializeOutputSurface() {
134 }
135
136 void WebLayerTreeViewImpl::WillCommit() {
137 }
138
139 void WebLayerTreeViewImpl::DidCommit() {
140 }
141
142 void WebLayerTreeViewImpl::DidCommitAndDrawFrame() {
143 }
144
145 // TODO(rjkroege): Wire this up to the SubmitFrame callback to improve
146 // synchronization.
147 void WebLayerTreeViewImpl::DidCompleteSwapBuffers() {
148 }
149
150 void WebLayerTreeViewImpl::setRootLayer(const blink::WebLayer& layer) {
151 layer_tree_host_->SetRootLayer(
152 static_cast<const cc_blink::WebLayerImpl*>(&layer)->layer());
153 }
154
155 void WebLayerTreeViewImpl::clearRootLayer() {
156 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>());
157 }
158
159 void WebLayerTreeViewImpl::setViewportSize(
160 const blink::WebSize& device_viewport_size) {
161 layer_tree_host_->SetViewportSize(device_viewport_size);
162 }
163
164 void WebLayerTreeViewImpl::setDeviceScaleFactor(float device_scale_factor) {
165 layer_tree_host_->SetDeviceScaleFactor(device_scale_factor);
166 }
167
168 float WebLayerTreeViewImpl::deviceScaleFactor() const {
169 return layer_tree_host_->device_scale_factor();
170 }
171
172 void WebLayerTreeViewImpl::setBackgroundColor(blink::WebColor color) {
173 layer_tree_host_->set_background_color(color);
174 }
175
176 void WebLayerTreeViewImpl::setHasTransparentBackground(
177 bool has_transparent_background) {
178 layer_tree_host_->set_has_transparent_background(has_transparent_background);
179 }
180
181 void WebLayerTreeViewImpl::setVisible(bool visible) {
182 layer_tree_host_->SetVisible(visible);
183 }
184
185 void WebLayerTreeViewImpl::setPageScaleFactorAndLimits(float page_scale_factor,
186 float minimum,
187 float maximum) {
188 layer_tree_host_->SetPageScaleFactorAndLimits(
189 page_scale_factor, minimum, maximum);
190 }
191
192 void WebLayerTreeViewImpl::registerForAnimations(blink::WebLayer* layer) {
193 cc::Layer* cc_layer = static_cast<cc_blink::WebLayerImpl*>(layer)->layer();
194 cc_layer->RegisterForAnimations(layer_tree_host_->animation_registrar());
195 }
196
197 void WebLayerTreeViewImpl::registerViewportLayers(
198 const blink::WebLayer* overscrollElasticityLayer,
199 const blink::WebLayer* pageScaleLayer,
200 const blink::WebLayer* innerViewportScrollLayer,
201 const blink::WebLayer* outerViewportScrollLayer) {
202 layer_tree_host_->RegisterViewportLayers(
203 // The scroll elasticity layer will only exist when using pinch virtual
204 // viewports.
205 overscrollElasticityLayer
206 ? static_cast<const cc_blink::WebLayerImpl*>(
207 overscrollElasticityLayer)
208 ->layer()
209 : nullptr,
210 static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
211 static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
212 ->layer(),
213 // The outer viewport layer will only exist when using pinch virtual
214 // viewports.
215 outerViewportScrollLayer
216 ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
217 ->layer()
218 : nullptr);
219 }
220
221 void WebLayerTreeViewImpl::clearViewportLayers() {
222 layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(),
223 scoped_refptr<cc::Layer>(),
224 scoped_refptr<cc::Layer>(),
225 scoped_refptr<cc::Layer>());
226 }
227
228 void WebLayerTreeViewImpl::startPageScaleAnimation(
229 const blink::WebPoint& destination,
230 bool use_anchor,
231 float new_page_scale,
232 double duration_sec) {
233 base::TimeDelta duration = base::TimeDelta::FromMicroseconds(
234 duration_sec * base::Time::kMicrosecondsPerSecond);
235 layer_tree_host_->StartPageScaleAnimation(
236 gfx::Vector2d(destination.x, destination.y),
237 use_anchor,
238 new_page_scale,
239 duration);
240 }
241
242 void WebLayerTreeViewImpl::setNeedsAnimate() {
243 layer_tree_host_->SetNeedsAnimate();
244 }
245
246 } // namespace html_viewer
OLDNEW
« no previous file with comments | « components/html_viewer/web_layer_tree_view_impl.h ('k') | components/html_viewer/web_mime_registry_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698