1e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik/*
2e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * Copyright 2011, The Android Open Source Project
3e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *
4e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * Redistribution and use in source and binary forms, with or without
5e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * modification, are permitted provided that the following conditions
6e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * are met:
7e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *  * Redistributions of source code must retain the above copyright
8e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *    notice, this list of conditions and the following disclaimer.
9e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *  * Redistributions in binary form must reproduce the above copyright
10e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *    notice, this list of conditions and the following disclaimer in the
11e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *    documentation and/or other materials provided with the distribution.
12e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik *
13e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik */
25e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
26d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik#ifndef SurfaceCollectionManager_h
27d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik#define SurfaceCollectionManager_h
28e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
29dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craik#include "TestExport.h"
30dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craik#include <utils/threads.h>
31dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craik
32df35691cd76b673c8a24babfab42d6bec4ee465bChris Craikclass SkRect;
33e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craikclass SkCanvas;
34e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
35e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craiknamespace WebCore {
36e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
37246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craikclass GLWebViewState;
38dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craikclass IntRect;
39dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craikclass TexturesResult;
40d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craikclass SurfaceCollection;
41e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
42d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craikclass TEST_EXPORT SurfaceCollectionManager {
43e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craikpublic:
4464d72d82692e48f595e7a31ac2a1680f11d9186bChris Craik    SurfaceCollectionManager();
45e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
46d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik    ~SurfaceCollectionManager();
47e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
48d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik    bool updateWithSurfaceCollection(SurfaceCollection* collection, bool brandNew);
49e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
5070adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik    void updateScrollableLayer(int layerId, int x, int y);
5170adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik
52bf9aa54ac784685db3d2cd8c0d616b25b289c09eTeng-Hui Zhu    int drawGL(double currentTime, IntRect& viewRect,
539e3ead124cc10fcc888a8be7df9949d3d4ba1bb7Teng-Hui Zhu                SkRect& visibleContentRect, float scale,
541338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu                bool scrolling, bool singleSurfaceMode,
551338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu                bool* collectionsSwappedPtr, bool* newCollectionHasAnimPtr,
56bf9aa54ac784685db3d2cd8c0d616b25b289c09eTeng-Hui Zhu                TexturesResult* texturesResultPtr, bool shouldDraw);
57e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
58e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craikprivate:
59dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craik    void swap();
60d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik    void clearCollections();
611338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu    void updatePaintingCollection(SurfaceCollection* newCollection);
62150a26fa5442a5fc931e5df05808e33aac1a7deaTeng-Hui Zhu    int singleSurfaceModeInvalidation(bool hasRunningAnimation, bool scrolling, bool shouldDraw);
63d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik    SurfaceCollection* m_drawingCollection;
64d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik    SurfaceCollection* m_paintingCollection;
65d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik    SurfaceCollection* m_queuedCollection;
66e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
67dfd2fb1ed3c17d0cbb4af895f74704c22130587fChris Craik    bool m_fastSwapMode;
681338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu    // Used in single surface mode only. True if the previous frame is scrolling.
691338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu    bool m_previouslyScrolling;
701338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu    // Used in single surface mode only. True if there is a new painting tree
711338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu    // added for the current frame.
721338d44578fe97a74e4b57b6f00005b9bed72682Teng-Hui Zhu    bool m_newPaintingCollection;
73e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik};
74e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
75e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik} // namespace WebCore
76e48d27773894f36d85e5c2e2052ab90d502e1c72Chris Craik
77d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik#endif //#define SurfaceCollectionManager_h
78