diff options
author | bartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-14 08:31:31 +0000 |
---|---|---|
committer | bartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-14 08:32:37 +0000 |
commit | 586f5e863ec302ebe288af7924a8a2c1629ac47c (patch) | |
tree | 108bedaa8348cb02fa4cddbc5400963514c39c2b | |
parent | 758506bacb1e69b6e72ede7de9bf9adc2d780fb0 (diff) | |
download | chromium_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.cc | 8 | ||||
-rw-r--r-- | cc/layers/picture_layer_impl_unittest.cc | 60 | ||||
-rw-r--r-- | cc/resources/tile_manager.cc | 2 | ||||
-rw-r--r-- | cc/resources/tile_manager.h | 3 |
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_; |