From 544e80090463a8965366b0226bf5ad4c1a8c963b Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Tue, 10 Dec 2024 14:32:02 -0800 Subject: [PATCH 1/7] Removed heap allocation in linear gradient --- .../dl_gradient_color_source_base.h | 4 ++ .../dl_linear_gradient_color_source.cc | 14 ++++++ .../dl_linear_gradient_color_source.h | 8 ++++ display_list/effects/dl_color_source.cc | 46 +++++++++++++++++++ display_list/effects/dl_color_source.h | 9 ++++ .../skia/dl_sk_conversions_unittests.cc | 7 +-- lib/ui/painting/gradient.cc | 12 +---- 7 files changed, 86 insertions(+), 14 deletions(-) diff --git a/display_list/effects/color_sources/dl_gradient_color_source_base.h b/display_list/effects/color_sources/dl_gradient_color_source_base.h index f7a8620373e5b..573bffe69a489 100644 --- a/display_list/effects/color_sources/dl_gradient_color_source_base.h +++ b/display_list/effects/color_sources/dl_gradient_color_source_base.h @@ -42,6 +42,10 @@ class DlGradientColorSourceBase : public DlMatrixColorSourceBase { const DlColor* color_data, const float* stop_data); + void store_color_stops(void* pod, + const DlScalar* color_data_argb, + const float* stop_data); + private: DlTileMode mode_; uint32_t stop_count_; diff --git a/display_list/effects/color_sources/dl_linear_gradient_color_source.cc b/display_list/effects/color_sources/dl_linear_gradient_color_source.cc index 380dce96f95bd..ddfd4af0c0eab 100644 --- a/display_list/effects/color_sources/dl_linear_gradient_color_source.cc +++ b/display_list/effects/color_sources/dl_linear_gradient_color_source.cc @@ -20,6 +20,20 @@ DlLinearGradientColorSource::DlLinearGradientColorSource( store_color_stops(this + 1, colors, stops); } +DlLinearGradientColorSource::DlLinearGradientColorSource( + const DlPoint start_point, + const DlPoint end_point, + uint32_t stop_count, + const DlScalar* colors, + const float* stops, + DlTileMode tile_mode, + const DlMatrix* matrix) + : DlGradientColorSourceBase(stop_count, tile_mode, matrix), + start_point_(start_point), + end_point_(end_point) { + FML_CHECK(false); +} + DlLinearGradientColorSource::DlLinearGradientColorSource( const DlLinearGradientColorSource* source) : DlGradientColorSourceBase(source->stop_count(), diff --git a/display_list/effects/color_sources/dl_linear_gradient_color_source.h b/display_list/effects/color_sources/dl_linear_gradient_color_source.h index 886d4ceb8811a..a229fbbd233c6 100644 --- a/display_list/effects/color_sources/dl_linear_gradient_color_source.h +++ b/display_list/effects/color_sources/dl_linear_gradient_color_source.h @@ -41,6 +41,14 @@ class DlLinearGradientColorSource final : public DlGradientColorSourceBase { DlTileMode tile_mode, const DlMatrix* matrix = nullptr); + DlLinearGradientColorSource(const DlPoint start_point, + const DlPoint end_point, + uint32_t stop_count, + const DlScalar* colors, + const float* stops, + DlTileMode tile_mode, + const DlMatrix* matrix = nullptr); + explicit DlLinearGradientColorSource( const DlLinearGradientColorSource* source); diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 5a5fa8b1fbf19..46e8650e6a319 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -51,6 +51,27 @@ std::shared_ptr DlColorSource::MakeLinear( return ret; } +std::shared_ptr DlColorSource::MakeLinear( + const DlPoint start_point, + const DlPoint end_point, + uint32_t stop_count, + const DlScalar* colors, + const float* stops, + DlTileMode tile_mode, + const DlMatrix* matrix) { + size_t needed = sizeof(DlLinearGradientColorSource) + + (stop_count * (sizeof(DlColor) + sizeof(float))); + + void* storage = ::operator new(needed); + + std::shared_ptr ret; + ret.reset(new (storage) + DlLinearGradientColorSource(start_point, end_point, stop_count, + colors, stops, tile_mode, matrix), + DlGradientDeleter); + return ret; +} + std::shared_ptr DlColorSource::MakeRadial( DlPoint center, DlScalar radius, @@ -176,4 +197,29 @@ void DlGradientColorSourceBase::store_color_stops(void* pod, } } +void DlGradientColorSourceBase::store_color_stops( + void* pod, + const DlScalar* color_data_argb, + const float* stop_data) { + DlColor* color_storage = reinterpret_cast(pod); + for (uint32_t i = 0; i < stop_count_; ++i) { + *color_storage++ = + DlColor(color_data_argb[0], color_data_argb[1], color_data_argb[2], + color_data_argb[3], DlColorSpace::kExtendedSRGB); + color_data_argb += 4; + } + float* stop_storage = reinterpret_cast(color_storage + stop_count_); + if (stop_data) { + memcpy(stop_storage, stop_data, stop_count_ * sizeof(*stop_data)); + } else { + float div = stop_count_ - 1; + if (div <= 0) { + div = 1; + } + for (uint32_t i = 0; i < stop_count_; i++) { + stop_storage[i] = i / div; + } + } +} + } // namespace flutter diff --git a/display_list/effects/dl_color_source.h b/display_list/effects/dl_color_source.h index 05fe3ca5853d2..932392eb24385 100644 --- a/display_list/effects/dl_color_source.h +++ b/display_list/effects/dl_color_source.h @@ -59,6 +59,15 @@ class DlColorSource : public DlAttribute { DlTileMode tile_mode, const DlMatrix* matrix = nullptr); + static std::shared_ptr MakeLinear( + const DlPoint start_point, + const DlPoint end_point, + uint32_t stop_count, + const DlScalar* colors, + const float* stops, + DlTileMode tile_mode, + const DlMatrix* matrix = nullptr); + static std::shared_ptr MakeRadial( DlPoint center, DlScalar radius, diff --git a/display_list/skia/dl_sk_conversions_unittests.cc b/display_list/skia/dl_sk_conversions_unittests.cc index 81606246e76c4..eab7d8da29e27 100644 --- a/display_list/skia/dl_sk_conversions_unittests.cc +++ b/display_list/skia/dl_sk_conversions_unittests.cc @@ -144,9 +144,9 @@ TEST(DisplayListSkConversions, ToSkSamplingOptions) { FUNC(kLastSeparableMode) \ FUNC(kLastMode) -TEST(DisplayListSkConversions, ToSkBlendMode){ +TEST(DisplayListSkConversions, ToSkBlendMode) { #define CHECK_TO_SKENUM(V) ASSERT_EQ(ToSk(DlBlendMode::V), SkBlendMode::V); - FOR_EACH_BLEND_MODE_ENUM(CHECK_TO_SKENUM) + FOR_EACH_BLEND_MODE_ENUM(CHECK_TO_SKENUM) #undef CHECK_TO_SKENUM } @@ -302,7 +302,8 @@ TEST(DisplayListSkConversions, ToSkDitheringEnabledForGradients) { // Set the paint to be a gradient. dl_paint.setColorSource(DlColorSource::MakeLinear( - DlPoint(0, 0), DlPoint(100, 100), 0, 0, 0, DlTileMode::kClamp)); + DlPoint(0, 0), DlPoint(100, 100), 0, + std::array{DlColor(0)}.data(), 0, DlTileMode::kClamp)); { SkPaint sk_paint = ToSk(dl_paint); diff --git a/lib/ui/painting/gradient.cc b/lib/ui/painting/gradient.cc index 1b87943e51162..a7ecf3be6cfdb 100644 --- a/lib/ui/painting/gradient.cc +++ b/lib/ui/painting/gradient.cc @@ -44,17 +44,7 @@ void CanvasGradient::initLinear(const tonic::Float32List& end_points, DlPoint p0 = DlPoint(end_points[0], end_points[1]); DlPoint p1 = DlPoint(end_points[2], end_points[3]); - std::vector dl_colors; - dl_colors.reserve(num_colors); - for (int i = 0; i < colors.num_elements(); i += 4) { - DlScalar a = colors[i + 0]; - DlScalar r = colors[i + 1]; - DlScalar g = colors[i + 2]; - DlScalar b = colors[i + 3]; - dl_colors.emplace_back(DlColor(a, r, g, b, DlColorSpace::kExtendedSRGB)); - } - - dl_shader_ = DlColorSource::MakeLinear(p0, p1, num_colors, dl_colors.data(), + dl_shader_ = DlColorSource::MakeLinear(p0, p1, num_colors, colors.data(), color_stops.data(), tile_mode, has_matrix ? &dl_matrix : nullptr); // Just a sanity check, all gradient shaders should be thread-safe From 9617c9a78ab45326c6557e94cae05d8d14b21b76 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Tue, 10 Dec 2024 14:45:08 -0800 Subject: [PATCH 2/7] added test --- .../dl_linear_gradient_color_source.cc | 2 +- display_list/effects/dl_color_source.cc | 2 +- .../effects/dl_color_source_unittests.cc | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/display_list/effects/color_sources/dl_linear_gradient_color_source.cc b/display_list/effects/color_sources/dl_linear_gradient_color_source.cc index ddfd4af0c0eab..6c9fa3b19a1ea 100644 --- a/display_list/effects/color_sources/dl_linear_gradient_color_source.cc +++ b/display_list/effects/color_sources/dl_linear_gradient_color_source.cc @@ -31,7 +31,7 @@ DlLinearGradientColorSource::DlLinearGradientColorSource( : DlGradientColorSourceBase(stop_count, tile_mode, matrix), start_point_(start_point), end_point_(end_point) { - FML_CHECK(false); + store_color_stops(this + 1, colors, stops); } DlLinearGradientColorSource::DlLinearGradientColorSource( diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 46e8650e6a319..39962dfe34532 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -208,7 +208,7 @@ void DlGradientColorSourceBase::store_color_stops( color_data_argb[3], DlColorSpace::kExtendedSRGB); color_data_argb += 4; } - float* stop_storage = reinterpret_cast(color_storage + stop_count_); + float* stop_storage = reinterpret_cast(color_storage); if (stop_data) { memcpy(stop_storage, stop_data, stop_count_ * sizeof(*stop_data)); } else { diff --git a/display_list/effects/dl_color_source_unittests.cc b/display_list/effects/dl_color_source_unittests.cc index 944de9c994836..de2a9b97011b2 100644 --- a/display_list/effects/dl_color_source_unittests.cc +++ b/display_list/effects/dl_color_source_unittests.cc @@ -189,6 +189,32 @@ TEST(DisplayListColorSource, LinearGradientConstructor) { DlTileMode::kClamp, &kTestMatrix1); } +TEST(DisplayListColorSource, LinearGradientARGBConstructor) { + std::array colors; + for (int i = 0; i < kTestStopCount; ++i) { + colors[i * 4 + 0] = kTestColors[i].getAlphaF(); // + colors[i * 4 + 1] = kTestColors[i].getRedF(); // + colors[i * 4 + 2] = kTestColors[i].getGreenF(); // + colors[i * 4 + 3] = kTestColors[i].getBlueF(); + } + std::shared_ptr source = DlColorSource::MakeLinear( + kTestPoints[0], kTestPoints[1], kTestStopCount, colors.data(), kTestStops, + DlTileMode::kClamp, &kTestMatrix1); + ASSERT_TRUE(source); + ASSERT_TRUE(source->asLinearGradient()); + EXPECT_EQ(source->asLinearGradient()->start_point(), kTestPoints[0]); + EXPECT_EQ(source->asLinearGradient()->end_point(), kTestPoints[1]); + EXPECT_EQ(source->asLinearGradient()->stop_count(), kTestStopCount); + for (int i = 0; i < kTestStopCount; i++) { + EXPECT_EQ(source->asLinearGradient()->colors()[i], + kTestColors[i].withColorSpace(DlColorSpace::kExtendedSRGB)); + EXPECT_EQ(source->asLinearGradient()->stops()[i], kTestStops[i]); + } + EXPECT_EQ(source->asLinearGradient()->tile_mode(), DlTileMode::kClamp); + EXPECT_EQ(source->asLinearGradient()->matrix(), kTestMatrix1); + EXPECT_EQ(source->is_opaque(), true); +} + TEST(DisplayListColorSource, LinearGradientShared) { std::shared_ptr source = DlColorSource::MakeLinear( kTestPoints[0], kTestPoints[1], kTestStopCount, kTestColors, kTestStops, From 61957aef542580ae8bfcdcd5fbf7e2224c93c9a2 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Tue, 10 Dec 2024 15:31:53 -0800 Subject: [PATCH 3/7] removed shared logic --- display_list/effects/dl_color_source.cc | 77 ++++++++++++------- .../skia/dl_sk_conversions_unittests.cc | 4 +- 2 files changed, 52 insertions(+), 29 deletions(-) diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 39962dfe34532..0851f2ec28789 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -178,48 +178,71 @@ bool DlGradientColorSourceBase::base_equals_( stop_count_ * sizeof(stops()[0])) == 0); } -void DlGradientColorSourceBase::store_color_stops(void* pod, - const DlColor* color_data, - const float* stop_data) { +namespace { +template +void do_store_color_stops(void* pod, + DlColorIt color_data_argb_begin, + DlColorIt color_data_argb_end, + const float* stop_data) { DlColor* color_storage = reinterpret_cast(pod); - memcpy(color_storage, color_data, stop_count_ * sizeof(*color_data)); - float* stop_storage = reinterpret_cast(color_storage + stop_count_); + uint32_t stop_count = 0; + while (color_data_argb_begin < color_data_argb_end) { + *color_storage++ = *color_data_argb_begin++; + stop_count += 1; + } + float* stop_storage = reinterpret_cast(color_storage); if (stop_data) { - memcpy(stop_storage, stop_data, stop_count_ * sizeof(*stop_data)); + memcpy(stop_storage, stop_data, stop_count * sizeof(*stop_data)); } else { - float div = stop_count_ - 1; + float div = stop_count - 1; if (div <= 0) { div = 1; } - for (uint32_t i = 0; i < stop_count_; i++) { + for (uint32_t i = 0; i < stop_count; i++) { stop_storage[i] = i / div; } } } +class DlScalerToDlColorIt { + public: + explicit DlScalerToDlColorIt(const DlScalar* ptr) : ptr_(ptr) {} + DlScalerToDlColorIt(DlScalerToDlColorIt&&) = default; + DlScalerToDlColorIt(const DlScalerToDlColorIt&) = delete; + DlScalerToDlColorIt& operator=(const DlScalerToDlColorIt&) = delete; + + DlColor operator*() { + return DlColor(ptr_[0], ptr_[1], ptr_[2], ptr_[3], + DlColorSpace::kExtendedSRGB); + } + DlScalerToDlColorIt operator++(int) { + auto result = DlScalerToDlColorIt(ptr_); + ptr_ += 4; + return result; + } + bool operator<(const DlScalerToDlColorIt& that) const { + return ptr_ < that.ptr_; + } + + private: + const DlScalar* ptr_; +}; + +} // namespace + +void DlGradientColorSourceBase::store_color_stops(void* pod, + const DlColor* color_data, + const float* stop_data) { + do_store_color_stops(pod, color_data, color_data + stop_count_, stop_data); +} + void DlGradientColorSourceBase::store_color_stops( void* pod, const DlScalar* color_data_argb, const float* stop_data) { - DlColor* color_storage = reinterpret_cast(pod); - for (uint32_t i = 0; i < stop_count_; ++i) { - *color_storage++ = - DlColor(color_data_argb[0], color_data_argb[1], color_data_argb[2], - color_data_argb[3], DlColorSpace::kExtendedSRGB); - color_data_argb += 4; - } - float* stop_storage = reinterpret_cast(color_storage); - if (stop_data) { - memcpy(stop_storage, stop_data, stop_count_ * sizeof(*stop_data)); - } else { - float div = stop_count_ - 1; - if (div <= 0) { - div = 1; - } - for (uint32_t i = 0; i < stop_count_; i++) { - stop_storage[i] = i / div; - } - } + do_store_color_stops(pod, DlScalerToDlColorIt(color_data_argb), + DlScalerToDlColorIt(color_data_argb + stop_count_ * 4), + stop_data); } } // namespace flutter diff --git a/display_list/skia/dl_sk_conversions_unittests.cc b/display_list/skia/dl_sk_conversions_unittests.cc index eab7d8da29e27..ab536ba51903e 100644 --- a/display_list/skia/dl_sk_conversions_unittests.cc +++ b/display_list/skia/dl_sk_conversions_unittests.cc @@ -144,9 +144,9 @@ TEST(DisplayListSkConversions, ToSkSamplingOptions) { FUNC(kLastSeparableMode) \ FUNC(kLastMode) -TEST(DisplayListSkConversions, ToSkBlendMode) { +TEST(DisplayListSkConversions, ToSkBlendMode){ #define CHECK_TO_SKENUM(V) ASSERT_EQ(ToSk(DlBlendMode::V), SkBlendMode::V); - FOR_EACH_BLEND_MODE_ENUM(CHECK_TO_SKENUM) + FOR_EACH_BLEND_MODE_ENUM(CHECK_TO_SKENUM) #undef CHECK_TO_SKENUM } From 6290a37337dbd88bf9c5e47b14023a31fa50565b Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Tue, 10 Dec 2024 15:39:08 -0800 Subject: [PATCH 4/7] removed some more redundancy --- display_list/effects/dl_color_source.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 0851f2ec28789..62b2e6b78431a 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -30,6 +30,13 @@ std::shared_ptr DlColorSource::MakeImage( image, horizontal_tile_mode, vertical_tile_mode, sampling, matrix); } +namespace { +size_t CalculateLinearGradientSize(uint32_t stop_count) { + return sizeof(DlLinearGradientColorSource) + + (stop_count * (sizeof(DlColor) + sizeof(float))); +} +} // namespace + std::shared_ptr DlColorSource::MakeLinear( const DlPoint start_point, const DlPoint end_point, @@ -38,9 +45,7 @@ std::shared_ptr DlColorSource::MakeLinear( const float* stops, DlTileMode tile_mode, const DlMatrix* matrix) { - size_t needed = sizeof(DlLinearGradientColorSource) + - (stop_count * (sizeof(DlColor) + sizeof(float))); - + size_t needed = CalculateLinearGradientSize(stop_count); void* storage = ::operator new(needed); std::shared_ptr ret; @@ -59,9 +64,7 @@ std::shared_ptr DlColorSource::MakeLinear( const float* stops, DlTileMode tile_mode, const DlMatrix* matrix) { - size_t needed = sizeof(DlLinearGradientColorSource) + - (stop_count * (sizeof(DlColor) + sizeof(float))); - + size_t needed = CalculateLinearGradientSize(stop_count); void* storage = ::operator new(needed); std::shared_ptr ret; From 792b0df8b2f17f9db1b41768e874a7942b448ea7 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Tue, 10 Dec 2024 15:47:47 -0800 Subject: [PATCH 5/7] added comment --- display_list/effects/dl_color_source.cc | 2 +- display_list/effects/dl_color_source.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 62b2e6b78431a..00dac5869fefd 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -60,7 +60,7 @@ std::shared_ptr DlColorSource::MakeLinear( const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, - const DlScalar* colors, + const DlScalar* colors_argb, const float* stops, DlTileMode tile_mode, const DlMatrix* matrix) { diff --git a/display_list/effects/dl_color_source.h b/display_list/effects/dl_color_source.h index 932392eb24385..44aa88ef38924 100644 --- a/display_list/effects/dl_color_source.h +++ b/display_list/effects/dl_color_source.h @@ -59,11 +59,13 @@ class DlColorSource : public DlAttribute { DlTileMode tile_mode, const DlMatrix* matrix = nullptr); + /// @brief Make a linear gradient. + /// @param colors_argb Array of DlScalars that represents colors in the ARGB. static std::shared_ptr MakeLinear( const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, - const DlScalar* colors, + const DlScalar* colors_argb, const float* stops, DlTileMode tile_mode, const DlMatrix* matrix = nullptr); From 693c623d5973184a9541f967df76f815cfde667a Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 11 Dec 2024 08:25:16 -0800 Subject: [PATCH 6/7] fixed typo --- display_list/effects/dl_color_source.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 00dac5869fefd..06c7ea914d301 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -68,9 +68,9 @@ std::shared_ptr DlColorSource::MakeLinear( void* storage = ::operator new(needed); std::shared_ptr ret; - ret.reset(new (storage) - DlLinearGradientColorSource(start_point, end_point, stop_count, - colors, stops, tile_mode, matrix), + ret.reset(new (storage) DlLinearGradientColorSource(start_point, end_point, + stop_count, colors_argb, + stops, tile_mode, matrix), DlGradientDeleter); return ret; } From 6c0cb1fddc5f18a46455d460deb2d74ce1d1e904 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 11 Dec 2024 08:27:30 -0800 Subject: [PATCH 7/7] renamed iterator --- display_list/effects/dl_color_source.cc | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 06c7ea914d301..6d027ef822d59 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -207,23 +207,24 @@ void do_store_color_stops(void* pod, } } -class DlScalerToDlColorIt { +class DlScalerToDlColorIterator { public: - explicit DlScalerToDlColorIt(const DlScalar* ptr) : ptr_(ptr) {} - DlScalerToDlColorIt(DlScalerToDlColorIt&&) = default; - DlScalerToDlColorIt(const DlScalerToDlColorIt&) = delete; - DlScalerToDlColorIt& operator=(const DlScalerToDlColorIt&) = delete; + explicit DlScalerToDlColorIterator(const DlScalar* ptr) : ptr_(ptr) {} + DlScalerToDlColorIterator(DlScalerToDlColorIterator&&) = default; + DlScalerToDlColorIterator(const DlScalerToDlColorIterator&) = delete; + DlScalerToDlColorIterator& operator=(const DlScalerToDlColorIterator&) = + delete; DlColor operator*() { return DlColor(ptr_[0], ptr_[1], ptr_[2], ptr_[3], DlColorSpace::kExtendedSRGB); } - DlScalerToDlColorIt operator++(int) { - auto result = DlScalerToDlColorIt(ptr_); + DlScalerToDlColorIterator operator++(int) { + auto result = DlScalerToDlColorIterator(ptr_); ptr_ += 4; return result; } - bool operator<(const DlScalerToDlColorIt& that) const { + bool operator<(const DlScalerToDlColorIterator& that) const { return ptr_ < that.ptr_; } @@ -243,9 +244,9 @@ void DlGradientColorSourceBase::store_color_stops( void* pod, const DlScalar* color_data_argb, const float* stop_data) { - do_store_color_stops(pod, DlScalerToDlColorIt(color_data_argb), - DlScalerToDlColorIt(color_data_argb + stop_count_ * 4), - stop_data); + do_store_color_stops( + pod, DlScalerToDlColorIterator(color_data_argb), + DlScalerToDlColorIterator(color_data_argb + stop_count_ * 4), stop_data); } } // namespace flutter