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

Unified Diff: cc/surfaces/surface_aggregator.cc

Issue 1883533008: Don't DCHECK on aggregating quads with noninvertible transforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 | cc/surfaces/surface_aggregator_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/surface_aggregator.cc
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc
index 1ef8fbe8a6d8e3ce95cb3cadeda56f736faa8939..4b18aa2cdf4fd214e90477f3e2ab239aea60268c 100644
--- a/cc/surfaces/surface_aggregator.cc
+++ b/cc/surfaces/surface_aggregator.cc
@@ -313,18 +313,22 @@ SharedQuadState* SurfaceAggregator::CopySharedQuadState(
return copy_shared_quad_state;
}
-static gfx::Rect CalculateQuadSpaceDamageRect(
+// Returns true if the damage rect is valid.
+static bool CalculateQuadSpaceDamageRect(
const gfx::Transform& quad_to_target_transform,
const gfx::Transform& target_to_root_transform,
- const gfx::Rect& root_damage_rect) {
+ const gfx::Rect& root_damage_rect,
+ gfx::Rect* quad_space_damage_rect) {
gfx::Transform quad_to_root_transform(target_to_root_transform,
quad_to_target_transform);
gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization);
bool inverse_valid = quad_to_root_transform.GetInverse(&inverse_transform);
- DCHECK(inverse_valid);
+ if (!inverse_valid)
+ return false;
- return MathUtil::ProjectEnclosingClippedRect(inverse_transform,
- root_damage_rect);
+ *quad_space_damage_rect = MathUtil::ProjectEnclosingClippedRect(
+ inverse_transform, root_damage_rect);
+ return true;
}
void SurfaceAggregator::CopyQuadsToPass(
@@ -344,6 +348,7 @@ void SurfaceAggregator::CopyQuadsToPass(
// TODO(jbauman): This rect may contain unnecessary area if
// transform isn't axis-aligned.
gfx::Rect damage_rect_in_quad_space;
+ bool damage_rect_in_quad_space_valid = false;
#if DCHECK_IS_ON()
// If quads have come in with SharedQuadState out of order, or when quads have
@@ -370,10 +375,11 @@ void SurfaceAggregator::CopyQuadsToPass(
gfx::Transform quad_to_target_transform(
target_transform,
quad->shared_quad_state->quad_to_target_transform);
- damage_rect_in_quad_space = CalculateQuadSpaceDamageRect(
+ damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect(
quad_to_target_transform, dest_pass->transform_to_root_target,
- root_damage_rect_);
- if (!damage_rect_in_quad_space.Intersects(quad->visible_rect))
+ root_damage_rect_, &damage_rect_in_quad_space);
+ if (damage_rect_in_quad_space_valid &&
danakj 2016/04/13 22:32:46 Do you want to draw quads with non-invertible dama
+ !damage_rect_in_quad_space.Intersects(quad->visible_rect))
continue;
}
HandleSurfaceQuad(surface_quad, target_transform, clip_rect, dest_pass);
@@ -383,14 +389,16 @@ void SurfaceAggregator::CopyQuadsToPass(
quad->shared_quad_state, target_transform, clip_rect, dest_pass);
last_copied_source_shared_quad_state = quad->shared_quad_state;
if (aggregate_only_damaged_ && !has_copy_requests_) {
- damage_rect_in_quad_space = CalculateQuadSpaceDamageRect(
+ damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect(
dest_shared_quad_state->quad_to_target_transform,
- dest_pass->transform_to_root_target, root_damage_rect_);
+ dest_pass->transform_to_root_target, root_damage_rect_,
+ &damage_rect_in_quad_space);
}
}
if (ignore_undamaged) {
- if (!damage_rect_in_quad_space.Intersects(quad->visible_rect))
+ if (damage_rect_in_quad_space_valid &&
+ !damage_rect_in_quad_space.Intersects(quad->visible_rect))
continue;
}
« no previous file with comments | « no previous file | cc/surfaces/surface_aggregator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698