OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 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 | |
5 #include "cc/layers/append_quads_data.h" | |
6 #include "cc/layers/content_layer_client.h" | |
7 #include "cc/layers/picture_layer.h" | |
8 #include "cc/layers/picture_layer_impl.h" | |
9 #include "cc/quads/draw_quad.h" | |
10 #include "cc/test/layer_tree_pixel_test.h" | |
11 #include "cc/test/mock_quad_culler.h" | |
12 #include "cc/trees/layer_tree_impl.h" | |
13 #include "third_party/skia/include/core/SkCanvas.h" | |
14 #include "third_party/skia/include/core/SkColor.h" | |
15 #include "ui/gfx/rect.h" | |
16 #include "ui/gfx/rect_f.h" | |
17 | |
18 #if !defined(OS_ANDROID) | |
19 | |
20 namespace cc { | |
21 namespace { | |
22 | |
23 class LayerTreeHostOnDemandRasterPixelTest : public LayerTreePixelTest { | |
24 public: | |
25 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { | |
26 settings->impl_side_painting = true; | |
27 } | |
28 | |
29 virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE { | |
30 // Not enough memory available. Enforce on-demand rasterization. | |
31 impl->SetManagedMemoryPolicy( | |
32 ManagedMemoryPolicy(1, ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, | |
33 1, ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING)); | |
34 } | |
35 | |
36 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, | |
37 bool result) OVERRIDE { | |
38 // Find the PictureLayerImpl ask it to append quads to check their material. | |
39 // The PictureLayerImpl is assumed to be the first child of the root layer | |
40 // in the active tree. | |
41 PictureLayerImpl* picture_layer = static_cast<PictureLayerImpl*>( | |
42 host_impl->active_tree()->root_layer()->child_at(0)); | |
43 | |
44 QuadList quads; | |
45 SharedQuadStateList shared_states; | |
46 MockQuadCuller quad_culler(&quads, &shared_states); | |
47 | |
48 AppendQuadsData data; | |
49 picture_layer->AppendQuads(&quad_culler, &data); | |
50 | |
51 for (size_t i = 0; i < quads.size(); ++i) | |
52 EXPECT_EQ(quads[i]->material, DrawQuad::PICTURE_CONTENT); | |
53 | |
54 // Triggers pixel readback and ends the test. | |
55 LayerTreePixelTest::SwapBuffersOnThread(host_impl, result); | |
56 } | |
57 }; | |
58 | |
59 class BlueYellowLayerClient : public ContentLayerClient { | |
60 public: | |
61 BlueYellowLayerClient(gfx::Rect layer_rect) : layer_rect_(layer_rect) { } | |
62 | |
63 virtual void PaintContents(SkCanvas* canvas, | |
64 gfx::Rect clip, | |
65 gfx::RectF* opaque) OVERRIDE { | |
66 *opaque = gfx::RectF(layer_rect_.width(), layer_rect_.height()); | |
67 | |
68 // Skia uses BGRA ordering rather than RGBA. As the results will be later | |
69 // compared with a RGBA image, swap the red and blue components here. | |
70 SkPaint paint; | |
71 paint.setColor(SwapRB(SK_ColorBLUE)); | |
72 canvas->drawRect(SkRect::MakeWH(layer_rect_.width() / 2, | |
73 layer_rect_.height()), | |
74 paint); | |
75 | |
76 paint.setColor(SwapRB(SK_ColorYELLOW)); | |
77 canvas->drawRect( | |
78 SkRect::MakeXYWH(layer_rect_.width() / 2, 0, | |
danakj
2013/03/22 18:02:41
nit: 1 argument per line if they don't all fit on
Leandro Graciá Gil
2013/03/22 20:40:58
Done.
Leandro Graciá Gil
2013/03/22 20:40:58
Done.
| |
79 layer_rect_.width() / 2, layer_rect_.height()), | |
80 paint); | |
81 } | |
82 | |
83 static SkColor SwapRB(SkColor color) { | |
84 return SkColorSetARGB( | |
85 SkColorGetA(color), | |
86 SkColorGetB(color), | |
87 SkColorGetG(color), | |
88 SkColorGetR(color)); | |
89 } | |
90 | |
91 private: | |
92 gfx::Rect layer_rect_; | |
93 }; | |
94 | |
95 TEST_F(LayerTreeHostOnDemandRasterPixelTest, RasterPictureLayer) { | |
96 // Use multiple colors in a single layer to prevent bypassing on-demand | |
97 // rasterization if a single solid color is detected in picture analysis. | |
98 gfx::Rect layer_rect(200, 200); | |
99 BlueYellowLayerClient client(layer_rect); | |
100 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client); | |
101 | |
102 layer->SetIsDrawable(true); | |
103 layer->SetAnchorPoint(gfx::PointF()); | |
104 layer->SetBounds(layer_rect.size()); | |
105 layer->SetPosition(layer_rect.origin()); | |
106 | |
107 RunPixelTest(layer, base::FilePath(FILE_PATH_LITERAL("blue_yellow.png"))); | |
108 } | |
109 | |
110 } // namespace | |
111 } // namespace cc | |
112 | |
113 #endif // OS_ANDROID | |
OLD | NEW |