layer_util_unittest.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/utility/layer_util.h"
  5. #include "base/cancelable_callback.h"
  6. #include "base/run_loop.h"
  7. #include "base/test/bind.h"
  8. #include "base/test/task_environment.h"
  9. #include "base/timer/timer.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. #include "ui/compositor/compositor.h"
  12. #include "ui/compositor/layer.h"
  13. #include "ui/compositor/scoped_animation_duration_scale_mode.h"
  14. #include "ui/compositor/test/test_compositor_host.h"
  15. #include "ui/compositor/test/test_context_factories.h"
  16. #include "ui/gfx/geometry/rect.h"
  17. namespace ash {
  18. namespace {
  19. class LayerUtilTest : public testing::Test {
  20. public:
  21. LayerUtilTest() = default;
  22. LayerUtilTest(const LayerUtilTest&) = delete;
  23. LayerUtilTest& operator=(const LayerUtilTest&) = delete;
  24. ~LayerUtilTest() override = default;
  25. // testing::Test:
  26. void SetUp() override {
  27. context_factories_ = std::make_unique<ui::TestContextFactories>(false);
  28. const gfx::Rect bounds(300, 300);
  29. host_.reset(ui::TestCompositorHost::Create(
  30. bounds, context_factories_->GetContextFactory()));
  31. host_->Show();
  32. compositor()->SetRootLayer(&root_);
  33. }
  34. void TearDown() override {
  35. host_.reset();
  36. context_factories_.reset();
  37. }
  38. void Advance(const base::TimeDelta& delta) {
  39. task_environment_.FastForwardBy(delta);
  40. }
  41. void GenerateOneFrame() { compositor()->ScheduleFullRedraw(); }
  42. ui::Compositor* compositor() { return host_->GetCompositor(); }
  43. ui::Layer* root_layer() { return &root_; }
  44. private:
  45. base::test::TaskEnvironment task_environment_{
  46. base::test::TaskEnvironment::TimeSource::MOCK_TIME,
  47. base::test::TaskEnvironment::MainThreadType::UI};
  48. std::unique_ptr<ui::TestContextFactories> context_factories_;
  49. std::unique_ptr<ui::TestCompositorHost> host_;
  50. ui::Layer root_;
  51. };
  52. } // namespace
  53. TEST_F(LayerUtilTest, CopyContentToExistingLayer) {
  54. ui::ScopedAnimationDurationScaleMode non_zero(
  55. ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
  56. ui::Layer layer1;
  57. layer1.SetBounds(gfx::Rect(100, 100));
  58. root_layer()->Add(&layer1);
  59. ui::Layer layer2;
  60. layer2.SetBounds(gfx::Rect(100, 100));
  61. root_layer()->Add(&layer2);
  62. {
  63. bool called = false;
  64. base::CancelableOnceCallback<void(ui::Layer**)> cancelable;
  65. cancelable.Reset(base::BindLambdaForTesting([&](ui::Layer** dummy) {
  66. called = true;
  67. *dummy = &layer2;
  68. }));
  69. CopyLayerContentToLayer(&layer1, cancelable.callback());
  70. GenerateOneFrame();
  71. Advance(base::Milliseconds(1000));
  72. EXPECT_TRUE(called);
  73. }
  74. // Test cancel scenario.
  75. {
  76. bool called = false;
  77. base::CancelableOnceCallback<void(ui::Layer**)> cancelable;
  78. cancelable.Reset(base::BindLambdaForTesting([&](ui::Layer** dummy) {
  79. called = true;
  80. *dummy = &layer2;
  81. }));
  82. CopyLayerContentToLayer(&layer1, cancelable.callback());
  83. cancelable.Cancel();
  84. GenerateOneFrame();
  85. Advance(base::Milliseconds(1000));
  86. EXPECT_FALSE(called);
  87. }
  88. }
  89. } // namespace ash