aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2017-06-05 13:36:32 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-05 19:29:57 +0000
commit70898afe073c49d8151b25cc5bf234f61c76ffae (patch)
treeb5f9e01a22cf7135a757efcb51cc321871032819 /samplecode
parent9653d3aa84505c30aa5440b5629cdb25525666c3 (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.cpp20
-rw-r--r--samplecode/SampleApp.h3
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*);