Replace SkDeque with std::deque in SkiaCanvas

SkDeque is private to Skia and the std library one should be
sufficient.

This change was started by kjlubick@ and continued by nscobie@.

Test: existing presubmits (functionality unchanged)
Change-Id: I60751aa77337c1601428d00d3ba4bc4b8ccb67a9
This commit is contained in:
Kevin Lubick
2023-01-05 19:52:09 +00:00
committed by Nolan Scobie
parent 9882b54f75
commit b3731211b6
2 changed files with 37 additions and 34 deletions

View File

@@ -16,23 +16,12 @@
#include "SkiaCanvas.h"
#include "CanvasProperty.h"
#include "NinePatchUtils.h"
#include "SkBlendMode.h"
#include "VectorDrawable.h"
#include "hwui/Bitmap.h"
#include "hwui/MinikinUtils.h"
#include "hwui/PaintFilter.h"
#include "pipeline/skia/AnimatedDrawables.h"
#include "pipeline/skia/HolePunch.h"
#include <SkAndroidFrameworkUtils.h>
#include <SkAnimatedImage.h>
#include <SkBitmap.h>
#include <SkCanvasPriv.h>
#include <SkCanvasStateUtils.h>
#include <SkColorFilter.h>
#include <SkDeque.h>
#include <SkDrawable.h>
#include <SkFont.h>
#include <SkGraphics.h>
@@ -41,8 +30,8 @@
#include <SkMatrix.h>
#include <SkPaint.h>
#include <SkPicture.h>
#include <SkRSXform.h>
#include <SkRRect.h>
#include <SkRSXform.h>
#include <SkRect.h>
#include <SkRefCnt.h>
#include <SkShader.h>
@@ -54,6 +43,16 @@
#include <optional>
#include <utility>
#include "CanvasProperty.h"
#include "NinePatchUtils.h"
#include "SkBlendMode.h"
#include "VectorDrawable.h"
#include "hwui/Bitmap.h"
#include "hwui/MinikinUtils.h"
#include "hwui/PaintFilter.h"
#include "pipeline/skia/AnimatedDrawables.h"
#include "pipeline/skia/HolePunch.h"
namespace android {
using uirenderer::PaintUtils;
@@ -176,7 +175,7 @@ int SkiaCanvas::save(SaveFlags::Flags flags) {
// operation. It does this by explicitly saving off the clip & matrix state
// when requested and playing it back after the SkCanvas::restore.
void SkiaCanvas::restore() {
const auto* rec = this->currentSaveRec();
const SaveRec* rec = this->currentSaveRec();
if (!rec) {
// Fast path - no record for this frame.
mCanvas->restore();
@@ -245,7 +244,9 @@ void SkiaCanvas::restoreUnclippedLayer(int restoreCount, const Paint& paint) {
}
const SkiaCanvas::SaveRec* SkiaCanvas::currentSaveRec() const {
const SaveRec* rec = mSaveStack ? static_cast<const SaveRec*>(mSaveStack->back()) : nullptr;
const SaveRec* rec = (mSaveStack && !mSaveStack->empty())
? static_cast<const SaveRec*>(&mSaveStack->back())
: nullptr;
int currentSaveCount = mCanvas->getSaveCount();
SkASSERT(!rec || currentSaveCount >= rec->saveCount);
@@ -277,13 +278,12 @@ void SkiaCanvas::recordPartialSave(SaveFlags::Flags flags) {
}
if (!mSaveStack) {
mSaveStack.reset(new SkDeque(sizeof(struct SaveRec), 8));
mSaveStack.reset(new std::deque<SaveRec>());
}
SaveRec* rec = static_cast<SaveRec*>(mSaveStack->push_back());
rec->saveCount = mCanvas->getSaveCount();
rec->saveFlags = flags;
rec->clipIndex = mClipStack.size();
mSaveStack->emplace_back(mCanvas->getSaveCount(), // saveCount
flags, // saveFlags
mClipStack.size()); // clipIndex
}
template <typename T>
@@ -314,7 +314,7 @@ void SkiaCanvas::applyPersistentClips(size_t clipStartIndex) {
// If the current/post-restore save rec is also persisting clips, we
// leave them on the stack to be reapplied part of the next restore().
// Otherwise we're done and just pop them.
const auto* rec = this->currentSaveRec();
const SaveRec* rec = this->currentSaveRec();
if (!rec || (rec->saveFlags & SaveFlags::Clip)) {
mClipStack.erase(begin, end);
}

View File

@@ -19,20 +19,20 @@
#ifdef __ANDROID__ // Layoutlib does not support hardware acceleration
#include "DeferredLayerUpdater.h"
#endif
#include "RenderNode.h"
#include "VectorDrawable.h"
#include "hwui/Canvas.h"
#include "hwui/Paint.h"
#include "hwui/BlurDrawLooper.h"
#include <SkCanvas.h>
#include <SkDeque.h>
#include "pipeline/skia/AnimatedDrawables.h"
#include "src/core/SkArenaAlloc.h"
#include <cassert>
#include <deque>
#include <optional>
#include "RenderNode.h"
#include "VectorDrawable.h"
#include "hwui/BlurDrawLooper.h"
#include "hwui/Canvas.h"
#include "hwui/Paint.h"
#include "pipeline/skia/AnimatedDrawables.h"
#include "src/core/SkArenaAlloc.h"
enum class SkBlendMode;
class SkRRect;
@@ -211,6 +211,9 @@ private:
int saveCount;
SaveFlags::Flags saveFlags;
size_t clipIndex;
SaveRec(int saveCount, SaveFlags::Flags saveFlags, size_t clipIndex)
: saveCount(saveCount), saveFlags(saveFlags), clipIndex(clipIndex) {}
};
const SaveRec* currentSaveRec() const;
@@ -224,11 +227,11 @@ private:
class Clip;
std::unique_ptr<SkCanvas> mCanvasOwned; // might own a canvas we allocated
SkCanvas* mCanvas; // we do NOT own this canvas, it must survive us
// unless it is the same as mCanvasOwned.get()
std::unique_ptr<SkDeque> mSaveStack; // lazily allocated, tracks partial saves.
std::vector<Clip> mClipStack; // tracks persistent clips.
std::unique_ptr<SkCanvas> mCanvasOwned; // Might own a canvas we allocated.
SkCanvas* mCanvas; // We do NOT own this canvas, it must survive us
// unless it is the same as mCanvasOwned.get().
std::unique_ptr<std::deque<SaveRec>> mSaveStack; // Lazily allocated, tracks partial saves.
std::vector<Clip> mClipStack; // Tracks persistent clips.
sk_sp<PaintFilter> mPaintFilter;
};