1/*
2 * Copyright 2011, The Android Open Source Project
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *  * Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 *  * Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef TilesProfiler_h
27#define TilesProfiler_h
28
29#if USE(ACCELERATED_COMPOSITING)
30
31#include "IntRect.h"
32#include "SkRect.h"
33#include <wtf/Vector.h>
34
35namespace WebCore {
36
37class Tile;
38
39struct TileProfileRecord {
40    TileProfileRecord(int left, int top, int right, int bottom, float scale, int isReady, int level) {
41        this->left = left;
42        this->top = top;
43        this->right = right;
44        this->bottom = bottom;
45        this->scale = scale;
46        this->isReady = isReady;
47        this->level = level;
48    }
49    int left, top, right, bottom;
50    bool isReady;
51    int level;
52    float scale;
53};
54
55class TilesProfiler {
56public:
57    TilesProfiler();
58
59    void start();
60    float stop();
61    void clear();
62    void nextFrame(int left, int top, int right, int bottom, float scale);
63    void nextTile(Tile* tile, float scale, bool inView);
64    void nextInval(const SkIRect& rect, float scale);
65    int numFrames() {
66        return m_records.size();
67    };
68
69    int numTilesInFrame(int frame) {
70        return m_records[frame].size();
71    }
72
73    TileProfileRecord* getTile(int frame, int tile) {
74        return &m_records[frame][tile];
75    }
76
77    bool enabled() { return m_enabled; }
78
79private:
80    bool m_enabled;
81    unsigned int m_goodTiles;
82    unsigned int m_badTiles;
83    WTF::Vector<WTF::Vector<TileProfileRecord> > m_records;
84    double m_time;
85};
86
87} // namespace WebCore
88
89#endif // USE(ACCELERATED_COMPOSITING)
90#endif // TilesProfiler_h
91