aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-05-16 10:39:06 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-16 21:29:03 +0000
commitc090c647e48f8f9adc199fe715c773a33980f1d4 (patch)
tree683deec9b22dab375f03b8c18ca6f5e0cb8d1156 /include
parent50e66d4ab43685acce5a7a942074d562c5fd9639 (diff)
move files out of private, and fix up callers to IWYU
Realized that a pending CL needed to add (yet another) private type to SkRecords.h, but w/o this CL I'd be forced to move that header also into private. This change frees us up to not have transitive exposure for types that need to be recorded. Bug: skia: Change-Id: Id79f1c2e44ba85e063c1360cf96c92de6397ca2b Reviewed-on: https://skia-review.googlesource.com/17031 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'include')
-rw-r--r--include/core/SkPictureRecorder.h4
-rw-r--r--include/private/SkMiniRecorder.h57
-rw-r--r--include/private/SkRecords.h356
3 files changed, 2 insertions, 415 deletions
diff --git a/include/core/SkPictureRecorder.h b/include/core/SkPictureRecorder.h
index d898b91cca..09839cba5e 100644
--- a/include/core/SkPictureRecorder.h
+++ b/include/core/SkPictureRecorder.h
@@ -8,7 +8,6 @@
#ifndef SkPictureRecorder_DEFINED
#define SkPictureRecorder_DEFINED
-#include "../private/SkMiniRecorder.h"
#include "SkBBHFactory.h"
#include "SkPicture.h"
#include "SkRefCnt.h"
@@ -22,6 +21,7 @@ namespace android {
class GrContext;
class SkCanvas;
class SkDrawable;
+class SkMiniRecorder;
class SkPictureRecord;
class SkRecord;
class SkRecorder;
@@ -116,7 +116,7 @@ private:
sk_sp<SkBBoxHierarchy> fBBH;
std::unique_ptr<SkRecorder> fRecorder;
sk_sp<SkRecord> fRecord;
- SkMiniRecorder fMiniRecorder;
+ std::unique_ptr<SkMiniRecorder> fMiniRecorder;
typedef SkNoncopyable INHERITED;
};
diff --git a/include/private/SkMiniRecorder.h b/include/private/SkMiniRecorder.h
deleted file mode 100644
index fd1e8f624d..0000000000
--- a/include/private/SkMiniRecorder.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkMiniRecorder_DEFINED
-#define SkMiniRecorder_DEFINED
-
-#include "SkRecords.h"
-#include "SkScalar.h"
-#include "SkTypes.h"
-class SkCanvas;
-
-// Records small pictures, but only a limited subset of the canvas API, and may fail.
-class SkMiniRecorder : SkNoncopyable {
-public:
- SkMiniRecorder();
- ~SkMiniRecorder();
-
- // Try to record an op. Returns false on failure.
- bool drawPath(const SkPath&, const SkPaint&);
- bool drawRect(const SkRect&, const SkPaint&);
- bool drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y, const SkPaint&);
-
- // Detach anything we've recorded as a picture, resetting this SkMiniRecorder.
- // If cull is nullptr we'll calculate it.
- sk_sp<SkPicture> detachAsPicture(const SkRect* cull);
-
- // Flush anything we've recorded to the canvas, resetting this SkMiniRecorder.
- // This is logically the same as but rather more efficient than:
- // sk_sp<SkPicture> pic(this->detachAsPicture(nullptr));
- // pic->playback(canvas);
- void flushAndReset(SkCanvas*);
-
-private:
- enum class State {
- kEmpty,
- kDrawPath,
- kDrawRect,
- kDrawTextBlob,
- };
-
- State fState;
-
- template <size_t A, size_t B>
- struct Max { static const size_t val = A > B ? A : B; };
-
- static const size_t kInlineStorage =
- Max<sizeof(SkRecords::DrawPath),
- Max<sizeof(SkRecords::DrawRect),
- sizeof(SkRecords::DrawTextBlob)>::val>::val;
- SkAlignedSStorage<kInlineStorage> fBuffer;
-};
-
-#endif//SkMiniRecorder_DEFINED
diff --git a/include/private/SkRecords.h b/include/private/SkRecords.h
deleted file mode 100644
index 6af4aad3f5..0000000000
--- a/include/private/SkRecords.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkRecords_DEFINED
-#define SkRecords_DEFINED
-
-#include "SkData.h"
-#include "SkCanvas.h"
-#include "SkDrawable.h"
-#include "SkImage.h"
-#include "SkImageFilter.h"
-#include "SkMatrix.h"
-#include "SkPath.h"
-#include "SkPicture.h"
-#include "SkRect.h"
-#include "SkRegion.h"
-#include "SkRRect.h"
-#include "SkRSXform.h"
-#include "SkString.h"
-#include "SkTextBlob.h"
-#include "SkVertices.h"
-
-// Windows.h, will pull in all of the GDI defines. GDI #defines
-// DrawText to DrawTextA or DrawTextW, but SkRecord has a struct
-// called DrawText. Since this file does not use GDI, undefing
-// DrawText makes things less confusing.
-#ifdef DrawText
-#undef DrawText
-#endif
-
-namespace SkRecords {
-
-// A list of all the types of canvas calls we can record.
-// Each of these is reified into a struct below.
-//
-// (We're using the macro-of-macro trick here to do several different things with the same list.)
-//
-// We leave this SK_RECORD_TYPES macro defined for use by code that wants to operate on SkRecords
-// types polymorphically. (See SkRecord::Record::{visit,mutate} for an example.)
-//
-// Order doesn't technically matter here, but the compiler can generally generate better code if
-// you keep them semantically grouped, especially the Draws. It's also nice to leave NoOp at 0.
-#define SK_RECORD_TYPES(M) \
- M(NoOp) \
- M(Restore) \
- M(Save) \
- M(SaveLayer) \
- M(SetMatrix) \
- M(Translate) \
- M(Concat) \
- M(ClipPath) \
- M(ClipRRect) \
- M(ClipRect) \
- M(ClipRegion) \
- M(DrawArc) \
- M(DrawDrawable) \
- M(DrawImage) \
- M(DrawImageLattice) \
- M(DrawImageRect) \
- M(DrawImageNine) \
- M(DrawDRRect) \
- M(DrawOval) \
- M(DrawPaint) \
- M(DrawPath) \
- M(DrawPatch) \
- M(DrawPicture) \
- M(DrawPoints) \
- M(DrawPosText) \
- M(DrawPosTextH) \
- M(DrawText) \
- M(DrawTextOnPath) \
- M(DrawTextRSXform) \
- M(DrawRRect) \
- M(DrawRect) \
- M(DrawRegion) \
- M(DrawTextBlob) \
- M(DrawAtlas) \
- M(DrawVertices) \
- M(DrawAnnotation)
-
-// Defines SkRecords::Type, an enum of all record types.
-#define ENUM(T) T##_Type,
-enum Type { SK_RECORD_TYPES(ENUM) };
-#undef ENUM
-
-#define ACT_AS_PTR(ptr) \
- operator T*() const { return ptr; } \
- T* operator->() const { return ptr; }
-
-// An Optional doesn't own the pointer's memory, but may need to destroy non-POD data.
-template <typename T>
-class Optional : SkNoncopyable {
-public:
- Optional() : fPtr(nullptr) {}
- Optional(T* ptr) : fPtr(ptr) {}
- Optional(Optional&& o) : fPtr(o.fPtr) {
- o.fPtr = nullptr;
- }
- ~Optional() { if (fPtr) fPtr->~T(); }
-
- ACT_AS_PTR(fPtr)
-private:
- T* fPtr;
-};
-
-// Like Optional, but ptr must not be NULL.
-template <typename T>
-class Adopted : SkNoncopyable {
-public:
- Adopted(T* ptr) : fPtr(ptr) { SkASSERT(fPtr); }
- Adopted(Adopted* source) {
- // Transfer ownership from source to this.
- fPtr = source->fPtr;
- source->fPtr = NULL;
- }
- ~Adopted() { if (fPtr) fPtr->~T(); }
-
- ACT_AS_PTR(fPtr)
-private:
- T* fPtr;
-};
-
-// PODArray doesn't own the pointer's memory, and we assume the data is POD.
-template <typename T>
-class PODArray {
-public:
- PODArray() {}
- PODArray(T* ptr) : fPtr(ptr) {}
- // Default copy and assign.
-
- ACT_AS_PTR(fPtr)
-private:
- T* fPtr;
-};
-
-#undef ACT_AS_PTR
-
-// SkPath::getBounds() isn't thread safe unless we precache the bounds in a singlethreaded context.
-// SkPath::cheapComputeDirection() is similar.
-// Recording is a convenient time to cache these, or we can delay it to between record and playback.
-struct PreCachedPath : public SkPath {
- PreCachedPath() {}
- PreCachedPath(const SkPath& path);
-};
-
-// Like SkPath::getBounds(), SkMatrix::getType() isn't thread safe unless we precache it.
-// This may not cover all SkMatrices used by the picture (e.g. some could be hiding in a shader).
-struct TypedMatrix : public SkMatrix {
- TypedMatrix() {}
- TypedMatrix(const SkMatrix& matrix);
-};
-
-enum Tags {
- kDraw_Tag = 1, // May draw something (usually named DrawFoo).
- kHasImage_Tag = 2, // Contains an SkImage or SkBitmap.
- kHasText_Tag = 4, // Contains text.
- kHasPaint_Tag = 8, // May have an SkPaint field, at least optionally.
-
- kDrawWithPaint_Tag = kDraw_Tag | kHasPaint_Tag,
-};
-
-// A macro to make it a little easier to define a struct that can be stored in SkRecord.
-#define RECORD(T, tags, ...) \
-struct T { \
- static const Type kType = T##_Type; \
- static const int kTags = tags; \
- __VA_ARGS__; \
-};
-
-RECORD(NoOp, 0);
-RECORD(Restore, 0,
- SkIRect devBounds;
- TypedMatrix matrix);
-RECORD(Save, 0);
-
-RECORD(SaveLayer, kHasPaint_Tag,
- Optional<SkRect> bounds;
- Optional<SkPaint> paint;
- sk_sp<const SkImageFilter> backdrop;
- sk_sp<const SkImage> clipMask;
- Optional<SkMatrix> clipMatrix;
- SkCanvas::SaveLayerFlags saveLayerFlags);
-
-RECORD(SetMatrix, 0,
- TypedMatrix matrix);
-RECORD(Concat, 0,
- TypedMatrix matrix);
-
-RECORD(Translate, 0,
- SkScalar dx;
- SkScalar dy);
-
-struct ClipOpAndAA {
- ClipOpAndAA() {}
- ClipOpAndAA(SkClipOp op, bool aa) : fOp(static_cast<unsigned>(op)), fAA(aa) {}
-
- SkClipOp op() const { return static_cast<SkClipOp>(fOp); }
- bool aa() const { return fAA != 0; }
-
-private:
- unsigned fOp : 31; // This really only needs to be 3, but there's no win today to do so.
- unsigned fAA : 1; // MSVC won't pack an enum with an bool, so we call this an unsigned.
-};
-static_assert(sizeof(ClipOpAndAA) == 4, "ClipOpAndAASize");
-
-RECORD(ClipPath, 0,
- SkIRect devBounds;
- PreCachedPath path;
- ClipOpAndAA opAA);
-RECORD(ClipRRect, 0,
- SkIRect devBounds;
- SkRRect rrect;
- ClipOpAndAA opAA);
-RECORD(ClipRect, 0,
- SkIRect devBounds;
- SkRect rect;
- ClipOpAndAA opAA);
-RECORD(ClipRegion, 0,
- SkIRect devBounds;
- SkRegion region;
- SkClipOp op);
-
-// While not strictly required, if you have an SkPaint, it's fastest to put it first.
-RECORD(DrawArc, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkRect oval;
- SkScalar startAngle;
- SkScalar sweepAngle;
- unsigned useCenter);
-RECORD(DrawDRRect, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkRRect outer;
- SkRRect inner);
-RECORD(DrawDrawable, kDraw_Tag,
- Optional<SkMatrix> matrix;
- SkRect worstCaseBounds;
- int32_t index);
-RECORD(DrawImage, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag,
- Optional<SkPaint> paint;
- sk_sp<const SkImage> image;
- SkScalar left;
- SkScalar top);
-RECORD(DrawImageLattice, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag,
- Optional<SkPaint> paint;
- sk_sp<const SkImage> image;
- int xCount;
- PODArray<int> xDivs;
- int yCount;
- PODArray<int> yDivs;
- int flagCount;
- PODArray<SkCanvas::Lattice::Flags> flags;
- SkIRect src;
- SkRect dst);
-RECORD(DrawImageRect, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag,
- Optional<SkPaint> paint;
- sk_sp<const SkImage> image;
- Optional<SkRect> src;
- SkRect dst;
- SkCanvas::SrcRectConstraint constraint);
-RECORD(DrawImageNine, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag,
- Optional<SkPaint> paint;
- sk_sp<const SkImage> image;
- SkIRect center;
- SkRect dst);
-RECORD(DrawOval, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkRect oval);
-RECORD(DrawPaint, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint);
-RECORD(DrawPath, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- PreCachedPath path);
-RECORD(DrawPicture, kDraw_Tag|kHasPaint_Tag,
- Optional<SkPaint> paint;
- sk_sp<const SkPicture> picture;
- TypedMatrix matrix);
-RECORD(DrawPoints, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkCanvas::PointMode mode;
- unsigned count;
- SkPoint* pts);
-RECORD(DrawPosText, kDraw_Tag|kHasText_Tag|kHasPaint_Tag,
- SkPaint paint;
- PODArray<char> text;
- size_t byteLength;
- PODArray<SkPoint> pos);
-RECORD(DrawPosTextH, kDraw_Tag|kHasText_Tag|kHasPaint_Tag,
- SkPaint paint;
- PODArray<char> text;
- unsigned byteLength;
- SkScalar y;
- PODArray<SkScalar> xpos);
-RECORD(DrawRRect, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkRRect rrect);
-RECORD(DrawRect, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkRect rect);
-RECORD(DrawRegion, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- SkRegion region);
-RECORD(DrawText, kDraw_Tag|kHasText_Tag|kHasPaint_Tag,
- SkPaint paint;
- PODArray<char> text;
- size_t byteLength;
- SkScalar x;
- SkScalar y);
-RECORD(DrawTextBlob, kDraw_Tag|kHasText_Tag|kHasPaint_Tag,
- SkPaint paint;
- sk_sp<const SkTextBlob> blob;
- SkScalar x;
- SkScalar y);
-RECORD(DrawTextOnPath, kDraw_Tag|kHasText_Tag|kHasPaint_Tag,
- SkPaint paint;
- PODArray<char> text;
- size_t byteLength;
- PreCachedPath path;
- TypedMatrix matrix);
-RECORD(DrawTextRSXform, kDraw_Tag|kHasText_Tag|kHasPaint_Tag,
- SkPaint paint;
- PODArray<char> text;
- size_t byteLength;
- PODArray<SkRSXform> xforms;
- Optional<SkRect> cull);
-RECORD(DrawPatch, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- PODArray<SkPoint> cubics;
- PODArray<SkColor> colors;
- PODArray<SkPoint> texCoords;
- SkBlendMode bmode);
-RECORD(DrawAtlas, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag,
- Optional<SkPaint> paint;
- sk_sp<const SkImage> atlas;
- PODArray<SkRSXform> xforms;
- PODArray<SkRect> texs;
- PODArray<SkColor> colors;
- int count;
- SkBlendMode mode;
- Optional<SkRect> cull);
-RECORD(DrawVertices, kDraw_Tag|kHasPaint_Tag,
- SkPaint paint;
- sk_sp<SkVertices> vertices;
- SkBlendMode bmode);
-RECORD(DrawAnnotation, 0, // TODO: kDraw_Tag, skia:5548
- SkRect rect;
- SkString key;
- sk_sp<SkData> value);
-#undef RECORD
-
-} // namespace SkRecords
-
-#endif//SkRecords_DEFINED