aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2017-04-03 10:52:48 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-03 15:42:15 +0000
commitb55dd553124cd00260bc9e3a63ec8a8fe09412a8 (patch)
treec2456bbc9458f1ce9b9c33c56db9449b5b05c7f2 /samplecode
parent94421943818126921cf9fd3337f372e9f377bd16 (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.cpp25
-rw-r--r--samplecode/SampleApp.h5
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*);