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

Unified Diff: cc/layers/layer_impl.cc

Issue 1479883002: cc: Fix draw transform computation for non-drawn layers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove LayerImpl::draw_transform() Created 5 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
Index: cc/layers/layer_impl.cc
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index 024ba5abca6c9e9645d5b444223f37b2083273c3..499230e46e7a41e51fd6ba387af84baf270866ba 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -22,6 +22,7 @@
#include "cc/output/copy_output_request.h"
#include "cc/quads/debug_border_draw_quad.h"
#include "cc/quads/render_pass.h"
+#include "cc/trees/draw_property_utils.h"
#include "cc/trees/layer_tree_host_common.h"
#include "cc/trees/layer_tree_impl.h"
#include "cc/trees/layer_tree_settings.h"
@@ -306,7 +307,7 @@ void LayerImpl::TakeCopyRequestsAndTransformToTarget(
gfx::Rect request_in_layer_space = request->area();
request_in_layer_space.Intersect(gfx::Rect(bounds()));
request->set_area(MathUtil::MapEnclosingClippedRect(
- draw_properties_.target_space_transform, request_in_layer_space));
+ DrawTransform(), request_in_layer_space));
}
layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this);
@@ -701,7 +702,7 @@ base::DictionaryValue* LayerImpl::LayerTreeAsJson() const {
list->AppendDouble(position_.y());
result->Set("Position", list);
- const gfx::Transform& gfx_transform = draw_properties_.target_space_transform;
+ const gfx::Transform& gfx_transform = DrawTransform();
double transform[16];
gfx_transform.matrix().asColMajord(transform);
list = new base::ListValue;
@@ -1773,18 +1774,34 @@ void LayerImpl::SetHasRenderSurface(bool should_have_render_surface) {
render_surface_.reset();
}
+gfx::Transform LayerImpl::DrawTransform() const {
+ // Only drawn layers have up-to-date draw properties when property trees are
+ // enabled.
+ if (layer_tree_impl()->settings().use_property_trees &&
+ !IsDrawnRenderSurfaceLayerListMember()) {
+ if (layer_tree_impl()->property_trees()->non_root_surfaces_enabled) {
+ return DrawTransformFromPropertyTrees(
+ this, layer_tree_impl()->property_trees()->transform_tree);
+ } else {
+ return ScreenSpaceTransformFromPropertyTrees(
+ this, layer_tree_impl()->property_trees()->transform_tree);
+ }
+ }
+
+ return draw_properties().target_space_transform;
+}
+
Region LayerImpl::GetInvalidationRegion() {
return Region(update_rect_);
}
gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const {
- return MathUtil::MapEnclosingClippedRect(
- draw_properties_.target_space_transform, gfx::Rect(bounds()));
+ return MathUtil::MapEnclosingClippedRect(DrawTransform(),
+ gfx::Rect(bounds()));
}
gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const {
- gfx::Transform scaled_draw_transform =
- draw_properties_.target_space_transform;
+ gfx::Transform scaled_draw_transform = DrawTransform();
scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale);
gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale);
return MathUtil::MapEnclosingClippedRect(scaled_draw_transform,
@@ -1804,10 +1821,8 @@ float LayerImpl::GetIdealContentsScale() const {
return default_scale;
}
- // TODO(enne): the transform needs to come from property trees instead of
- // draw properties.
gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents(
- draw_properties().target_space_transform, default_scale);
+ DrawTransform(), default_scale);
return std::max(transform_scales.x(), transform_scales.y());
}

Powered by Google App Engine
This is Rietveld 408576698