1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef DumpLayer_h 18 #define DumpLayer_h 19 20 #include "FixedPositioning.h" 21 #include "IntPoint.h" 22 #include "LayerAndroid.h" 23 #include "SkPoint.h" 24 #include "SkRect.h" 25 #include "SkSize.h" 26 #include "TransformationMatrix.h" 27 28 // Debug tools : dump the layers tree in a file. 29 // The format is simple: 30 // properties have the form: key = value; 31 // all statements are finished with a semi-colon. 32 // value can be: 33 // - int 34 // - float 35 // - array of elements 36 // - composed type 37 // a composed type enclose properties in { and } 38 // an array enclose composed types in { }, separated with a comma. 39 // exemple: 40 // { 41 // x = 3; 42 // y = 4; 43 // value = { 44 // x = 3; 45 // y = 4; 46 // }; 47 // anarray = [ 48 // { x = 3; }, 49 // { y = 4; } 50 // ]; 51 // } 52 53 namespace WebCore { 54 55 class LayerDumper { 56 public: 57 LayerDumper(int initialIndentLevel = 0) m_indentLevel(initialIndentLevel)58 : m_indentLevel(initialIndentLevel) 59 {} ~LayerDumper()60 virtual ~LayerDumper() {} 61 beginLayer(const char * className,const LayerAndroid * layerPtr)62 virtual void beginLayer(const char* className, const LayerAndroid* layerPtr) {} 63 endLayer()64 virtual void endLayer() {} 65 beginChildren(int childCount)66 virtual void beginChildren(int childCount) { 67 m_indentLevel++; 68 } endChildren()69 virtual void endChildren() { 70 m_indentLevel--; 71 } 72 73 void writeIntVal(const char* label, int value); 74 void writeHexVal(const char* label, int value); 75 void writeFloatVal(const char* label, float value); 76 void writePoint(const char* label, SkPoint value); 77 void writeIntPoint(const char* label, IntPoint value); 78 void writeSize(const char* label, SkSize value); 79 void writeRect(const char* label, SkRect value); 80 void writeMatrix(const char* label, const TransformationMatrix& value); 81 void writeLength(const char* label, SkLength value); 82 83 protected: 84 virtual void writeEntry(const char* label, const char* value) = 0; 85 86 int m_indentLevel; 87 88 private: 89 static const int BUF_SIZE = 4096; 90 char m_valueBuffer[BUF_SIZE]; 91 }; 92 93 class FileLayerDumper : public LayerDumper { 94 public: FileLayerDumper(FILE * file)95 FileLayerDumper(FILE* file) 96 : m_file(file) 97 {} 98 99 virtual void beginLayer(const char* className, const LayerAndroid* layerPtr); 100 virtual void endLayer(); 101 protected: 102 virtual void writeEntry(const char* label, const char* value); 103 104 private: 105 void writeLine(const char* str); 106 FILE* m_file; 107 }; 108 109 } 110 111 #endif // DumpLayer_h 112