Chromium Code Reviews| Index: cc/output/software_renderer_unittest.cc |
| diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc |
| index 7f689a8eba169d23c6c8376964b119f796593a30..bd8daa7fb43aa87f312e3ece9d1c3b637903aa36 100644 |
| --- a/cc/output/software_renderer_unittest.cc |
| +++ b/cc/output/software_renderer_unittest.cc |
| @@ -59,10 +59,21 @@ class SoftwareRendererTest : public testing::Test, public RendererClient { |
| scoped_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list, |
| float device_scale_factor, |
| gfx::Rect device_viewport_rect) { |
| + CHECK(!list->empty()); |
| + return DrawAndCopyOutput(list, |
| + list->size() - 1, |
| + device_scale_factor, |
| + device_viewport_rect); |
| + } |
| + |
| + scoped_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list, |
| + size_t index, |
| + float device_scale_factor, |
| + gfx::Rect device_viewport_rect) { |
| scoped_ptr<SkBitmap> bitmap_result; |
| base::RunLoop loop; |
| - list->back()->copy_requests.push_back( |
| + list->at(index)->copy_requests.push_back( |
| CopyOutputRequest::CreateBitmapRequest( |
| base::Bind(&SoftwareRendererTest::SaveBitmapResult, |
| base::Unretained(&bitmap_result), |
| @@ -135,7 +146,7 @@ TEST_F(SoftwareRendererTest, SolidColorQuad) { |
| scoped_ptr<SkBitmap> output = |
| DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| EXPECT_EQ(outer_rect.width(), output->info().fWidth); |
| - EXPECT_EQ(outer_rect.width(), output->info().fHeight); |
| + EXPECT_EQ(outer_rect.height(), output->info().fHeight); |
| EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0)); |
| EXPECT_EQ(SK_ColorYELLOW, |
| @@ -233,7 +244,7 @@ TEST_F(SoftwareRendererTest, TileQuad) { |
| scoped_ptr<SkBitmap> output = |
| DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| EXPECT_EQ(outer_rect.width(), output->info().fWidth); |
| - EXPECT_EQ(outer_rect.width(), output->info().fHeight); |
| + EXPECT_EQ(outer_rect.height(), output->info().fHeight); |
| EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0)); |
| EXPECT_EQ(SK_ColorYELLOW, |
| @@ -308,7 +319,7 @@ TEST_F(SoftwareRendererTest, TileQuadVisibleRect) { |
| scoped_ptr<SkBitmap> output = |
| DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| EXPECT_EQ(tile_rect.width(), output->info().fWidth); |
| - EXPECT_EQ(tile_rect.width(), output->info().fHeight); |
| + EXPECT_EQ(tile_rect.height(), output->info().fHeight); |
| // Check portion of tile not in visible rect isn't drawn. |
| const unsigned int kTransparent = SK_ColorTRANSPARENT; |
| @@ -350,7 +361,7 @@ TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { |
| scoped_ptr<SkBitmap> output = |
| DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); |
| - EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); |
| + EXPECT_EQ(device_viewport_rect.height(), output->info().fHeight); |
| EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); |
| EXPECT_EQ(SK_ColorGREEN, |
| @@ -372,7 +383,7 @@ TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { |
| output = DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); |
| - EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); |
| + EXPECT_EQ(device_viewport_rect.height(), output->info().fHeight); |
| // If we didn't clear, the borders should still be green. |
| EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); |
| @@ -417,7 +428,7 @@ TEST_F(SoftwareRendererTest, RenderPassVisibleRect) { |
| scoped_ptr<SkBitmap> output = |
| DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); |
| - EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); |
| + EXPECT_EQ(device_viewport_rect.height(), output->info().fHeight); |
| EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); |
| EXPECT_EQ(SK_ColorGREEN, |
| @@ -439,5 +450,48 @@ TEST_F(SoftwareRendererTest, RenderPassVisibleRect) { |
| interior_visible_rect.bottom() - 1)); |
| } |
| +TEST_F(SoftwareRendererTest, DoubleLockTextureCrash) { |
|
danakj
2015/02/05 21:19:38
I'm glad GL renderer doesn't have this problem, bu
|
| + float device_scale_factor = 1.f; |
| + gfx::Rect device_viewport_rect(0, 0, 100, 100); |
| + InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); |
| + |
| + RenderPassList list; |
| + |
| + gfx::Rect first_rect(0, 0, 50, 50); |
| + RenderPassId first_pass_id(3, 2); |
| + TestRenderPass* first_pass = |
| + AddRenderPass(&list, first_pass_id, first_rect, gfx::Transform()); |
| + AddQuad(first_pass, first_rect, SK_ColorRED); |
| + |
| + gfx::Rect second_rect(50, 50, 50, 50); |
| + RenderPassId second_pass_id(2, 1); |
| + TestRenderPass* second_pass = |
| + AddRenderPass(&list, second_pass_id, second_rect, gfx::Transform()); |
| + AddQuad(second_pass, second_rect, SK_ColorBLUE); |
| + |
| + RenderPassId root_clear_pass_id(1, 0); |
| + TestRenderPass* root_clear_pass = AddRenderPass( |
| + &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); |
| + AddRenderPassQuad(root_clear_pass, first_pass); |
| + AddRenderPassQuad(root_clear_pass, second_pass); |
| + AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); |
| + |
| + renderer()->DecideRenderPassAllocationsForFrame(list); |
| + |
| + scoped_ptr<SkBitmap> output = |
| + DrawAndCopyOutput(&list, 1, device_scale_factor, device_viewport_rect); |
| + |
| + EXPECT_EQ(second_rect.width(), output->info().fWidth); |
| + EXPECT_EQ(second_rect.height(), output->info().fHeight); |
| + |
| + EXPECT_EQ(SK_ColorBLUE, output->getColor(0, 0)); |
| + EXPECT_EQ(SK_ColorBLUE, |
| + output->getColor(second_rect.width() - 1, |
| + second_rect.height() - 1)); |
| + EXPECT_EQ(SK_ColorBLUE, |
| + output->getColor(second_rect.width() / 2, |
| + second_rect.height() / 2)); |
| +} |
| + |
| } // namespace |
| } // namespace cc |