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 "Color.h" 32 #include "SkRect.h" 33 #include <wtf/text/StringHash.h> 34 35 class SkCanvas; 36 class SkDevice; 37 38 namespace WebCore { 39 40 class InstrumentedPlatformCanvas; 41 class TextureInfo; 42 class TilePainter; 43 class Tile; 44 45 struct TileRenderInfo { 46 // coordinates of the tile 47 int x; 48 int y; 49 50 // current scale factor 51 float scale; 52 53 // the expected size of the tile 54 SkSize tileSize; 55 56 // the painter object in charge of drawing our content 57 TilePainter* tilePainter; 58 59 // the base tile calling us 60 Tile* baseTile; 61 62 // info about the texture that we are to render into 63 TextureInfo* textureInfo; 64 65 bool isPureColor; 66 Color pureColor; 67 }; 68 69 /** 70 * 71 */ 72 class BaseRenderer { 73 public: 74 enum RendererType { Raster, Ganesh }; BaseRenderer(RendererType type)75 BaseRenderer(RendererType type) : m_type(type) {} ~BaseRenderer()76 virtual ~BaseRenderer() {} 77 78 void renderTiledContent(TileRenderInfo& renderInfo); 79 getType()80 RendererType getType() { return m_type; } 81 82 static BaseRenderer* createRenderer(); 83 static void swapRendererIfNeeded(BaseRenderer*& renderer); getCurrentRendererType()84 static RendererType getCurrentRendererType() { return g_currentType; } setCurrentRendererType(RendererType type)85 static void setCurrentRendererType(RendererType type) { g_currentType = type; } 86 87 protected: 88 89 virtual void setupCanvas(const TileRenderInfo& renderInfo, SkCanvas* canvas) = 0; 90 virtual void renderingComplete(const TileRenderInfo& renderInfo, SkCanvas* canvas) = 0; 91 void checkForPureColor(TileRenderInfo& renderInfo, InstrumentedPlatformCanvas& canvas); 92 93 // performs additional pure color check, renderInfo.isPureColor may already be set to true 94 virtual void deviceCheckForPureColor(TileRenderInfo& renderInfo, SkCanvas* canvas) = 0; 95 96 void drawTileInfo(SkCanvas* canvas, const TileRenderInfo& renderInfo, 97 int updateCount, double renderDuration); 98 99 private: 100 RendererType m_type; 101 static RendererType g_currentType; 102 }; 103 104 } // namespace WebCore 105 106 #endif // USE(ACCELERATED_COMPOSITING) 107 #endif // BaseRenderer_h 108