diff options
author | mtklein <mtklein@chromium.org> | 2016-08-18 15:42:32 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-18 15:42:32 -0700 |
commit | 5fa47f4fd13b3158de4599414c86d17649c2dd1c (patch) | |
tree | 729c8339c1d6a1488fc57a3102e78c7bf119b89f /src/core/SkMatrix.cpp | |
parent | abe795e4db533c2e230be0c2be868754e5a02a7e (diff) |
Fast path translate() in SkCanvas and SkLiteDL.
This adds didTranslate() so that SkLiteDL (and other canvas recorders)
can record the translate rather than the full concat.
It also adds a case to SkMatrix::preTranslate() to fast path
translate x translate -> translate (i.e. +=).
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2255283002
Review-Url: https://codereview.chromium.org/2255283002
Diffstat (limited to 'src/core/SkMatrix.cpp')
-rw-r--r-- | src/core/SkMatrix.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp index 0fd802087f..fb0c69d7c7 100644 --- a/src/core/SkMatrix.cpp +++ b/src/core/SkMatrix.cpp @@ -290,7 +290,12 @@ void SkMatrix::preTranslate(SkScalar dx, SkScalar dy) { return; } - if (this->hasPerspective()) { + if (fTypeMask <= kTranslate_Mask) { + fMat[kMTransX] += dx; + fMat[kMTransY] += dy; + this->setTypeMask((fMat[kMTransX] != 0 || fMat[kMTransY] != 0) ? kTranslate_Mask + : kIdentity_Mask); + } else if (this->hasPerspective()) { SkMatrix m; m.setTranslate(dx, dy); this->preConcat(m); @@ -1100,7 +1105,7 @@ void SkMatrix::mapVectors(SkPoint dst[], const SkPoint src[], int count) const { void SkMatrix::mapRectScaleTranslate(SkRect* dst, const SkRect& src) const { SkASSERT(dst); SkASSERT(this->isScaleTranslate()); - + SkScalar sx = fMat[kMScaleX]; SkScalar sy = fMat[kMScaleY]; SkScalar tx = fMat[kMTransX]; |