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

Unified Diff: cc/resources/picture_layer_tiling_set.cc

Issue 694143002: cc: Ensure that eviction tiling range is sane. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..b76d31f4841d436c1d7744ba3370754358e2fe3e 100644
--- a/cc/resources/picture_layer_tiling_set.cc
+++ b/cc/resources/picture_layer_tiling_set.cc
@@ -339,21 +339,33 @@ 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 tile that doesn't exist. See
+ // crbug.com/429397 for high res tiling appearing after low res tiling.
+ 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;
reveman 2014/11/01 12:25:34 missing a break statement here
vmpstr 2014/11/01 18:08:49 Done.
case LOWER_THAN_LOW_RES:
- return TilingRange(low_res_range.end, tilings_.size());
+ range = TilingRange(low_res_range.end, tilings_.size());
reveman 2014/11/01 12:25:34 and I think you should add a break statement here
vmpstr 2014/11/01 18:08:49 Done.
}
- NOTREACHED();
- return TilingRange(0, 0);
+ DCHECK_LE(range.start, range.end);
+ return range;
}
} // namespace cc
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698