From 70c60638be6eba5f5b54e0056bc0fd716f086eb0 Mon Sep 17 00:00:00 2001 From: Herb Derby Date: Tue, 14 Feb 2017 15:21:07 -0500 Subject: Move SkDOM to SkArenaAlloc from SkChunkAlloc. TBR=mtklein@google.com Change-Id: Icecfc661c9bd4ed03409a132947af0f78784f984 Reviewed-on: https://skia-review.googlesource.com/8401 Reviewed-by: Herb Derby Commit-Queue: Herb Derby --- src/xml/SkDOM.cpp | 18 ++++++++++-------- src/xml/SkDOM.h | 4 ++-- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'src/xml') diff --git a/src/xml/SkDOM.cpp b/src/xml/SkDOM.cpp index b1cf1d5360..37b230b949 100644 --- a/src/xml/SkDOM.cpp +++ b/src/xml/SkDOM.cpp @@ -48,16 +48,17 @@ struct SkDOMNode { const char* fName; SkDOMNode* fFirstChild; SkDOMNode* fNextSibling; + SkDOMAttr* fAttrs; uint16_t fAttrCount; uint8_t fType; uint8_t fPad; const SkDOMAttr* attrs() const { - return (const SkDOMAttr*)(this + 1); + return fAttrs; } SkDOMAttr* attrs() { - return (SkDOMAttr*)(this + 1); + return fAttrs; } }; @@ -175,17 +176,17 @@ const char* SkDOM::AttrIter::next(const char** value) { #include "SkXMLParser.h" #include "SkTDArray.h" -static char* dupstr(SkChunkAlloc* chunk, const char src[]) { +static char* dupstr(SkArenaAlloc* chunk, const char src[]) { SkASSERT(chunk && src); size_t len = strlen(src); - char* dst = (char*)chunk->alloc(len + 1, SkChunkAlloc::kThrow_AllocFailType); + char* dst = chunk->makeArrayDefault(len + 1); memcpy(dst, src, len + 1); return dst; } class SkDOMParser : public SkXMLParser { public: - SkDOMParser(SkChunkAlloc* chunk) : SkXMLParser(&fParserError), fAlloc(chunk) { + SkDOMParser(SkArenaAlloc* chunk) : SkXMLParser(&fParserError), fAlloc(chunk) { fAlloc->reset(); fRoot = nullptr; fLevel = 0; @@ -200,12 +201,13 @@ protected: int attrCount = fAttrs.count(); - SkDOM::Node* node = (SkDOM::Node*)fAlloc->alloc(sizeof(SkDOM::Node) + attrCount * sizeof(SkDOM::Attr), - SkChunkAlloc::kThrow_AllocFailType); + SkDOMAttr* attrs = fAlloc->makeArrayDefault(attrCount); + SkDOM::Node* node = fAlloc->make(); node->fName = fElemName; node->fFirstChild = nullptr; node->fAttrCount = SkToU16(attrCount); + node->fAttrs = attrs; node->fType = fElemType; if (fRoot == nullptr) { @@ -278,7 +280,7 @@ private: } SkTDArray fParentStack; - SkChunkAlloc* fAlloc; + SkArenaAlloc* fAlloc; SkDOM::Node* fRoot; bool fNeedToFlush; diff --git a/src/xml/SkDOM.h b/src/xml/SkDOM.h index 0ffb04232a..e72bcadea8 100644 --- a/src/xml/SkDOM.h +++ b/src/xml/SkDOM.h @@ -8,8 +8,8 @@ #ifndef SkDOM_DEFINED #define SkDOM_DEFINED -#include "../private/SkChunkAlloc.h" #include "../private/SkTemplates.h" +#include "SkArenaAlloc.h" #include "SkScalar.h" #include "SkTypes.h" @@ -84,7 +84,7 @@ public: }; private: - SkChunkAlloc fAlloc; + SkArenaAlloc fAlloc; Node* fRoot; std::unique_ptr fParser; -- cgit v1.2.3