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 |