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/surfaces/surface.h" | 5 #include "cc/surfaces/surface.h" |
6 #include "cc/surfaces/surface_factory.h" | 6 #include "cc/surfaces/surface_factory.h" |
7 #include "cc/surfaces/surface_factory_client.h" | |
7 #include "cc/surfaces/surface_manager.h" | 8 #include "cc/surfaces/surface_manager.h" |
9 #include "cc/test/scheduler_test_common.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/gfx/geometry/size.h" | 11 #include "ui/gfx/geometry/size.h" |
10 | 12 |
11 namespace cc { | 13 namespace cc { |
12 namespace { | 14 namespace { |
13 | 15 |
16 class FakeSurfaceFactoryClient : public SurfaceFactoryClient { | |
17 public: | |
18 FakeSurfaceFactoryClient() : begin_frame_source_(nullptr) {} | |
19 | |
20 void ReturnResources(const ReturnedResourceArray& resources) override {} | |
21 | |
22 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override { | |
23 begin_frame_source_ = begin_frame_source; | |
24 } | |
25 | |
26 BeginFrameSource* begin_frame_source() { return begin_frame_source_; } | |
27 | |
28 private: | |
29 BeginFrameSource* begin_frame_source_; | |
30 }; | |
31 | |
14 TEST(SurfaceTest, SurfaceLifetime) { | 32 TEST(SurfaceTest, SurfaceLifetime) { |
15 SurfaceManager manager; | 33 SurfaceManager manager; |
16 SurfaceFactory factory(&manager, NULL); | 34 FakeSurfaceFactoryClient surface_factory_client; |
35 SurfaceFactory factory(&manager, &surface_factory_client); | |
17 | 36 |
18 SurfaceId surface_id(6); | 37 SurfaceId surface_id(6); |
19 { | 38 { |
20 factory.Create(surface_id); | 39 factory.Create(surface_id); |
21 EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); | 40 EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); |
22 factory.Destroy(surface_id); | 41 factory.Destroy(surface_id); |
23 } | 42 } |
24 | 43 |
25 EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id)); | 44 EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id)); |
26 } | 45 } |
27 | 46 |
47 TEST(SurfaceTest, StableBeginFrameSourceIndependentOfOrderAdded) { | |
48 SurfaceManager manager; | |
49 FakeSurfaceFactoryClient surface_factory_client; | |
50 SurfaceFactory factory(&manager, &surface_factory_client); | |
51 | |
52 SurfaceId surface_id(6); | |
53 factory.Create(surface_id); | |
54 Surface* surface = manager.GetSurfaceForId(surface_id); | |
55 | |
56 FakeBeginFrameSource bfs1; | |
57 FakeBeginFrameSource bfs2; | |
58 FakeBeginFrameSource bfs3; | |
59 | |
mithro-old
2015/10/01 03:00:24
This test is a bit weird, but I'm unsure how to ma
brianderson
2015/10/07 20:54:48
Given each order would also need a SurfaceFactoryC
| |
60 // Order 1. | |
61 surface->AddBeginFrameSource(&bfs1); | |
62 surface->AddBeginFrameSource(&bfs2); | |
63 surface->AddBeginFrameSource(&bfs3); | |
64 BeginFrameSource* bfs_order1 = surface_factory_client.begin_frame_source(); | |
65 surface->RemoveBeginFrameSource(&bfs1); | |
66 surface->RemoveBeginFrameSource(&bfs2); | |
67 surface->RemoveBeginFrameSource(&bfs3); | |
68 | |
69 // Order 2. | |
70 surface->AddBeginFrameSource(&bfs1); | |
71 surface->AddBeginFrameSource(&bfs3); | |
72 surface->AddBeginFrameSource(&bfs2); | |
73 BeginFrameSource* bfs_order2 = surface_factory_client.begin_frame_source(); | |
74 surface->RemoveBeginFrameSource(&bfs1); | |
75 surface->RemoveBeginFrameSource(&bfs2); | |
76 surface->RemoveBeginFrameSource(&bfs3); | |
77 | |
78 // Order 3. | |
79 surface->AddBeginFrameSource(&bfs2); | |
80 surface->AddBeginFrameSource(&bfs1); | |
81 surface->AddBeginFrameSource(&bfs3); | |
82 BeginFrameSource* bfs_order3 = surface_factory_client.begin_frame_source(); | |
83 surface->RemoveBeginFrameSource(&bfs1); | |
84 surface->RemoveBeginFrameSource(&bfs2); | |
85 surface->RemoveBeginFrameSource(&bfs3); | |
86 | |
87 // Order 4. | |
88 surface->AddBeginFrameSource(&bfs2); | |
89 surface->AddBeginFrameSource(&bfs3); | |
90 surface->AddBeginFrameSource(&bfs1); | |
91 BeginFrameSource* bfs_order4 = surface_factory_client.begin_frame_source(); | |
92 surface->RemoveBeginFrameSource(&bfs1); | |
93 surface->RemoveBeginFrameSource(&bfs2); | |
94 surface->RemoveBeginFrameSource(&bfs3); | |
95 | |
96 // Order 5. | |
97 surface->AddBeginFrameSource(&bfs3); | |
98 surface->AddBeginFrameSource(&bfs1); | |
99 surface->AddBeginFrameSource(&bfs2); | |
100 BeginFrameSource* bfs_order5 = surface_factory_client.begin_frame_source(); | |
101 surface->RemoveBeginFrameSource(&bfs1); | |
102 surface->RemoveBeginFrameSource(&bfs2); | |
103 surface->RemoveBeginFrameSource(&bfs3); | |
104 | |
105 // Order 6. | |
106 surface->AddBeginFrameSource(&bfs3); | |
107 surface->AddBeginFrameSource(&bfs2); | |
108 surface->AddBeginFrameSource(&bfs1); | |
109 BeginFrameSource* bfs_order6 = surface_factory_client.begin_frame_source(); | |
110 surface->RemoveBeginFrameSource(&bfs1); | |
111 surface->RemoveBeginFrameSource(&bfs2); | |
112 surface->RemoveBeginFrameSource(&bfs3); | |
113 | |
114 EXPECT_NE(nullptr, bfs_order1); | |
mithro-old
2015/10/01 03:00:24
Should this be an ASSERT_NE?
brianderson
2015/10/07 20:54:48
nullptr could be a valid result if the surface doe
| |
115 EXPECT_TRUE(&bfs1 == bfs_order1 || &bfs2 == bfs_order1 || | |
116 &bfs3 == bfs_order1); | |
mithro-old
2015/10/01 03:00:24
I'm not sure what the above EXPECT_TRUE is checkin
brianderson
2015/10/07 20:54:48
Added a comment. It checks that one of the sources
| |
117 EXPECT_EQ(bfs_order1, bfs_order2); | |
118 EXPECT_EQ(bfs_order2, bfs_order3); | |
119 EXPECT_EQ(bfs_order3, bfs_order4); | |
120 EXPECT_EQ(bfs_order4, bfs_order5); | |
121 EXPECT_EQ(bfs_order5, bfs_order6); | |
122 } | |
123 | |
124 TEST(SurfaceTest, BeginFrameSourceRemovedOnSurfaceDestruction) { | |
125 SurfaceManager manager; | |
126 FakeSurfaceFactoryClient surface_factory_client; | |
127 SurfaceFactory factory(&manager, &surface_factory_client); | |
128 FakeBeginFrameSource bfs; | |
129 | |
130 SurfaceId surface_id(6); | |
131 factory.Create(surface_id); | |
132 Surface* surface = manager.GetSurfaceForId(surface_id); | |
133 surface->AddBeginFrameSource(&bfs); | |
134 | |
135 BeginFrameSource* bfs_before = surface_factory_client.begin_frame_source(); | |
136 factory.Destroy(surface_id); | |
137 BeginFrameSource* bfs_after = surface_factory_client.begin_frame_source(); | |
138 | |
139 EXPECT_EQ(&bfs, bfs_before); | |
140 EXPECT_EQ(nullptr, bfs_after); | |
141 } | |
142 | |
28 } // namespace | 143 } // namespace |
29 } // namespace cc | 144 } // namespace cc |
OLD | NEW |