blob: f78e6176db14a12adc34b77ebd7f4c040c783f70 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <lib/zx/eventpair.h>
#include "garnet/lib/ui/gfx/resources/compositor/compositor.h"
#include "garnet/lib/ui/gfx/tests/session_test.h"
namespace scenic_impl {
namespace gfx {
namespace test {
using SceneGraphTest = SessionTest;
bool ContainsCompositor(const std::vector<CompositorWeakPtr>& compositors,
Compositor* compositor) {
auto it = std::find_if(compositors.begin(), compositors.end(),
[compositor](const CompositorWeakPtr& c) {
return c.get() == compositor;
});
return it != compositors.end();
};
TEST_F(SceneGraphTest, CompositorsGetAddedAndRemoved) {
SceneGraph scene_graph;
ASSERT_EQ(0u, scene_graph.compositors().size());
{
CompositorPtr c1 =
Compositor::New(session_.get(), 1, scene_graph.GetWeakPtr());
ASSERT_EQ(1u, scene_graph.compositors().size());
ASSERT_TRUE(ContainsCompositor(scene_graph.compositors(), c1.get()));
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
{
CompositorPtr c2 =
Compositor::New(session_.get(), 2, scene_graph.GetWeakPtr());
ASSERT_EQ(2u, scene_graph.compositors().size());
ASSERT_TRUE(ContainsCompositor(scene_graph.compositors(), c1.get()));
ASSERT_TRUE(ContainsCompositor(scene_graph.compositors(), c2.get()));
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
}
ASSERT_EQ(1u, scene_graph.compositors().size());
ASSERT_TRUE(ContainsCompositor(scene_graph.compositors(), c1.get()));
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
}
}
TEST_F(SceneGraphTest, LookupCompositor) {
SceneGraph scene_graph;
CompositorPtr c1 =
Compositor::New(session_.get(), 1, scene_graph.GetWeakPtr());
auto c1_weak = scene_graph.GetCompositor(c1->global_id());
ASSERT_EQ(c1.get(), c1_weak.get());
}
TEST_F(SceneGraphTest, FirstCompositorIsStable) {
SceneGraph scene_graph;
CompositorPtr c1 =
Compositor::New(session_.get(), 1, scene_graph.GetWeakPtr());
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
{
CompositorPtr c2 =
Compositor::New(session_.get(), 2, scene_graph.GetWeakPtr());
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
CompositorPtr c3 =
Compositor::New(session_.get(), 3, scene_graph.GetWeakPtr());
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
{
CompositorPtr c4 =
Compositor::New(session_.get(), 4, scene_graph.GetWeakPtr());
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
}
ASSERT_EQ(scene_graph.first_compositor().get(), c1.get());
c1 = nullptr;
// First compositor follows order of creation.
ASSERT_EQ(2u, scene_graph.compositors().size());
ASSERT_EQ(scene_graph.first_compositor().get(), c2.get());
}
}
} // namespace test
} // namespace gfx
} // namespace scenic_impl