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

Unified Diff: cc/layers/picture_layer_impl.cc

Issue 2239883002: cc: Remove area calculation overflow in PictureLayerImpl::AppendQuads. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months 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/layers/picture_layer_impl.cc
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index b3bf1e6c697887673e7264381f1ab37214bcc42c..855c331ef35d871395498ad66089283356f5c995 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -292,8 +292,10 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
if (visible_geometry_rect.IsEmpty())
continue;
- append_quads_data->visible_layer_area +=
- visible_geometry_rect.width() * visible_geometry_rect.height();
+ int64_t visible_geometry_area =
+ static_cast<int64_t>(visible_geometry_rect.width()) *
+ visible_geometry_rect.height();
+ append_quads_data->visible_layer_area += visible_geometry_area;
bool has_draw_quad = false;
if (*iter && iter->draw_info().IsReadyToDraw()) {
@@ -357,10 +359,8 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
append_quads_data->num_missing_tiles++;
++missing_tile_count;
}
- int64_t checkerboarded_area =
- visible_geometry_rect.width() * visible_geometry_rect.height();
append_quads_data->checkerboarded_visible_content_area +=
- checkerboarded_area;
+ visible_geometry_area;
// Intersect checkerboard rect with interest rect to generate rect where
// we checkerboarded and has recording. The area where we don't have
// recording is not necessarily a Rect, and its area is calculated using
@@ -368,18 +368,18 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
gfx::Rect visible_rect_has_recording = visible_geometry_rect;
visible_rect_has_recording.Intersect(scaled_recorded_viewport);
int64_t checkerboarded_has_recording_area =
- visible_rect_has_recording.width() *
+ static_cast<int64_t>(visible_rect_has_recording.width()) *
visible_rect_has_recording.height();
append_quads_data->checkerboarded_needs_raster_content_area +=
checkerboarded_has_recording_area;
append_quads_data->checkerboarded_no_recording_content_area +=
- checkerboarded_area - checkerboarded_has_recording_area;
+ visible_geometry_area - checkerboarded_has_recording_area;
continue;
}
if (iter.resolution() != HIGH_RESOLUTION) {
append_quads_data->approximated_visible_content_area +=
- visible_geometry_rect.width() * visible_geometry_rect.height();
+ visible_geometry_area;
}
// If we have a draw quad, but it's not low resolution, then
« 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