diff options
author | Yuqian Li <liyuqian@google.com> | 2017-06-05 13:36:32 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-05 19:29:57 +0000 |
commit | 70898afe073c49d8151b25cc5bf234f61c76ffae (patch) | |
tree | b5f9e01a22cf7135a757efcb51cc321871032819 /samplecode | |
parent | 9653d3aa84505c30aa5440b5629cdb25525666c3 (diff) |
Add TiledDrawScheduler so we can concurrently draw and enque
(instead of finishing enque before draw). The highlight is that we can now
achieve 9x speedup compared to 5x in all our previous approaches
(including multi-picture draw).
The schedulers here are experimental. I'd like to move on to try initializing
once for each draw before further polishing and optimizing the schedule
mechanism.
Bug: skia:
Change-Id: Idc3d030d475af9645c24c5372ff62b9a402206cc
Reviewed-on: https://skia-review.googlesource.com/17826
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleApp.cpp | 20 | ||||
-rw-r--r-- | samplecode/SampleApp.h | 3 |
2 files changed, 18 insertions, 5 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 87873f16f1..16dbef24a4 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -1094,8 +1094,8 @@ static void drawText(SkCanvas* canvas, SkString str, SkScalar left, SkScalar top void SampleWindow::draw(SkCanvas* canvas) { std::unique_ptr<SkThreadedBMPDevice> tDev; std::unique_ptr<SkCanvas> tCanvas; - if (fThreads > 0) { - tDev.reset(new SkThreadedBMPDevice(this->getBitmap(), fThreads)); + if (fTiles > 0 && fDeviceType == kRaster_DeviceType) { + tDev.reset(new SkThreadedBMPDevice(this->getBitmap(), fTiles, fThreads)); tCanvas.reset(new SkCanvas(tDev.get())); canvas = tCanvas.get(); } @@ -1860,11 +1860,21 @@ bool SampleWindow::onHandleChar(SkUnichar uni) { } break; case '+': - gSampleWindow->setThreads(gSampleWindow->getThreads() + 1); + gSampleWindow->setTiles(gSampleWindow->getTiles() + 1); this->inval(nullptr); this->updateTitle(); break; case '-': + gSampleWindow->setTiles(SkTMax(0, gSampleWindow->getTiles() - 1)); + this->inval(nullptr); + this->updateTitle(); + break; + case '>': + gSampleWindow->setThreads(gSampleWindow->getThreads() + 1); + this->inval(nullptr); + this->updateTitle(); + break; + case '<': gSampleWindow->setThreads(SkTMax(0, gSampleWindow->getThreads() - 1)); this->inval(nullptr); this->updateTitle(); @@ -2242,8 +2252,8 @@ void SampleWindow::updateTitle() { title.prepend(gDeviceTypePrefix[fDeviceType]); - if (gSampleWindow->getThreads()) { - title.prependf("[T%d] ", gSampleWindow->getThreads()); + if (gSampleWindow->getTiles()) { + title.prependf("[T%d/%d] ", gSampleWindow->getTiles(), gSampleWindow->getThreads()); } if (gSkUseAnalyticAA) { diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h index 4fd75abc6d..6ddb5c5a0d 100644 --- a/samplecode/SampleApp.h +++ b/samplecode/SampleApp.h @@ -157,6 +157,8 @@ public: DeviceType getDeviceType() const { return fDeviceType; } int getColorConfigIndex() const { return fColorConfigIndex; } + int getTiles() const { return fTiles; } + void setTiles(int tiles) { fTiles = tiles; } int getThreads() const { return fThreads; } void setThreads(int threads) { fThreads = threads; } @@ -246,6 +248,7 @@ private: //Stores slide specific settings SkOSMenu* fSlideMenu; // We pass ownership to SkWindow, when we call addMenu + int fTiles = 0; int fThreads = 0; void loadView(SkView*); |