diff options
author | Jim Van Verth <jvanverth@google.com> | 2018-02-16 18:41:41 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-17 00:11:27 +0000 |
commit | cad0acf4db5b03f9b9bf6afedde162fd1c8c4c92 (patch) | |
tree | 3dcf5959a84ed60a1fb5de64e46e413eea12d6f1 /samplecode | |
parent | dfc0e910dfdf7ad11995d357e44c029d839f2e73 (diff) |
Fix thrashing issue with multitextured atlas.
To try to reduce memory usage, the atlas will look for space in
the earliest created pages and then invalidate plots in the latest
page to try to move those plots into an earlier one. The problem
was that the available space was not being evicted, so we kept loading
data back into the latest page.
Bug: skia:
Change-Id: Ic8668f6f66bf1153dbcb5edae7622fa9edfa71dd
Reviewed-on: https://skia-review.googlesource.com/98801
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleChineseFling.cpp | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/samplecode/SampleChineseFling.cpp b/samplecode/SampleChineseFling.cpp index ef86747daf..76222e91a0 100644 --- a/samplecode/SampleChineseFling.cpp +++ b/samplecode/SampleChineseFling.cpp @@ -130,7 +130,7 @@ private: class ChineseZoomView : public SampleView { public: - ChineseZoomView() : fBlobs(kNumBlobs), fScale(1.0f) {} + ChineseZoomView() : fBlobs(kNumBlobs), fScale(15.0f), fTranslate(0.0f) {} protected: bool onQuery(SkEvent* evt) override { @@ -153,6 +153,7 @@ protected: } void onDrawContent(SkCanvas* canvas) override { + bool afterFirstFrame = fInitialized; if (!fInitialized) { this->init(); fInitialized = true; @@ -167,26 +168,30 @@ protected: paint.setTextSize(11); paint.setTextEncoding(SkPaint::kUTF32_TextEncoding); + if (afterFirstFrame) { #if SK_SUPPORT_GPU - GrContext* grContext = canvas->getGrContext(); - if (grContext) { - sk_sp<SkImage> image = - grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 0); - canvas->drawImageRect(image, - SkRect::MakeXYWH(512.0f, 10.0f, 512.0f, 512.0), &paint); - image = grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 1); - canvas->drawImageRect(image, - SkRect::MakeXYWH(1024.0f, 10.0f, 512.f, 512.0f), &paint); - image = grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 2); - canvas->drawImageRect(image, - SkRect::MakeXYWH(512.0f, 522.0f, 512.0f, 512.0f), &paint); - image = grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 3); - canvas->drawImageRect(image, - SkRect::MakeXYWH(1024.0f, 522.0f, 512.0f, 512.0f), &paint); - } + GrContext* grContext = canvas->getGrContext(); + if (grContext) { + sk_sp<SkImage> image = + grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 0); + canvas->drawImageRect(image, + SkRect::MakeXYWH(10.0f, 10.0f, 512.0f, 512.0), &paint); + image = grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 1); + canvas->drawImageRect(image, + SkRect::MakeXYWH(522.0f, 10.0f, 512.f, 512.0f), &paint); + image = grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 2); + canvas->drawImageRect(image, + SkRect::MakeXYWH(10.0f, 522.0f, 512.0f, 512.0f), &paint); + image = grContext->getFontAtlasImage_ForTesting(GrMaskFormat::kA8_GrMaskFormat, 3); + canvas->drawImageRect(image, + SkRect::MakeXYWH(522.0f, 522.0f, 512.0f, 512.0f), &paint); + } #endif + } canvas->scale(fScale, fScale); + canvas->translate(0, fTranslate); + fTranslate -= 0.5f; // draw a consistent run of the 'words' - one word per line SkScalar y = 0; @@ -247,6 +252,7 @@ private: SkTArray<sk_sp<SkTextBlob>> fBlobs; SkRandom fRand; SkScalar fScale; + SkScalar fTranslate; int fIndex; typedef SkView INHERITED; |