Merge "[Release] Webkit2-efl-123997_0.11.75" into tizen_2.2
[framework/web/webkit-efl.git] / Source / WebKit2 / WebProcess / WebPage / UpdateAtlas.h
1 /*
2  Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies)
3
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  Library General Public License for more details.
13
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB.  If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18  */
19
20 #ifndef UpdateAtlas_h
21 #define UpdateAtlas_h
22
23 #include "ShareableSurface.h"
24
25 #if USE(UI_SIDE_COMPOSITING)
26 namespace WebCore {
27 class GraphicsContext;
28 class IntRect;
29 }
30
31 namespace WebKit {
32
33 class UpdateAtlas {
34 public:
35     UpdateAtlas(int dimension, ShareableBitmap::Flags);
36
37     inline WebCore::IntSize size() const { return m_surface->size(); }
38
39     // Returns a null pointer of there is no available buffer.
40     PassOwnPtr<WebCore::GraphicsContext> beginPaintingOnAvailableBuffer(ShareableSurface::Handle&, const WebCore::IntSize&, WebCore::IntPoint& offset);
41     void didSwapBuffers();
42     ShareableBitmap::Flags flags() const { return m_flags; }
43     bool supportsAlpha() const { return flags() & ShareableBitmap::SupportsAlpha; }
44
45     void addTimeInactive(double seconds)
46     {
47         ASSERT(!isInUse());
48         m_inactivityInSeconds += seconds;
49     }
50     bool isInactive() const
51     {
52         const double inactiveSecondsTolerance = 3;
53         return m_inactivityInSeconds > inactiveSecondsTolerance;
54     }
55     bool isInUse() const { return m_using; }
56
57 private:
58     void buildLayoutIfNeeded();
59     WebCore::IntPoint offsetForIndex(int) const;
60     int findAvailableIndex(const WebCore::IntSize&);
61
62 private:
63     enum State {
64         Available,
65         Taken
66     };
67
68     Vector<State> m_bufferStates;
69     Vector<int> m_layout;
70     ShareableBitmap::Flags m_flags;
71     RefPtr<ShareableSurface> m_surface;
72     double m_inactivityInSeconds;
73     bool m_using;
74 };
75
76 }
77 #endif
78 #endif // UpdateAtlas_h