Chromium Code Reviews| Index: cc/picture_layer_impl.cc |
| diff --git a/cc/picture_layer_impl.cc b/cc/picture_layer_impl.cc |
| index e4bb4441ad584481392cd28348ba3271cd361691..ac34f5451cc60754ac9436f052cfd66120f75549 100644 |
| --- a/cc/picture_layer_impl.cc |
| +++ b/cc/picture_layer_impl.cc |
| @@ -114,7 +114,7 @@ void PictureLayerImpl::appendQuads(QuadSink& quadSink, |
| ++iter) { |
| SkColor color; |
| float width; |
| - if (*iter && iter->GetResourceId()) { |
| + if (*iter && iter->drawing_info().IsReadyToDraw()) { |
| if (iter->priority(ACTIVE_TREE).resolution == HIGH_RESOLUTION) { |
| color = DebugColors::HighResTileBorderColor(); |
| width = DebugColors::HighResTileBorderWidth(layerTreeImpl()); |
| @@ -152,13 +152,9 @@ void PictureLayerImpl::appendQuads(QuadSink& quadSink, |
| layerDeviceAlignment); |
| iter; |
| ++iter) { |
| - ResourceProvider::ResourceId resource = 0; |
| - if (*iter) |
| - resource = iter->GetResourceId(); |
| gfx::Rect geometry_rect = iter.geometry_rect(); |
| - |
| - if (!resource) { |
| + if (!*iter || !iter->drawing_info().IsReadyToDraw()) { |
|
nduca
2013/03/12 19:44:34
i'm concerned about you moving the !*iter below th
enne (OOO)
2013/03/12 19:48:04
This is safe. All iterators have a geometry rect,
|
| if (drawCheckerboardForMissingTiles()) { |
| // TODO(enne): Figure out how to show debug "invalidated checker" color |
| scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create(); |
| @@ -177,22 +173,41 @@ void PictureLayerImpl::appendQuads(QuadSink& quadSink, |
| continue; |
| } |
| - if (iter->contents_scale() != ideal_contents_scale_) |
| - appendQuadsData.hadIncompleteTile = true; |
| - |
| - gfx::RectF texture_rect = iter.texture_rect(); |
| - gfx::Rect opaque_rect = iter->opaque_rect(); |
| - opaque_rect.Intersect(content_rect); |
| - |
| - scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create(); |
| - quad->SetNew(sharedQuadState, |
| - geometry_rect, |
| - opaque_rect, |
| - resource, |
| - texture_rect, |
| - iter.texture_size(), |
| - iter->contents_swizzled()); |
| - quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData); |
| + const TileDrawingInfo& drawing_info = iter->drawing_info(); |
| + switch (drawing_info.mode()) { |
| + case TileDrawingInfo::TEXTURE_MODE: { |
| + if (iter->contents_scale() != ideal_contents_scale_) |
| + appendQuadsData.hadIncompleteTile = true; |
| + |
| + gfx::RectF texture_rect = iter.texture_rect(); |
| + gfx::Rect opaque_rect = iter->opaque_rect(); |
| + opaque_rect.Intersect(content_rect); |
| + |
| + scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create(); |
| + quad->SetNew(sharedQuadState, |
| + geometry_rect, |
| + opaque_rect, |
| + drawing_info.get_resource_id(), |
| + texture_rect, |
| + iter.texture_size(), |
| + drawing_info.contents_swizzled()); |
| + quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData); |
| + break; |
| + } |
| + case TileDrawingInfo::SOLID_COLOR_MODE: { |
| + scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
| + quad->SetNew(sharedQuadState, |
| + geometry_rect, |
| + drawing_info.get_solid_color()); |
| + break; |
| + } |
| + case TileDrawingInfo::TRANSPARENT_MODE: |
| + break; |
| + case TileDrawingInfo::PICTURE_PILE_MODE: |
| + // TODO: crbug.com/173011 would fill this part in. |
| + default: |
| + NOTREACHED(); |
| + } |
| if (!seen_tilings.size() || seen_tilings.back() != iter.CurrentTiling()) |
| seen_tilings.push_back(iter.CurrentTiling()); |
| @@ -460,12 +475,14 @@ ResourceProvider::ResourceId PictureLayerImpl::contentsResourceId() const { |
| iter; |
| ++iter) { |
| // Mask resource not ready yet. |
| - if (!*iter || !iter->GetResourceId()) |
| + if (!*iter || |
| + iter->drawing_info().mode() != TileDrawingInfo::TEXTURE_MODE || |
| + !iter->drawing_info().IsReadyToDraw()) |
| return 0; |
| // Masks only supported if they fit on exactly one tile. |
| if (iter.geometry_rect() != content_rect) |
| return 0; |
| - return iter->GetResourceId(); |
| + return iter->drawing_info().get_resource_id(); |
| } |
| return 0; |
| } |
| @@ -509,7 +526,7 @@ bool PictureLayerImpl::areVisibleResourcesReady() const { |
| iter; |
| ++iter) { |
| // A null tile (i.e. no recording) is considered "ready". |
| - if (!*iter || iter->GetResourceId()) |
| + if (!*iter || iter->drawing_info().IsReadyToDraw()) |
| missing_region.Subtract(iter.geometry_rect()); |
| } |
| } |