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>
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index bd7d567..ce97024 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 @@
#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 @@
this->inval(nullptr);
}
+ canvas->flush();
+
// do this last
fDevManager->publishCanvas(fDeviceType, canvas, this);
}
@@ -1843,6 +1854,16 @@
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 @@
title.prepend(gDeviceTypePrefix[fDeviceType]);
+ if (gSampleWindow->getThreads()) {
+ title.prependf("[T%d] ", gSampleWindow->getThreads());
+ }
+
if (gSkUseAnalyticAA) {
if (gSkForceAnalyticAA) {
title.prepend("<FAAA> ");