1 // Copyright 2013 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.
5 #include "content/test/web_layer_tree_view_impl_for_testing.h"
7 #include "base/command_line.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "base/synchronization/lock.h"
10 #include "base/thread_task_runner_handle.h"
11 #include "cc/base/switches.h"
12 #include "cc/blink/web_layer_impl.h"
13 #include "cc/input/input_handler.h"
14 #include "cc/layers/layer.h"
15 #include "cc/scheduler/begin_frame_source.h"
16 #include "cc/test/pixel_test_output_surface.h"
17 #include "cc/test/test_context_provider.h"
18 #include "cc/trees/layer_tree_host.h"
19 #include "content/test/test_blink_web_unit_test_support.h"
20 #include "third_party/WebKit/public/platform/Platform.h"
21 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
22 #include "third_party/WebKit/public/platform/WebLayer.h"
23 #include "third_party/WebKit/public/platform/WebLayerTreeView.h"
24 #include "third_party/WebKit/public/platform/WebSize.h"
26 using blink::WebColor
;
27 using blink::WebGraphicsContext3D
;
33 WebLayerTreeViewImplForTesting::WebLayerTreeViewImplForTesting() {}
35 WebLayerTreeViewImplForTesting::~WebLayerTreeViewImplForTesting() {}
37 void WebLayerTreeViewImplForTesting::Initialize() {
38 cc::LayerTreeSettings settings
;
40 // For web contents, layer transforms should scale up the contents of layers
41 // to keep content always crisp when possible.
42 settings
.layer_transforms_should_scale_layer_contents
= true;
44 // Accelerated animations are enabled for unit tests.
45 settings
.accelerated_animation_enabled
= true;
46 cc::LayerTreeHost::InitParams params
;
48 params
.settings
= &settings
;
49 params
.main_task_runner
= base::ThreadTaskRunnerHandle::Get();
50 params
.task_graph_runner
= &task_graph_runner_
;
51 layer_tree_host_
= cc::LayerTreeHost::CreateSingleThreaded(this, ¶ms
);
52 DCHECK(layer_tree_host_
);
55 void WebLayerTreeViewImplForTesting::setRootLayer(
56 const blink::WebLayer
& root
) {
57 layer_tree_host_
->SetRootLayer(
58 static_cast<const cc_blink::WebLayerImpl
*>(&root
)->layer());
61 void WebLayerTreeViewImplForTesting::clearRootLayer() {
62 layer_tree_host_
->SetRootLayer(scoped_refptr
<cc::Layer
>());
65 void WebLayerTreeViewImplForTesting::setViewportSize(
66 const WebSize
& unused_deprecated
,
67 const WebSize
& device_viewport_size
) {
68 layer_tree_host_
->SetViewportSize(device_viewport_size
);
71 void WebLayerTreeViewImplForTesting::setViewportSize(
72 const WebSize
& device_viewport_size
) {
73 layer_tree_host_
->SetViewportSize(device_viewport_size
);
76 WebSize
WebLayerTreeViewImplForTesting::layoutViewportSize() const {
77 return layer_tree_host_
->device_viewport_size();
80 WebSize
WebLayerTreeViewImplForTesting::deviceViewportSize() const {
81 return layer_tree_host_
->device_viewport_size();
84 void WebLayerTreeViewImplForTesting::setDeviceScaleFactor(
85 float device_scale_factor
) {
86 layer_tree_host_
->SetDeviceScaleFactor(device_scale_factor
);
89 float WebLayerTreeViewImplForTesting::deviceScaleFactor() const {
90 return layer_tree_host_
->device_scale_factor();
93 void WebLayerTreeViewImplForTesting::setBackgroundColor(WebColor color
) {
94 layer_tree_host_
->set_background_color(color
);
97 void WebLayerTreeViewImplForTesting::setHasTransparentBackground(
99 layer_tree_host_
->set_has_transparent_background(transparent
);
102 void WebLayerTreeViewImplForTesting::setVisible(bool visible
) {
103 layer_tree_host_
->SetVisible(visible
);
106 void WebLayerTreeViewImplForTesting::setPageScaleFactorAndLimits(
107 float page_scale_factor
,
110 layer_tree_host_
->SetPageScaleFactorAndLimits(
111 page_scale_factor
, minimum
, maximum
);
114 void WebLayerTreeViewImplForTesting::startPageScaleAnimation(
115 const blink::WebPoint
& scroll
,
117 float new_page_scale
,
118 double duration_sec
) {}
120 void WebLayerTreeViewImplForTesting::setNeedsAnimate() {
121 layer_tree_host_
->SetNeedsAnimate();
124 bool WebLayerTreeViewImplForTesting::commitRequested() const {
125 return layer_tree_host_
->CommitRequested();
128 void WebLayerTreeViewImplForTesting::didStopFlinging() {}
130 void WebLayerTreeViewImplForTesting::finishAllRendering() {
131 layer_tree_host_
->FinishAllRendering();
134 void WebLayerTreeViewImplForTesting::setDeferCommits(bool defer_commits
) {
135 layer_tree_host_
->SetDeferCommits(defer_commits
);
138 void WebLayerTreeViewImplForTesting::Layout() {
141 void WebLayerTreeViewImplForTesting::ApplyViewportDeltas(
142 const gfx::Vector2dF
& inner_delta
,
143 const gfx::Vector2dF
& outer_delta
,
144 const gfx::Vector2dF
& elastic_overscroll_delta
,
146 float top_controls_delta
) {
149 void WebLayerTreeViewImplForTesting::RequestNewOutputSurface() {
150 bool flipped_output_surface
= false;
151 layer_tree_host_
->SetOutputSurface(
152 make_scoped_ptr(new cc::PixelTestOutputSurface(
153 cc::TestContextProvider::Create(), flipped_output_surface
)));
156 void WebLayerTreeViewImplForTesting::DidFailToInitializeOutputSurface() {
157 RequestNewOutputSurface();
160 void WebLayerTreeViewImplForTesting::registerForAnimations(
161 blink::WebLayer
* layer
) {
162 cc::Layer
* cc_layer
= static_cast<cc_blink::WebLayerImpl
*>(layer
)->layer();
163 cc_layer
->RegisterForAnimations(layer_tree_host_
->animation_registrar());
166 void WebLayerTreeViewImplForTesting::registerViewportLayers(
167 const blink::WebLayer
* overscrollElasticityLayer
,
168 const blink::WebLayer
* pageScaleLayer
,
169 const blink::WebLayer
* innerViewportScrollLayer
,
170 const blink::WebLayer
* outerViewportScrollLayer
) {
171 layer_tree_host_
->RegisterViewportLayers(
172 // The scroll elasticity layer will only exist when using pinch virtual
174 overscrollElasticityLayer
175 ? static_cast<const cc_blink::WebLayerImpl
*>(
176 overscrollElasticityLayer
)->layer()
178 static_cast<const cc_blink::WebLayerImpl
*>(pageScaleLayer
)->layer(),
179 static_cast<const cc_blink::WebLayerImpl
*>(innerViewportScrollLayer
)
181 // The outer viewport layer will only exist when using pinch virtual
183 outerViewportScrollLayer
184 ? static_cast<const cc_blink::WebLayerImpl
*>(outerViewportScrollLayer
)
189 void WebLayerTreeViewImplForTesting::clearViewportLayers() {
190 layer_tree_host_
->RegisterViewportLayers(scoped_refptr
<cc::Layer
>(),
191 scoped_refptr
<cc::Layer
>(),
192 scoped_refptr
<cc::Layer
>(),
193 scoped_refptr
<cc::Layer
>());
196 void WebLayerTreeViewImplForTesting::registerSelection(
197 const blink::WebSelection
& selection
) {
200 void WebLayerTreeViewImplForTesting::clearSelection() {
203 } // namespace content