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

Side by Side Diff: cc/gl_renderer_pixeltest.cc

Issue 11420079: Allow using a larger-than-necessary texture as cached render pass backing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: seems to work Created 8 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/gl_renderer.h" 5 #include "cc/gl_renderer.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "cc/draw_quad.h" 9 #include "cc/draw_quad.h"
10 #include "cc/prioritized_resource_manager.h" 10 #include "cc/prioritized_resource_manager.h"
(...skipping 25 matching lines...) Expand all
36 } 36 }
37 virtual void didLoseOutputSurface() OVERRIDE { } 37 virtual void didLoseOutputSurface() OVERRIDE { }
38 virtual void onSwapBuffersComplete() OVERRIDE { } 38 virtual void onSwapBuffersComplete() OVERRIDE { }
39 virtual void setFullRootLayerDamage() OVERRIDE { } 39 virtual void setFullRootLayerDamage() OVERRIDE { }
40 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy&) OVERRIDE {} 40 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy&) OVERRIDE {}
41 virtual void enforceManagedMemoryPolicy( 41 virtual void enforceManagedMemoryPolicy(
42 const ManagedMemoryPolicy&) OVERRIDE {} 42 const ManagedMemoryPolicy&) OVERRIDE {}
43 virtual bool hasImplThread() const OVERRIDE { return false; } 43 virtual bool hasImplThread() const OVERRIDE { return false; }
44 }; 44 };
45 45
46
47 class GLRendererPixelTest : public testing::Test { 46 class GLRendererPixelTest : public testing::Test {
48 protected: 47 protected:
49 GLRendererPixelTest() {} 48 GLRendererPixelTest() {}
50 49
51 virtual void SetUp() { 50 virtual void SetUp() {
52 gfx::InitializeGLBindings(gfx::kGLImplementationOSMesaGL); 51 gfx::InitializeGLBindings(gfx::kGLImplementationOSMesaGL);
53 output_surface_ = PixelTestOutputSurface::create(); 52 output_surface_ = PixelTestOutputSurface::create();
54 resource_provider_ = ResourceProvider::create(output_surface_.get()); 53 resource_provider_ = ResourceProvider::create(output_surface_.get());
55 renderer_ = GLRenderer::create(&fake_client_, resource_provider_.get()); 54 renderer_ = GLRenderer::create(&fake_client_, resource_provider_.get());
56 } 55 }
57 56
57 bool PixelsMatchReference(FilePath ref_file, gfx::Rect viewport_rect) {
58 SkBitmap bitmap;
59 bitmap.setConfig(SkBitmap::kARGB_8888_Config,
60 viewport_rect.width(), viewport_rect.height());
61 bitmap.allocPixels();
62 unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels());
63 renderer_->getFramebufferPixels(pixels, viewport_rect);
64
65 FilePath test_data_dir;
66 if (!PathService::Get(cc::test::DIR_TEST_DATA, &test_data_dir))
67 return false;
68
69 return test::IsSameAsPNGFile(bitmap, test_data_dir.Append(ref_file));
70 }
71
58 scoped_ptr<OutputSurface> output_surface_; 72 scoped_ptr<OutputSurface> output_surface_;
59 FakeRendererClient fake_client_; 73 FakeRendererClient fake_client_;
60 scoped_ptr<ResourceProvider> resource_provider_; 74 scoped_ptr<ResourceProvider> resource_provider_;
61 scoped_ptr<GLRenderer> renderer_; 75 scoped_ptr<GLRenderer> renderer_;
62 }; 76 };
63 77
64 #if !defined(OS_ANDROID) 78 scoped_ptr<RenderPass> CreateTestRenderPass(RenderPass::Id id, gfx::Rect rect) {
65 TEST_F(GLRendererPixelTest, simpleGreenRect) { 79 scoped_ptr<RenderPass> pass = RenderPass::Create();
66 gfx::Rect rect(0, 0, 200, 200);
67
68 RenderPass::Id id(1, 1);
69 const gfx::Rect output_rect = rect; 80 const gfx::Rect output_rect = rect;
70 const gfx::RectF damage_rect = rect; 81 const gfx::RectF damage_rect = rect;
71 const gfx::Transform transform_to_root_target; 82 const gfx::Transform transform_to_root_target;
72 scoped_ptr<RenderPass> pass = RenderPass::Create();
73 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); 83 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target);
84 return pass.Pass();
85 }
74 86
75 const gfx::Transform content_to_target_transform; 87 scoped_ptr<SharedQuadState> CreateTestSharedQuadState(
88 gfx::Transform content_to_target_transform, gfx::Rect rect) {
76 const gfx::Rect visible_content_rect = rect; 89 const gfx::Rect visible_content_rect = rect;
77 const gfx::Rect clipped_rect_in_target = rect; 90 const gfx::Rect clipped_rect_in_target = rect;
78 const gfx::Rect clip_rect = rect; 91 const gfx::Rect clip_rect = rect;
79 const bool is_clipped = false; 92 const bool is_clipped = false;
80 const float opacity = 1.0f; 93 const float opacity = 1.0f;
81 scoped_ptr<SharedQuadState> shared_state = SharedQuadState::Create(); 94 scoped_ptr<SharedQuadState> shared_state = SharedQuadState::Create();
82 shared_state->SetAll(content_to_target_transform, 95 shared_state->SetAll(content_to_target_transform,
83 visible_content_rect, 96 visible_content_rect,
84 clipped_rect_in_target, 97 clipped_rect_in_target,
85 clip_rect, 98 clip_rect,
86 is_clipped, 99 is_clipped,
87 opacity); 100 opacity);
101 return shared_state.Pass();
102 }
103
104 scoped_ptr<DrawQuad> CreateTestRenderPassDrawQuad(
105 SharedQuadState* shared_state, gfx::Rect rect, RenderPass::Id pass_id) {
106 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
107 quad->SetNew(shared_state,
108 rect,
109 pass_id,
110 false, // is_replica
111 0, // mask_resource_id
112 rect, // contents_changed_since_last_frame
113 0, // mask_tex_coord_scale_x
enne (OOO) 2012/12/12 23:41:54 I don't think this compiles.
jamesr 2012/12/13 01:15:06 Trybots agree! I think I'll rework this test anyw
114 0, // mask_tex_coord_scale_y
115 0, // mask_tex_coord_scale_offset_x
116 0); // mask_tex_coord_scale_offset_y
117
118 return quad.PassAs<DrawQuad>();
119 }
120
121
122 #if !defined(OS_ANDROID)
123 TEST_F(GLRendererPixelTest, simpleGreenRect) {
124 gfx::Rect rect(0, 0, 200, 200);
125
126 RenderPass::Id id(1, 1);
127 scoped_ptr<RenderPass> pass = CreateTestRenderPass(id, rect);
128
129 gfx::Transform content_to_target_transform;
130 scoped_ptr<SharedQuadState> shared_state =
131 CreateTestSharedQuadState(content_to_target_transform, rect);
88 132
89 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 133 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
90 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); 134 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN);
91 135
92 pass->quad_list.append(color_quad.PassAs<DrawQuad>()); 136 pass->quad_list.append(color_quad.PassAs<DrawQuad>());
93 137
94 RenderPassList pass_list; 138 RenderPassList pass_list;
95 pass_list.push_back(pass.get()); 139 pass_list.push_back(pass.get());
96 RenderPassIdHashMap pass_map; 140 RenderPassIdHashMap pass_map;
97 pass_map.add(id, pass.PassAs<RenderPass>()); 141 pass_map.add(id, pass.PassAs<RenderPass>());
98 142
99 renderer_->drawFrame(pass_list, pass_map); 143 renderer_->drawFrame(pass_list, pass_map);
100 144
101 SkBitmap bitmap; 145 EXPECT_TRUE(PixelsMatchReference(FilePath("green.png"), rect));
102 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 146 }
103 bitmap.allocPixels();
104 unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels());
105 renderer_->getFramebufferPixels(pixels, gfx::Rect(0, 0, 200, 200));
106 147
107 FilePath test_data_dir; 148 void DrawFrameWithPassSize(gfx::Size pass_size, DirectRenderer* renderer) {
108 ASSERT_TRUE(PathService::Get(cc::test::DIR_TEST_DATA, &test_data_dir)); 149 gfx::Rect rect(0, 0, 200, 200);
109 // test::WritePNGFile(bitmap, test_data_dir.AppendASCII("green.png")); 150
110 EXPECT_TRUE(test::IsSameAsPNGFile(bitmap, 151 RenderPass::Id root_pass_id(1, 1);
111 test_data_dir.AppendASCII("green.png"))); 152 scoped_ptr<RenderPass> root_pass =
153 CreateTestRenderPass(root_pass_id, rect);
154
155 RenderPass::Id child_pass_id(2, 2);
156 gfx::Rect pass_rect(pass_size);
157 scoped_ptr<RenderPass> child_pass =
158 CreateTestRenderPass(child_pass_id, pass_rect);
159
160 gfx::Transform content_to_target_transform;
161 //content_to_target_transform.Scale(0.5, 0.5);
162 scoped_ptr<SharedQuadState> shared_state =
163 CreateTestSharedQuadState(content_to_target_transform, rect);
164
165 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
166 blue->SetNew(shared_state.get(), gfx::Rect(0, 0, 100, 200), SK_ColorBLUE);
167 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
168 yellow->SetNew(shared_state.get(), gfx::Rect(100, 0, 100, 200), SK_ColorYELLOW );
169
170 child_pass->quad_list.append(blue.PassAs<DrawQuad>());
171 child_pass->quad_list.append(yellow.PassAs<DrawQuad>());
172
173 scoped_ptr<SharedQuadState> pass_shared_state =
174 CreateTestSharedQuadState(gfx::Transform(), pass_rect);
175 root_pass->quad_list.append(
176 CreateTestRenderPassDrawQuad(pass_shared_state.get(),
177 pass_rect,
178 child_pass_id));
179
180 RenderPassList pass_list;
181 pass_list.push_back(child_pass.get());
182 pass_list.push_back(root_pass.get());
183
184 RenderPassIdHashMap pass_map;
185 pass_map.add(child_pass_id, child_pass.Pass());
186 pass_map.add(root_pass_id, root_pass.Pass());
187
188 renderer->decideRenderPassAllocationsForFrame(pass_list);
189 renderer->drawFrame(pass_list, pass_map);
190 }
191
192 TEST_F(GLRendererPixelTest, RenderPassChangesSize) {
193 gfx::Rect viewport_rect(200, 200);
194
195 DrawFrameWithPassSize(gfx::Size(400, 400), renderer_.get());
196
197 DrawFrameWithPassSize(gfx::Size(200, 200), renderer_.get());
198
199 EXPECT_TRUE(PixelsMatchReference(FilePath("blue_yellow.png"), viewport_rect));
112 } 200 }
113 #endif 201 #endif
114 202
115 } // namespace 203 } // namespace
116 } // namespace cc 204 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698