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

Unified Diff: cc/layers/picture_layer.cc

Issue 2559413002: [1/5] Pass transformed rasterization policy from Blink (Closed)
Patch Set: Created 4 years 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/picture_layer.cc
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc
index 8ed4c8b768a36055971a4d5a1da27b8d7efeadf8..27ec2d57c1a6f8c7202fd4ad35f51a359b69cb08 100644
--- a/cc/layers/picture_layer.cc
+++ b/cc/layers/picture_layer.cc
@@ -16,6 +16,7 @@
#include "cc/proto/layer.pb.h"
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/layer_tree_impl.h"
+#include "cc/trees/transform_node.h"
#include "third_party/skia/include/core/SkPictureRecorder.h"
#include "ui/gfx/geometry/rect_conversions.h"
@@ -59,6 +60,7 @@ void PictureLayer::PushPropertiesTo(LayerImpl* base_layer) {
DropRecordingSourceContentIfInvalid();
layer_impl->SetNearestNeighbor(picture_layer_inputs_.nearest_neighbor);
+ layer_impl->SetUseTransformedRasterization(UseTransformedRasterization());
// Preserve lcd text settings from the current raster source.
bool can_use_lcd_text = layer_impl->RasterSourceUsesLCDText();
@@ -198,6 +200,14 @@ void PictureLayer::SetNearestNeighbor(bool nearest_neighbor) {
SetNeedsCommit();
}
+void PictureLayer::SetAllowTransformedRasterization(bool allowed) {
+ if (picture_layer_inputs_.allow_transformed_rasterization == allowed)
+ return;
+
+ picture_layer_inputs_.allow_transformed_rasterization = allowed;
+ SetNeedsCommit();
+}
+
bool PictureLayer::HasDrawableContent() const {
return picture_layer_inputs_.client && Layer::HasDrawableContent();
}
@@ -262,6 +272,27 @@ void PictureLayer::DropRecordingSourceContentIfInvalid() {
}
}
+bool PictureLayer::UseTransformedRasterization() const {
+ if (!picture_layer_inputs_.allow_transformed_rasterization)
+ return false;
+
+ const TransformTree &transform_tree = GetLayerTree()->property_trees()->transform_tree;
+ DCHECK(!transform_tree.needs_update());
+ if (transform_tree.Node(transform_tree_index())->to_screen_is_potentially_animated)
+ return false;
+
+ const gfx::Transform& to_screen = transform_tree.ToScreen(transform_tree_index());
+ if (!to_screen.IsScaleOrTranslation())
+ return false;
+
+ float origin_x = to_screen.matrix().getFloat(0, 3) + offset_to_transform_parent().x();
+ float origin_y = to_screen.matrix().getFloat(1, 3) + offset_to_transform_parent().y();
+ if (origin_x - floorf(origin_x) == 0.f && origin_y - floorf(origin_y) == 0.f)
+ return false;
+
+ return true;
+}
+
const DisplayItemList* PictureLayer::GetDisplayItemList() {
return picture_layer_inputs_.display_list.get();
}

Powered by Google App Engine
This is Rietveld 408576698