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 BaseRenderer_h 27 #define BaseRenderer_h 28 29 #if USE(ACCELERATED_COMPOSITING) 30 31 #include "PerformanceMonitor.h" 32 #include "SkRect.h" 33 34 class SkCanvas; 35 class SkDevice; 36 37 namespace WebCore { 38 39 class TextureInfo; 40 class TilePainter; 41 class BaseTile; 42 43 struct TileRenderInfo { 44 // coordinates of the tile 45 int x; 46 int y; 47 48 // current scale factor 49 float scale; 50 51 // inval rectangle with coordinates in the tile's coordinate space 52 SkIRect* invalRect; 53 54 // the expected size of the tile 55 SkSize tileSize; 56 57 // the painter object in charge of drawing our content 58 TilePainter* tilePainter; 59 60 // the base tile calling us 61 BaseTile* baseTile; 62 63 // info about the texture that we are to render into 64 TextureInfo* textureInfo; 65 66 // specifies whether or not to measure the rendering performance 67 bool measurePerf; 68 }; 69 70 /** 71 * 72 */ 73 class BaseRenderer { 74 public: 75 enum RendererType { Raster, Ganesh }; 76 BaseRenderer(RendererType type) : m_type(type) {} 77 virtual ~BaseRenderer() {} 78 79 int renderTiledContent(const TileRenderInfo& renderInfo); 80 81 RendererType getType() { return m_type; } 82 83 static BaseRenderer* createRenderer(); 84 static void swapRendererIfNeeded(BaseRenderer*& renderer); 85 static RendererType getCurrentRendererType() { return g_currentType; } 86 static void setCurrentRendererType(RendererType type) { g_currentType = type; } 87 88 protected: 89 90 virtual void setupCanvas(const TileRenderInfo& renderInfo, SkCanvas* canvas) = 0; 91 virtual void setupPartialInval(const TileRenderInfo& renderInfo, SkCanvas* canvas) {} 92 virtual void renderingComplete(const TileRenderInfo& renderInfo, SkCanvas* canvas) = 0; 93 94 void drawTileInfo(SkCanvas* canvas, const TileRenderInfo& renderInfo, 95 int pictureCount); 96 97 virtual const String* getPerformanceTags(int& tagCount) = 0; 98 99 // Performance tracking 100 PerformanceMonitor m_perfMon; 101 102 private: 103 RendererType m_type; 104 static RendererType g_currentType; 105 }; 106 107 } // namespace WebCore 108 109 #endif // USE(ACCELERATED_COMPOSITING) 110 #endif // BaseRenderer_h 111