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

Unified Diff: services/ui/surfaces/display_compositor_unittest.cc

Issue 2638833002: Moving temporary reference logic to SurfaceManager (Closed)
Patch Set: c Created 3 years, 11 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
« no previous file with comments | « services/ui/surfaces/display_compositor.cc ('k') | services/ui/ws/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/surfaces/display_compositor_unittest.cc
diff --git a/services/ui/surfaces/display_compositor_unittest.cc b/services/ui/surfaces/display_compositor_unittest.cc
deleted file mode 100644
index 6d2cf5a166dade018393196f7c815ff47ce23ad5..0000000000000000000000000000000000000000
--- a/services/ui/surfaces/display_compositor_unittest.cc
+++ /dev/null
@@ -1,320 +0,0 @@
-// Copyright 2016 The Chromium 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 "services/ui/surfaces/display_compositor.h"
-
-#include <inttypes.h>
-
-#include <string>
-#include <utility>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/memory/ref_counted.h"
-#include "base/strings/stringprintf.h"
-#include "cc/ipc/display_compositor.mojom.h"
-#include "cc/surfaces/surface_id.h"
-#include "cc/surfaces/surface_observer.h"
-#include "cc/surfaces/surface_reference.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
-#include "services/ui/common/task_runner_test_base.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace ui {
-namespace test {
-namespace {
-
-std::string SurfaceIdString(const cc::SurfaceId& surface_id) {
- return base::StringPrintf("%u:%u:%u", surface_id.frame_sink_id().client_id(),
- surface_id.frame_sink_id().sink_id(),
- surface_id.local_frame_id().local_id());
-}
-
-cc::SurfaceId MakeSurfaceId(uint32_t client_id,
- uint32_t sink_id,
- uint32_t local_id) {
- return cc::SurfaceId(
- cc::FrameSinkId(client_id, sink_id),
- cc::LocalFrameId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
-}
-
-// Test mojom::DisplayCompositorClient that records OnSurfaceCreated() events.
-class TestDisplayCompositorClient : public cc::mojom::DisplayCompositorClient {
- public:
- TestDisplayCompositorClient() : binding_(this) {}
- ~TestDisplayCompositorClient() override {}
-
- cc::mojom::DisplayCompositorClientPtr GetPtr() {
- return binding_.CreateInterfacePtrAndBind();
- }
-
- // Returns events that have occurred and clear.
- std::string events() {
- std::string value = std::move(events_);
- events_.clear();
- return value;
- }
-
- private:
- void AddEvent(const std::string& text) {
- if (!events_.empty())
- events_ += ";";
- events_ += text;
- }
-
- // cc::mojom::DisplayCompositorClient:
- void OnDisplayCompositorCreated(
- const cc::SurfaceId& root_surface_id) override {
- got_root_surface_id_ = true;
- }
-
- void OnSurfaceCreated(const cc::SurfaceInfo& surface_info) override {
- EXPECT_TRUE(got_root_surface_id_);
- AddEvent(base::StringPrintf("OnSurfaceCreated(%s)",
- SurfaceIdString(surface_info.id()).c_str()));
- }
-
- mojo::Binding<cc::mojom::DisplayCompositorClient> binding_;
- std::string events_;
- bool got_root_surface_id_ = false;
-
- DISALLOW_COPY_AND_ASSIGN(TestDisplayCompositorClient);
-};
-
-// Test SurfaceReferenceManager that records AddSurfaceReference() and
-// RemoveSurfaceReference() events.
-class TestSurfaceReferenceManager : public cc::SurfaceReferenceManager {
- public:
- ~TestSurfaceReferenceManager() override {}
-
- const cc::SurfaceId& GetRootSurfaceId() const override { return root_id_; }
-
- void AddSurfaceReference(const cc::SurfaceId& parent_id,
- const cc::SurfaceId& child_id) override {
- AddEvent(base::StringPrintf("Add(%s-%s)",
- SurfaceIdString(parent_id).c_str(),
- SurfaceIdString(child_id).c_str()));
- }
-
- void RemoveSurfaceReference(const cc::SurfaceId& parent_id,
- const cc::SurfaceId& child_id) override {
- AddEvent(base::StringPrintf("Remove(%s-%s)",
- SurfaceIdString(parent_id).c_str(),
- SurfaceIdString(child_id).c_str()));
- }
-
- size_t GetSurfaceReferenceCount(
- const cc::SurfaceId& surface_id) const override {
- NOTREACHED();
- return 0;
- }
-
- size_t GetReferencedSurfaceCount(
- const cc::SurfaceId& surface_id) const override {
- NOTREACHED();
- return 0;
- }
-
- // Returns events that have occurred and clear.
- std::string events() {
- std::string value = std::move(events_);
- events_.clear();
- return value;
- }
-
- private:
- void AddEvent(const std::string& text) {
- if (!events_.empty())
- events_ += ";";
- events_ += text;
- }
-
- const cc::SurfaceId root_id_ = MakeSurfaceId(0, 0, 0);
- std::string events_;
-};
-
-} // namespace
-
-class DisplayCompositorTest : public TaskRunnerTestBase {
- public:
- DisplayCompositorTest() {}
- ~DisplayCompositorTest() override {}
-
- cc::SurfaceObserver* surface_observer() { return display_compositor_.get(); }
-
- const cc::SurfaceId& GetRootSurfaceId() const {
- return reference_manager_.GetRootSurfaceId();
- }
-
- void AddSurfaceReference(const cc::SurfaceId& parent_id,
- const cc::SurfaceId& child_id) {
- display_compositor_->AddSurfaceReferences(std::vector<cc::SurfaceReference>{
- cc::SurfaceReference(parent_id, child_id)});
- }
-
- // Returns the total number of temporary references held by DisplayCompositor.
- size_t CountTempReferences() {
- size_t size = 0;
- for (auto& map_entry : display_compositor_->temp_references_) {
- size += map_entry.second.size();
- }
- return size;
- }
-
- // TaskRunnerTestBase:
- void SetUp() override {
- TaskRunnerTestBase::SetUp();
- display_compositor_ = base::MakeUnique<DisplayCompositor>(
- nullptr, nullptr, nullptr, nullptr, client_.GetPtr());
- display_compositor_->reference_manager_ = &reference_manager_;
- }
-
- void TearDown() override {
- // Clear any events before the next test.
- client_.events();
- reference_manager_.events();
- }
-
- protected:
- TestDisplayCompositorClient client_;
- TestSurfaceReferenceManager reference_manager_;
- std::unique_ptr<DisplayCompositor> display_compositor_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DisplayCompositorTest);
-};
-
-TEST_F(DisplayCompositorTest, AddSurfaceThenReference) {
- const cc::SurfaceId parent_id = MakeSurfaceId(1, 1, 1);
- const cc::SurfaceId surface_id = MakeSurfaceId(2, 1, 1);
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id, 1.0f, gfx::Size(1, 1)));
- RunUntilIdle();
-
- // Client should get OnSurfaceCreated call and temporary reference added.
- EXPECT_EQ("OnSurfaceCreated(2:1:1)", client_.events());
- EXPECT_EQ("Add(0:0:0-2:1:1)", reference_manager_.events());
- EXPECT_EQ(1u, CountTempReferences());
-
- AddSurfaceReference(parent_id, surface_id);
- RunUntilIdle();
-
- // Real reference is added then temporary reference removed.
- EXPECT_EQ("Add(1:1:1-2:1:1);Remove(0:0:0-2:1:1)",
- reference_manager_.events());
- EXPECT_EQ(0u, CountTempReferences());
-}
-
-TEST_F(DisplayCompositorTest, AddSurfaceThenRootReference) {
- const cc::SurfaceId surface_id = MakeSurfaceId(1, 1, 1);
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id, 1.0f, gfx::Size(1, 1)));
- RunUntilIdle();
-
- // Temporary reference should be added.
- EXPECT_EQ("Add(0:0:0-1:1:1)", reference_manager_.events());
- EXPECT_EQ(1u, CountTempReferences());
-
- AddSurfaceReference(GetRootSurfaceId(), surface_id);
- RunUntilIdle();
-
- // Adding real reference doesn't need to change anything in
- // SurfaceReferenceManager does remove the temporary reference marker.
- EXPECT_EQ("", reference_manager_.events());
- EXPECT_EQ(0u, CountTempReferences());
-}
-
-TEST_F(DisplayCompositorTest, AddTwoSurfacesThenOneReference) {
- const cc::SurfaceId parent_id = MakeSurfaceId(1, 1, 1);
- const cc::SurfaceId surface_id1 = MakeSurfaceId(2, 1, 1);
- const cc::SurfaceId surface_id2 = MakeSurfaceId(3, 1, 1);
-
- // Add two surfaces with different FrameSinkIds.
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id1, 1.0f, gfx::Size(1, 1)));
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id2, 1.0f, gfx::Size(1, 1)));
- RunUntilIdle();
-
- // Temporary reference should be added for both surfaces.
- EXPECT_EQ("Add(0:0:0-2:1:1);Add(0:0:0-3:1:1)", reference_manager_.events());
- EXPECT_EQ(2u, CountTempReferences());
-
- AddSurfaceReference(parent_id, surface_id1);
- RunUntilIdle();
-
- // Real reference is added then temporary reference removed for 2:1:1. There
- // should still be a temporary reference left to 3:1:1
- EXPECT_EQ("Add(1:1:1-2:1:1);Remove(0:0:0-2:1:1)",
- reference_manager_.events());
- EXPECT_EQ(1u, CountTempReferences());
-}
-
-TEST_F(DisplayCompositorTest, AddSurfacesSkipReference) {
- const cc::SurfaceId parent_id = MakeSurfaceId(1, 1, 1);
- const cc::SurfaceId surface_id1 = MakeSurfaceId(2, 1, 1);
- const cc::SurfaceId surface_id2 = MakeSurfaceId(2, 1, 2);
-
- // Add two surfaces that have the same FrameSinkId. This would happen when a
- // client submits two CFs before parent submits a new CF.
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id1, 1.0f, gfx::Size(1, 1)));
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id2, 1.0f, gfx::Size(1, 1)));
- RunUntilIdle();
-
- // Client should get OnSurfaceCreated call and temporary reference added for
- // both surfaces.
- EXPECT_EQ("OnSurfaceCreated(2:1:1);OnSurfaceCreated(2:1:2)",
- client_.events());
- EXPECT_EQ("Add(0:0:0-2:1:1);Add(0:0:0-2:1:2)", reference_manager_.events());
- EXPECT_EQ(2u, CountTempReferences());
-
- // Add a reference to the surface with the later LocalFrameId.
- AddSurfaceReference(parent_id, surface_id2);
- RunUntilIdle();
-
- // The real reference should be added for 2:1:2 and both temporary references
- // should be removed.
- EXPECT_EQ("Add(1:1:1-2:1:2);Remove(0:0:0-2:1:2);Remove(0:0:0-2:1:1)",
- reference_manager_.events());
- EXPECT_EQ(0u, CountTempReferences());
-}
-
-TEST_F(DisplayCompositorTest, RemoveFirstTempRefOnly) {
- const cc::SurfaceId parent_id = MakeSurfaceId(1, 1, 1);
- const cc::SurfaceId surface_id1 = MakeSurfaceId(2, 1, 1);
- const cc::SurfaceId surface_id2 = MakeSurfaceId(2, 1, 2);
-
- // Add two surfaces that have the same FrameSinkId. This would happen when a
- // client submits two CFs before parent submits a new CF.
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id1, 1.0f, gfx::Size(1, 1)));
- surface_observer()->OnSurfaceCreated(
- cc::SurfaceInfo(surface_id2, 1.0f, gfx::Size(1, 1)));
- RunUntilIdle();
-
- // Client should get OnSurfaceCreated call and temporary reference added for
- // both surfaces.
- EXPECT_EQ("OnSurfaceCreated(2:1:1);OnSurfaceCreated(2:1:2)",
- client_.events());
- EXPECT_EQ("Add(0:0:0-2:1:1);Add(0:0:0-2:1:2)", reference_manager_.events());
- EXPECT_EQ(2u, CountTempReferences());
-
- // Add a reference to the surface with the earlier LocalFrameId.
- AddSurfaceReference(parent_id, surface_id1);
- RunUntilIdle();
-
- // The real reference should be added for 2:1:1 and temporary reference
- // should be removed. The temporary reference for 2:1:2 should remain.
- EXPECT_EQ("Add(1:1:1-2:1:1);Remove(0:0:0-2:1:1)",
- reference_manager_.events());
- EXPECT_EQ(1u, CountTempReferences());
-}
-
-} // namespace test
-} // namespace ui
« no previous file with comments | « services/ui/surfaces/display_compositor.cc ('k') | services/ui/ws/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698