diff options
author | Robert Phillips <robertphillips@google.com> | 2018-06-14 14:31:17 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-15 11:33:14 +0000 |
commit | c8cee446bf9c07da8848bbd032abf26e79966ac1 (patch) | |
tree | 5f024f9dfb1aca470915da9fae96eac0710f5884 /src/atlastext/SkAtlasTextTarget.cpp | |
parent | 9e6402677f1c8f2c3bdc3b812ee38ea2931d92b3 (diff) |
Move op memory storage to GrContext
TBR=bsalomon@google.com
Change-Id: Ifa95bf0073b9d948f2c937d10088b7734b971f90
Reviewed-on: https://skia-review.googlesource.com/131500
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/atlastext/SkAtlasTextTarget.cpp')
-rw-r--r-- | src/atlastext/SkAtlasTextTarget.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp index 0fb9a79ee7..f4cda548af 100644 --- a/src/atlastext/SkAtlasTextTarget.cpp +++ b/src/atlastext/SkAtlasTextTarget.cpp @@ -83,6 +83,11 @@ public: void* handle) : GrTextUtils::Target(width, height, kColorSpaceInfo) , SkAtlasTextTarget(std::move(context), width, height, handle) { + fOpMemoryPool = fContext->internal().grContext()->contextPriv().refOpMemoryPool(); + } + + ~SkInternalAtlasTextTarget() override { + this->deleteOps(); } /** GrTextUtils::Target overrides */ @@ -110,10 +115,13 @@ public: void flush() override; private: + void deleteOps(); + uint32_t fColor; using SkAtlasTextTarget::fWidth; using SkAtlasTextTarget::fHeight; SkTArray<std::unique_ptr<GrAtlasTextOp>, true> fOps; + sk_sp<GrOpMemoryPool> fOpMemoryPool; }; ////////////////////////////////////////////////////////////////////////////// @@ -162,6 +170,7 @@ void SkInternalAtlasTextTarget::addDrawOp(const GrClip& clip, std::unique_ptr<Gr for (int i = 0; i < n; ++i) { GrAtlasTextOp* other = fOps.fromBack(i).get(); if (other->combineIfPossible(op.get(), caps)) { + fOpMemoryPool->release(std::move(op)); return; } if (GrRectsOverlap(op->bounds(), other->bounds())) { @@ -172,12 +181,21 @@ void SkInternalAtlasTextTarget::addDrawOp(const GrClip& clip, std::unique_ptr<Gr fOps.emplace_back(std::move(op)); } +void SkInternalAtlasTextTarget::deleteOps() { + for (int i = 0; i < fOps.count(); ++i) { + if (fOps[i]) { + fOpMemoryPool->release(std::move(fOps[i])); + } + } + fOps.reset(); +} + void SkInternalAtlasTextTarget::flush() { for (int i = 0; i < fOps.count(); ++i) { fOps[i]->executeForTextTarget(this); } this->context()->internal().flush(); - fOps.reset(); + this->deleteOps(); } void GrAtlasTextOp::finalizeForTextTarget(uint32_t color, const GrCaps& caps) { |