From cad0acf4db5b03f9b9bf6afedde162fd1c8c4c92 Mon Sep 17 00:00:00 2001 From: Jim Van Verth Date: Fri, 16 Feb 2018 18:41:41 -0500 Subject: 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 Reviewed-by: Brian Salomon --- samplecode/SampleChineseFling.cpp | 40 ++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to 'samplecode') 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 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 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> fBlobs; SkRandom fRand; SkScalar fScale; + SkScalar fTranslate; int fIndex; typedef SkView INHERITED; -- cgit v1.2.3