| Index: cc/resources/picture_layer_tiling_set.cc
|
| diff --git a/cc/resources/picture_layer_tiling_set.cc b/cc/resources/picture_layer_tiling_set.cc
|
| index 96b47a66963e2cd6fbd985bd1a4ef6bd0d933975..b2b86b5464c03ea085ebb199c18f88eff231249d 100644
|
| --- a/cc/resources/picture_layer_tiling_set.cc
|
| +++ b/cc/resources/picture_layer_tiling_set.cc
|
| @@ -339,21 +339,36 @@ PictureLayerTilingSet::TilingRange PictureLayerTilingSet::GetTilingRange(
|
| low_res_range = TilingRange(i, i + 1);
|
| }
|
|
|
| + TilingRange range(0, 0);
|
| switch (type) {
|
| case HIGHER_THAN_HIGH_RES:
|
| - return TilingRange(0, high_res_range.start);
|
| + range = TilingRange(0, high_res_range.start);
|
| + break;
|
| case HIGH_RES:
|
| - return high_res_range;
|
| + range = high_res_range;
|
| + break;
|
| case BETWEEN_HIGH_AND_LOW_RES:
|
| - return TilingRange(high_res_range.end, low_res_range.start);
|
| + // TODO(vmpstr): This code assumes that high res tiling will come before
|
| + // low res tiling, however there are cases where this assumption is
|
| + // violated. As a result, it's better to be safe in these situations,
|
| + // since otherwise we can end up accessing a tiling that doesn't exist.
|
| + // See crbug.com/429397 for high res tiling appearing after low res
|
| + // tiling discussion/fixes.
|
| + if (high_res_range.start <= low_res_range.start)
|
| + range = TilingRange(high_res_range.end, low_res_range.start);
|
| + else
|
| + range = TilingRange(low_res_range.end, high_res_range.start);
|
| + break;
|
| case LOW_RES:
|
| - return low_res_range;
|
| + range = low_res_range;
|
| + break;
|
| case LOWER_THAN_LOW_RES:
|
| - return TilingRange(low_res_range.end, tilings_.size());
|
| + range = TilingRange(low_res_range.end, tilings_.size());
|
| + break;
|
| }
|
|
|
| - NOTREACHED();
|
| - return TilingRange(0, 0);
|
| + DCHECK_LE(range.start, range.end);
|
| + return range;
|
| }
|
|
|
| } // namespace cc
|
|
|