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

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 714003002: Allow changing top controls height (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 scrollbar_fade_start_ = start_fade; 153 scrollbar_fade_start_ = start_fade;
154 requested_scrollbar_animation_delay_ = delay; 154 requested_scrollbar_animation_delay_ = delay;
155 } 155 }
156 void DidActivateSyncTree() override {} 156 void DidActivateSyncTree() override {}
157 void DidManageTiles() override {} 157 void DidManageTiles() override {}
158 158
159 void set_reduce_memory_result(bool reduce_memory_result) { 159 void set_reduce_memory_result(bool reduce_memory_result) {
160 reduce_memory_result_ = reduce_memory_result; 160 reduce_memory_result_ = reduce_memory_result;
161 } 161 }
162 162
163 bool CreateHostImpl(const LayerTreeSettings& settings, 163 virtual bool CreateHostImpl(const LayerTreeSettings& settings,
164 scoped_ptr<OutputSurface> output_surface) { 164 scoped_ptr<OutputSurface> output_surface) {
165 host_impl_ = LayerTreeHostImpl::Create(settings, 165 host_impl_ = LayerTreeHostImpl::Create(settings,
166 this, 166 this,
167 &proxy_, 167 &proxy_,
168 &stats_instrumentation_, 168 &stats_instrumentation_,
169 shared_bitmap_manager_.get(), 169 shared_bitmap_manager_.get(),
170 gpu_memory_buffer_manager_.get(), 170 gpu_memory_buffer_manager_.get(),
171 0); 171 0);
172 bool init = host_impl_->InitializeRenderer(output_surface.Pass()); 172 bool init = host_impl_->InitializeRenderer(output_surface.Pass());
173 host_impl_->SetViewportSize(gfx::Size(10, 10)); 173 host_impl_->SetViewportSize(gfx::Size(10, 10));
174 return init; 174 return init;
(...skipping 2088 matching lines...) Expand 10 before | Expand all | Expand 10 after
2263 EXPECT_FALSE(did_request_commit_); 2263 EXPECT_FALSE(did_request_commit_);
2264 } 2264 }
2265 2265
2266 // TODO(bokan): Convert these tests to create inner and outer viewports. 2266 // TODO(bokan): Convert these tests to create inner and outer viewports.
2267 class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest { 2267 class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest {
2268 public: 2268 public:
2269 LayerTreeHostImplTopControlsTest() 2269 LayerTreeHostImplTopControlsTest()
2270 // Make the clip size the same as the layer (content) size so the layer is 2270 // Make the clip size the same as the layer (content) size so the layer is
2271 // non-scrollable. 2271 // non-scrollable.
2272 : layer_size_(10, 10), 2272 : layer_size_(10, 10),
2273 clip_size_(layer_size_) { 2273 clip_size_(layer_size_),
2274 top_controls_height_(50) {
2274 settings_.calculate_top_controls_position = true; 2275 settings_.calculate_top_controls_position = true;
2275 settings_.top_controls_height = 50;
2276 settings_.use_pinch_virtual_viewport = true; 2276 settings_.use_pinch_virtual_viewport = true;
2277 2277
2278 viewport_size_ = 2278 viewport_size_ = gfx::Size(clip_size_.width(),
2279 gfx::Size(clip_size_.width(), 2279 clip_size_.height() + top_controls_height_);
2280 clip_size_.height() + settings_.top_controls_height); 2280 }
2281
2282 bool CreateHostImpl(const LayerTreeSettings& settings,
2283 scoped_ptr<OutputSurface> output_surface) override {
2284 bool init =
2285 LayerTreeHostImplTest::CreateHostImpl(settings, output_surface.Pass());
2286 if (init && settings.calculate_top_controls_position) {
2287 host_impl_->active_tree()->set_top_controls_height(top_controls_height_);
2288 host_impl_->active_tree()->set_top_controls_delta(top_controls_height_);
2289 host_impl_->top_controls_manager()->SetTopControlsHeight(
2290 top_controls_height_);
2291 host_impl_->DidChangeTopControlsPosition();
2292 }
2293 return init;
2281 } 2294 }
2282 2295
2283 void SetupTopControlsAndScrollLayer() { 2296 void SetupTopControlsAndScrollLayer() {
2284 scoped_ptr<LayerImpl> root = 2297 scoped_ptr<LayerImpl> root =
2285 LayerImpl::Create(host_impl_->active_tree(), 1); 2298 LayerImpl::Create(host_impl_->active_tree(), 1);
2286 scoped_ptr<LayerImpl> root_clip = 2299 scoped_ptr<LayerImpl> root_clip =
2287 LayerImpl::Create(host_impl_->active_tree(), 2); 2300 LayerImpl::Create(host_impl_->active_tree(), 2);
2288 root_clip->SetBounds(clip_size_); 2301 root_clip->SetBounds(clip_size_);
2289 root->SetScrollClipLayer(root_clip->id()); 2302 root->SetScrollClipLayer(root_clip->id());
2290 root->SetBounds(layer_size_); 2303 root->SetBounds(layer_size_);
2291 root->SetContentBounds(layer_size_); 2304 root->SetContentBounds(layer_size_);
2292 root->SetPosition(gfx::PointF()); 2305 root->SetPosition(gfx::PointF());
2293 root->SetDrawsContent(false); 2306 root->SetDrawsContent(false);
2294 root->SetIsContainerForFixedPositionLayers(true); 2307 root->SetIsContainerForFixedPositionLayers(true);
2295 int inner_viewport_scroll_layer_id = root->id(); 2308 int inner_viewport_scroll_layer_id = root->id();
2296 int page_scale_layer_id = root_clip->id(); 2309 int page_scale_layer_id = root_clip->id();
2297 root_clip->AddChild(root.Pass()); 2310 root_clip->AddChild(root.Pass());
2298 host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); 2311 host_impl_->active_tree()->SetRootLayer(root_clip.Pass());
2299 host_impl_->active_tree()->SetViewportLayersFromIds( 2312 host_impl_->active_tree()->SetViewportLayersFromIds(
2300 Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id, 2313 Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id,
2301 Layer::INVALID_ID); 2314 Layer::INVALID_ID);
2302 // Set a viewport size that is large enough to contain both the top controls 2315 // Set a viewport size that is large enough to contain both the top controls
2303 // and some content. 2316 // and some content.
2304 host_impl_->SetViewportSize(viewport_size_); 2317 host_impl_->SetViewportSize(viewport_size_);
2305 host_impl_->SetTopControlsLayoutHeight( 2318 host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
2306 settings_.top_controls_height); 2319
2320 host_impl_->DidChangeTopControlsPosition();
2307 2321
2308 host_impl_->CreatePendingTree(); 2322 host_impl_->CreatePendingTree();
2309 root = 2323 root =
2310 LayerImpl::Create(host_impl_->sync_tree(), 1); 2324 LayerImpl::Create(host_impl_->sync_tree(), 1);
2311 root_clip = 2325 root_clip =
2312 LayerImpl::Create(host_impl_->sync_tree(), 2); 2326 LayerImpl::Create(host_impl_->sync_tree(), 2);
2313 root_clip->SetBounds(clip_size_); 2327 root_clip->SetBounds(clip_size_);
2314 root->SetScrollClipLayer(root_clip->id()); 2328 root->SetScrollClipLayer(root_clip->id());
2315 root->SetBounds(layer_size_); 2329 root->SetBounds(layer_size_);
2316 root->SetContentBounds(layer_size_); 2330 root->SetContentBounds(layer_size_);
2317 root->SetPosition(gfx::PointF()); 2331 root->SetPosition(gfx::PointF());
2318 root->SetDrawsContent(false); 2332 root->SetDrawsContent(false);
2319 root->SetIsContainerForFixedPositionLayers(true); 2333 root->SetIsContainerForFixedPositionLayers(true);
2320 inner_viewport_scroll_layer_id = root->id(); 2334 inner_viewport_scroll_layer_id = root->id();
2321 page_scale_layer_id = root_clip->id(); 2335 page_scale_layer_id = root_clip->id();
2322 root_clip->AddChild(root.Pass()); 2336 root_clip->AddChild(root.Pass());
2323 host_impl_->sync_tree()->SetRootLayer(root_clip.Pass()); 2337 host_impl_->sync_tree()->SetRootLayer(root_clip.Pass());
2324 host_impl_->sync_tree()->SetViewportLayersFromIds( 2338 host_impl_->sync_tree()->SetViewportLayersFromIds(
2325 Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id, 2339 Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id,
2326 Layer::INVALID_ID); 2340 Layer::INVALID_ID);
2327 // Set a viewport size that is large enough to contain both the top controls 2341 // Set a viewport size that is large enough to contain both the top controls
2328 // and some content. 2342 // and some content.
2329 host_impl_->SetViewportSize(viewport_size_); 2343 host_impl_->SetViewportSize(viewport_size_);
2330 host_impl_->sync_tree()->set_top_controls_layout_height( 2344 host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
2331 settings_.top_controls_height); 2345 host_impl_->DidChangeTopControlsPosition();
2332 } 2346 }
2333 2347
2334 void SetupTopControlsAndScrollLayerWithVirtualViewport( 2348 void SetupTopControlsAndScrollLayerWithVirtualViewport(
2335 const gfx::Size& inner_viewport_size, 2349 const gfx::Size& inner_viewport_size,
2336 const gfx::Size& outer_viewport_size, 2350 const gfx::Size& outer_viewport_size,
2337 const gfx::Size& scroll_layer_size) { 2351 const gfx::Size& scroll_layer_size) {
2338 CreateHostImpl(settings_, CreateOutputSurface()); 2352 CreateHostImpl(settings_, CreateOutputSurface());
2339 host_impl_->SetTopControlsLayoutHeight( 2353 host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
2340 settings_.top_controls_height); 2354 host_impl_->DidChangeTopControlsPosition();
2341 2355
2342 scoped_ptr<LayerImpl> root = 2356 scoped_ptr<LayerImpl> root =
2343 LayerImpl::Create(host_impl_->active_tree(), 1); 2357 LayerImpl::Create(host_impl_->active_tree(), 1);
2344 scoped_ptr<LayerImpl> root_clip = 2358 scoped_ptr<LayerImpl> root_clip =
2345 LayerImpl::Create(host_impl_->active_tree(), 2); 2359 LayerImpl::Create(host_impl_->active_tree(), 2);
2346 scoped_ptr<LayerImpl> page_scale = 2360 scoped_ptr<LayerImpl> page_scale =
2347 LayerImpl::Create(host_impl_->active_tree(), 3); 2361 LayerImpl::Create(host_impl_->active_tree(), 3);
2348 2362
2349 scoped_ptr<LayerImpl> outer_scroll = 2363 scoped_ptr<LayerImpl> outer_scroll =
2350 LayerImpl::Create(host_impl_->active_tree(), 4); 2364 LayerImpl::Create(host_impl_->active_tree(), 4);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2383 2397
2384 host_impl_->SetViewportSize(inner_viewport_size); 2398 host_impl_->SetViewportSize(inner_viewport_size);
2385 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer(); 2399 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer();
2386 EXPECT_EQ(inner_viewport_size, root_clip_ptr->bounds()); 2400 EXPECT_EQ(inner_viewport_size, root_clip_ptr->bounds());
2387 } 2401 }
2388 2402
2389 protected: 2403 protected:
2390 gfx::Size layer_size_; 2404 gfx::Size layer_size_;
2391 gfx::Size clip_size_; 2405 gfx::Size clip_size_;
2392 gfx::Size viewport_size_; 2406 gfx::Size viewport_size_;
2407 float top_controls_height_;
2393 2408
2394 LayerTreeSettings settings_; 2409 LayerTreeSettings settings_;
2395 }; // class LayerTreeHostImplTopControlsTest 2410 }; // class LayerTreeHostImplTopControlsTest
2396 2411
2397 TEST_F(LayerTreeHostImplTopControlsTest, ScrollTopControlsByFractionalAmount) { 2412 TEST_F(LayerTreeHostImplTopControlsTest, ScrollTopControlsByFractionalAmount) {
2398 SetupTopControlsAndScrollLayerWithVirtualViewport( 2413 SetupTopControlsAndScrollLayerWithVirtualViewport(
2399 gfx::Size(10, 10), gfx::Size(10, 10), gfx::Size(10, 10)); 2414 gfx::Size(10, 10), gfx::Size(10, 10), gfx::Size(10, 10));
2400 DrawFrame(); 2415 DrawFrame();
2401 2416
2402 EXPECT_EQ(InputHandler::ScrollStarted, 2417 EXPECT_EQ(InputHandler::ScrollStarted,
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
2494 } 2509 }
2495 2510
2496 // Test that the fixed position container delta is appropriately adjusted 2511 // Test that the fixed position container delta is appropriately adjusted
2497 // by the top controls showing/hiding and page scale doesn't affect it. 2512 // by the top controls showing/hiding and page scale doesn't affect it.
2498 TEST_F(LayerTreeHostImplTopControlsTest, FixedContainerDelta) { 2513 TEST_F(LayerTreeHostImplTopControlsTest, FixedContainerDelta) {
2499 SetupTopControlsAndScrollLayerWithVirtualViewport( 2514 SetupTopControlsAndScrollLayerWithVirtualViewport(
2500 gfx::Size(100, 100), gfx::Size(100, 100), gfx::Size(100, 100)); 2515 gfx::Size(100, 100), gfx::Size(100, 100), gfx::Size(100, 100));
2501 DrawFrame(); 2516 DrawFrame();
2502 2517
2503 float page_scale = 1.5f; 2518 float page_scale = 1.5f;
2504 float top_controls_height = settings_.top_controls_height;
2505 LayerImpl* outer_viewport_scroll_layer = 2519 LayerImpl* outer_viewport_scroll_layer =
2506 host_impl_->active_tree()->OuterViewportScrollLayer(); 2520 host_impl_->active_tree()->OuterViewportScrollLayer();
2507 2521
2508 // Zoom in, since the fixed container is the outer viewport, the delta should 2522 // Zoom in, since the fixed container is the outer viewport, the delta should
2509 // not be scaled. 2523 // not be scaled.
2510 host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale, 1.f, 2.f); 2524 host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale, 1.f, 2.f);
2511 2525
2512 EXPECT_EQ(InputHandler::ScrollStarted, 2526 EXPECT_EQ(InputHandler::ScrollStarted,
2513 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); 2527 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
2514 2528
2515 // Scroll down, the top controls hiding should expand the viewport size so 2529 // Scroll down, the top controls hiding should expand the viewport size so
2516 // the delta should be equal to the scroll distance. 2530 // the delta should be equal to the scroll distance.
2517 gfx::Vector2dF top_controls_scroll_delta(0.f, 20.f); 2531 gfx::Vector2dF top_controls_scroll_delta(0.f, 20.f);
2518 host_impl_->top_controls_manager()->ScrollBegin(); 2532 host_impl_->top_controls_manager()->ScrollBegin();
2519 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); 2533 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
2520 EXPECT_EQ(top_controls_height - top_controls_scroll_delta.y(), 2534 EXPECT_EQ(top_controls_height_ - top_controls_scroll_delta.y(),
2521 host_impl_->top_controls_manager()->ContentTopOffset()); 2535 host_impl_->top_controls_manager()->ContentTopOffset());
2522 EXPECT_VECTOR_EQ(top_controls_scroll_delta, 2536 EXPECT_VECTOR_EQ(top_controls_scroll_delta,
2523 outer_viewport_scroll_layer->FixedContainerSizeDelta()); 2537 outer_viewport_scroll_layer->FixedContainerSizeDelta());
2524 host_impl_->ScrollEnd(); 2538 host_impl_->ScrollEnd();
2525 2539
2526 // Scroll past the maximum extent. The delta shouldn't be greater than the 2540 // Scroll past the maximum extent. The delta shouldn't be greater than the
2527 // top controls height. 2541 // top controls height.
2528 host_impl_->top_controls_manager()->ScrollBegin(); 2542 host_impl_->top_controls_manager()->ScrollBegin();
2529 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); 2543 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
2530 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); 2544 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
2531 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); 2545 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
2532 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); 2546 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset());
2533 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, top_controls_height), 2547 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, top_controls_height_),
2534 outer_viewport_scroll_layer->FixedContainerSizeDelta()); 2548 outer_viewport_scroll_layer->FixedContainerSizeDelta());
2535 host_impl_->ScrollEnd(); 2549 host_impl_->ScrollEnd();
2536 2550
2537 // Scroll in the direction to make the top controls show. 2551 // Scroll in the direction to make the top controls show.
2538 host_impl_->top_controls_manager()->ScrollBegin(); 2552 host_impl_->top_controls_manager()->ScrollBegin();
2539 host_impl_->top_controls_manager()->ScrollBy(-top_controls_scroll_delta); 2553 host_impl_->top_controls_manager()->ScrollBy(-top_controls_scroll_delta);
2540 EXPECT_EQ(top_controls_scroll_delta.y(), 2554 EXPECT_EQ(top_controls_scroll_delta.y(),
2541 host_impl_->top_controls_manager()->ContentTopOffset()); 2555 host_impl_->top_controls_manager()->ContentTopOffset());
2542 EXPECT_VECTOR_EQ( 2556 EXPECT_VECTOR_EQ(
2543 gfx::Vector2dF(0, top_controls_height - top_controls_scroll_delta.y()), 2557 gfx::Vector2dF(0, top_controls_height_ - top_controls_scroll_delta.y()),
2544 outer_viewport_scroll_layer->FixedContainerSizeDelta()); 2558 outer_viewport_scroll_layer->FixedContainerSizeDelta());
2545 host_impl_->top_controls_manager()->ScrollEnd(); 2559 host_impl_->top_controls_manager()->ScrollEnd();
2546 } 2560 }
2547 2561
2548 // Ensure setting the top controls position explicitly using the setters on the 2562 // Ensure setting the top controls position explicitly using the setters on the
2549 // TreeImpl correctly affects the top controls manager and viewport bounds. 2563 // TreeImpl correctly affects the top controls manager and viewport bounds.
2550 TEST_F(LayerTreeHostImplTopControlsTest, PositionTopControlsExplicitly) { 2564 TEST_F(LayerTreeHostImplTopControlsTest, PositionTopControlsExplicitly) {
2551 CreateHostImpl(settings_, CreateOutputSurface()); 2565 CreateHostImpl(settings_, CreateOutputSurface());
2552 SetupTopControlsAndScrollLayer(); 2566 SetupTopControlsAndScrollLayer();
2553 DrawFrame(); 2567 DrawFrame();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2604 2618
2605 // Test that changing the top controls layout height is correctly applied to 2619 // Test that changing the top controls layout height is correctly applied to
2606 // the inner viewport container bounds. That is, the top controls layout 2620 // the inner viewport container bounds. That is, the top controls layout
2607 // height is the amount that the inner viewport container was shrunk outside 2621 // height is the amount that the inner viewport container was shrunk outside
2608 // the compositor to accommodate the top controls. 2622 // the compositor to accommodate the top controls.
2609 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsLayoutHeightChanged) { 2623 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsLayoutHeightChanged) {
2610 CreateHostImpl(settings_, CreateOutputSurface()); 2624 CreateHostImpl(settings_, CreateOutputSurface());
2611 SetupTopControlsAndScrollLayer(); 2625 SetupTopControlsAndScrollLayer();
2612 DrawFrame(); 2626 DrawFrame();
2613 2627
2614 host_impl_->sync_tree()->set_top_controls_content_offset(15.f); 2628 host_impl_->sync_tree()->set_top_controls_content_offset(50.f);
2615 host_impl_->sync_tree()->set_top_controls_layout_height(15.f); 2629 host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
2616 2630
2617 host_impl_->active_tree()->set_top_controls_content_offset(20.f); 2631 host_impl_->active_tree()->set_top_controls_content_offset(50.f);
2618 host_impl_->active_tree()->set_top_controls_delta(-20.f); 2632 host_impl_->active_tree()->set_top_controls_delta(-50.f);
2619 host_impl_->active_tree()->set_sent_top_controls_delta(-5.f);
2620 2633
2621 host_impl_->DidChangeTopControlsPosition(); 2634 host_impl_->DidChangeTopControlsPosition();
2622 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer(); 2635 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer();
2623 EXPECT_EQ(viewport_size_, root_clip_ptr->bounds()); 2636 EXPECT_EQ(viewport_size_, root_clip_ptr->bounds());
2624 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); 2637 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset());
2625 2638
2626 host_impl_->sync_tree()->root_layer()->SetBounds( 2639 host_impl_->sync_tree()->root_layer()->SetBounds(
2627 gfx::Size(root_clip_ptr->bounds().width(), 2640 gfx::Size(root_clip_ptr->bounds().width(),
2628 root_clip_ptr->bounds().height() - 15.f)); 2641 root_clip_ptr->bounds().height() - 50.f));
2629 2642
2630 host_impl_->ActivateSyncTree(); 2643 host_impl_->ActivateSyncTree();
2631 2644
2632 root_clip_ptr = host_impl_->active_tree()->root_layer(); 2645 root_clip_ptr = host_impl_->active_tree()->root_layer();
2633 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); 2646 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset());
2634 2647
2635 // The total bounds should remain unchanged since the bounds delta should 2648 // The total bounds should remain unchanged since the bounds delta should
2636 // account for the difference between the layout height and the current 2649 // account for the difference between the layout height and the current
2637 // top controls offset. 2650 // top controls offset.
2638 EXPECT_EQ(viewport_size_, root_clip_ptr->bounds()); 2651 EXPECT_EQ(viewport_size_, root_clip_ptr->bounds());
2639 EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 15.f), root_clip_ptr->bounds_delta()); 2652 EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 50.f), root_clip_ptr->bounds_delta());
2640 2653
2641 host_impl_->active_tree()->set_top_controls_delta(0.f); 2654 host_impl_->active_tree()->set_top_controls_delta(0.f);
2642 host_impl_->DidChangeTopControlsPosition(); 2655 host_impl_->DidChangeTopControlsPosition();
2643 2656
2644 EXPECT_EQ(15.f, host_impl_->top_controls_manager()->ContentTopOffset()); 2657 EXPECT_EQ(50.f, host_impl_->top_controls_manager()->ContentTopOffset());
2645 EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 0.f), root_clip_ptr->bounds_delta()); 2658 EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 0.f), root_clip_ptr->bounds_delta());
2646 EXPECT_EQ(gfx::Size(viewport_size_.width(), viewport_size_.height()-15.f), 2659 EXPECT_EQ(gfx::Size(viewport_size_.width(), viewport_size_.height() - 50.f),
2647 root_clip_ptr->bounds()); 2660 root_clip_ptr->bounds());
2648 } 2661 }
2649 2662
2650 // Test that showing/hiding the top controls when the viewport is fully scrolled 2663 // Test that showing/hiding the top controls when the viewport is fully scrolled
2651 // doesn't incorrectly change the viewport offset due to clamping from changing 2664 // doesn't incorrectly change the viewport offset due to clamping from changing
2652 // viewport bounds. 2665 // viewport bounds.
2653 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsViewportOffsetClamping) { 2666 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsViewportOffsetClamping) {
2654 SetupTopControlsAndScrollLayerWithVirtualViewport( 2667 SetupTopControlsAndScrollLayerWithVirtualViewport(
2655 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); 2668 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400));
2656 DrawFrame(); 2669 DrawFrame();
2657 2670
2658 EXPECT_EQ(settings_.top_controls_height, 2671 EXPECT_EQ(top_controls_height_,
2659 host_impl_->active_tree()->total_top_controls_content_offset()); 2672 host_impl_->active_tree()->total_top_controls_content_offset());
2660 2673
2661 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); 2674 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer();
2662 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); 2675 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer();
2663 2676
2664 // Scroll the viewports to max scroll offset. 2677 // Scroll the viewports to max scroll offset.
2665 outer_scroll->SetScrollDelta(gfx::Vector2dF(0, 200.f)); 2678 outer_scroll->SetScrollDelta(gfx::Vector2dF(0, 200.f));
2666 inner_scroll->SetScrollDelta(gfx::Vector2dF(100, 100.f)); 2679 inner_scroll->SetScrollDelta(gfx::Vector2dF(100, 100.f));
2667 2680
2668 gfx::ScrollOffset viewport_offset = 2681 gfx::ScrollOffset viewport_offset =
2669 host_impl_->active_tree()->TotalScrollOffset(); 2682 host_impl_->active_tree()->TotalScrollOffset();
2670 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), viewport_offset); 2683 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), viewport_offset);
2671 2684
2672 // Hide the top controls by 25px. 2685 // Hide the top controls by 25px.
2673 gfx::Vector2dF scroll_delta(0.f, 25.f); 2686 gfx::Vector2dF scroll_delta(0.f, 25.f);
2674 EXPECT_EQ(InputHandler::ScrollStarted, 2687 EXPECT_EQ(InputHandler::ScrollStarted,
2675 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); 2688 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
2676 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 2689 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
2677 2690
2678 // scrolling down at the max extents no longer hides the top controls 2691 // scrolling down at the max extents no longer hides the top controls
2679 EXPECT_EQ(0.f, 2692 EXPECT_EQ(0.f,
2680 settings_.top_controls_height - 2693 top_controls_height_ -
2681 host_impl_->active_tree()->total_top_controls_content_offset()); 2694 host_impl_->active_tree()->total_top_controls_content_offset());
2682 2695
2683 // forcefully hide the top controls by 25px 2696 // forcefully hide the top controls by 25px
2684 host_impl_->top_controls_manager()->ScrollBy(scroll_delta); 2697 host_impl_->top_controls_manager()->ScrollBy(scroll_delta);
2685 host_impl_->ScrollEnd(); 2698 host_impl_->ScrollEnd();
2686 2699
2687 EXPECT_EQ(scroll_delta.y(), 2700 EXPECT_EQ(scroll_delta.y(),
2688 settings_.top_controls_height - 2701 top_controls_height_ -
2689 host_impl_->active_tree()->total_top_controls_content_offset()); 2702 host_impl_->active_tree()->total_top_controls_content_offset());
2690 2703
2691 inner_scroll->ClampScrollToMaxScrollOffset(); 2704 inner_scroll->ClampScrollToMaxScrollOffset();
2692 outer_scroll->ClampScrollToMaxScrollOffset(); 2705 outer_scroll->ClampScrollToMaxScrollOffset();
2693 2706
2694 // We should still be fully scrolled. 2707 // We should still be fully scrolled.
2695 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), 2708 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(),
2696 host_impl_->active_tree()->TotalScrollOffset()); 2709 host_impl_->active_tree()->TotalScrollOffset());
2697 2710
2698 viewport_offset = host_impl_->active_tree()->TotalScrollOffset(); 2711 viewport_offset = host_impl_->active_tree()->TotalScrollOffset();
(...skipping 16 matching lines...) Expand all
2715 host_impl_->active_tree()->TotalScrollOffset()); 2728 host_impl_->active_tree()->TotalScrollOffset());
2716 } 2729 }
2717 2730
2718 // Test that the top controls coming in and out maintains the same aspect ratio 2731 // Test that the top controls coming in and out maintains the same aspect ratio
2719 // between the inner and outer viewports. 2732 // between the inner and outer viewports.
2720 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsAspectRatio) { 2733 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsAspectRatio) {
2721 SetupTopControlsAndScrollLayerWithVirtualViewport( 2734 SetupTopControlsAndScrollLayerWithVirtualViewport(
2722 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); 2735 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400));
2723 DrawFrame(); 2736 DrawFrame();
2724 2737
2725 EXPECT_EQ(settings_.top_controls_height, 2738 EXPECT_EQ(top_controls_height_,
2726 host_impl_->active_tree()->total_top_controls_content_offset()); 2739 host_impl_->active_tree()->total_top_controls_content_offset());
2727 2740
2728 gfx::Vector2dF scroll_delta(0.f, 25.f); 2741 gfx::Vector2dF scroll_delta(0.f, 25.f);
2729 EXPECT_EQ(InputHandler::ScrollStarted, 2742 EXPECT_EQ(InputHandler::ScrollStarted,
2730 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); 2743 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
2731 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 2744 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
2732 host_impl_->ScrollEnd(); 2745 host_impl_->ScrollEnd();
2733 2746
2734 EXPECT_EQ(scroll_delta.y(), 2747 EXPECT_EQ(scroll_delta.y(),
2735 settings_.top_controls_height - 2748 top_controls_height_ -
2736 host_impl_->active_tree()->total_top_controls_content_offset()); 2749 host_impl_->active_tree()->total_top_controls_content_offset());
2737 2750
2738 // Top controls were hidden by 25px so the inner viewport should have expanded 2751 // Top controls were hidden by 25px so the inner viewport should have expanded
2739 // by that much. 2752 // by that much.
2740 LayerImpl* outer_container = 2753 LayerImpl* outer_container =
2741 host_impl_->active_tree()->OuterViewportContainerLayer(); 2754 host_impl_->active_tree()->OuterViewportContainerLayer();
2742 LayerImpl* inner_container = 2755 LayerImpl* inner_container =
2743 host_impl_->active_tree()->InnerViewportContainerLayer(); 2756 host_impl_->active_tree()->InnerViewportContainerLayer();
2744 EXPECT_EQ(gfx::Size(100, 100+25), inner_container->BoundsForScrolling()); 2757 EXPECT_EQ(gfx::Size(100, 100+25), inner_container->BoundsForScrolling());
2745 2758
2746 // Outer viewport should match inner's aspect ratio. The bounds are ceiled. 2759 // Outer viewport should match inner's aspect ratio. The bounds are ceiled.
2747 float aspect_ratio = inner_container->BoundsForScrolling().width() / 2760 float aspect_ratio = inner_container->BoundsForScrolling().width() /
2748 inner_container->BoundsForScrolling().height(); 2761 inner_container->BoundsForScrolling().height();
2749 gfx::Size expected = gfx::ToCeiledSize(gfx::SizeF(200, 200 / aspect_ratio)); 2762 gfx::Size expected = gfx::ToCeiledSize(gfx::SizeF(200, 200 / aspect_ratio));
2750 EXPECT_EQ(expected, outer_container->BoundsForScrolling()); 2763 EXPECT_EQ(expected, outer_container->BoundsForScrolling());
2751 EXPECT_EQ(expected, 2764 EXPECT_EQ(expected,
2752 host_impl_->InnerViewportScrollLayer()->BoundsForScrolling()); 2765 host_impl_->InnerViewportScrollLayer()->BoundsForScrolling());
2753 } 2766 }
2754 2767
2755 // Test that scrolling the outer viewport affects the top controls. 2768 // Test that scrolling the outer viewport affects the top controls.
2756 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsScrollOuterViewport) { 2769 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsScrollOuterViewport) {
2757 SetupTopControlsAndScrollLayerWithVirtualViewport( 2770 SetupTopControlsAndScrollLayerWithVirtualViewport(
2758 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); 2771 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400));
2759 DrawFrame(); 2772 DrawFrame();
2760 2773
2761 EXPECT_EQ(settings_.top_controls_height, 2774 EXPECT_EQ(top_controls_height_,
2762 host_impl_->active_tree()->total_top_controls_content_offset()); 2775 host_impl_->active_tree()->total_top_controls_content_offset());
2763 2776
2764 // Send a gesture scroll that will scroll the outer viewport, make sure the 2777 // Send a gesture scroll that will scroll the outer viewport, make sure the
2765 // top controls get scrolled. 2778 // top controls get scrolled.
2766 gfx::Vector2dF scroll_delta(0.f, 15.f); 2779 gfx::Vector2dF scroll_delta(0.f, 15.f);
2767 EXPECT_EQ(InputHandler::ScrollStarted, 2780 EXPECT_EQ(InputHandler::ScrollStarted,
2768 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); 2781 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
2769 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 2782 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
2770 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(), 2783 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(),
2771 host_impl_->CurrentlyScrollingLayer()); 2784 host_impl_->CurrentlyScrollingLayer());
2772 host_impl_->ScrollEnd(); 2785 host_impl_->ScrollEnd();
2773 2786
2774 EXPECT_EQ(scroll_delta.y(), 2787 EXPECT_EQ(scroll_delta.y(),
2775 settings_.top_controls_height - 2788 top_controls_height_ -
2776 host_impl_->active_tree()->total_top_controls_content_offset()); 2789 host_impl_->active_tree()->total_top_controls_content_offset());
2777 2790
2778 scroll_delta = gfx::Vector2dF(0.f, 50.f); 2791 scroll_delta = gfx::Vector2dF(0.f, 50.f);
2779 EXPECT_EQ(InputHandler::ScrollStarted, 2792 EXPECT_EQ(InputHandler::ScrollStarted,
2780 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); 2793 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
2781 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 2794 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
2782 2795
2783 EXPECT_EQ(0, host_impl_->active_tree()->total_top_controls_content_offset()); 2796 EXPECT_EQ(0, host_impl_->active_tree()->total_top_controls_content_offset());
2784 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(), 2797 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(),
2785 host_impl_->CurrentlyScrollingLayer()); 2798 host_impl_->CurrentlyScrollingLayer());
2786 2799
2787 host_impl_->ScrollEnd(); 2800 host_impl_->ScrollEnd();
2788 2801
2789 // Position the viewports such that the inner viewport will be scrolled. 2802 // Position the viewports such that the inner viewport will be scrolled.
2790 gfx::Vector2dF inner_viewport_offset(0.f, 25.f); 2803 gfx::Vector2dF inner_viewport_offset(0.f, 25.f);
2791 host_impl_->OuterViewportScrollLayer()->SetScrollDelta(gfx::Vector2dF()); 2804 host_impl_->OuterViewportScrollLayer()->SetScrollDelta(gfx::Vector2dF());
2792 host_impl_->InnerViewportScrollLayer()->SetScrollDelta(inner_viewport_offset); 2805 host_impl_->InnerViewportScrollLayer()->SetScrollDelta(inner_viewport_offset);
2793 2806
2794 scroll_delta = gfx::Vector2dF(0.f, -65.f); 2807 scroll_delta = gfx::Vector2dF(0.f, -65.f);
2795 EXPECT_EQ(InputHandler::ScrollStarted, 2808 EXPECT_EQ(InputHandler::ScrollStarted,
2796 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); 2809 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
2797 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 2810 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
2798 2811
2799 EXPECT_EQ(settings_.top_controls_height, 2812 EXPECT_EQ(top_controls_height_,
2800 host_impl_->active_tree()->total_top_controls_content_offset()); 2813 host_impl_->active_tree()->total_top_controls_content_offset());
2801 EXPECT_EQ(inner_viewport_offset.y() + 2814 EXPECT_EQ(
2802 (scroll_delta.y() + settings_.top_controls_height), 2815 inner_viewport_offset.y() + (scroll_delta.y() + top_controls_height_),
2803 host_impl_->InnerViewportScrollLayer()->ScrollDelta().y()); 2816 host_impl_->InnerViewportScrollLayer()->ScrollDelta().y());
2804 2817
2805 host_impl_->ScrollEnd(); 2818 host_impl_->ScrollEnd();
2806 } 2819 }
2807 2820
2808 TEST_F(LayerTreeHostImplTopControlsTest, 2821 TEST_F(LayerTreeHostImplTopControlsTest,
2809 ScrollNonScrollableRootWithTopControls) { 2822 ScrollNonScrollableRootWithTopControls) {
2810 CreateHostImpl(settings_, CreateOutputSurface()); 2823 CreateHostImpl(settings_, CreateOutputSurface());
2811 SetupTopControlsAndScrollLayer(); 2824 SetupTopControlsAndScrollLayer();
2812 DrawFrame(); 2825 DrawFrame();
2813 2826
(...skipping 4372 matching lines...) Expand 10 before | Expand all | Expand 10 after
7186 EXPECT_EQ(2, set_needs_redraw_count); 7199 EXPECT_EQ(2, set_needs_redraw_count);
7187 EXPECT_EQ(1, forward_to_main_count); 7200 EXPECT_EQ(1, forward_to_main_count);
7188 } 7201 }
7189 } 7202 }
7190 7203
7191 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { 7204 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest {
7192 public: 7205 public:
7193 void SetUp() override { 7206 void SetUp() override {
7194 LayerTreeSettings settings = DefaultSettings(); 7207 LayerTreeSettings settings = DefaultSettings();
7195 settings.calculate_top_controls_position = true; 7208 settings.calculate_top_controls_position = true;
7196 settings.top_controls_height = top_controls_height_;
7197 CreateHostImpl(settings, CreateOutputSurface()); 7209 CreateHostImpl(settings, CreateOutputSurface());
7210 host_impl_->active_tree()->set_top_controls_height(top_controls_height_);
7211 host_impl_->active_tree()->set_top_controls_delta(top_controls_height_);
7212 host_impl_->top_controls_manager()->SetTopControlsHeight(
7213 top_controls_height_);
7198 } 7214 }
7199 7215
7200 protected: 7216 protected:
7201 static const int top_controls_height_; 7217 static const int top_controls_height_;
7202 }; 7218 };
7203 7219
7204 const int LayerTreeHostImplWithTopControlsTest::top_controls_height_ = 50; 7220 const int LayerTreeHostImplWithTopControlsTest::top_controls_height_ = 50;
7205 7221
7206 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) { 7222 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) {
7207 SetupScrollAndContentsLayers(gfx::Size(100, 100)) 7223 SetupScrollAndContentsLayers(gfx::Size(100, 100))
7208 ->SetScrollOffset(gfx::ScrollOffset(0, 10)); 7224 ->SetScrollOffset(gfx::ScrollOffset(0, 10));
7209 host_impl_->Animate(base::TimeTicks()); 7225 host_impl_->Animate(base::TimeTicks());
7210 EXPECT_FALSE(did_request_redraw_); 7226 EXPECT_FALSE(did_request_redraw_);
7211 } 7227 }
7212 7228
7229 TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsHeightIsCommitted) {
7230 SetupScrollAndContentsLayers(gfx::Size(100, 100));
7231 EXPECT_FALSE(did_request_redraw_);
7232 host_impl_->CreatePendingTree();
7233 host_impl_->sync_tree()->set_top_controls_height(100);
7234 host_impl_->ActivateSyncTree();
7235 EXPECT_EQ(100, host_impl_->top_controls_manager()->top_controls_height());
7236 }
7237
7238 TEST_F(LayerTreeHostImplWithTopControlsTest,
7239 TopControlsStayFullyVisibleOnHeightChange) {
7240 SetupScrollAndContentsLayers(gfx::Size(100, 100));
7241 EXPECT_EQ(0.f, host_impl_->ControlsTopOffset());
7242
7243 host_impl_->CreatePendingTree();
7244 host_impl_->sync_tree()->set_top_controls_height(0);
7245 host_impl_->ActivateSyncTree();
7246 EXPECT_EQ(0.f, host_impl_->ControlsTopOffset());
7247
7248 host_impl_->CreatePendingTree();
7249 host_impl_->sync_tree()->set_top_controls_height(50);
7250 host_impl_->ActivateSyncTree();
7251 EXPECT_EQ(0.f, host_impl_->ControlsTopOffset());
7252 }
7253
7213 TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationScheduling) { 7254 TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationScheduling) {
7214 SetupScrollAndContentsLayers(gfx::Size(100, 100)) 7255 SetupScrollAndContentsLayers(gfx::Size(100, 100))
7215 ->SetScrollOffset(gfx::ScrollOffset(0, 10)); 7256 ->SetScrollOffset(gfx::ScrollOffset(0, 10));
7216 host_impl_->DidChangeTopControlsPosition(); 7257 host_impl_->DidChangeTopControlsPosition();
7217 EXPECT_TRUE(did_request_animate_); 7258 EXPECT_TRUE(did_request_animate_);
7218 EXPECT_TRUE(did_request_redraw_); 7259 EXPECT_TRUE(did_request_redraw_);
7219 } 7260 }
7220 7261
7221 TEST_F(LayerTreeHostImplWithTopControlsTest, ScrollHandledByTopControls) { 7262 TEST_F(LayerTreeHostImplWithTopControlsTest, ScrollHandledByTopControls) {
7222 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 200)); 7263 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 200));
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
7877 // surface. 7918 // surface.
7878 EXPECT_EQ(0, num_lost_surfaces_); 7919 EXPECT_EQ(0, num_lost_surfaces_);
7879 host_impl_->DidLoseOutputSurface(); 7920 host_impl_->DidLoseOutputSurface();
7880 EXPECT_EQ(1, num_lost_surfaces_); 7921 EXPECT_EQ(1, num_lost_surfaces_);
7881 host_impl_->DidLoseOutputSurface(); 7922 host_impl_->DidLoseOutputSurface();
7882 EXPECT_LE(1, num_lost_surfaces_); 7923 EXPECT_LE(1, num_lost_surfaces_);
7883 } 7924 }
7884 7925
7885 } // namespace 7926 } // namespace
7886 } // namespace cc 7927 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698