diff --git a/engine/src/flutter/impeller/playground/playground.cc b/engine/src/flutter/impeller/playground/playground.cc index ab0457cee5a..f09fa9638d3 100644 --- a/engine/src/flutter/impeller/playground/playground.cc +++ b/engine/src/flutter/impeller/playground/playground.cc @@ -126,12 +126,21 @@ void Playground::TeardownWindow() { impl_.reset(); } +static std::atomic_bool gShouldOpenNewPlaygrounds = true; + +bool Playground::ShouldOpenNewPlaygrounds() { + return gShouldOpenNewPlaygrounds; +} + static void PlaygroundKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) { if ((key == GLFW_KEY_ESCAPE || key == GLFW_KEY_Q) && action == GLFW_RELEASE) { + if (mods & (GLFW_MOD_CONTROL | GLFW_MOD_SUPER | GLFW_MOD_SHIFT)) { + gShouldOpenNewPlaygrounds = false; + } ::glfwSetWindowShouldClose(window, GLFW_TRUE); } } diff --git a/engine/src/flutter/impeller/playground/playground.h b/engine/src/flutter/impeller/playground/playground.h index cbb38bd423b..8b65b6f68ce 100644 --- a/engine/src/flutter/impeller/playground/playground.h +++ b/engine/src/flutter/impeller/playground/playground.h @@ -34,6 +34,8 @@ class Playground { static constexpr bool is_enabled() { return is_enabled_; } + static bool ShouldOpenNewPlaygrounds(); + void SetupWindow(PlaygroundBackend backend); void TeardownWindow(); diff --git a/engine/src/flutter/impeller/playground/playground_test.cc b/engine/src/flutter/impeller/playground/playground_test.cc index 3cb7c946a88..1627cf9a711 100644 --- a/engine/src/flutter/impeller/playground/playground_test.cc +++ b/engine/src/flutter/impeller/playground/playground_test.cc @@ -16,6 +16,11 @@ void PlaygroundTest::SetUp() { return; } + if (!Playground::ShouldOpenNewPlaygrounds()) { + GTEST_SKIP_("Skipping due to user action."); + return; + } + SetupWindow(GetParam()); }