Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/property_tree.h" | 5 #include "cc/trees/property_tree.h" |
| 6 | 6 |
| 7 #include "cc/proto/property_tree.pb.h" | |
| 7 #include "cc/test/geometry_test_utils.h" | 8 #include "cc/test/geometry_test_utils.h" |
| 8 #include "cc/trees/draw_property_utils.h" | 9 #include "cc/trees/draw_property_utils.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 11 |
| 11 namespace cc { | 12 namespace cc { |
|
David Trainor- moved to gerrit
2015/11/12 22:46:11
Maybe anonymous namespace in here for everything?
Khushal
2015/11/13 10:33:13
Done.
| |
| 12 | 13 |
| 13 TEST(PropertyTreeTest, ComputeTransformRoot) { | 14 TEST(PropertyTreeSerializationTest, ClipNodeDataSerialization) { |
|
David Trainor- moved to gerrit
2015/11/12 22:46:11
Add transform one.
Khushal
2015/11/13 10:33:13
Done.
| |
| 14 TransformTree tree; | 15 ClipNodeData original; |
| 15 TransformNode& root = *tree.Node(0); | 16 original.clip = gfx::RectF(0.5f, 0.5f); |
| 16 root.data.local.Translate(2, 2); | 17 original.combined_clip_in_target_space = gfx::RectF(0.6f, 0.6f); |
| 17 root.data.target_id = 0; | 18 original.clip_in_target_space = gfx::RectF(0.7f, 0.7f); |
| 18 tree.UpdateTransforms(0); | 19 original.transform_id = 2; |
| 20 original.target_id = 3; | |
| 21 original.applies_local_clip = false; | |
| 22 original.layer_clipping_uses_only_local_clip = false; | |
| 23 original.target_is_clipped = false; | |
| 24 original.layers_are_clipped = false; | |
| 25 original.layers_are_clipped_when_surfaces_disabled = false; | |
| 26 original.resets_clip = false; | |
| 19 | 27 |
| 20 gfx::Transform expected; | 28 proto::TreeNode proto; |
| 21 gfx::Transform transform; | 29 original.ToProtobuf(&proto); |
| 22 bool success = tree.ComputeTransform(0, 0, &transform); | 30 ClipNodeData result; |
| 23 EXPECT_TRUE(success); | 31 result.FromProtobuf(proto); |
| 24 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | |
| 25 | 32 |
| 26 transform.MakeIdentity(); | 33 EXPECT_EQ(original, result); |
| 27 expected.Translate(2, 2); | 34 } |
| 28 success = tree.ComputeTransform(0, -1, &transform); | |
| 29 EXPECT_TRUE(success); | |
| 30 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | |
| 31 | 35 |
| 32 transform.MakeIdentity(); | 36 TEST(PropertyTreeSerializationTest, EffectNodeDataSerialization) { |
| 33 expected.MakeIdentity(); | 37 EffectNodeData original; |
| 34 expected.Translate(-2, -2); | 38 original.opacity = 0.5f; |
| 35 success = tree.ComputeTransform(-1, 0, &transform); | 39 original.screen_space_opacity = 0.6f; |
| 36 EXPECT_TRUE(success); | 40 original.has_render_surface = false; |
| 37 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 41 original.transform_id = 2; |
| 42 original.clip_id = 3; | |
| 43 | |
| 44 proto::TreeNode proto; | |
| 45 original.ToProtobuf(&proto); | |
| 46 EffectNodeData result; | |
| 47 result.FromProtobuf(proto); | |
| 48 | |
| 49 EXPECT_EQ(original, result); | |
| 38 } | 50 } |
| 39 | 51 |
| 52 class PropertyTreeTest : public testing::Test { | |
|
Khushal
2015/11/12 00:33:11
Would it be a good idea to use something like this
| |
| 53 public: | |
| 54 PropertyTreeTest() : test_serialization_(false) {} | |
| 55 | |
| 56 protected: | |
| 57 void RunTest(bool test_serialization) { | |
| 58 test_serialization_ = test_serialization; | |
| 59 StartTest(); | |
| 60 } | |
| 61 | |
| 62 virtual void StartTest() = 0; | |
| 63 | |
| 64 TransformTree TransformTreeForTest(const TransformTree& transform_tree) { | |
| 65 if (!test_serialization_) { | |
| 66 return transform_tree; | |
| 67 } | |
| 68 TransformTree new_tree; | |
| 69 proto::PropertyTree proto; | |
| 70 transform_tree.ToProtobuf(&proto); | |
| 71 new_tree.FromProtobuf(proto); | |
| 72 return new_tree; | |
| 73 } | |
| 74 | |
| 75 private: | |
| 76 bool test_serialization_; | |
| 77 }; | |
| 78 | |
| 79 #define DIRECT_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ | |
|
David Trainor- moved to gerrit
2015/11/12 22:46:11
Good idea IMO :).
Maybe #undef these after the te
Khushal
2015/11/13 10:33:13
Done.
| |
| 80 TEST_F(TEST_FIXTURE_NAME, RunDirect) { RunTest(false); } | |
|
David Trainor- moved to gerrit
2015/11/12 22:46:11
Always use PropertyTreeTest as the fixture name.
David Trainor- moved to gerrit
2015/11/12 22:49:33
Just a note from our offline discussion, it looks
Khushal
2015/11/13 10:33:13
Done.
| |
| 81 | |
| 82 #define SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ | |
| 83 TEST_F(TEST_FIXTURE_NAME, RunSerialized) { RunTest(true); } | |
| 84 | |
| 85 #define DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ | |
| 86 DIRECT_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME); \ | |
| 87 SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) | |
| 88 | |
| 89 class PropertyTreeTestComputeTransformRoot : public PropertyTreeTest { | |
| 90 protected: | |
| 91 void StartTest() override { | |
| 92 TransformTree tree; | |
| 93 TransformNode& root = *tree.Node(0); | |
| 94 root.data.local.Translate(2, 2); | |
| 95 root.data.target_id = 0; | |
| 96 tree.UpdateTransforms(0); | |
| 97 | |
| 98 TransformTree test_tree = TransformTreeForTest(tree); | |
| 99 | |
| 100 gfx::Transform expected; | |
| 101 gfx::Transform transform; | |
| 102 bool success = test_tree.ComputeTransform(0, 0, &transform); | |
| 103 EXPECT_TRUE(success); | |
| 104 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | |
| 105 | |
| 106 transform.MakeIdentity(); | |
| 107 expected.Translate(2, 2); | |
| 108 success = test_tree.ComputeTransform(0, -1, &transform); | |
| 109 EXPECT_TRUE(success); | |
| 110 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | |
| 111 | |
| 112 transform.MakeIdentity(); | |
| 113 expected.MakeIdentity(); | |
| 114 expected.Translate(-2, -2); | |
| 115 success = test_tree.ComputeTransform(-1, 0, &transform); | |
| 116 EXPECT_TRUE(success); | |
| 117 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | |
| 118 } | |
| 119 }; | |
| 120 | |
| 121 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | |
| 122 PropertyTreeTestComputeTransformRoot); | |
|
David Trainor- moved to gerrit
2015/11/12 22:46:11
Can we just call this ComputeTransformRoot? That
David Trainor- moved to gerrit
2015/11/12 22:49:33
Same as above, ignore.
| |
| 123 | |
| 40 TEST(PropertyTreeTest, ComputeTransformChild) { | 124 TEST(PropertyTreeTest, ComputeTransformChild) { |
| 41 TransformTree tree; | 125 TransformTree tree; |
| 42 TransformNode& root = *tree.Node(0); | 126 TransformNode& root = *tree.Node(0); |
| 43 root.data.local.Translate(2, 2); | 127 root.data.local.Translate(2, 2); |
| 44 root.data.target_id = 0; | 128 root.data.target_id = 0; |
| 45 tree.UpdateTransforms(0); | 129 tree.UpdateTransforms(0); |
| 46 | 130 |
| 47 TransformNode child; | 131 TransformNode child; |
| 48 child.data.local.Translate(3, 3); | 132 child.data.local.Translate(3, 3); |
| 49 child.data.target_id = 0; | 133 child.data.target_id = 0; |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 578 tree.Node(child)->data.target_id = child; | 662 tree.Node(child)->data.target_id = child; |
| 579 tree.set_needs_update(true); | 663 tree.set_needs_update(true); |
| 580 ComputeTransforms(&tree); | 664 ComputeTransforms(&tree); |
| 581 EXPECT_TRUE( | 665 EXPECT_TRUE( |
| 582 tree.Node(parent)->data.node_and_ancestors_have_only_integer_translation); | 666 tree.Node(parent)->data.node_and_ancestors_have_only_integer_translation); |
| 583 EXPECT_TRUE( | 667 EXPECT_TRUE( |
| 584 tree.Node(child)->data.node_and_ancestors_have_only_integer_translation); | 668 tree.Node(child)->data.node_and_ancestors_have_only_integer_translation); |
| 585 } | 669 } |
| 586 | 670 |
| 587 } // namespace cc | 671 } // namespace cc |
| OLD | NEW |