174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard/* 274eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * Copyright (C) 2012 The Android Open Source Project 374eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * 474eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * Licensed under the Apache License, Version 2.0 (the "License"); 574eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * you may not use this file except in compliance with the License. 674eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * You may obtain a copy of the License at 774eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * 874eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * http://www.apache.org/licenses/LICENSE-2.0 974eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * 1074eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * Unless required by applicable law or agreed to in writing, software 1174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * distributed under the License is distributed on an "AS IS" BASIS, 1274eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1374eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * See the License for the specific language governing permissions and 1474eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard * limitations under the License. 1574eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard */ 1674eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 1774eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#ifndef DumpLayer_h 1874eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#define DumpLayer_h 1974eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 20cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck#include "FixedPositioning.h" 2174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#include "IntPoint.h" 22cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck#include "LayerAndroid.h" 2374eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#include "SkPoint.h" 2474eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#include "SkRect.h" 2574eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#include "SkSize.h" 2674eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#include "TransformationMatrix.h" 2774eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 2874eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// Debug tools : dump the layers tree in a file. 2974eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// The format is simple: 3074eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// properties have the form: key = value; 3174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// all statements are finished with a semi-colon. 3274eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// value can be: 3374eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// - int 3474eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// - float 3574eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// - array of elements 3674eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// - composed type 3774eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// a composed type enclose properties in { and } 3874eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// an array enclose composed types in { }, separated with a comma. 3974eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// exemple: 4074eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// { 4174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// x = 3; 4274eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// y = 4; 4374eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// value = { 4474eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// x = 3; 4574eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// y = 4; 4674eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// }; 4774eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// anarray = [ 4874eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// { x = 3; }, 4974eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// { y = 4; } 5074eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// ]; 5174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard// } 5274eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 5374eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roardnamespace WebCore { 5474eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 55cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckclass LayerDumper { 56cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckpublic: 57cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck LayerDumper(int initialIndentLevel = 0) 58cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck : m_indentLevel(initialIndentLevel) 59cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck {} 60cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual ~LayerDumper() {} 61cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 62cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void beginLayer(const char* className, const LayerAndroid* layerPtr) {} 63cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 64cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void endLayer() {} 65cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 66cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void beginChildren(int childCount) { 67cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck m_indentLevel++; 68cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck } 69cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void endChildren() { 70cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck m_indentLevel--; 71cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck } 72cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 73cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeIntVal(const char* label, int value); 74cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeHexVal(const char* label, int value); 75cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeFloatVal(const char* label, float value); 76cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writePoint(const char* label, SkPoint value); 77cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeIntPoint(const char* label, IntPoint value); 78cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeSize(const char* label, SkSize value); 79cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeRect(const char* label, SkRect value); 80cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeMatrix(const char* label, const TransformationMatrix& value); 81cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeLength(const char* label, SkLength value); 82cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 83cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckprotected: 84cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void writeEntry(const char* label, const char* value) = 0; 85cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 86cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck int m_indentLevel; 87cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 88cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckprivate: 89cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck static const int BUF_SIZE = 4096; 90cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck char m_valueBuffer[BUF_SIZE]; 91cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck}; 92cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 93cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckclass FileLayerDumper : public LayerDumper { 94cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckpublic: 95cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck FileLayerDumper(FILE* file) 96cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck : m_file(file) 97cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck {} 98cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 99cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void beginLayer(const char* className, const LayerAndroid* layerPtr); 100cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void endLayer(); 101cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckprotected: 102cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck virtual void writeEntry(const char* label, const char* value); 103cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck 104cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reckprivate: 105cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck void writeLine(const char* str); 106cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck FILE* m_file; 107cc6ffa0710f304fbcaa43953b0dc89e1d9b931a2John Reck}; 10874eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 10974eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard} 11074eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard 11174eee052852e8c1761c48ad2a44a4b394714b8cfNicolas Roard#endif // DumpLayer_h 112