aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2014-09-11 12:30:12 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-09-11 12:30:12 -0700
commit0b36e6b65f8c124f2ef2601294288219b3c3a1f0 (patch)
tree62c07c66beca97e2f1ebf9d09d47e53d61f647e3
parent56b00d9e7aecce7ffc6b915972cc3cbfbe051d7e (diff)
Add --matrix to DM, to play around with and maybe use on a bot.
BUG=skia: R=reed@google.com, mtklein@google.com Author: mtklein@chromium.org Review URL: https://codereview.chromium.org/563723005
-rw-r--r--dm/DMCpuGMTask.cpp1
-rw-r--r--dm/DMGpuGMTask.cpp2
-rw-r--r--dm/DMPDFTask.cpp2
-rw-r--r--dm/DMPipeTask.cpp1
-rw-r--r--dm/DMUtil.cpp15
-rw-r--r--dm/DMUtil.h4
6 files changed, 24 insertions, 1 deletions
diff --git a/dm/DMCpuGMTask.cpp b/dm/DMCpuGMTask.cpp
index 63a3c424c8..c3c4ae1367 100644
--- a/dm/DMCpuGMTask.cpp
+++ b/dm/DMCpuGMTask.cpp
@@ -24,6 +24,7 @@ void CpuGMTask::draw() {
AllocatePixels(fColorType, fGM->getISize().width(), fGM->getISize().height(), &bm);
SkCanvas canvas(bm);
+ CanvasPreflight(&canvas);
canvas.concat(fGM->getInitialTransform());
fGM->draw(&canvas);
canvas.flush();
diff --git a/dm/DMGpuGMTask.cpp b/dm/DMGpuGMTask.cpp
index 3178fd6d99..65d65d9598 100644
--- a/dm/DMGpuGMTask.cpp
+++ b/dm/DMGpuGMTask.cpp
@@ -1,5 +1,4 @@
#include "DMGpuGMTask.h"
-
#include "DMUtil.h"
#include "DMWriteTask.h"
#include "SkCommandLineFlags.h"
@@ -35,6 +34,7 @@ void GpuGMTask::draw(GrContextFactory* grFactory) {
return;
}
SkCanvas* canvas = surface->getCanvas();
+ CanvasPreflight(canvas);
canvas->concat(fGM->getInitialTransform());
fGM->draw(canvas);
diff --git a/dm/DMPDFTask.cpp b/dm/DMPDFTask.cpp
index c996aae53c..3102478c2f 100644
--- a/dm/DMPDFTask.cpp
+++ b/dm/DMPDFTask.cpp
@@ -71,12 +71,14 @@ void PDFTask::draw() {
if (fGM.get()) {
rasterize = 0 == (fGM->getFlags() & skiagm::GM::kSkipPDFRasterization_Flag);
SinglePagePDF pdf(fGM->width(), fGM->height());
+ CanvasPreflight(pdf.canvas());
//TODO(mtklein): GM doesn't do this. Why not?
//pdf.canvas()->concat(fGM->getInitialTransform());
fGM->draw(pdf.canvas());
pdfData.reset(pdf.end());
} else {
SinglePagePDF pdf(fPicture->cullRect().width(), fPicture->cullRect().height());
+ CanvasPreflight(pdf.canvas());
fPicture->playback(pdf.canvas());
pdfData.reset(pdf.end());
}
diff --git a/dm/DMPipeTask.cpp b/dm/DMPipeTask.cpp
index c7c64bd578..9f54560fe0 100644
--- a/dm/DMPipeTask.cpp
+++ b/dm/DMPipeTask.cpp
@@ -55,6 +55,7 @@ void PipeTask::draw() {
fFlags,
bitmap.width(),
bitmap.height());
+ CanvasPreflight(pipeCanvas);
pipeCanvas->concat(fGM->getInitialTransform());
fGM->draw(pipeCanvas);
writer.endRecording();
diff --git a/dm/DMUtil.cpp b/dm/DMUtil.cpp
index 19b1c0f397..a702bbe874 100644
--- a/dm/DMUtil.cpp
+++ b/dm/DMUtil.cpp
@@ -1,11 +1,25 @@
#include "DMUtil.h"
#include "SkColorPriv.h"
+#include "SkCommandLineFlags.h"
#include "SkPicture.h"
#include "SkPictureRecorder.h"
+DEFINE_string(matrix, "1 0 0 0 1 0 0 0 1",
+ "Matrix to apply to the canvas before drawing.");
+
namespace DM {
+void CanvasPreflight(SkCanvas* canvas) {
+ if (FLAGS_matrix.count() == 9) {
+ SkMatrix m;
+ for (int i = 0; i < 9; i++) {
+ m[i] = (SkScalar)atof(FLAGS_matrix[i]);
+ }
+ canvas->concat(m);
+ }
+}
+
SkString UnderJoin(const char* a, const char* b) {
SkString s;
s.appendf("%s_%s", a, b);
@@ -27,6 +41,7 @@ SkPicture* RecordPicture(skiagm::GM* gm, SkBBHFactory* factory, bool skr) {
SkCanvas* canvas = skr ? recorder.EXPERIMENTAL_beginRecording(w, h, factory)
: recorder. DEPRECATED_beginRecording(w, h, factory);
+ CanvasPreflight(canvas);
canvas->concat(gm->getInitialTransform());
gm->draw(canvas);
canvas->flush();
diff --git a/dm/DMUtil.h b/dm/DMUtil.h
index fa29c76757..49da857edb 100644
--- a/dm/DMUtil.h
+++ b/dm/DMUtil.h
@@ -2,6 +2,7 @@
#define DMUtil_DEFINED
#include "SkBitmap.h"
+#include "SkCanvas.h"
#include "SkString.h"
#include "gm.h"
@@ -36,6 +37,9 @@ unsigned MaxComponentDifference(const SkBitmap& a, const SkBitmap& b);
// Are these identical bitmaps?
bool BitmapsEqual(const SkBitmap& a, const SkBitmap& b);
+// Hook to modify canvas using global flag values (e.g. --matrix).
+void CanvasPreflight(SkCanvas*);
+
} // namespace DM
#endif // DMUtil_DEFINED