Update from https://crrev.com/316786
List of manually-modified files:
gpu/command_buffer/service/in_process_command_buffer.cc
examples/sample_app/BUILD.gn
examples/sample_app/spinning_cube.cc
mojo/android/javatests/src/org/chromium/mojo/MojoTestCase.java
mojo/cc/context_provider_mojo.cc
mojo/cc/context_provider_mojo.h
mojo/common/trace_controller_impl.cc
mojo/gles2/command_buffer_client_impl.cc
mojo/gles2/command_buffer_client_impl.h
services/gles2/gpu_impl.cc
shell/android/apk/src/org/chromium/mojo/shell/MojoShellApplication.java
sky/engine/core/dom/Node.cpp
sky/shell/apk/src/org/domokit/sky/shell/SkyShellApplication.java
ui/events/latency_info.cc
ui/gfx/transform.cc
ui/gfx/transform.h
ui/gfx/transform_util.cc
ui/gfx/transform_util.h
Review URL: https://codereview.chromium.org/935333002
diff --git a/ui/gfx/transform.cc b/ui/gfx/transform.cc
index 7fe5174..c13ae1d 100644
--- a/ui/gfx/transform.cc
+++ b/ui/gfx/transform.cc
@@ -40,6 +40,12 @@
return std::abs(x - SkDoubleToMScalar(1.0)) <= tolerance;
}
+static float Round(float f) {
+ if (f == 0.f)
+ return f;
+ return (f > 0.f) ? std::floor(f + 0.5f) : std::ceil(f - 0.5f);
+}
+
} // namespace
Transform::Transform(SkMScalar col1row1,
@@ -493,6 +499,12 @@
return true;
}
+void Transform::RoundTranslationComponents() {
+ matrix_.set(0, 3, Round(matrix_.get(0, 3)));
+ matrix_.set(1, 3, Round(matrix_.get(1, 3)));
+}
+
+
void Transform::TransformPointInternal(const SkMatrix44& xform,
Point3F* point) const {
if (xform.isIdentity())
diff --git a/ui/gfx/transform.h b/ui/gfx/transform.h
index 8156b72..68a734e 100644
--- a/ui/gfx/transform.h
+++ b/ui/gfx/transform.h
@@ -238,6 +238,8 @@
// DecomposedTransform.
bool Blend(const Transform& from, double progress);
+ void RoundTranslationComponents();
+
// Returns |this| * |other|.
Transform operator*(const Transform& other) const {
return Transform(*this, other);
diff --git a/ui/gfx/transform_util.cc b/ui/gfx/transform_util.cc
index 655ce57..e96d96e 100644
--- a/ui/gfx/transform_util.cc
+++ b/ui/gfx/transform_util.cc
@@ -498,4 +498,21 @@
quaternion[3]);
}
+float MatrixDistance(const Transform& a, const Transform& b) {
+ double sum = 0.0;
+
+ const SkMatrix44& a_data = a.matrix();
+ const SkMatrix44& b_data = b.matrix();
+
+ for (int row = 0; row < 4; ++row) {
+ for (int col = 0; col < 4; ++col) {
+ double diff = a_data.get(row, col) - b_data.get(row, col);
+ sum += diff * diff;
+ }
+ }
+
+ return static_cast<float>(std::sqrt(sum));
+}
+
+
} // namespace ui
diff --git a/ui/gfx/transform_util.h b/ui/gfx/transform_util.h
index a77ded2..6b091a2 100644
--- a/ui/gfx/transform_util.h
+++ b/ui/gfx/transform_util.h
@@ -58,6 +58,9 @@
const Transform& transform,
const Rect& viewport);
+// Computes the Frobenius norm of (a - b).
+GFX_EXPORT float MatrixDistance(const Transform& a, const Transform& b);
+
} // namespace gfx
#endif // UI_GFX_TRANSFORM_UTIL_H_