1411bb7237e5148dc398ae0f3e53ea5f2eb4402decaryclark@google.com/* 2451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org * Copyright 2012 Google Inc. 3451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org * 4451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org * Use of this source code is governed by a BSD-style license that can be 5451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org * found in the LICENSE file. 6451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org */ 7451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 8451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org#ifndef PictureRenderer_DEFINED 9451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org#define PictureRenderer_DEFINED 10a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 11161e1ba4c0a82e21c7d68808529699fd2394ad6cscroggo@google.com#include "SkCanvas.h" 12a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com#include "SkCountdown.h" 13a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com#include "SkDrawFilter.h" 14f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org#include "SkMath.h" 15ea6a306457e23d579ee86cd705c83e4e1e0693c3reed@google.com#include "SkPaint.h" 169a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com#include "SkPicture.h" 17770963f23f4fc313db0fa3bac18b1b8aafb55f17robertphillips@google.com#include "SkPictureRecorder.h" 18acfb30e5bb797249f4ec41edda4c4d4b86e0e5d0scroggo@google.com#include "SkRect.h" 19451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org#include "SkRefCnt.h" 20a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com#include "SkRunnable.h" 219a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com#include "SkString.h" 22a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com#include "SkTDArray.h" 23a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com#include "SkThreadPool.h" 24a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com#include "SkTypes.h" 25451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 260612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org#if SK_SUPPORT_GPU 270612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org#include "GrContextFactory.h" 280612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org#include "GrContext.h" 290612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org#endif 300612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org 3190c0fbd34947b6b644e90c5b2253752035f65b64commit-bot@chromium.org#include "image_expectations.h" 3290c0fbd34947b6b644e90c5b2253752035f65b64commit-bot@chromium.org 33451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgclass SkBitmap; 34451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgclass SkCanvas; 356177e6999d23a4268ffd98dedfb1da00e272a89brobertphillips@google.comclass SkGLContextHelper; 36a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.comclass SkThread; 37451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 38451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgnamespace sk_tools { 39451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 40cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.comclass TiledPictureRenderer; 41cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 42451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgclass PictureRenderer : public SkRefCnt { 43cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 44451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgpublic: 45c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org enum SkDeviceTypes { 460556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_ANGLE 470556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com kAngle_DeviceType, 480556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 496ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#if SK_MESA 506ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com kMesa_DeviceType, 516ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#endif 52c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org kBitmap_DeviceType, 53c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org#if SK_SUPPORT_GPU 540556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com kGPU_DeviceType, 550fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org kNVPR_DeviceType, 56c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org#endif 57c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org }; 58c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org 599313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org enum BBoxHierarchyType { 609313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org kNone_BBoxHierarchyType = 0, 61c22d1398089fdb95480fb3459b23e4931e4f5280commit-bot@chromium.org kQuadTree_BBoxHierarchyType, 629313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org kRTree_BBoxHierarchyType, 637b53706a7d596a2d8dce6cfe5b543264e5a37239junov@chromium.org kTileGrid_BBoxHierarchyType, 64cdd0f92b1aca0c2164ac1a24d7f14a6ad3cc10f5commit-bot@chromium.org 65cdd0f92b1aca0c2164ac1a24d7f14a6ad3cc10f5commit-bot@chromium.org kLast_BBoxHierarchyType = kTileGrid_BBoxHierarchyType, 669313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org }; 679313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org 68a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com // this uses SkPaint::Flags as a base and adds additional flags 69a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com enum DrawFilterFlags { 70a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com kNone_DrawFilterFlag = 0, 71881b10b023bcba3c81f1d9e98e62b7b6855b0f11reed@google.com kHinting_DrawFilterFlag = 0x10000, // toggles between no hinting and normal hinting 72881b10b023bcba3c81f1d9e98e62b7b6855b0f11reed@google.com kSlightHinting_DrawFilterFlag = 0x20000, // toggles between slight and normal hinting 73881b10b023bcba3c81f1d9e98e62b7b6855b0f11reed@google.com kAAClip_DrawFilterFlag = 0x40000, // toggles between soft and hard clip 74387db0a2e516ca01508f7d16433f84da2ea3b93bhumper@google.com kMaskFilter_DrawFilterFlag = 0x80000, // toggles on/off mask filters (e.g., blurs) 75a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com }; 76a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com 77491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com SK_COMPILE_ASSERT(!(kMaskFilter_DrawFilterFlag & SkPaint::kAllFlags), maskfilter_flag_must_be_greater); 78a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com SK_COMPILE_ASSERT(!(kHinting_DrawFilterFlag & SkPaint::kAllFlags), 79a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com hinting_flag_must_be_greater); 80a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com SK_COMPILE_ASSERT(!(kSlightHinting_DrawFilterFlag & SkPaint::kAllFlags), 81a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com slight_hinting_flag_must_be_greater); 82a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com 83a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com /** 84a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com * Called with each new SkPicture to render. 85f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * 86f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * @param pict The SkPicture to render. 873f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * @param writePath The output directory within which this renderer should write all images, 883f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * or NULL if this renderer should not write all images. 893f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * @param mismatchPath The output directory within which this renderer should write any images 903f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * which do not match expectations, or NULL if this renderer should not write mismatches. 91f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * @param inputFilename The name of the input file we are rendering. 92f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * @param useChecksumBasedFilenames Whether to use checksum-based filenames when writing 93f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * bitmap images to disk. 94a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com */ 953f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org virtual void init(SkPicture* pict, const SkString* writePath, const SkString* mismatchPath, 96f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org const SkString* inputFilename, bool useChecksumBasedFilenames); 979a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 989a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 998991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org * TODO(epoger): Temporary hack, while we work on http://skbug.com/2584 ('bench_pictures is 1008991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org * timing reading pixels and writing json files'), such that: 1018991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org * - render_pictures can call this method and continue to work 1028991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org * - any other callers (bench_pictures) will skip calls to write() by default 1038991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org */ 1048991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org void enableWrites() { fEnableWrites = true; } 1058991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org 1068991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org /** 107c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com * Set the viewport so that only the portion listed gets drawn. 108c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com */ 109c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com void setViewport(SkISize size) { fViewport = size; } 110c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com 111c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com /** 11282ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com * Set the scale factor at which draw the picture. 11382ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com */ 11482ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com void setScaleFactor(SkScalar scale) { fScaleFactor = scale; } 11582ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com 11682ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com /** 1179a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Perform any setup that should done prior to each iteration of render() which should not be 1189a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * timed. 1199a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 1209a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual void setup() {} 1219a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 1229a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 123f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * Perform the work. If this is being called within the context of bench_pictures, 124f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * this is the step that will be timed. 125f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * 126f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * Typically "the work" is rendering an SkPicture into a bitmap, but in some subclasses 127f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * it is recording the source SkPicture into another SkPicture. 128f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * 1293f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * If fWritePath has been specified, the result of the work will be written to that dir. 1303f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * If fMismatchPath has been specified, and the actual image result differs from its 1313f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * expectation, the result of the work will be written to that dir. 132f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * 133f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * @param out If non-null, the implementing subclass MAY allocate an SkBitmap, copy the 134f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * output image into it, and return it here. (Some subclasses ignore this parameter) 1353f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * @return bool True if rendering succeeded and, if fWritePath had been specified, the output 136f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * was successfully written to a file. 1379a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 138f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) = 0; 1399a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 140a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com /** 141a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com * Called once finished with a particular SkPicture, before calling init again, and before 142a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com * being done with this Renderer. 143a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com */ 1449d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org virtual void end(); 145a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 146cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com /** 147cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * If this PictureRenderer is actually a TiledPictureRender, return a pointer to this as a 148cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * TiledPictureRender so its methods can be called. 149cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com */ 150cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com virtual TiledPictureRenderer* getTiledRenderer() { return NULL; } 151cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 15208085f808b808bfb14fcb247bb8cb1a5e8d43dccscroggo@google.com /** 15308085f808b808bfb14fcb247bb8cb1a5e8d43dccscroggo@google.com * Resets the GPU's state. Does nothing if the backing is raster. For a GPU renderer, calls 15451c040ed1e8c50bec4297bbe25242f644b40b0b7commit-bot@chromium.org * flush, swapBuffers and, if callFinish is true, finish. 15508085f808b808bfb14fcb247bb8cb1a5e8d43dccscroggo@google.com * @param callFinish Whether to call finish. 15608085f808b808bfb14fcb247bb8cb1a5e8d43dccscroggo@google.com */ 15708085f808b808bfb14fcb247bb8cb1a5e8d43dccscroggo@google.com void resetState(bool callFinish); 1589d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org 1590556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com /** 16094d8f1ed6116780346ffa39ed683f1977786434arobertphillips@google.com * Remove all decoded textures from the CPU caches and all uploaded textures 16194d8f1ed6116780346ffa39ed683f1977786434arobertphillips@google.com * from the GPU. 16294d8f1ed6116780346ffa39ed683f1977786434arobertphillips@google.com */ 16394d8f1ed6116780346ffa39ed683f1977786434arobertphillips@google.com void purgeTextures(); 16494d8f1ed6116780346ffa39ed683f1977786434arobertphillips@google.com 16594d8f1ed6116780346ffa39ed683f1977786434arobertphillips@google.com /** 1660556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com * Set the backend type. Returns true on success and false on failure. 1670556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com */ 1680556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com bool setDeviceType(SkDeviceTypes deviceType) { 169c81686cd6edba2cfedcfd5ad6a164f160ddfb49fkeyar@chromium.org fDeviceType = deviceType; 1700556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_SUPPORT_GPU 1710556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com // In case this function is called more than once 1720556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com SkSafeUnref(fGrContext); 1730556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com fGrContext = NULL; 1740556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com // Set to Native so it will have an initial value. 1750556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com GrContextFactory::GLContextType glContextType = GrContextFactory::kNative_GLContextType; 1760556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 1770556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com switch(deviceType) { 1780556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kBitmap_DeviceType: 1790556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return true; 1800556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_SUPPORT_GPU 1810556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kGPU_DeviceType: 1820556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com // Already set to GrContextFactory::kNative_GLContextType, above. 1830556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 1840fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org case kNVPR_DeviceType: 1850fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org glContextType = GrContextFactory::kNVPR_GLContextType; 1860fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org break; 1870556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_ANGLE 1880556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kAngle_DeviceType: 1890556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com glContextType = GrContextFactory::kANGLE_GLContextType; 1900556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 1910556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 1926ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#if SK_MESA 1936ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com case kMesa_DeviceType: 1946ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com glContextType = GrContextFactory::kMESA_GLContextType; 1956ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com break; 1966ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#endif 1970556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 1980556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com default: 1990556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com // Invalid device type. 2000556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return false; 2010556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com } 2020556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_SUPPORT_GPU 2030556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com fGrContext = fGrContextFactory.get(glContextType); 2040556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com if (NULL == fGrContext) { 2050556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return false; 2060556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com } else { 2070556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com fGrContext->ref(); 2080556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return true; 2090556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com } 2100556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 211fe6391a624f98b1c70581ac86d5733afe11872d3keyar@chromium.org } 212fe6391a624f98b1c70581ac86d5733afe11872d3keyar@chromium.org 213f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com#if SK_SUPPORT_GPU 214f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com void setSampleCount(int sampleCount) { 215f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com fSampleCount = sampleCount; 216f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com } 217f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com#endif 218f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com 219e3e940cf81dc46d872002ded98c1bd39c2daf1b0caryclark@google.com void setDrawFilters(DrawFilterFlags const * const filters, const SkString& configName) { 220e3e940cf81dc46d872002ded98c1bd39c2daf1b0caryclark@google.com memcpy(fDrawFilters, filters, sizeof(fDrawFilters)); 221a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com fDrawFiltersConfig = configName; 222a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com } 223a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com 2249313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org void setBBoxHierarchyType(BBoxHierarchyType bbhType) { 2259313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org fBBoxHierarchyType = bbhType; 2269313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org } 2279313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org 228e286e84a6a23f8a4c81708c1a19c9561f355c720junov@chromium.org BBoxHierarchyType getBBoxHierarchyType() { return fBBoxHierarchyType; } 229e286e84a6a23f8a4c81708c1a19c9561f355c720junov@chromium.org 2307b53706a7d596a2d8dce6cfe5b543264e5a37239junov@chromium.org void setGridSize(int width, int height) { 23129b19e53cfac5af4f9bd5d361436d1097f349a34junov@chromium.org fGridInfo.fTileInterval.set(width, height); 2327b53706a7d596a2d8dce6cfe5b543264e5a37239junov@chromium.org } 2337b53706a7d596a2d8dce6cfe5b543264e5a37239junov@chromium.org 234205ce48c38c55ec7527d26042b5cea689369be8bcommit-bot@chromium.org void setJsonSummaryPtr(ImageResultsAndExpectations* jsonSummaryPtr) { 235a3f882c4756bd8b9b6449dcc60b6d884ee0cc8edcommit-bot@chromium.org fJsonSummaryPtr = jsonSummaryPtr; 236a3f882c4756bd8b9b6449dcc60b6d884ee0cc8edcommit-bot@chromium.org } 237a3f882c4756bd8b9b6449dcc60b6d884ee0cc8edcommit-bot@chromium.org 238fe6391a624f98b1c70581ac86d5733afe11872d3keyar@chromium.org bool isUsingBitmapDevice() { 23978a35c5f1dcc00b2b442069a94f9e7c996f8d7f9keyar@chromium.org return kBitmap_DeviceType == fDeviceType; 2404ea96c5e5449248780acfeb3cef4ec812f955d74keyar@chromium.org } 2414ea96c5e5449248780acfeb3cef4ec812f955d74keyar@chromium.org 2429a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual SkString getPerIterTimeFormat() { return SkString("%.2f"); } 2439a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 2449a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual SkString getNormalTimeFormat() { return SkString("%6.2f"); } 2459a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 2460a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com /** 2470a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com * Reports the configuration of this PictureRenderer. 2480a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com */ 2490a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com SkString getConfigName() { 2500a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com SkString config = this->getConfigNameInternal(); 251c4013c199cae88684846b0f798c4d80fbcf19d63scroggo@google.com if (!fViewport.isEmpty()) { 252c4013c199cae88684846b0f798c4d80fbcf19d63scroggo@google.com config.appendf("_viewport_%ix%i", fViewport.width(), fViewport.height()); 253c4013c199cae88684846b0f798c4d80fbcf19d63scroggo@google.com } 2549de35eb37513836ddef147fd48fb1aacf60a7e51commit-bot@chromium.org if (fScaleFactor != SK_Scalar1) { 2559de35eb37513836ddef147fd48fb1aacf60a7e51commit-bot@chromium.org config.appendf("_scalar_%f", SkScalarToFloat(fScaleFactor)); 2569de35eb37513836ddef147fd48fb1aacf60a7e51commit-bot@chromium.org } 2570a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com if (kRTree_BBoxHierarchyType == fBBoxHierarchyType) { 2580a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com config.append("_rtree"); 259c22d1398089fdb95480fb3459b23e4931e4f5280commit-bot@chromium.org } else if (kQuadTree_BBoxHierarchyType == fBBoxHierarchyType) { 260c22d1398089fdb95480fb3459b23e4931e4f5280commit-bot@chromium.org config.append("_quadtree"); 2617b53706a7d596a2d8dce6cfe5b543264e5a37239junov@chromium.org } else if (kTileGrid_BBoxHierarchyType == fBBoxHierarchyType) { 2627b53706a7d596a2d8dce6cfe5b543264e5a37239junov@chromium.org config.append("_grid"); 26306fdc6937df52942226a0a5e7bba169c27006ef1kelvinly config.append("_"); 26406fdc6937df52942226a0a5e7bba169c27006ef1kelvinly config.appendS32(fGridInfo.fTileInterval.width()); 26506fdc6937df52942226a0a5e7bba169c27006ef1kelvinly config.append("x"); 26606fdc6937df52942226a0a5e7bba169c27006ef1kelvinly config.appendS32(fGridInfo.fTileInterval.height()); 2670a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com } 2680a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com#if SK_SUPPORT_GPU 269e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com switch (fDeviceType) { 2700556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kGPU_DeviceType: 271f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com if (fSampleCount) { 272f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com config.appendf("_msaa%d", fSampleCount); 273f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com } else { 274f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com config.append("_gpu"); 275f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com } 2760556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 2770fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org case kNVPR_DeviceType: 2780fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org config.appendf("_nvprmsaa%d", fSampleCount); 2790fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org break; 2800556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_ANGLE 2810556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kAngle_DeviceType: 2820556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com config.append("_angle"); 2830556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 2840556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 2856ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#if SK_MESA 2866ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com case kMesa_DeviceType: 2876ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com config.append("_mesa"); 2886ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com break; 2896ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#endif 2900556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com default: 2910556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com // Assume that no extra info means bitmap. 2920556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 2930556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com } 294e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif 295a36223764466c964ed1035bf6f152ba55168f61ecaryclark@google.com config.append(fDrawFiltersConfig.c_str()); 2960a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com return config; 2970a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com } 2980a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 2994ea96c5e5449248780acfeb3cef4ec812f955d74keyar@chromium.org#if SK_SUPPORT_GPU 300fe6391a624f98b1c70581ac86d5733afe11872d3keyar@chromium.org bool isUsingGpuDevice() { 3010556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com switch (fDeviceType) { 3020556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kGPU_DeviceType: 3030fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org case kNVPR_DeviceType: 3040556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com // fall through 3050556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_ANGLE 3060556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kAngle_DeviceType: 3076ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com // fall through 3086ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#endif 3096ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#if SK_MESA 3106ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com case kMesa_DeviceType: 3110556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 3120556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return true; 3130556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com default: 3140556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return false; 3150556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com } 316fe6391a624f98b1c70581ac86d5733afe11872d3keyar@chromium.org } 31777a5522d0e4437ef2b856acd7b135b6afda64ceekeyar@chromium.org 3186177e6999d23a4268ffd98dedfb1da00e272a89brobertphillips@google.com SkGLContextHelper* getGLContext() { 3190556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com GrContextFactory::GLContextType glContextType 3200556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com = GrContextFactory::kNull_GLContextType; 3210556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com switch(fDeviceType) { 3220556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kGPU_DeviceType: 3230556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com glContextType = GrContextFactory::kNative_GLContextType; 3240556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 3250fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org case kNVPR_DeviceType: 3260fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org glContextType = GrContextFactory::kNVPR_GLContextType; 3270fd5270ad69f5b99852d544158c989d2deda2c11commit-bot@chromium.org break; 3280556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_ANGLE 3290556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com case kAngle_DeviceType: 3300556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com glContextType = GrContextFactory::kANGLE_GLContextType; 3310556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com break; 3320556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 3336ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#if SK_MESA 3346ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com case kMesa_DeviceType: 3356ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com glContextType = GrContextFactory::kMESA_GLContextType; 3366ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com break; 3376ab96733b85cebac99b378f998cd7dc10b286395rmistry@google.com#endif 3380556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com default: 3390556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return NULL; 34077a5522d0e4437ef2b856acd7b135b6afda64ceekeyar@chromium.org } 3410556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com return fGrContextFactory.getGLContext(glContextType); 34277a5522d0e4437ef2b856acd7b135b6afda64ceekeyar@chromium.org } 343163c84ba5026907fea7b4f4bdcf8b16c13103adcrobertphillips@google.com 344163c84ba5026907fea7b4f4bdcf8b16c13103adcrobertphillips@google.com GrContext* getGrContext() { 345163c84ba5026907fea7b4f4bdcf8b16c13103adcrobertphillips@google.com return fGrContext; 346163c84ba5026907fea7b4f4bdcf8b16c13103adcrobertphillips@google.com } 3474ea96c5e5449248780acfeb3cef4ec812f955d74keyar@chromium.org#endif 3484ea96c5e5449248780acfeb3cef4ec812f955d74keyar@chromium.org 349145d1c0fdcef63991d7f910cc067a653a8aa2c4ccommit-bot@chromium.org SkCanvas* getCanvas() { 350145d1c0fdcef63991d7f910cc067a653a8aa2c4ccommit-bot@chromium.org return fCanvas; 351145d1c0fdcef63991d7f910cc067a653a8aa2c4ccommit-bot@chromium.org } 352145d1c0fdcef63991d7f910cc067a653a8aa2c4ccommit-bot@chromium.org 3538ddc26b68c4e41199c06961da3bff2ce72afff14commit-bot@chromium.org SkPicture* getPicture() { 3548ddc26b68c4e41199c06961da3bff2ce72afff14commit-bot@chromium.org return fPicture; 3558ddc26b68c4e41199c06961da3bff2ce72afff14commit-bot@chromium.org } 3568ddc26b68c4e41199c06961da3bff2ce72afff14commit-bot@chromium.org 35702dfb12501f49115445a0d702280bbc7406c6ad2keyar@chromium.org PictureRenderer() 35884b18c7e3e042bf206e1ace3d1b6ea5bb929fe51robertphillips@google.com : fJsonSummaryPtr(NULL) 3590612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org , fDeviceType(kBitmap_DeviceType) 3608991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org , fEnableWrites(false) 36150ff9bd4d72c77c7c5ec2393f28ddbd8050129dbjunov@chromium.org , fBBoxHierarchyType(kNone_BBoxHierarchyType) 36206d6ac645d9269ea05f7461533c646fd3ea71628scroggo@google.com , fScaleFactor(SK_Scalar1) 3630612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org#if SK_SUPPORT_GPU 3640556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com , fGrContext(NULL) 365f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com , fSampleCount(0) 3660612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org#endif 367e3e940cf81dc46d872002ded98c1bd39c2daf1b0caryclark@google.com { 3687ae918eec73865ad0c0c138680e9d2df9fc5ea82robertphillips@google.com fGridInfo.fMargin.setEmpty(); 3697ae918eec73865ad0c0c138680e9d2df9fc5ea82robertphillips@google.com fGridInfo.fOffset.setZero(); 3707ae918eec73865ad0c0c138680e9d2df9fc5ea82robertphillips@google.com fGridInfo.fTileInterval.set(1, 1); 371e3e940cf81dc46d872002ded98c1bd39c2daf1b0caryclark@google.com sk_bzero(fDrawFilters, sizeof(fDrawFilters)); 372c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com fViewport.set(0, 0); 373e3e940cf81dc46d872002ded98c1bd39c2daf1b0caryclark@google.com } 3740612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org 3750556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_SUPPORT_GPU 3760556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com virtual ~PictureRenderer() { 3770556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com SkSafeUnref(fGrContext); 3780556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com } 3790556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 3800556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com 3819d696c0d04548520af08252e577d2ca88012a239keyar@chromium.orgprotected: 3829d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org SkAutoTUnref<SkCanvas> fCanvas; 38384b18c7e3e042bf206e1ace3d1b6ea5bb929fe51robertphillips@google.com SkAutoTUnref<SkPicture> fPicture; 384f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org bool fUseChecksumBasedFilenames; 385205ce48c38c55ec7527d26042b5cea689369be8bcommit-bot@chromium.org ImageResultsAndExpectations* fJsonSummaryPtr; 386c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com SkDeviceTypes fDeviceType; 3878991c67f0c1b9364bb12dfb0f32a53bd5a3357f3commit-bot@chromium.org bool fEnableWrites; 388c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com BBoxHierarchyType fBBoxHierarchyType; 389c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com DrawFilterFlags fDrawFilters[SkDrawFilter::kTypeCount]; 390c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com SkString fDrawFiltersConfig; 3913f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org SkString fWritePath; 3923f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org SkString fMismatchPath; 393f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org SkString fInputFilename; 3945fb2ce38b3dcb8e60e9e112df23c9d42456d7069commit-bot@chromium.org SkTileGridFactory::TileGridInfo fGridInfo; // used when fBBoxHierarchyType is TileGrid 3950612564bb76ec533d26d87e03368fd81ef97831ekeyar@chromium.org 396c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com void buildBBoxHierarchy(); 397c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com 398c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com /** 399c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com * Return the total width that should be drawn. If the viewport width has been set greater than 400c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com * 0, this will be the minimum of the current SkPicture's width and the viewport's width. 401c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com */ 402c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com int getViewWidth(); 403c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com 404c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com /** 405c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com * Return the total height that should be drawn. If the viewport height has been set greater 406c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com * than 0, this will be the minimum of the current SkPicture's height and the viewport's height. 407c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com */ 408c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com int getViewHeight(); 409c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com 41082ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com /** 41182ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com * Scales the provided canvas to the scale factor set by setScaleFactor. 41282ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com */ 41382ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com void scaleToScaleFactor(SkCanvas*); 41482ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com 4155fb2ce38b3dcb8e60e9e112df23c9d42456d7069commit-bot@chromium.org SkBBHFactory* getFactory(); 4169f1c241e0d8a756fca1ec2dacb565eec83166d5frobertphillips uint32_t recordFlags() const { return 0; } 417c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com SkCanvas* setupCanvas(); 418c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com virtual SkCanvas* setupCanvas(int width, int height); 419c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com 420f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org /** 421f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * Copy src to dest; if src==NULL, set dest to empty string. 422f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org */ 423f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org static void CopyString(SkString* dest, const SkString* src); 424f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org 4259d696c0d04548520af08252e577d2ca88012a239keyar@chromium.orgprivate: 426c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com SkISize fViewport; 42782ec0b00f380906c1cdeb4b4cc4a355264ab3882scroggo@google.com SkScalar fScaleFactor; 4280556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#if SK_SUPPORT_GPU 4290556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com GrContextFactory fGrContextFactory; 4300556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com GrContext* fGrContext; 431f6a90332ae21414cf19630764d4371ffd24ac0ccjvanverth@google.com int fSampleCount; 4320556ea0ede7066b9b3ed9f03f5a6eb72cd718897scroggo@google.com#endif 433c0d5e549ab8d594a5da8db417db39622e9491fffscroggo@google.com 4340a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() = 0; 4350a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 4369d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org typedef SkRefCnt INHERITED; 437451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org}; 438451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 4399a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com/** 4409a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * This class does not do any rendering, but its render function executes recording, which we want 4419a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * to time. 4429a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 4439a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.comclass RecordPictureRenderer : public PictureRenderer { 444f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE; 4459a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 4469a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual SkString getPerIterTimeFormat() SK_OVERRIDE { return SkString("%.4f"); } 4479a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 4489a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual SkString getNormalTimeFormat() SK_OVERRIDE { return SkString("%6.4f"); } 4490a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 450fd9720cfec6bc50fa77d40ffdf2f6cb4b5150d4edjsollen@google.comprotected: 451fd9720cfec6bc50fa77d40ffdf2f6cb4b5150d4edjsollen@google.com virtual SkCanvas* setupCanvas(int width, int height) SK_OVERRIDE; 452fd9720cfec6bc50fa77d40ffdf2f6cb4b5150d4edjsollen@google.com 4530a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.comprivate: 4540a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() SK_OVERRIDE; 4559a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com}; 4569a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 457451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgclass PipePictureRenderer : public PictureRenderer { 458163b56734fe01c088581895a8e0b65ddf1cb4fa5keyar@chromium.orgpublic: 459f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE; 4609d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org 4619d696c0d04548520af08252e577d2ca88012a239keyar@chromium.orgprivate: 4620a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() SK_OVERRIDE; 4630a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 4649d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org typedef PictureRenderer INHERITED; 465451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org}; 466451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 467451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgclass SimplePictureRenderer : public PictureRenderer { 468163b56734fe01c088581895a8e0b65ddf1cb4fa5keyar@chromium.orgpublic: 4693f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org virtual void init(SkPicture* pict, const SkString* writePath, const SkString* mismatchPath, 470f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org const SkString* inputFilename, bool useChecksumBasedFilenames) SK_OVERRIDE; 4719313ca4bde606a18f29214eea8b8e47312b8fd9cjunov@chromium.org 472f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE; 4739d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org 4749d696c0d04548520af08252e577d2ca88012a239keyar@chromium.orgprivate: 4750a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() SK_OVERRIDE; 4760a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 4779d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org typedef PictureRenderer INHERITED; 478451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org}; 479451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 480451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgclass TiledPictureRenderer : public PictureRenderer { 481451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgpublic: 482451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org TiledPictureRenderer(); 483451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 4843f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org virtual void init(SkPicture* pict, const SkString* writePath, const SkString* mismatchPath, 485f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org const SkString* inputFilename, bool useChecksumBasedFilenames) SK_OVERRIDE; 48681f9d2e05be4902993345dac93337158345c660bscroggo@google.com 48781f9d2e05be4902993345dac93337158345c660bscroggo@google.com /** 488f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org * Renders to tiles, rather than a single canvas. 4893f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org * If fWritePath was provided, a separate file is 49081f9d2e05be4902993345dac93337158345c660bscroggo@google.com * created for each tile, named "path0.png", "path1.png", etc. 49181f9d2e05be4902993345dac93337158345c660bscroggo@google.com * Multithreaded mode currently does not support writing to a file. 49281f9d2e05be4902993345dac93337158345c660bscroggo@google.com */ 493f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE; 49481f9d2e05be4902993345dac93337158345c660bscroggo@google.com 4959d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org virtual void end() SK_OVERRIDE; 496451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 497cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org void setTileWidth(int width) { 498cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org fTileWidth = width; 499cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 500cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 501cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org int getTileWidth() const { 502cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org return fTileWidth; 503cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 504cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 505cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org void setTileHeight(int height) { 506cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org fTileHeight = height; 507cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 508cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 509cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org int getTileHeight() const { 510cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org return fTileHeight; 511cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 512cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 513cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org void setTileWidthPercentage(double percentage) { 514cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org fTileWidthPercentage = percentage; 515cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 516cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 517163b56734fe01c088581895a8e0b65ddf1cb4fa5keyar@chromium.org double getTileWidthPercentage() const { 518cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org return fTileWidthPercentage; 519cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 520cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 521cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org void setTileHeightPercentage(double percentage) { 522cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org fTileHeightPercentage = percentage; 523cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 524cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 525163b56734fe01c088581895a8e0b65ddf1cb4fa5keyar@chromium.org double getTileHeightPercentage() const { 526cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org return fTileHeightPercentage; 527cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org } 528cc6e5efe03bfeda903d67d2bacd9ed0be58572bakeyar@chromium.org 529f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org void setTileMinPowerOf2Width(int width) { 530f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org SkASSERT(SkIsPow2(width) && width > 0); 531f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org if (!SkIsPow2(width) || width <= 0) { 532f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org return; 533f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org } 534f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org 535f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org fTileMinPowerOf2Width = width; 536f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org } 537f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org 538f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org int getTileMinPowerOf2Width() const { 539f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org return fTileMinPowerOf2Width; 540f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org } 541f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org 542cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com virtual TiledPictureRenderer* getTiledRenderer() SK_OVERRIDE { return this; } 543cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 544161e1ba4c0a82e21c7d68808529699fd2394ad6cscroggo@google.com virtual bool supportsTimingIndividualTiles() { return true; } 545161e1ba4c0a82e21c7d68808529699fd2394ad6cscroggo@google.com 546cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com /** 547cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * Report the number of tiles in the x and y directions. Must not be called before init. 548cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * @param x Output parameter identifying the number of tiles in the x direction. 549cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * @param y Output parameter identifying the number of tiles in the y direction. 550cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * @return True if the tiles have been set up, and x and y are meaningful. If false, x and y are 551cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * unmodified. 552cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com */ 553cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com bool tileDimensions(int& x, int&y); 554cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 555cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com /** 556cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * Move to the next tile and return its indices. Must be called before calling drawCurrentTile 557cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * for the first time. 558cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * @param i Output parameter identifying the column of the next tile to be drawn on the next 559cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * call to drawNextTile. 560cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * @param j Output parameter identifying the row of the next tile to be drawn on the next call 561cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * to drawNextTile. 562cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * @param True if the tiles have been created and the next tile to be drawn by drawCurrentTile 563cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * is within the range of tiles. If false, i and j are unmodified. 564cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com */ 565cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com bool nextTile(int& i, int& j); 566cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 567cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com /** 568cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * Render one tile. This will draw the same tile each time it is called until nextTile is 569cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * called. The tile rendered will depend on how many calls have been made to nextTile. 570cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com * It is an error to call this without first calling nextTile, or if nextTile returns false. 571cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com */ 572cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com void drawCurrentTile(); 573cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 574a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.comprotected: 575a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com SkTDArray<SkRect> fTileRects; 576451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 5770a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkCanvas* setupCanvas(int width, int height) SK_OVERRIDE; 5780a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() SK_OVERRIDE; 5790a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 580451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.orgprivate: 581cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com int fTileWidth; 582cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com int fTileHeight; 583cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com double fTileWidthPercentage; 584cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com double fTileHeightPercentage; 585cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com int fTileMinPowerOf2Width; 586cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com 587cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com // These variables are only used for timing individual tiles. 588cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com // Next tile to draw in fTileRects. 589cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com int fCurrentTileOffset; 590cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com // Number of tiles in the x direction. 591cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com int fTilesX; 592cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com // Number of tiles in the y direction. 593cbcef708914f3b5e9bb63ad3d87261378026e29bscroggo@google.com int fTilesY; 594bcdf2ec50dfd170959cc2db67c49f6dac084be03scroggo@google.com 5959d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org void setupTiles(); 596f4959ab11827bef99e8985031feb457cae1f987akeyar@chromium.org void setupPowerOf2Tiles(); 5979d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org 5989d696c0d04548520af08252e577d2ca88012a239keyar@chromium.org typedef PictureRenderer INHERITED; 599451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org}; 600451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 601a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.comclass CloneData; 602a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 603a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.comclass MultiCorePictureRenderer : public TiledPictureRenderer { 604a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.compublic: 605a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com explicit MultiCorePictureRenderer(int threadCount); 606a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 607a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com ~MultiCorePictureRenderer(); 608a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 6093f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org virtual void init(SkPicture* pict, const SkString* writePath, const SkString* mismatchPath, 610f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org const SkString* inputFilename, bool useChecksumBasedFilenames) SK_OVERRIDE; 611a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 612a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com /** 613a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com * Behaves like TiledPictureRenderer::render(), only using multiple threads. 614a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com */ 615f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE; 616a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 617a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com virtual void end() SK_OVERRIDE; 618a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 619161e1ba4c0a82e21c7d68808529699fd2394ad6cscroggo@google.com virtual bool supportsTimingIndividualTiles() SK_OVERRIDE { return false; } 620161e1ba4c0a82e21c7d68808529699fd2394ad6cscroggo@google.com 621a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.comprivate: 6220a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() SK_OVERRIDE; 6230a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 624a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com const int fNumThreads; 625a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com SkTDArray<SkCanvas*> fCanvasPool; 626a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com SkThreadPool fThreadPool; 627a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com SkPicture* fPictureClones; 628a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com CloneData** fCloneData; 629a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com SkCountdown fCountdown; 630a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 631a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com typedef TiledPictureRenderer INHERITED; 632a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com}; 633a62da2fee72172a630c2d1dba0e529b357743662scroggo@google.com 6349a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com/** 6359a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * This class does not do any rendering, but its render function executes turning an SkPictureRecord 6369a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * into an SkPicturePlayback, which we want to time. 6379a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 6389a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.comclass PlaybackCreationRenderer : public PictureRenderer { 6399a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.compublic: 6409a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual void setup() SK_OVERRIDE; 6419a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 642f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE; 6439a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 6449a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual SkString getPerIterTimeFormat() SK_OVERRIDE { return SkString("%.4f"); } 6459a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 6469a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com virtual SkString getNormalTimeFormat() SK_OVERRIDE { return SkString("%6.4f"); } 6479a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 6489a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.comprivate: 64984b18c7e3e042bf206e1ace3d1b6ea5bb929fe51robertphillips@google.com SkAutoTDelete<SkPictureRecorder> fRecorder; 6500a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 6510a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com virtual SkString getConfigNameInternal() SK_OVERRIDE; 6520a049b861e18c9c1ede865b8acbcbedc3dd10b43scroggo@google.com 6539a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com typedef PictureRenderer INHERITED; 6549a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com}; 6559a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 656fe7b1ed30a75cecfe80d1ba4d1f60295e99aeef0reed@google.comextern PictureRenderer* CreateGatherPixelRefsRenderer(); 6575a34fd3f9876174aea8b22e1b585b4244e71b0b1reed@google.comextern PictureRenderer* CreatePictureCloneRenderer(); 658fe7b1ed30a75cecfe80d1ba4d1f60295e99aeef0reed@google.com 659451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org} 660451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org 661451bb9f801d668275394ca5bd57f238e13cf3d17keyar@chromium.org#endif // PictureRenderer_DEFINED 662