Revert again "Remove layer integral offset snapping" (#18132) (#18138)
diff --git a/flow/layers/container_layer.cc b/flow/layers/container_layer.cc
index 5dcf2aa..39372f6 100644
--- a/flow/layers/container_layer.cc
+++ b/flow/layers/container_layer.cc
@@ -65,15 +65,6 @@
}
}
-void ContainerLayer::TryToPrepareRasterCache(PrerollContext* context,
- Layer* layer,
- const SkMatrix& matrix) {
- if (!context->has_platform_view && context->raster_cache &&
- SkRect::Intersects(context->cull_rect, layer->paint_bounds())) {
- context->raster_cache->Prepare(context, layer, matrix);
- }
-}
-
#if defined(OS_FUCHSIA)
void ContainerLayer::UpdateScene(SceneUpdateContext& context) {
diff --git a/flow/layers/container_layer.h b/flow/layers/container_layer.h
index c012e6f..df5be5e 100644
--- a/flow/layers/container_layer.h
+++ b/flow/layers/container_layer.h
@@ -37,20 +37,6 @@
// For OpacityLayer to restructure to have a single child.
void ClearChildren() { layers_.clear(); }
- // Try to prepare the raster cache for a given layer.
- //
- // The raster cache would fail if either of the followings is true:
- // 1. The context has a platform view.
- // 2. The context does not have a valid raster cache.
- // 3. The layer's paint bounds does not intersect with the cull rect.
- //
- // We make this a static function instead of a member function that directy
- // uses the "this" pointer as the layer because we sometimes need to raster
- // cache a child layer and one can't access its child's protected method.
- static void TryToPrepareRasterCache(PrerollContext* context,
- Layer* layer,
- const SkMatrix& matrix);
-
private:
std::vector<std::shared_ptr<Layer>> layers_;
diff --git a/flow/layers/image_filter_layer.cc b/flow/layers/image_filter_layer.cc
index 3a1ebbc..bf787a3 100644
--- a/flow/layers/image_filter_layer.cc
+++ b/flow/layers/image_filter_layer.cc
@@ -28,13 +28,26 @@
set_paint_bounds(child_paint_bounds_);
}
- TryToPrepareRasterCache(context, this, matrix);
+ if (!context->has_platform_view && context->raster_cache &&
+ SkRect::Intersects(context->cull_rect, paint_bounds())) {
+ SkMatrix ctm = matrix;
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ ctm = RasterCache::GetIntegralTransCTM(ctm);
+#endif
+ context->raster_cache->Prepare(context, this, ctm);
+ }
}
void ImageFilterLayer::Paint(PaintContext& context) const {
TRACE_EVENT0("flutter", "ImageFilterLayer::Paint");
FML_DCHECK(needs_painting());
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ SkAutoCanvasRestore save(context.leaf_nodes_canvas, true);
+ context.leaf_nodes_canvas->setMatrix(RasterCache::GetIntegralTransCTM(
+ context.leaf_nodes_canvas->getTotalMatrix()));
+#endif
+
if (context.raster_cache &&
context.raster_cache->Draw(this, *context.leaf_nodes_canvas)) {
return;
diff --git a/flow/layers/image_filter_layer_unittests.cc b/flow/layers/image_filter_layer_unittests.cc
index 305ec01..f4f621a 100644
--- a/flow/layers/image_filter_layer_unittests.cc
+++ b/flow/layers/image_filter_layer_unittests.cc
@@ -60,11 +60,14 @@
layer->Paint(paint_context());
EXPECT_EQ(mock_canvas().draw_calls(),
std::vector({
+ MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
+ MockCanvas::DrawCall{1, MockCanvas::SetMatrixData{SkMatrix()}},
MockCanvas::DrawCall{
- 0, MockCanvas::SaveLayerData{child_bounds, filter_paint,
- nullptr, 1}},
+ 1, MockCanvas::SaveLayerData{child_bounds, filter_paint,
+ nullptr, 2}},
MockCanvas::DrawCall{
- 1, MockCanvas::DrawPathData{child_path, child_paint}},
+ 2, MockCanvas::DrawPathData{child_path, child_paint}},
+ MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}},
MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}},
}));
}
@@ -93,11 +96,14 @@
layer->Paint(paint_context());
EXPECT_EQ(mock_canvas().draw_calls(),
std::vector({
+ MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
+ MockCanvas::DrawCall{1, MockCanvas::SetMatrixData{SkMatrix()}},
MockCanvas::DrawCall{
- 0, MockCanvas::SaveLayerData{child_bounds, filter_paint,
- nullptr, 1}},
+ 1, MockCanvas::SaveLayerData{child_bounds, filter_paint,
+ nullptr, 2}},
MockCanvas::DrawCall{
- 1, MockCanvas::DrawPathData{child_path, child_paint}},
+ 2, MockCanvas::DrawPathData{child_path, child_paint}},
+ MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}},
MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}},
}));
}
@@ -126,11 +132,14 @@
layer->Paint(paint_context());
EXPECT_EQ(mock_canvas().draw_calls(),
std::vector({
+ MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
+ MockCanvas::DrawCall{1, MockCanvas::SetMatrixData{SkMatrix()}},
MockCanvas::DrawCall{
- 0, MockCanvas::SaveLayerData{child_bounds, filter_paint,
- nullptr, 1}},
+ 1, MockCanvas::SaveLayerData{child_bounds, filter_paint,
+ nullptr, 2}},
MockCanvas::DrawCall{
- 1, MockCanvas::DrawPathData{child_path, child_paint}},
+ 2, MockCanvas::DrawPathData{child_path, child_paint}},
+ MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}},
MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}},
}));
}
@@ -168,16 +177,19 @@
SkPaint filter_paint;
filter_paint.setImageFilter(layer_filter);
layer->Paint(paint_context());
- EXPECT_EQ(
- mock_canvas().draw_calls(),
- std::vector({MockCanvas::DrawCall{
- 0, MockCanvas::SaveLayerData{children_bounds,
- filter_paint, nullptr, 1}},
- MockCanvas::DrawCall{
- 1, MockCanvas::DrawPathData{child_path1, child_paint1}},
- MockCanvas::DrawCall{
- 1, MockCanvas::DrawPathData{child_path2, child_paint2}},
- MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}}));
+ EXPECT_EQ(mock_canvas().draw_calls(),
+ std::vector(
+ {MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
+ MockCanvas::DrawCall{1, MockCanvas::SetMatrixData{SkMatrix()}},
+ MockCanvas::DrawCall{
+ 1, MockCanvas::SaveLayerData{children_bounds, filter_paint,
+ nullptr, 2}},
+ MockCanvas::DrawCall{
+ 2, MockCanvas::DrawPathData{child_path1, child_paint1}},
+ MockCanvas::DrawCall{
+ 2, MockCanvas::DrawPathData{child_path2, child_paint2}},
+ MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}},
+ MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}}));
}
TEST_F(ImageFilterLayerTest, Nested) {
@@ -225,16 +237,22 @@
layer1->Paint(paint_context());
EXPECT_EQ(mock_canvas().draw_calls(),
std::vector({
+ MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
+ MockCanvas::DrawCall{1, MockCanvas::SetMatrixData{SkMatrix()}},
MockCanvas::DrawCall{
- 0, MockCanvas::SaveLayerData{children_bounds, filter_paint1,
- nullptr, 1}},
+ 1, MockCanvas::SaveLayerData{children_bounds, filter_paint1,
+ nullptr, 2}},
MockCanvas::DrawCall{
- 1, MockCanvas::DrawPathData{child_path1, child_paint1}},
+ 2, MockCanvas::DrawPathData{child_path1, child_paint1}},
+ MockCanvas::DrawCall{2, MockCanvas::SaveData{3}},
+ MockCanvas::DrawCall{3, MockCanvas::SetMatrixData{SkMatrix()}},
MockCanvas::DrawCall{
- 1, MockCanvas::SaveLayerData{child_path2.getBounds(),
- filter_paint2, nullptr, 2}},
+ 3, MockCanvas::SaveLayerData{child_path2.getBounds(),
+ filter_paint2, nullptr, 4}},
MockCanvas::DrawCall{
- 2, MockCanvas::DrawPathData{child_path2, child_paint2}},
+ 4, MockCanvas::DrawPathData{child_path2, child_paint2}},
+ MockCanvas::DrawCall{4, MockCanvas::RestoreData{3}},
+ MockCanvas::DrawCall{3, MockCanvas::RestoreData{2}},
MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}},
MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}},
}));
diff --git a/flow/layers/opacity_layer.cc b/flow/layers/opacity_layer.cc
index 670492b..1eeb640 100644
--- a/flow/layers/opacity_layer.cc
+++ b/flow/layers/opacity_layer.cc
@@ -48,7 +48,14 @@
{
set_paint_bounds(paint_bounds().makeOffset(offset_.fX, offset_.fY));
- TryToPrepareRasterCache(context, container, child_matrix);
+ if (!context->has_platform_view && context->raster_cache &&
+ SkRect::Intersects(context->cull_rect, paint_bounds())) {
+ SkMatrix ctm = child_matrix;
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ ctm = RasterCache::GetIntegralTransCTM(ctm);
+#endif
+ context->raster_cache->Prepare(context, container, ctm);
+ }
}
}
@@ -62,6 +69,11 @@
SkAutoCanvasRestore save(context.internal_nodes_canvas, true);
context.internal_nodes_canvas->translate(offset_.fX, offset_.fY);
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ context.internal_nodes_canvas->setMatrix(RasterCache::GetIntegralTransCTM(
+ context.leaf_nodes_canvas->getTotalMatrix()));
+#endif
+
if (context.raster_cache &&
context.raster_cache->Draw(GetChildContainer(),
*context.leaf_nodes_canvas, &paint)) {
@@ -71,7 +83,8 @@
// Skia may clip the content with saveLayerBounds (although it's not a
// guaranteed clip). So we have to provide a big enough saveLayerBounds. To do
// so, we first remove the offset from paint bounds since it's already in the
- // matrix. Then we round out the bounds.
+ // matrix. Then we round out the bounds because of our
+ // RasterCache::GetIntegralTransCTM optimization.
//
// Note that the following lines are only accessible when the raster cache is
// not available (e.g., when we're using the software backend in golden
diff --git a/flow/layers/opacity_layer_unittests.cc b/flow/layers/opacity_layer_unittests.cc
index ae08109..f7cc77f 100644
--- a/flow/layers/opacity_layer_unittests.cc
+++ b/flow/layers/opacity_layer_unittests.cc
@@ -58,6 +58,10 @@
const SkMatrix initial_transform = SkMatrix::MakeTrans(0.5f, 0.5f);
const SkMatrix layer_transform =
SkMatrix::MakeTrans(layer_offset.fX, layer_offset.fY);
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ const SkMatrix integral_layer_transform = RasterCache::GetIntegralTransCTM(
+ SkMatrix::Concat(initial_transform, layer_transform));
+#endif
const SkPaint child_paint = SkPaint(SkColors::kGreen);
const SkRect expected_layer_bounds =
layer_transform.mapRect(child_path.getBounds());
@@ -82,6 +86,10 @@
auto expected_draw_calls = std::vector(
{MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
MockCanvas::DrawCall{1, MockCanvas::ConcatMatrixData{layer_transform}},
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ MockCanvas::DrawCall{
+ 1, MockCanvas::SetMatrixData{integral_layer_transform}},
+#endif
MockCanvas::DrawCall{
1, MockCanvas::SaveLayerData{opacity_bounds, opacity_paint, nullptr,
2}},
@@ -99,6 +107,10 @@
const SkMatrix initial_transform = SkMatrix::MakeTrans(0.5f, 0.5f);
const SkMatrix layer_transform =
SkMatrix::MakeTrans(layer_offset.fX, layer_offset.fY);
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ const SkMatrix integral_layer_transform = RasterCache::GetIntegralTransCTM(
+ SkMatrix::Concat(initial_transform, layer_transform));
+#endif
const SkPaint child_paint = SkPaint(SkColors::kGreen);
const SkRect expected_layer_bounds =
layer_transform.mapRect(child_path.getBounds());
@@ -121,6 +133,10 @@
auto expected_draw_calls = std::vector(
{MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
MockCanvas::DrawCall{1, MockCanvas::ConcatMatrixData{layer_transform}},
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ MockCanvas::DrawCall{
+ 1, MockCanvas::SetMatrixData{integral_layer_transform}},
+#endif
MockCanvas::DrawCall{1, MockCanvas::SaveData{2}},
MockCanvas::DrawCall{
2, MockCanvas::ClipRectData{kEmptyRect, SkClipOp::kIntersect,
@@ -139,6 +155,10 @@
const SkMatrix initial_transform = SkMatrix::MakeTrans(0.5f, 0.5f);
const SkMatrix layer_transform =
SkMatrix::MakeTrans(layer_offset.fX, layer_offset.fY);
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ const SkMatrix integral_layer_transform = RasterCache::GetIntegralTransCTM(
+ SkMatrix::Concat(initial_transform, layer_transform));
+#endif
const SkPaint child_paint = SkPaint(SkColors::kGreen);
const SkRect expected_layer_bounds =
layer_transform.mapRect(child_path.getBounds());
@@ -165,6 +185,10 @@
auto expected_draw_calls = std::vector(
{MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
MockCanvas::DrawCall{1, MockCanvas::ConcatMatrixData{layer_transform}},
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ MockCanvas::DrawCall{
+ 1, MockCanvas::SetMatrixData{integral_layer_transform}},
+#endif
MockCanvas::DrawCall{
1, MockCanvas::SaveLayerData{opacity_bounds, opacity_paint, nullptr,
2}},
@@ -187,6 +211,13 @@
SkMatrix::MakeTrans(layer1_offset.fX, layer1_offset.fY);
const SkMatrix layer2_transform =
SkMatrix::MakeTrans(layer2_offset.fX, layer2_offset.fY);
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ const SkMatrix integral_layer1_transform = RasterCache::GetIntegralTransCTM(
+ SkMatrix::Concat(initial_transform, layer1_transform));
+ const SkMatrix integral_layer2_transform = RasterCache::GetIntegralTransCTM(
+ SkMatrix::Concat(SkMatrix::Concat(initial_transform, layer1_transform),
+ layer2_transform));
+#endif
const SkPaint child1_paint = SkPaint(SkColors::kRed);
const SkPaint child2_paint = SkPaint(SkColors::kBlue);
const SkPaint child3_paint = SkPaint(SkColors::kGreen);
@@ -247,6 +278,10 @@
auto expected_draw_calls = std::vector(
{MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
MockCanvas::DrawCall{1, MockCanvas::ConcatMatrixData{layer1_transform}},
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ MockCanvas::DrawCall{
+ 1, MockCanvas::SetMatrixData{integral_layer1_transform}},
+#endif
MockCanvas::DrawCall{
1, MockCanvas::SaveLayerData{opacity1_bounds, opacity1_paint,
nullptr, 2}},
@@ -254,6 +289,10 @@
2, MockCanvas::DrawPathData{child1_path, child1_paint}},
MockCanvas::DrawCall{2, MockCanvas::SaveData{3}},
MockCanvas::DrawCall{3, MockCanvas::ConcatMatrixData{layer2_transform}},
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ MockCanvas::DrawCall{
+ 3, MockCanvas::SetMatrixData{integral_layer2_transform}},
+#endif
MockCanvas::DrawCall{
3, MockCanvas::SaveLayerData{opacity2_bounds, opacity2_paint,
nullptr, 4}},
diff --git a/flow/layers/picture_layer.cc b/flow/layers/picture_layer.cc
index 58e356b..c60b092 100644
--- a/flow/layers/picture_layer.cc
+++ b/flow/layers/picture_layer.cc
@@ -24,7 +24,12 @@
if (auto* cache = context->raster_cache) {
TRACE_EVENT0("flutter", "PictureLayer::RasterCache (Preroll)");
- cache->Prepare(context->gr_context, sk_picture, matrix,
+ SkMatrix ctm = matrix;
+ ctm.postTranslate(offset_.x(), offset_.y());
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ ctm = RasterCache::GetIntegralTransCTM(ctm);
+#endif
+ cache->Prepare(context->gr_context, sk_picture, ctm,
context->dst_color_space, is_complex_, will_change_);
}
@@ -39,6 +44,10 @@
SkAutoCanvasRestore save(context.leaf_nodes_canvas, true);
context.leaf_nodes_canvas->translate(offset_.x(), offset_.y());
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ context.leaf_nodes_canvas->setMatrix(RasterCache::GetIntegralTransCTM(
+ context.leaf_nodes_canvas->getTotalMatrix()));
+#endif
if (context.raster_cache &&
context.raster_cache->Draw(*picture(), *context.leaf_nodes_canvas)) {
diff --git a/flow/layers/picture_layer_unittests.cc b/flow/layers/picture_layer_unittests.cc
index 0cdb2f9..4f565cf 100644
--- a/flow/layers/picture_layer_unittests.cc
+++ b/flow/layers/picture_layer_unittests.cc
@@ -11,6 +11,10 @@
#include "flutter/testing/mock_canvas.h"
#include "third_party/skia/include/core/SkPicture.h"
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+#include "flutter/flow/raster_cache.h"
+#endif
+
namespace flutter {
namespace testing {
@@ -81,11 +85,16 @@
EXPECT_FALSE(layer->needs_system_composite());
layer->Paint(paint_context());
- auto expected_draw_calls =
- std::vector({MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
- MockCanvas::DrawCall{
- 1, MockCanvas::ConcatMatrixData{layer_offset_matrix}},
- MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}});
+ auto expected_draw_calls = std::vector(
+ {MockCanvas::DrawCall{0, MockCanvas::SaveData{1}},
+ MockCanvas::DrawCall{1,
+ MockCanvas::ConcatMatrixData{layer_offset_matrix}},
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ MockCanvas::DrawCall{
+ 1, MockCanvas::SetMatrixData{RasterCache::GetIntegralTransCTM(
+ layer_offset_matrix)}},
+#endif
+ MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}});
EXPECT_EQ(mock_canvas().draw_calls(), expected_draw_calls);
}
diff --git a/flow/raster_cache.h b/flow/raster_cache.h
index 1332d89..3f7f659 100644
--- a/flow/raster_cache.h
+++ b/flow/raster_cache.h
@@ -62,6 +62,13 @@
return bounds;
}
+ static SkMatrix GetIntegralTransCTM(const SkMatrix& ctm) {
+ SkMatrix result = ctm;
+ result[SkMatrix::kMTransX] = SkScalarRoundToScalar(ctm.getTranslateX());
+ result[SkMatrix::kMTransY] = SkScalarRoundToScalar(ctm.getTranslateY());
+ return result;
+ }
+
// Return true if the cache is generated.
//
// We may return false and not generate the cache if
diff --git a/flow/raster_cache_key.h b/flow/raster_cache_key.h
index f5fd1e0..5eae4d3 100644
--- a/flow/raster_cache_key.h
+++ b/flow/raster_cache_key.h
@@ -15,8 +15,11 @@
class RasterCacheKey {
public:
RasterCacheKey(ID id, const SkMatrix& ctm) : id_(id), matrix_(ctm) {
- matrix_[SkMatrix::kMTransX] = 0;
- matrix_[SkMatrix::kMTransY] = 0;
+ matrix_[SkMatrix::kMTransX] = SkScalarFraction(ctm.getTranslateX());
+ matrix_[SkMatrix::kMTransY] = SkScalarFraction(ctm.getTranslateY());
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ FML_DCHECK(matrix_.getTranslateX() == 0 && matrix_.getTranslateY() == 0);
+#endif
}
ID id() const { return id_; }
diff --git a/flow/raster_cache_unittests.cc b/flow/raster_cache_unittests.cc
index ab466a1..3df335f 100644
--- a/flow/raster_cache_unittests.cc
+++ b/flow/raster_cache_unittests.cc
@@ -159,6 +159,9 @@
ASSERT_TRUE(cache.Draw(*picture, canvas));
canvas.translate(248, 0);
+#ifndef SUPPORT_FRACTIONAL_TRANSLATION
+ canvas.setMatrix(RasterCache::GetIntegralTransCTM(canvas.getTotalMatrix()));
+#endif
ASSERT_TRUE(cache.Draw(*picture, canvas));
}
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprect_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprect_iPhone 8_simulator.png
index 05eff90..d2b811f 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprect_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprect_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprrect_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprrect_iPhone 8_simulator.png
index b193419..fbdac68 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprrect_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_cliprrect_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_iPhone 8_simulator.png
index ac6a65f..0e00df7 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_background_foreground_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_background_foreground_iPhone 8_simulator.png
index f881d8c..5c599bd 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_background_foreground_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_background_foreground_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_iPhone 8_simulator.png
index fd64f97..35cc6db 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_multiple_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_opacity_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_opacity_iPhone 8_simulator.png
index 722fc95..f97a8f6 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_opacity_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_opacity_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_rotate_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_rotate_iPhone 8_simulator.png
index 6c4a209..fd25dc0 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_rotate_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_rotate_iPhone 8_simulator.png
Binary files differ
diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_transform_iPhone 8_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_transform_iPhone 8_simulator.png
index 38ed217..0db030e 100644
--- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_transform_iPhone 8_simulator.png
+++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_transform_iPhone 8_simulator.png
Binary files differ