diff options
-rw-r--r-- | samplecode/SampleChineseFling.cpp | 40 | ||||
-rw-r--r-- | src/gpu/GrDrawOpAtlas.cpp | 9 |
2 files changed, 28 insertions, 21 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; diff --git a/src/gpu/GrDrawOpAtlas.cpp b/src/gpu/GrDrawOpAtlas.cpp index b2780e6635..0f18325817 100644 --- a/src/gpu/GrDrawOpAtlas.cpp +++ b/src/gpu/GrDrawOpAtlas.cpp @@ -371,7 +371,7 @@ void GrDrawOpAtlas::compact(GrDeferredUploadToken startTokenForNextFlush) { // a blinking cursor is drawn. // TODO: consider if we should also do this if it's been a long time since the last atlas use if (atlasUsedThisFlush) { - int availablePlots = 0; + SkTArray<Plot*> availablePlots; uint32_t lastPageIndex = fNumPages - 1; // For all plots but the last one, update number of flushes since used, and check to see @@ -400,7 +400,7 @@ void GrDrawOpAtlas::compact(GrDeferredUploadToken startTokenForNextFlush) { // Count plots we can potentially upload to in all pages except the last one // (the potential compactee). if (plot->flushesSinceLastUsed() > kRecentlyUsedCount) { - ++availablePlots; + availablePlots.push_back() = plot; } plotIter.next(); @@ -439,9 +439,10 @@ void GrDrawOpAtlas::compact(GrDeferredUploadToken startTokenForNextFlush) { // see if there's room in an earlier page and if so evict. // We need to be somewhat harsh here so that one plot that is consistently in use // doesn't end up locking the page in memory. - if (availablePlots) { + if (availablePlots.count() > 0) { this->processEvictionAndResetRects(plot); - --availablePlots; + this->processEvictionAndResetRects(availablePlots.back()); + availablePlots.pop_back(); } } else if (plot->lastUseToken() != GrDeferredUploadToken::AlreadyFlushedToken()) { // otherwise if aged out just evict it. |