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

Unified Diff: ui/aura/mus/window_tree_client_unittest.cc

Issue 2797263002: Aura-Mus: Implement gutter in the embedder. (Closed)
Patch Set: Addressed sadrul's comments Created 3 years, 8 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: ui/aura/mus/window_tree_client_unittest.cc
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc
index 448df88b91d88ce0fd27239dabf31fab20f34a9a..c5496f230ff8da6b118f5f6488cccedf3c7ef3a7 100644
--- a/ui/aura/mus/window_tree_client_unittest.cc
+++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -11,6 +11,7 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/strings/utf_string_conversions.h"
+#include "cc/base/switches.h"
#include "cc/surfaces/surface_info.h"
#include "mojo/public/cpp/bindings/map.h"
#include "services/ui/public/cpp/property_type_converters.h"
@@ -23,6 +24,7 @@
#include "ui/aura/client/focus_client.h"
#include "ui/aura/client/transient_window_client.h"
#include "ui/aura/mus/capture_synchronizer.h"
+#include "ui/aura/mus/client_surface_embedder.h"
#include "ui/aura/mus/focus_synchronizer.h"
#include "ui/aura/mus/property_converter.h"
#include "ui/aura/mus/window_mus.h"
@@ -101,6 +103,23 @@ std::vector<uint8_t> ConvertToPropertyTransportValue(int64_t value) {
using WindowTreeClientWmTest = test::AuraMusWmTestBase;
using WindowTreeClientClientTest = test::AuraMusClientTestBase;
+// WindowTreeClientWmTest with --enable-surface-synchronization.
+class WindowTreeClientWmTestSurfaceSync : public WindowTreeClientWmTest {
+ public:
+ WindowTreeClientWmTestSurfaceSync() {}
+ ~WindowTreeClientWmTestSurfaceSync() override {}
+
+ // WindowTreeClientWmTest:
+ void SetUp() override {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ cc::switches::kEnableSurfaceSynchronization);
+ WindowTreeClientWmTest::SetUp();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WindowTreeClientWmTestSurfaceSync);
+};
+
// WindowTreeClientWmTest with --force-device-scale-factor=2.
class WindowTreeClientWmTestHighDPI : public WindowTreeClientWmTest {
public:
@@ -144,46 +163,6 @@ class WindowTreeClientClientTestHighDPI : public WindowTreeClientClientTest {
DISALLOW_COPY_AND_ASSIGN(WindowTreeClientClientTestHighDPI);
};
-// Verifies that a ClientSurfaceEmbedder will only be allocated if a window
-// is visible that embeds a WindowTreeClient.
-TEST_F(WindowTreeClientWmTest, ClientSurfaceEmbedderIfVisible) {
- Window window(nullptr);
- // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate cc::LocalSurfaceIds
- // when their sizes change.
- window.SetProperty(aura::client::kEmbedType,
- aura::client::WindowEmbedType::EMBED_IN_OWNER);
- window.Init(ui::LAYER_NOT_DRAWN);
-
- WindowMus* window_mus = WindowMus::Get(&window);
- const cc::SurfaceId surface_id(
- cc::FrameSinkId(1, 1),
- cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
- constexpr float device_scale_factor = 1.f;
- constexpr gfx::Size size(100, 100);
-
- window_mus->SetPrimarySurfaceInfo(
- cc::SurfaceInfo(surface_id, device_scale_factor, size));
-
- WindowPortMus* window_port_mus = WindowPortMus::Get(&window);
- ASSERT_NE(nullptr, window_port_mus);
- EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-
- // Showing the window results in the creation of a ClientSurfaceEmbedder.
- window.Show();
- EXPECT_NE(nullptr, window_port_mus->client_surface_embedder());
-
- // Hiding it again removes the ClientSurfaceEmbedder.
- window.Hide();
- EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-
- // Setting an invalid cc::SurfaceInfo also eliminates the
- // ClientSurfaceEmbedder.
- window.Show();
- EXPECT_NE(nullptr, window_port_mus->client_surface_embedder());
- window_mus->SetPrimarySurfaceInfo(cc::SurfaceInfo());
- EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-}
-
// Verifies bounds are reverted if the server replied that the change failed.
TEST_F(WindowTreeClientWmTest, SetBoundsFailed) {
Window window(nullptr);
@@ -225,8 +204,9 @@ TEST_F(WindowTreeClientWmTest, SetBoundsFailedLocalSurfaceId) {
}
// Verifies that a ClientSurfaceEmbedder is created for a window once it has
-// a bounds, a valid FrameSinkId and is visible.
-TEST_F(WindowTreeClientWmTest, ClientSurfaceEmbedderOnValidEmbedding) {
+// a bounds, and a valid FrameSinkId.
+TEST_F(WindowTreeClientWmTestSurfaceSync,
+ ClientSurfaceEmbedderOnValidEmbedding) {
Window window(nullptr);
// TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate cc::LocalSurfaceIds
// when their sizes change.
@@ -234,29 +214,47 @@ TEST_F(WindowTreeClientWmTest, ClientSurfaceEmbedderOnValidEmbedding) {
aura::client::WindowEmbedType::EMBED_IN_OWNER);
window.Init(ui::LAYER_NOT_DRAWN);
+ // The window will allocate a cc::LocalSurfaceId once it has a bounds.
+ WindowMus* window_mus = WindowMus::Get(&window);
+ ASSERT_NE(nullptr, window_mus);
+ EXPECT_FALSE(window_mus->GetLocalSurfaceId().is_valid());
const gfx::Rect new_bounds(gfx::Rect(0, 0, 100, 100));
ASSERT_NE(new_bounds, window.bounds());
window.SetBounds(new_bounds);
EXPECT_EQ(new_bounds, window.bounds());
- WindowMus* window_mus = WindowMus::Get(&window);
- ASSERT_NE(nullptr, window_mus);
EXPECT_TRUE(window_mus->GetLocalSurfaceId().is_valid());
- // An ClientSurfaceEmbedder isn't created UNTIL the window is visible and has
+ // An ClientSurfaceEmbedder isn't created UNTIL the window has a bounds and
// a valid FrameSinkId.
WindowPortMus* window_port_mus = WindowPortMus::Get(&window);
ASSERT_NE(nullptr, window_port_mus);
EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
- // The window is now visible, but doesn't yet have a FrameSinkId.
- window.Show();
- EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-
// Now that the window has a valid FrameSinkId, it can embed the client in a
// CompositorFrame.
window_tree_client()->OnFrameSinkIdAllocated(server_id(&window),
cc::FrameSinkId(1, 1));
- EXPECT_NE(nullptr, window_port_mus->client_surface_embedder());
+ ClientSurfaceEmbedder* client_surface_embedder =
+ window_port_mus->client_surface_embedder();
+ ASSERT_NE(nullptr, client_surface_embedder);
+
+ // Until the fallback surface fills the window, we will have gutter.
+ ui::Layer* right_gutter = client_surface_embedder->RightGutterForTesting();
+ ASSERT_NE(nullptr, right_gutter);
+ EXPECT_EQ(gfx::Rect(100, 100), right_gutter->bounds());
+ // We don't have a bottom gutter if the fallback surface size is (0, 0) as the
+ // right gutter will fill the whole area.
+ ASSERT_EQ(nullptr, client_surface_embedder->BottomGutterForTesting());
+
+ // When a SurfaceInfo arrives from the window server, we use it as the
+ // fallback SurfaceInfo. Here we issue the PrimarySurfaceInfo back to the
+ // client lib. This should cause the gutter to go away, eliminating overdraw.
+ window_tree_client()->OnWindowSurfaceChanged(
+ server_id(&window), window_port_mus->PrimarySurfaceInfoForTesting());
+
+ // The gutter is gone.
+ ASSERT_EQ(nullptr, client_surface_embedder->BottomGutterForTesting());
+ ASSERT_EQ(nullptr, client_surface_embedder->RightGutterForTesting());
}
// Verifies that the cc::LocalSurfaceId generated by an embedder changes when

Powered by Google App Engine
This is Rietveld 408576698