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