diff options
author | Stan Iliev <stani@google.com> | 2016-10-24 10:40:39 -0400 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2016-10-24 12:16:13 -0400 |
commit | f50806afb8982acbab4510a8d04bbcf13a2bcd9e (patch) | |
tree | 9b68924a9a2bffb8241c1f535abd840f45ad55bc /libs/hwui/SkiaCanvas.h | |
parent | 58a7220b89cd99a581f96db09e3a9424b9b13cd9 (diff) |
Merge SkiaCanvas changes from master-skia to master branch.
Most changes are taken from ag/1407698, ag/1336660, ag/1488900.
Test: Built and run manually on angler-eng.
Change-Id: Id4e464b9a83c62b6bc7ea31a30e5ca6cd53b659d
Diffstat (limited to 'libs/hwui/SkiaCanvas.h')
-rw-r--r-- | libs/hwui/SkiaCanvas.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h index 40772dd354f1..d1edff98eac6 100644 --- a/libs/hwui/SkiaCanvas.h +++ b/libs/hwui/SkiaCanvas.h @@ -22,8 +22,7 @@ #include "VectorDrawable.h" #include <SkCanvas.h> -#include <SkClipStack.h> -#include <SkTArray.h> +#include <SkTLazy.h> namespace android { @@ -39,10 +38,7 @@ public: * not be NULL. This constructor will ref() the SkCanvas, and unref() * it in its destructor. */ - explicit SkiaCanvas(SkCanvas* canvas) : mCanvas(canvas) { - SkASSERT(canvas); - canvas->ref(); - } + explicit SkiaCanvas(SkCanvas* canvas); virtual SkCanvas* asSkCanvas() override { return mCanvas.get(); @@ -152,7 +148,7 @@ public: uirenderer::GlFunctorLifecycleListener* listener) override; protected: - explicit SkiaCanvas() {} + SkiaCanvas(); void reset(SkCanvas* skiaCanvas); void drawDrawable(SkDrawable* drawable) { mCanvas->drawDrawable(drawable); } @@ -167,19 +163,26 @@ private: struct SaveRec { int saveCount; SaveFlags::Flags saveFlags; + size_t clipIndex; }; bool mHighContrastText = false; + const SaveRec* currentSaveRec() const; void recordPartialSave(SaveFlags::Flags flags); - void saveClipsForFrame(SkTArray<SkClipStack::Element>& clips, int frameSaveCount); - void applyClips(const SkTArray<SkClipStack::Element>& clips); + + template<typename T> + void recordClip(const T&, SkRegion::Op); + void applyPersistentClips(size_t clipStartIndex); void drawPoints(const float* points, int count, const SkPaint& paint, SkCanvas::PointMode mode); - sk_sp<SkCanvas> mCanvas; + class Clip; + + sk_sp<SkCanvas> mCanvas; std::unique_ptr<SkDeque> mSaveStack; // lazily allocated, tracks partial saves. + std::vector<Clip> mClipStack; // tracks persistent clips. }; } // namespace android |