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 <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/xml/SkDOM.cpp b/src/xml/SkDOM.cpp
index b1cf1d5..37b230b 100644
--- a/src/xml/SkDOM.cpp
+++ b/src/xml/SkDOM.cpp
@@ -48,16 +48,17 @@
     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 @@
 #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<char>(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 @@
 
         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<SkDOMAttr>(attrCount);
+        SkDOM::Node* node = fAlloc->make<SkDOM::Node>();
 
         node->fName = fElemName;
         node->fFirstChild = nullptr;
         node->fAttrCount = SkToU16(attrCount);
+        node->fAttrs = attrs;
         node->fType = fElemType;
 
         if (fRoot == nullptr) {
@@ -278,7 +280,7 @@
     }
 
     SkTDArray<SkDOM::Node*> fParentStack;
-    SkChunkAlloc*           fAlloc;
+    SkArenaAlloc*           fAlloc;
     SkDOM::Node*            fRoot;
     bool                    fNeedToFlush;
 
diff --git a/src/xml/SkDOM.h b/src/xml/SkDOM.h
index 0ffb042..e72bcad 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 @@
     };
 
 private:
-    SkChunkAlloc                 fAlloc;
+    SkArenaAlloc                 fAlloc;
     Node*                        fRoot;
     std::unique_ptr<SkDOMParser> fParser;