Flutter Engine
texture_layer_unittests.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 
5 #include "flutter/flow/layers/texture_layer.h"
6 
7 #include "flutter/flow/testing/layer_test.h"
8 #include "flutter/flow/testing/mock_layer.h"
9 #include "flutter/flow/testing/mock_texture.h"
10 #include "flutter/fml/macros.h"
11 #include "flutter/testing/mock_canvas.h"
12 
13 namespace flutter {
14 namespace testing {
15 
17 
18 TEST_F(TextureLayerTest, InvalidTexture) {
19  const SkPoint layer_offset = SkPoint::Make(0.0f, 0.0f);
20  const SkSize layer_size = SkSize::Make(8.0f, 8.0f);
21  auto layer = std::make_shared<TextureLayer>(layer_offset, layer_size, 0,
22  false, kNone_SkFilterQuality);
23 
24  layer->Preroll(preroll_context(), SkMatrix());
25  EXPECT_EQ(layer->paint_bounds(),
26  (SkRect::MakeSize(layer_size)
27  .makeOffset(layer_offset.fX, layer_offset.fY)));
28  EXPECT_TRUE(layer->needs_painting());
29 
30  layer->Paint(paint_context());
31  EXPECT_EQ(mock_canvas().draw_calls(), std::vector<MockCanvas::DrawCall>());
32 }
33 
34 TEST_F(TextureLayerTest, PaintingEmptyLayerDies) {
35  const SkPoint layer_offset = SkPoint::Make(0.0f, 0.0f);
36  const SkSize layer_size = SkSize::Make(0.0f, 0.0f);
37  const int64_t texture_id = 0;
38  auto mock_texture = std::make_shared<MockTexture>(texture_id);
39  auto layer = std::make_shared<TextureLayer>(
40  layer_offset, layer_size, texture_id, false, kNone_SkFilterQuality);
41 
42  // Ensure the texture is located by the Layer.
43  preroll_context()->texture_registry.RegisterTexture(mock_texture);
44 
45  layer->Preroll(preroll_context(), SkMatrix());
46  EXPECT_EQ(layer->paint_bounds(), kEmptyRect);
47  EXPECT_FALSE(layer->needs_painting());
48 
49  layer->Paint(paint_context());
50  EXPECT_EQ(mock_texture->paint_calls(),
51  std::vector({MockTexture::PaintCall{
52  mock_canvas(), layer->paint_bounds(), false, nullptr,
53  kNone_SkFilterQuality}}));
54  EXPECT_EQ(mock_canvas().draw_calls(), std::vector<MockCanvas::DrawCall>());
55 }
56 
57 TEST_F(TextureLayerTest, PaintingWithLowFilterQuality) {
58  const SkPoint layer_offset = SkPoint::Make(0.0f, 0.0f);
59  const SkSize layer_size = SkSize::Make(8.0f, 8.0f);
60  const int64_t texture_id = 0;
61  auto mock_texture = std::make_shared<MockTexture>(texture_id);
62  auto layer = std::make_shared<TextureLayer>(
63  layer_offset, layer_size, texture_id, false, kLow_SkFilterQuality);
64 
65  // Ensure the texture is located by the Layer.
66  preroll_context()->texture_registry.RegisterTexture(mock_texture);
67 
68  layer->Preroll(preroll_context(), SkMatrix());
69  EXPECT_EQ(layer->paint_bounds(),
70  (SkRect::MakeSize(layer_size)
71  .makeOffset(layer_offset.fX, layer_offset.fY)));
72  EXPECT_TRUE(layer->needs_painting());
73 
74  layer->Paint(paint_context());
75  EXPECT_EQ(mock_texture->paint_calls(),
76  std::vector({MockTexture::PaintCall{
77  mock_canvas(), layer->paint_bounds(), false, nullptr,
78  kLow_SkFilterQuality}}));
79  EXPECT_EQ(mock_canvas().draw_calls(), std::vector<MockCanvas::DrawCall>());
80 }
81 
82 } // namespace testing
83 } // namespace flutter
LayerTestBase<::testing::Test > LayerTest
Definition: layer_test.h:151
TEST_F(BackdropFilterLayerTest, PaintingEmptyLayerDies)
static constexpr SkRect kEmptyRect
Definition: mock_canvas.h:28