aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--samplecode/SampleChineseFling.cpp40
-rw-r--r--src/gpu/GrDrawOpAtlas.cpp9
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.