From d0af3fb179e65fd63de7eedc22e95e506db7e941 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 20 Sep 2023 15:55:35 -0700 Subject: [PATCH 1/3] [Impeller] removed global mutable varable for tessellation --- impeller/tessellator/tessellator.cc | 22 ++++++++++++++++++++-- impeller/tessellator/tessellator.h | 6 ++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/impeller/tessellator/tessellator.cc b/impeller/tessellator/tessellator.cc index 4e2c3c535f41e..7b43a0491e55d 100644 --- a/impeller/tessellator/tessellator.cc +++ b/impeller/tessellator/tessellator.cc @@ -21,7 +21,7 @@ static void HeapFree(void* userData, void* ptr) { } // Note: these units are "number of entities" for bucket size and not in KB. -static TESSalloc alloc = { +static const TESSalloc kAlloc = { HeapAlloc, HeapRealloc, HeapFree, 0, /* =userData */ 16, /* =meshEdgeBucketSize */ 16, /* =meshVertexBucketSize */ @@ -32,7 +32,19 @@ static TESSalloc alloc = { }; Tessellator::Tessellator() - : c_tessellator_(::tessNewTess(&alloc), &DestroyTessellator) {} + : c_tess_alloc_(nullptr, &DestroyTessAlloc), + c_tessellator_(nullptr, &DestroyTessellator) { + { + CTessAlloc tess_alloc(new TESSalloc(), &DestroyTessAlloc); + c_tess_alloc_ = std::move(tess_alloc); + } + memcpy(c_tess_alloc_.get(), &kAlloc, sizeof(TESSalloc)); + { + CTessellator tessellator(::tessNewTess(c_tess_alloc_.get()), + &DestroyTessellator); + c_tessellator_ = std::move(tessellator); + } +} Tessellator::~Tessellator() = default; @@ -128,4 +140,10 @@ void DestroyTessellator(TESStesselator* tessellator) { } } +void DestroyTessAlloc(TESSalloc* alloc) { + if (alloc != nullptr) { + delete alloc; + } +} + } // namespace impeller diff --git a/impeller/tessellator/tessellator.h b/impeller/tessellator/tessellator.h index ff93b7091a3f6..a25aee4794b51 100644 --- a/impeller/tessellator/tessellator.h +++ b/impeller/tessellator/tessellator.h @@ -13,6 +13,7 @@ #include "impeller/geometry/point.h" struct TESStesselator; +struct TESSalloc; namespace impeller { @@ -21,6 +22,10 @@ void DestroyTessellator(TESStesselator* tessellator); using CTessellator = std::unique_ptr; +void DestroyTessAlloc(TESSalloc* alloc); + +using CTessAlloc = std::unique_ptr; + enum class WindingOrder { kClockwise, kCounterClockwise, @@ -64,6 +69,7 @@ class Tessellator { const BuilderCallback& callback) const; private: + CTessAlloc c_tess_alloc_; CTessellator c_tessellator_; FML_DISALLOW_COPY_AND_ASSIGN(Tessellator); From 0378f3c3c42e3bf786396ea83b778e4e4ce4671f Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 20 Sep 2023 16:41:48 -0700 Subject: [PATCH 2/3] remove alloc ivar --- impeller/tessellator/tessellator.cc | 19 ++++--------------- impeller/tessellator/tessellator.h | 6 ------ 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/impeller/tessellator/tessellator.cc b/impeller/tessellator/tessellator.cc index 7b43a0491e55d..717ec7673f471 100644 --- a/impeller/tessellator/tessellator.cc +++ b/impeller/tessellator/tessellator.cc @@ -32,16 +32,11 @@ static const TESSalloc kAlloc = { }; Tessellator::Tessellator() - : c_tess_alloc_(nullptr, &DestroyTessAlloc), - c_tessellator_(nullptr, &DestroyTessellator) { + : c_tessellator_(nullptr, &DestroyTessellator) { + TESSalloc alloc = kAlloc; { - CTessAlloc tess_alloc(new TESSalloc(), &DestroyTessAlloc); - c_tess_alloc_ = std::move(tess_alloc); - } - memcpy(c_tess_alloc_.get(), &kAlloc, sizeof(TESSalloc)); - { - CTessellator tessellator(::tessNewTess(c_tess_alloc_.get()), - &DestroyTessellator); + // libTess2 copies the TESSalloc despite the non-const argument. + CTessellator tessellator(::tessNewTess(&alloc), &DestroyTessellator); c_tessellator_ = std::move(tessellator); } } @@ -140,10 +135,4 @@ void DestroyTessellator(TESStesselator* tessellator) { } } -void DestroyTessAlloc(TESSalloc* alloc) { - if (alloc != nullptr) { - delete alloc; - } -} - } // namespace impeller diff --git a/impeller/tessellator/tessellator.h b/impeller/tessellator/tessellator.h index a25aee4794b51..ff93b7091a3f6 100644 --- a/impeller/tessellator/tessellator.h +++ b/impeller/tessellator/tessellator.h @@ -13,7 +13,6 @@ #include "impeller/geometry/point.h" struct TESStesselator; -struct TESSalloc; namespace impeller { @@ -22,10 +21,6 @@ void DestroyTessellator(TESStesselator* tessellator); using CTessellator = std::unique_ptr; -void DestroyTessAlloc(TESSalloc* alloc); - -using CTessAlloc = std::unique_ptr; - enum class WindingOrder { kClockwise, kCounterClockwise, @@ -69,7 +64,6 @@ class Tessellator { const BuilderCallback& callback) const; private: - CTessAlloc c_tess_alloc_; CTessellator c_tessellator_; FML_DISALLOW_COPY_AND_ASSIGN(Tessellator); From 66b7c78728f3fea7288eecc76c43b5791ff771a8 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 20 Sep 2023 16:42:16 -0700 Subject: [PATCH 3/3] jason feedback --- impeller/tessellator/tessellator.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/impeller/tessellator/tessellator.cc b/impeller/tessellator/tessellator.cc index 717ec7673f471..f6b27215cca31 100644 --- a/impeller/tessellator/tessellator.cc +++ b/impeller/tessellator/tessellator.cc @@ -31,8 +31,7 @@ static const TESSalloc kAlloc = { 0 /* =extraVertices */ }; -Tessellator::Tessellator() - : c_tessellator_(nullptr, &DestroyTessellator) { +Tessellator::Tessellator() : c_tessellator_(nullptr, &DestroyTessellator) { TESSalloc alloc = kAlloc; { // libTess2 copies the TESSalloc despite the non-const argument.