1 /* 2 * Copyright 2010, 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 QueuedOperation_h 27 #define QueuedOperation_h 28 29 namespace WebCore { 30 31 class TiledPage; 32 33 class QueuedOperation { 34 public: 35 enum OperationType { Undefined, PaintTile, PaintLayer, DeleteTexture }; 36 QueuedOperation(OperationType type, TiledPage* page) 37 : m_type(type) 38 , m_page(page) {} 39 virtual ~QueuedOperation() {} 40 virtual void run() = 0; 41 virtual bool operator==(const QueuedOperation* operation) = 0; 42 virtual int priority() { return -1; } 43 OperationType type() const { return m_type; } 44 TiledPage* page() const { return m_page; } 45 private: 46 OperationType m_type; 47 TiledPage* m_page; 48 }; 49 50 class OperationFilter { 51 public: 52 virtual ~OperationFilter() {} 53 virtual bool check(QueuedOperation* operation) = 0; 54 }; 55 56 class PageFilter : public OperationFilter { 57 public: 58 PageFilter(TiledPage* page) : m_page(page) {} 59 virtual bool check(QueuedOperation* operation) 60 { 61 if (operation->page() == m_page) 62 return true; 63 return false; 64 } 65 private: 66 TiledPage* m_page; 67 }; 68 69 class PagePaintFilter : public OperationFilter { 70 public: 71 PagePaintFilter(TiledPage* page) : m_page(page) {} 72 virtual bool check(QueuedOperation* operation) 73 { 74 if (operation->type() == QueuedOperation::PaintTile 75 && operation->page() == m_page) 76 return true; 77 return false; 78 } 79 private: 80 TiledPage* m_page; 81 }; 82 83 } 84 85 #endif // QueuedOperation_h 86