diff options
author | Yuqian Li <liyuqian@google.com> | 2017-04-03 10:52:48 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-03 15:42:15 +0000 |
commit | b55dd553124cd00260bc9e3a63ec8a8fe09412a8 (patch) | |
tree | c2456bbc9458f1ce9b9c33c56db9449b5b05c7f2 /samplecode | |
parent | 94421943818126921cf9fd3337f372e9f377bd16 (diff) |
Add SkThreadedBMPDevice for Threaded Raster Backend
BUG=skia:
Change-Id: I882b6563c735796f3a4dcd19f6c79e7efd8306ae
Reviewed-on: https://skia-review.googlesource.com/10505
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleApp.cpp | 25 | ||||
-rw-r--r-- | samplecode/SampleApp.h | 5 |
2 files changed, 30 insertions, 0 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index bd7d567575..ce97024774 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -35,6 +35,7 @@ #include "sk_tool_utils.h" #include "SkScan.h" #include "SkClipOpPriv.h" +#include "SkThreadedBMPDevice.h" #include "SkReadBuffer.h" #include "SkStream.h" @@ -1090,6 +1091,14 @@ static void drawText(SkCanvas* canvas, SkString str, SkScalar left, SkScalar top #include "SkDumpCanvas.h" 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)); + tCanvas.reset(new SkCanvas(tDev.get())); + canvas = tCanvas.get(); + } + gAnimTimer.updateTime(); if (fGesture.isActive()) { @@ -1153,6 +1162,8 @@ void SampleWindow::draw(SkCanvas* canvas) { this->inval(nullptr); } + canvas->flush(); + // do this last fDevManager->publishCanvas(fDeviceType, canvas, this); } @@ -1843,6 +1854,16 @@ bool SampleWindow::onHandleChar(SkUnichar uni) { this->inval(nullptr); } 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(); + break; case ' ': gAnimTimer.togglePauseResume(); if (this->sendAnimatePulse()) { @@ -2208,6 +2229,10 @@ void SampleWindow::updateTitle() { title.prepend(gDeviceTypePrefix[fDeviceType]); + if (gSampleWindow->getThreads()) { + title.prependf("[T%d] ", gSampleWindow->getThreads()); + } + if (gSkUseAnalyticAA) { if (gSkForceAnalyticAA) { title.prepend("<FAAA> "); diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h index e4c1f38922..65037f7c0c 100644 --- a/samplecode/SampleApp.h +++ b/samplecode/SampleApp.h @@ -156,6 +156,9 @@ public: DeviceType getDeviceType() const { return fDeviceType; } int getColorConfigIndex() const { return fColorConfigIndex; } + int getThreads() const { return fThreads; } + void setThreads(int threads) { fThreads = threads; } + protected: void onDraw(SkCanvas* canvas) override; bool onHandleKey(SkKey key) override; @@ -240,6 +243,8 @@ private: //Stores slide specific settings SkOSMenu* fSlideMenu; // We pass ownership to SkWindow, when we call addMenu + int fThreads = 0; + void loadView(SkView*); void updateTitle(); bool getRawTitle(SkString*); |