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

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: addresses feedback (on top of https://codereview.chromium.org/11543013/) 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 gfx::RectF()); // mask_uv_rect
114
115 return quad.PassAs<DrawQuad>();
116 }
117
118
119 #if !defined(OS_ANDROID)
danakj 2012/12/13 20:39:50 just curious why this? did the build there not get
120 TEST_F(GLRendererPixelTest, simpleGreenRect) {
121 gfx::Rect rect(0, 0, 200, 200);
122
123 RenderPass::Id id(1, 1);
124 scoped_ptr<RenderPass> pass = CreateTestRenderPass(id, rect);
125
126 gfx::Transform content_to_target_transform;
127 scoped_ptr<SharedQuadState> shared_state =
128 CreateTestSharedQuadState(content_to_target_transform, rect);
88 129
89 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 130 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
90 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); 131 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN);
91 132
92 pass->quad_list.append(color_quad.PassAs<DrawQuad>()); 133 pass->quad_list.append(color_quad.PassAs<DrawQuad>());
93 134
94 RenderPassList pass_list; 135 RenderPassList pass_list;
95 pass_list.push_back(pass.get()); 136 pass_list.push_back(pass.get());
96 RenderPassIdHashMap pass_map; 137 RenderPassIdHashMap pass_map;
97 pass_map.add(id, pass.PassAs<RenderPass>()); 138 pass_map.add(id, pass.PassAs<RenderPass>());
98 139
99 renderer_->drawFrame(pass_list, pass_map); 140 renderer_->drawFrame(pass_list, pass_map);
100 141
101 SkBitmap bitmap; 142 EXPECT_TRUE(PixelsMatchReference(FilePath("green.png"), rect));
102 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 143 }
103 bitmap.allocPixels();
104 unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels());
105 renderer_->getFramebufferPixels(pixels, gfx::Rect(0, 0, 200, 200));
106 144
107 FilePath test_data_dir; 145 TEST_F(GLRendererPixelTest, RenderPassChangesSize) {
108 ASSERT_TRUE(PathService::Get(cc::test::DIR_TEST_DATA, &test_data_dir)); 146 gfx::Rect viewport_rect(200, 200);
109 // test::WritePNGFile(bitmap, test_data_dir.AppendASCII("green.png")); 147
110 EXPECT_TRUE(test::IsSameAsPNGFile(bitmap, 148 RenderPass::Id root_pass_id(1, 1);
111 test_data_dir.AppendASCII("green.png"))); 149 scoped_ptr<RenderPass> root_pass =
150 CreateTestRenderPass(root_pass_id, viewport_rect);
151
152 RenderPass::Id child_pass_id(2, 2);
153 gfx::Rect pass_rect(200, 200);
154 scoped_ptr<RenderPass> child_pass =
155 CreateTestRenderPass(child_pass_id, pass_rect);
156
157 gfx::Transform content_to_target_transform;
158 scoped_ptr<SharedQuadState> shared_state =
159 CreateTestSharedQuadState(content_to_target_transform, viewport_rect);
160
161 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
162 blue->SetNew(shared_state.get(), gfx::Rect(0, 0, 100, 200), SK_ColorBLUE);
163 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
164 yellow->SetNew(shared_state.get(), gfx::Rect(100, 0, 100, 200), SK_ColorYELLOW );
165
166 child_pass->quad_list.append(blue.PassAs<DrawQuad>());
167 child_pass->quad_list.append(yellow.PassAs<DrawQuad>());
168
169 scoped_ptr<SharedQuadState> pass_shared_state =
170 CreateTestSharedQuadState(gfx::Transform(), pass_rect);
171 root_pass->quad_list.append(
172 CreateTestRenderPassDrawQuad(pass_shared_state.get(),
173 pass_rect,
174 child_pass_id));
175
176 RenderPassList pass_list;
177 pass_list.push_back(child_pass.get());
178 pass_list.push_back(root_pass.get());
179
180 RenderPassIdHashMap pass_map;
181 pass_map.add(child_pass_id, child_pass.Pass());
182 pass_map.add(root_pass_id, root_pass.Pass());
183
184 renderer_->setEnlargePassTextureAmount(gfx::Vector2d(50, 75));
185 renderer_->decideRenderPassAllocationsForFrame(pass_list);
186 renderer_->drawFrame(pass_list, pass_map);
187
188 EXPECT_TRUE(PixelsMatchReference(FilePath("blue_yellow.png"), viewport_rect));
112 } 189 }
113 #endif 190 #endif
114 191
115 } // namespace 192 } // namespace
116 } // namespace cc 193 } // namespace cc
OLDNEW
« cc/gl_renderer.cc ('K') | « cc/gl_renderer.cc ('k') | cc/shader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698