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

Unified Diff: cc/output/software_renderer_unittest.cc

Issue 899183003: Fix double lock of texture resource in software renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove Pass() Created 5 years, 10 months 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 side-by-side diff with in-line comments
Download patch
« cc/output/software_renderer.cc ('K') | « cc/output/software_renderer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« cc/output/software_renderer.cc ('K') | « cc/output/software_renderer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698