prealloc room for some number of Elements to avoid malloc

I chose 16, as in my test case from android, the depth was
at least 9. Possibly we could make it even smaller if our
underlying impl (SkDeque) would never prune its allocations,
so that we don't malloc repeatedly if we save/restore/save/restore
across the boundary of the first/nth chunk...

BUG=skia:

Change-Id: Id3f0b900b1931f713f80a664f2b4b142f264be8d
Reviewed-on: https://skia-review.googlesource.com/9522
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Mike Reed <reed@google.com>
This commit is contained in:
Mike Reed 2017-03-09 16:39:41 -05:00 committed by Skia Commit-Bot
parent 3304c447b9
commit 94cbbba96f
2 changed files with 7 additions and 2 deletions

View File

@ -495,12 +495,13 @@ void SkClipStack::Element::updateBoundAndGenID(const Element* prior) {
static const int kDefaultElementAllocCnt = 8;
SkClipStack::SkClipStack()
: fDeque(sizeof(Element), kDefaultElementAllocCnt)
: fDeque(sizeof(Element), fStorage, sizeof(fStorage), kDefaultElementAllocCnt)
, fSaveCount(0) {
}
SkClipStack::SkClipStack(const SkClipStack& b)
: fDeque(sizeof(Element), kDefaultElementAllocCnt) {
: fDeque(sizeof(Element), fStorage, sizeof(fStorage), kDefaultElementAllocCnt)
{
*this = b;
}

View File

@ -522,6 +522,10 @@ public:
private:
friend class Iter;
enum {
kPreallocCount = 16
};
intptr_t fStorage[kPreallocCount * sizeof(Element) / sizeof(intptr_t)];
SkDeque fDeque;
int fSaveCount;