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

Side by Side Diff: cc/blimp/layer_tree_host_remote_unittest.cc

Issue 2404953002: cc/blimp: Set up hooks for scroll/scale sync. (Closed)
Patch Set: braces Created 4 years, 2 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
« no previous file with comments | « cc/blimp/layer_tree_host_remote.cc ('k') | cc/blimp/remote_compositor_bridge_client.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/blimp/layer_tree_host_remote.h" 5 #include "cc/blimp/layer_tree_host_remote.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "cc/animation/animation_host.h" 10 #include "cc/animation/animation_host.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 scoped_refptr<base::SingleThreadTaskRunner> compositor_main_task_runner) 43 scoped_refptr<base::SingleThreadTaskRunner> compositor_main_task_runner)
44 : FakeRemoteCompositorBridge(std::move(compositor_main_task_runner)) {} 44 : FakeRemoteCompositorBridge(std::move(compositor_main_task_runner)) {}
45 45
46 ~UpdateTrackingRemoteCompositorBridge() override = default; 46 ~UpdateTrackingRemoteCompositorBridge() override = default;
47 47
48 void ProcessCompositorStateUpdate( 48 void ProcessCompositorStateUpdate(
49 std::unique_ptr<CompositorProtoState> compositor_proto_state) override { 49 std::unique_ptr<CompositorProtoState> compositor_proto_state) override {
50 num_updates_received_++; 50 num_updates_received_++;
51 }; 51 };
52 52
53 bool SendUpdates(const std::unordered_map<int, gfx::ScrollOffset>& scroll_map,
54 float page_scale) {
55 return client_->ApplyScrollAndScaleUpdateFromClient(scroll_map, page_scale);
56 }
57
53 int num_updates_received() const { return num_updates_received_; } 58 int num_updates_received() const { return num_updates_received_; }
54 59
55 private: 60 private:
56 int num_updates_received_ = 0; 61 int num_updates_received_ = 0;
57 }; 62 };
58 63
59 class MockLayerTreeHostClient : public StubLayerTreeHostClient { 64 class MockLayerTreeHostClient : public StubLayerTreeHostClient {
60 public: 65 public:
61 MockLayerTreeHostClient() = default; 66 MockLayerTreeHostClient() = default;
62 ~MockLayerTreeHostClient() override = default; 67 ~MockLayerTreeHostClient() override = default;
63 68
64 void set_update_host_callback(base::Closure callback) { 69 void set_update_host_callback(base::Closure callback) {
65 update_host_callback_ = callback; 70 update_host_callback_ = callback;
66 } 71 }
67 72
68 void UpdateLayerTreeHost() override { 73 void UpdateLayerTreeHost() override {
69 update_host_callback_.Run(); 74 update_host_callback_.Run();
70 DidUpdateLayerTreeHost(); 75 DidUpdateLayerTreeHost();
71 } 76 }
72 77
73 void BeginMainFrame(const BeginFrameArgs& args) override { 78 void BeginMainFrame(const BeginFrameArgs& args) override {
74 DidReceiveBeginMainFrame(); 79 DidReceiveBeginMainFrame();
75 } 80 }
76 81
77 // LayerTreeHostClient implementation. 82 // LayerTreeHostClient implementation.
78 MOCK_METHOD0(WillBeginMainFrame, void()); 83 MOCK_METHOD0(WillBeginMainFrame, void());
79 MOCK_METHOD0(DidBeginMainFrame, void()); 84 MOCK_METHOD0(DidBeginMainFrame, void());
80 MOCK_METHOD0(DidReceiveBeginMainFrame, void()); 85 MOCK_METHOD0(DidReceiveBeginMainFrame, void());
81 MOCK_METHOD0(DidUpdateLayerTreeHost, void()); 86 MOCK_METHOD0(DidUpdateLayerTreeHost, void());
87 MOCK_METHOD5(ApplyViewportDeltas,
88 void(const gfx::Vector2dF&,
89 const gfx::Vector2dF&,
90 const gfx::Vector2dF&,
91 float,
92 float));
82 MOCK_METHOD0(WillCommit, void()); 93 MOCK_METHOD0(WillCommit, void());
83 MOCK_METHOD0(DidCommit, void()); 94 MOCK_METHOD0(DidCommit, void());
84 MOCK_METHOD0(DidCommitAndDrawFrame, void()); 95 MOCK_METHOD0(DidCommitAndDrawFrame, void());
85 MOCK_METHOD0(DidCompleteSwapBuffers, void()); 96 MOCK_METHOD0(DidCompleteSwapBuffers, void());
86 97
87 private: 98 private:
88 base::Closure update_host_callback_; 99 base::Closure update_host_callback_;
89 }; 100 };
90 101
91 class MockLayer : public Layer { 102 class MockLayer : public Layer {
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 root_layer_->AddChild(child_layer); 351 root_layer_->AddChild(child_layer);
341 EXPECT_BEGIN_MAIN_FRAME_AND_COMMIT(mock_layer_tree_host_client_, 1); 352 EXPECT_BEGIN_MAIN_FRAME_AND_COMMIT(mock_layer_tree_host_client_, 1);
342 353
343 layer_tree_host_->SetNeedsUpdateLayers(); 354 layer_tree_host_->SetNeedsUpdateLayers();
344 355
345 base::RunLoop().RunUntilIdle(); 356 base::RunLoop().RunUntilIdle();
346 EXPECT_TRUE(root_layer_->did_update()); 357 EXPECT_TRUE(root_layer_->did_update());
347 EXPECT_EQ(1, remote_compositor_bridge_->num_updates_received()); 358 EXPECT_EQ(1, remote_compositor_bridge_->num_updates_received());
348 } 359 }
349 360
361 TEST_F(LayerTreeHostRemoteTest, ScrollAndScaleSync) {
362 scoped_refptr<Layer> child_layer1 = make_scoped_refptr(new MockLayer(false));
363 root_layer_->AddChild(child_layer1);
364
365 scoped_refptr<Layer> child_layer2 = make_scoped_refptr(new MockLayer(false));
366 child_layer1->AddChild(child_layer2);
367
368 scoped_refptr<Layer> inner_viewport_layer =
369 make_scoped_refptr(new MockLayer(false));
370 inner_viewport_layer->SetScrollOffset(gfx::ScrollOffset(5, 10));
371 root_layer_->AddChild(inner_viewport_layer);
372 layer_tree_host_->GetLayerTree()->RegisterViewportLayers(
373 nullptr, nullptr, inner_viewport_layer, nullptr);
374
375 // Send scroll and scale updates from client.
376 std::unordered_map<int, gfx::ScrollOffset> scroll_updates;
377 gfx::ScrollOffset child1_offset(4, 5);
378 gfx::ScrollOffset child2_offset(3, 10);
379 gfx::Vector2dF inner_viewport_delta(-2, 5);
380 gfx::ScrollOffset inner_viewport_offset = gfx::ScrollOffsetWithDelta(
381 inner_viewport_layer->scroll_offset(), inner_viewport_delta);
382 scroll_updates[child_layer1->id()] = child1_offset;
383 scroll_updates[child_layer2->id()] = child2_offset;
384 scroll_updates[inner_viewport_layer->id()] = inner_viewport_offset;
385
386 float page_scale_delta = 0.3f;
387 float current_scale_factor = 0.5f;
388 layer_tree_host_->GetLayerTree()->SetPageScaleFactorAndLimits(
389 current_scale_factor, 0.0f, 1.0f);
390 float new_scale_factor = current_scale_factor * page_scale_delta;
391
392 EXPECT_CALL(mock_layer_tree_host_client_,
393 ApplyViewportDeltas(inner_viewport_delta, gfx::Vector2dF(),
394 gfx::Vector2dF(), page_scale_delta, 1.0f))
395 .Times(1);
396 bool updates_applied =
397 remote_compositor_bridge_->SendUpdates(scroll_updates, new_scale_factor);
398 EXPECT_TRUE(updates_applied);
399 // The host should have pre-emtively applied the changes.
400 EXPECT_EQ(new_scale_factor,
401 layer_tree_host_->GetLayerTree()->page_scale_factor());
402 EXPECT_EQ(child1_offset, child_layer1->scroll_offset());
403 EXPECT_EQ(child2_offset, child_layer2->scroll_offset());
404 EXPECT_EQ(inner_viewport_offset, inner_viewport_layer->scroll_offset());
405
406 // Destroy a layer and send a scroll update for it. We should be informed that
407 // the update could not be applied successfully.
408 child_layer1->RemoveAllChildren();
409 scroll_updates.clear();
410 scroll_updates[child_layer2->id()] = gfx::ScrollOffset(3, 2);
411 updates_applied =
412 remote_compositor_bridge_->SendUpdates(scroll_updates, new_scale_factor);
413 EXPECT_FALSE(updates_applied);
414 }
415
350 } // namespace 416 } // namespace
351 } // namespace cc 417 } // namespace cc
OLDNEW
« no previous file with comments | « cc/blimp/layer_tree_host_remote.cc ('k') | cc/blimp/remote_compositor_bridge_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698