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

Unified 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: SurfaceAggregator tests; fix some bugs revealed by tests Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: cc/surfaces/surface_unittest.cc
diff --git a/cc/surfaces/surface_unittest.cc b/cc/surfaces/surface_unittest.cc
index 42fd55f4a03a9b3ebb0ca67aab8d3c49cb05bce6..b9be5160bcbfcdd8e6d6f5a2b872b35b9ab281a3 100644
--- a/cc/surfaces/surface_unittest.cc
+++ b/cc/surfaces/surface_unittest.cc
@@ -4,16 +4,35 @@
#include "cc/surfaces/surface.h"
#include "cc/surfaces/surface_factory.h"
+#include "cc/surfaces/surface_factory_client.h"
#include "cc/surfaces/surface_manager.h"
+#include "cc/test/scheduler_test_common.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/size.h"
namespace cc {
namespace {
+class FakeSurfaceFactoryClient : public SurfaceFactoryClient {
+ public:
+ FakeSurfaceFactoryClient() : begin_frame_source_(nullptr) {}
+
+ void ReturnResources(const ReturnedResourceArray& resources) override {}
+
+ void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {
+ begin_frame_source_ = begin_frame_source;
+ }
+
+ BeginFrameSource* begin_frame_source() { return begin_frame_source_; }
+
+ private:
+ BeginFrameSource* begin_frame_source_;
+};
+
TEST(SurfaceTest, SurfaceLifetime) {
SurfaceManager manager;
- SurfaceFactory factory(&manager, NULL);
+ FakeSurfaceFactoryClient surface_factory_client;
+ SurfaceFactory factory(&manager, &surface_factory_client);
SurfaceId surface_id(6);
{
@@ -25,5 +44,101 @@ TEST(SurfaceTest, SurfaceLifetime) {
EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id));
}
+TEST(SurfaceTest, StableBeginFrameSourceIndependentOfOrderAdded) {
+ SurfaceManager manager;
+ FakeSurfaceFactoryClient surface_factory_client;
+ SurfaceFactory factory(&manager, &surface_factory_client);
+
+ SurfaceId surface_id(6);
+ factory.Create(surface_id);
+ Surface* surface = manager.GetSurfaceForId(surface_id);
+
+ FakeBeginFrameSource bfs1;
+ FakeBeginFrameSource bfs2;
+ FakeBeginFrameSource bfs3;
+
+ // Order 1.
+ surface->AddBeginFrameSource(&bfs1);
+ surface->AddBeginFrameSource(&bfs2);
+ surface->AddBeginFrameSource(&bfs3);
+ BeginFrameSource* bfs_order1 = surface_factory_client.begin_frame_source();
+ surface->RemoveBeginFrameSource(&bfs1);
+ surface->RemoveBeginFrameSource(&bfs2);
+ surface->RemoveBeginFrameSource(&bfs3);
+
+ // Order 2.
+ surface->AddBeginFrameSource(&bfs1);
+ surface->AddBeginFrameSource(&bfs3);
+ surface->AddBeginFrameSource(&bfs2);
+ BeginFrameSource* bfs_order2 = surface_factory_client.begin_frame_source();
+ surface->RemoveBeginFrameSource(&bfs1);
+ surface->RemoveBeginFrameSource(&bfs2);
+ surface->RemoveBeginFrameSource(&bfs3);
+
+ // Order 3.
+ surface->AddBeginFrameSource(&bfs2);
+ surface->AddBeginFrameSource(&bfs1);
+ surface->AddBeginFrameSource(&bfs3);
+ BeginFrameSource* bfs_order3 = surface_factory_client.begin_frame_source();
+ surface->RemoveBeginFrameSource(&bfs1);
+ surface->RemoveBeginFrameSource(&bfs2);
+ surface->RemoveBeginFrameSource(&bfs3);
+
+ // Order 4.
+ surface->AddBeginFrameSource(&bfs2);
+ surface->AddBeginFrameSource(&bfs3);
+ surface->AddBeginFrameSource(&bfs1);
+ BeginFrameSource* bfs_order4 = surface_factory_client.begin_frame_source();
+ surface->RemoveBeginFrameSource(&bfs1);
+ surface->RemoveBeginFrameSource(&bfs2);
+ surface->RemoveBeginFrameSource(&bfs3);
+
+ // Order 5.
+ surface->AddBeginFrameSource(&bfs3);
+ surface->AddBeginFrameSource(&bfs1);
+ surface->AddBeginFrameSource(&bfs2);
+ BeginFrameSource* bfs_order5 = surface_factory_client.begin_frame_source();
+ surface->RemoveBeginFrameSource(&bfs1);
+ surface->RemoveBeginFrameSource(&bfs2);
+ surface->RemoveBeginFrameSource(&bfs3);
+
+ // Order 6.
+ surface->AddBeginFrameSource(&bfs3);
+ surface->AddBeginFrameSource(&bfs2);
+ surface->AddBeginFrameSource(&bfs1);
+ BeginFrameSource* bfs_order6 = surface_factory_client.begin_frame_source();
+ surface->RemoveBeginFrameSource(&bfs1);
+ surface->RemoveBeginFrameSource(&bfs2);
+ surface->RemoveBeginFrameSource(&bfs3);
+
+ EXPECT_NE(nullptr, bfs_order1);
+ EXPECT_TRUE(&bfs1 == bfs_order1 || &bfs2 == bfs_order1 ||
+ &bfs3 == bfs_order1);
+ EXPECT_EQ(bfs_order1, bfs_order2);
+ EXPECT_EQ(bfs_order2, bfs_order3);
+ EXPECT_EQ(bfs_order3, bfs_order4);
+ EXPECT_EQ(bfs_order4, bfs_order5);
+ EXPECT_EQ(bfs_order5, bfs_order6);
+}
+
+TEST(SurfaceTest, BeginFrameSourceRemovedOnSurfaceDestruction) {
+ SurfaceManager manager;
+ FakeSurfaceFactoryClient surface_factory_client;
+ SurfaceFactory factory(&manager, &surface_factory_client);
+ FakeBeginFrameSource bfs;
+
+ SurfaceId surface_id(6);
+ factory.Create(surface_id);
+ Surface* surface = manager.GetSurfaceForId(surface_id);
+ surface->AddBeginFrameSource(&bfs);
+
+ BeginFrameSource* bfs_before = surface_factory_client.begin_frame_source();
+ factory.Destroy(surface_id);
+ BeginFrameSource* bfs_after = surface_factory_client.begin_frame_source();
+
+ EXPECT_EQ(&bfs, bfs_before);
+ EXPECT_EQ(nullptr, bfs_after);
+}
+
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698