| // Copyright 2018 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/sys/cpp/testing/component_context_provider.h> |
| #include <zircon/syscalls.h> |
| |
| #include "garnet/lib/ui/gfx/tests/vk_session_test.h" |
| #include "gtest/gtest.h" |
| #include "lib/ui/gfx/util/time.h" |
| #include "lib/ui/scenic/cpp/commands.h" |
| #include "src/ui/lib/escher/test/gtest_vulkan.h" |
| |
| namespace scenic_impl { |
| namespace gfx { |
| namespace test { |
| |
| class CompositorTest : public SessionTest { |
| public: |
| CompositorTest() {} |
| |
| std::unique_ptr<SessionForTest> CreateSession() override { |
| SessionContext session_context = CreateBarebonesSessionContext(); |
| |
| // Generate scene graph. |
| scene_graph_ = std::make_unique<SceneGraph>(); |
| |
| // Generate other parameters needed for session context. |
| sys::testing::ComponentContextProvider context_provider_; |
| auto app_context = context_provider_.TakeContext(); |
| time_stamper_ = std::make_unique<EventTimestamper>(app_context.get()); |
| resource_linker_ = std::make_unique<ResourceLinker>(); |
| view_linker_ = std::make_unique<ViewLinker>(); |
| |
| // Apply to the session context; |
| session_context.event_timestamper = time_stamper_.get(); |
| session_context.view_linker = view_linker_.get(); |
| session_context.resource_linker = resource_linker_.get(); |
| |
| // Finally apply scene graph weak pointer. |
| session_context.scene_graph = scene_graph_->GetWeakPtr(); |
| |
| // Return session |
| return std::make_unique<SessionForTest>(1, std::move(session_context), this, |
| error_reporter()); |
| } |
| |
| private: |
| std::unique_ptr<SceneGraph> scene_graph_; |
| std::unique_ptr<EventTimestamper> time_stamper_; |
| std::unique_ptr<ViewLinker> view_linker_; |
| std::unique_ptr<ResourceLinker> resource_linker_; |
| }; |
| |
| TEST_F(CompositorTest, Validation) { |
| const int CompositorId = 15; |
| std::array<float, 3> preoffsets = {0, 0, 0}; |
| std::array<float, 9> matrix = {0.3, 0.6, 0.1, 0.3, 0.6, 0.1, 0.3, 0.6, 0.1}; |
| std::array<float, 3> postoffsets = {0, 0, 0}; |
| |
| ASSERT_TRUE(Apply(scenic::NewCreateDisplayCompositorCmd(CompositorId))); |
| |
| ASSERT_TRUE(Apply(scenic::NewSetDisplayColorConversionCmdHACK( |
| CompositorId, preoffsets, matrix, postoffsets))); |
| |
| Display* display = display_manager_->default_display(); |
| ASSERT_TRUE(display != nullptr); |
| |
| const ColorTransform& transform = display->color_transform(); |
| |
| ASSERT_TRUE(transform.preoffsets == preoffsets); |
| ASSERT_TRUE(transform.matrix == matrix); |
| ASSERT_TRUE(transform.postoffsets == postoffsets); |
| } |
| |
| } // namespace test |
| } // namespace gfx |
| } // namespace scenic_impl |