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

Side by Side Diff: cc/surfaces/surface_unittest.cc

Issue 1304063014: cc: Plumbing for BeginFrameSource based on Surfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: NOTREACHED for WebView; NOTIMPLEMENTED elsewhere Created 5 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
OLDNEW
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
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 // Make sure one of the provided sources was chosen.
66 EXPECT_TRUE(&bfs1 == bfs_order1 || &bfs2 == bfs_order1 ||
67 &bfs3 == bfs_order1);
68 surface->RemoveBeginFrameSource(&bfs1);
69 surface->RemoveBeginFrameSource(&bfs2);
70 surface->RemoveBeginFrameSource(&bfs3);
71 EXPECT_EQ(nullptr, surface_factory_client.begin_frame_source());
72
73 // Order 2.
74 surface->AddBeginFrameSource(&bfs1);
75 surface->AddBeginFrameSource(&bfs3);
76 surface->AddBeginFrameSource(&bfs2);
77 BeginFrameSource* bfs_order2 = surface_factory_client.begin_frame_source();
78 // Verify choice is same as before.
79 EXPECT_EQ(bfs_order1, bfs_order2);
80 surface->RemoveBeginFrameSource(&bfs1);
81 surface->RemoveBeginFrameSource(&bfs2);
82 surface->RemoveBeginFrameSource(&bfs3);
83 EXPECT_EQ(nullptr, surface_factory_client.begin_frame_source());
84
85 // Order 3.
86 surface->AddBeginFrameSource(&bfs2);
87 surface->AddBeginFrameSource(&bfs1);
88 surface->AddBeginFrameSource(&bfs3);
89 BeginFrameSource* bfs_order3 = surface_factory_client.begin_frame_source();
90 // Verify choice is same as before.
91 EXPECT_EQ(bfs_order2, bfs_order3);
92 surface->RemoveBeginFrameSource(&bfs1);
93 surface->RemoveBeginFrameSource(&bfs2);
94 surface->RemoveBeginFrameSource(&bfs3);
95 EXPECT_EQ(nullptr, surface_factory_client.begin_frame_source());
96
97 // Order 4.
98 surface->AddBeginFrameSource(&bfs2);
99 surface->AddBeginFrameSource(&bfs3);
100 surface->AddBeginFrameSource(&bfs1);
101 BeginFrameSource* bfs_order4 = surface_factory_client.begin_frame_source();
102 // Verify choice is same as before.
103 EXPECT_EQ(bfs_order3, bfs_order4);
104 surface->RemoveBeginFrameSource(&bfs1);
105 surface->RemoveBeginFrameSource(&bfs2);
106 surface->RemoveBeginFrameSource(&bfs3);
107 EXPECT_EQ(nullptr, surface_factory_client.begin_frame_source());
108
109 // Order 5.
110 surface->AddBeginFrameSource(&bfs3);
111 surface->AddBeginFrameSource(&bfs1);
112 surface->AddBeginFrameSource(&bfs2);
113 BeginFrameSource* bfs_order5 = surface_factory_client.begin_frame_source();
114 // Verify choice is same as before.
115 EXPECT_EQ(bfs_order4, bfs_order5);
116 surface->RemoveBeginFrameSource(&bfs1);
117 surface->RemoveBeginFrameSource(&bfs2);
118 surface->RemoveBeginFrameSource(&bfs3);
119 EXPECT_EQ(nullptr, surface_factory_client.begin_frame_source());
120
121 // Order 6.
122 surface->AddBeginFrameSource(&bfs3);
123 surface->AddBeginFrameSource(&bfs2);
124 surface->AddBeginFrameSource(&bfs1);
125 BeginFrameSource* bfs_order6 = surface_factory_client.begin_frame_source();
126 // Verify choice is same as before.
127 EXPECT_EQ(bfs_order5, bfs_order6);
128 surface->RemoveBeginFrameSource(&bfs1);
129 surface->RemoveBeginFrameSource(&bfs2);
130 surface->RemoveBeginFrameSource(&bfs3);
131 EXPECT_EQ(nullptr, surface_factory_client.begin_frame_source());
132 }
133
134 TEST(SurfaceTest, BeginFrameSourceRemovedOnSurfaceDestruction) {
135 SurfaceManager manager;
136 FakeSurfaceFactoryClient surface_factory_client;
137 SurfaceFactory factory(&manager, &surface_factory_client);
138 FakeBeginFrameSource bfs;
139
140 SurfaceId surface_id(6);
141 factory.Create(surface_id);
142 Surface* surface = manager.GetSurfaceForId(surface_id);
143 surface->AddBeginFrameSource(&bfs);
144
145 BeginFrameSource* bfs_before = surface_factory_client.begin_frame_source();
146 factory.Destroy(surface_id);
147 BeginFrameSource* bfs_after = surface_factory_client.begin_frame_source();
148
149 EXPECT_EQ(&bfs, bfs_before);
150 EXPECT_EQ(nullptr, bfs_after);
151 }
152
28 } // namespace 153 } // namespace
29 } // namespace cc 154 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698