summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-14 08:31:31 +0000
committerbartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-14 08:32:37 +0000
commit586f5e863ec302ebe288af7924a8a2c1629ac47c (patch)
tree108bedaa8348cb02fa4cddbc5400963514c39c2b
parent758506bacb1e69b6e72ede7de9bf9adc2d780fb0 (diff)
downloadchromium_src-586f5e863ec302ebe288af7924a8a2c1629ac47c.zip
chromium_src-586f5e863ec302ebe288af7924a8a2c1629ac47c.tar.gz
chromium_src-586f5e863ec302ebe288af7924a8a2c1629ac47c.tar.bz2
Revert 289480 "Still produce quad when tile OOM and on demand ra..."
This caused failures on the Linux ASan bot: http://build.chromium.org/p/chromium.memory/builders/Linux%20ASan%20LSan%20Tests%20%283%29/builds/6417/steps/cc_unittests/logs/DelegatingRendererWithTileOOM > Still produce quad when tile OOM and on demand raster is not allowed > > When on demand raster is not allowed, when tiles are OOM, checkerboard > or solid color quad should be produced rather than nothing. > > Add a unittest for this exact same scenario. > > BUG=402321 > > Review URL: https://codereview.chromium.org/468983002 TBR=weiliangc@chromium.org Review URL: https://codereview.chromium.org/473813002 Cr-Commit-Position: refs/heads/master@{#289492} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289492 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--cc/layers/picture_layer_impl.cc8
-rw-r--r--cc/layers/picture_layer_impl_unittest.cc60
-rw-r--r--cc/resources/tile_manager.cc2
-rw-r--r--cc/resources/tile_manager.h3
4 files changed, 3 insertions, 70 deletions
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index d304b30..8dbfedd 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -281,7 +281,6 @@ void PictureLayerImpl::AppendQuads(
append_quads_data->visible_content_area +=
visible_geometry_rect.width() * visible_geometry_rect.height();
- bool has_draw_quad = false;
if (*iter && iter->IsReadyToDraw()) {
const ManagedTileState::TileVersion& tile_version =
iter->GetTileVersionForDrawing();
@@ -304,7 +303,6 @@ void PictureLayerImpl::AppendQuads(
texture_rect,
iter.texture_size(),
tile_version.contents_swizzled());
- has_draw_quad = true;
break;
}
case ManagedTileState::TileVersion::PICTURE_PILE_MODE: {
@@ -335,7 +333,6 @@ void PictureLayerImpl::AppendQuads(
iter->content_rect(),
iter->contents_scale(),
pile_);
- has_draw_quad = true;
break;
}
case ManagedTileState::TileVersion::SOLID_COLOR_MODE: {
@@ -346,13 +343,10 @@ void PictureLayerImpl::AppendQuads(
visible_geometry_rect,
tile_version.get_solid_color(),
false);
- has_draw_quad = true;
break;
}
}
- }
-
- if (!has_draw_quad) {
+ } else {
if (draw_checkerboard_for_missing_tiles()) {
CheckerboardDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 5f27b08..5eae6a6 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -3101,66 +3101,6 @@ TEST_F(PictureLayerImplTest, UpdateTilesForMasksWithNoVisibleContent) {
EXPECT_NE(0u, pending_mask_content->num_tilings());
}
-class PictureLayerImplTestWithDelegatingRenderer : public PictureLayerImplTest {
- public:
- PictureLayerImplTestWithDelegatingRenderer() : PictureLayerImplTest() {}
-
- virtual void InitializeRenderer() OVERRIDE {
- host_impl_.InitializeRenderer(
- FakeOutputSurface::CreateDelegating3d().PassAs<OutputSurface>());
- }
-};
-
-TEST_F(PictureLayerImplTestWithDelegatingRenderer,
- DelegatingRendererWithTileOOM) {
- // This test is added for crbug.com/402321, where quad should be produced when
- // raster on demand is not allowed and tile is OOM.
- gfx::Size tile_size = host_impl_.settings().default_tile_size;
- gfx::Size layer_bounds(1000, 1000);
-
- // Create tiles.
- scoped_refptr<FakePicturePileImpl> pending_pile =
- FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
- SetupPendingTree(pending_pile);
- pending_layer_->SetBounds(layer_bounds);
- host_impl_.SetViewportSize(layer_bounds);
- ActivateTree();
- host_impl_.active_tree()->UpdateDrawProperties();
- std::vector<Tile*> tiles =
- active_layer_->HighResTiling()->AllTilesForTesting();
- host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
-
- // Force tiles after max_tiles to be OOM. TileManager uses
- // GlobalStateThatImpactsTilesPriority from LayerTreeHostImpl, and we cannot
- // directly set state to host_impl_, so we set policy that would change the
- // state. We also need to update tree priority separately.
- GlobalStateThatImpactsTilePriority state;
- size_t max_tiles = 1;
- size_t memory_limit = max_tiles * 4 * tile_size.width() * tile_size.height();
- size_t resource_limit = max_tiles;
- ManagedMemoryPolicy policy(memory_limit,
- gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING,
- resource_limit);
- host_impl_.SetMemoryPolicy(policy);
- host_impl_.SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
- host_impl_.ManageTiles();
-
- MockOcclusionTracker<LayerImpl> occlusion_tracker;
- scoped_ptr<RenderPass> render_pass = RenderPass::Create();
- AppendQuadsData data;
- active_layer_->WillDraw(DRAW_MODE_HARDWARE, NULL);
- active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
- active_layer_->DidDraw(NULL);
-
- // Even when OOM, quads should be produced, and should be different material
- // from quads with resource.
- EXPECT_LT(max_tiles, render_pass->quad_list.size());
- EXPECT_EQ(DrawQuad::Material::TILED_CONTENT,
- render_pass->quad_list.front()->material);
- EXPECT_EQ(DrawQuad::Material::SOLID_COLOR,
- render_pass->quad_list.back()->material);
-}
-
class OcclusionTrackingSettings : public ImplSidePaintingSettings {
public:
OcclusionTrackingSettings() { use_occlusion_for_tile_prioritization = true; }
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index 2ef8d84..452d9b4 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -1026,7 +1026,7 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) {
ManagedTileState& mts = tile->managed_state();
scoped_ptr<ScopedResource> resource =
- resource_pool_->AcquireResource(tile->size());
+ resource_pool_->AcquireResource(tile->tile_size_.size());
const ScopedResource* const_resource = resource.get();
// Create and queue all image decode tasks that this tile depends on.
diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h
index eec5629..fa5c650 100644
--- a/cc/resources/tile_manager.h
+++ b/cc/resources/tile_manager.h
@@ -123,8 +123,7 @@ class CC_EXPORT TileManager : public RasterizerClient,
ManagedTileState::TileVersion& tile_version =
mts.tile_versions[HIGH_QUALITY_RASTER_MODE];
- tile_version.resource_ =
- resource_pool_->AcquireResource(tiles[i]->size());
+ tile_version.resource_ = resource_pool_->AcquireResource(gfx::Size(1, 1));
bytes_releasable_ += BytesConsumedIfAllocated(tiles[i]);
++resources_releasable_;