[PATCH 08/15] Bug 1017113 - Update Skia to 2014-07-28 r=upstream
authorGeorge Wright <george@mozilla.com>
Mon, 28 Jul 2014 15:06:12 -0400
changeset 220765 883cd6be06d294600562435ebea87d2804bca957
parent 220764 66843861f0e7b2fa0e8111feaa9e87a6b5bddeb8
child 220766 6ffb58cad19a85f3f934e39e3c98cb4a404fc978
push id3979
push userraliiev@mozilla.com
push dateMon, 13 Oct 2014 16:35:44 +0000
treeherdermozilla-beta@30f2cc610691 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersupstream
bugs1017113
milestone34.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
[PATCH 08/15] Bug 1017113 - Update Skia to 2014-07-28 r=upstream
CLOBBER
gfx/skia/README_MOZILLA
gfx/skia/trunk/include/config/SkUserConfig.h
gfx/skia/trunk/include/core/SkAdvancedTypefaceMetrics.h
gfx/skia/trunk/include/core/SkBBHFactory.h
gfx/skia/trunk/include/core/SkBitmap.h
gfx/skia/trunk/include/core/SkBitmapDevice.h
gfx/skia/trunk/include/core/SkBlitRow.h
gfx/skia/trunk/include/core/SkBlurTypes.h
gfx/skia/trunk/include/core/SkBounder.h
gfx/skia/trunk/include/core/SkCanvas.h
gfx/skia/trunk/include/core/SkChecksum.h
gfx/skia/trunk/include/core/SkClipStack.h
gfx/skia/trunk/include/core/SkColorFilter.h
gfx/skia/trunk/include/core/SkColorPriv.h
gfx/skia/trunk/include/core/SkColorShader.h
gfx/skia/trunk/include/core/SkComposeShader.h
gfx/skia/trunk/include/core/SkData.h
gfx/skia/trunk/include/core/SkDevice.h
gfx/skia/trunk/include/core/SkDeviceProperties.h
gfx/skia/trunk/include/core/SkDraw.h
gfx/skia/trunk/include/core/SkDrawLooper.h
gfx/skia/trunk/include/core/SkDrawPictureCallback.h
gfx/skia/trunk/include/core/SkDynamicAnnotations.h
gfx/skia/trunk/include/core/SkEmptyShader.h
gfx/skia/trunk/include/core/SkEndian.h
gfx/skia/trunk/include/core/SkFixed.h
gfx/skia/trunk/include/core/SkFlate.h
gfx/skia/trunk/include/core/SkFlattenable.h
gfx/skia/trunk/include/core/SkFloatingPoint.h
gfx/skia/trunk/include/core/SkFont.h
gfx/skia/trunk/include/core/SkGeometry.h
gfx/skia/trunk/include/core/SkGraphics.h
gfx/skia/trunk/include/core/SkImage.h
gfx/skia/trunk/include/core/SkImageDecoder.h
gfx/skia/trunk/include/core/SkImageEncoder.h
gfx/skia/trunk/include/core/SkImageFilter.h
gfx/skia/trunk/include/core/SkImageGenerator.h
gfx/skia/trunk/include/core/SkImageInfo.h
gfx/skia/trunk/include/core/SkInstCnt.h
gfx/skia/trunk/include/core/SkLineClipper.h
gfx/skia/trunk/include/core/SkMallocPixelRef.h
gfx/skia/trunk/include/core/SkMaskFilter.h
gfx/skia/trunk/include/core/SkMath.h
gfx/skia/trunk/include/core/SkMatrix.h
gfx/skia/trunk/include/core/SkOSFile.h
gfx/skia/trunk/include/core/SkOnce.h
gfx/skia/trunk/include/core/SkPaint.h
gfx/skia/trunk/include/core/SkPatch.h
gfx/skia/trunk/include/core/SkPath.h
gfx/skia/trunk/include/core/SkPathEffect.h
gfx/skia/trunk/include/core/SkPathRef.h
gfx/skia/trunk/include/core/SkPicture.h
gfx/skia/trunk/include/core/SkPictureRecorder.h
gfx/skia/trunk/include/core/SkPixelRef.h
gfx/skia/trunk/include/core/SkPoint.h
gfx/skia/trunk/include/core/SkPostConfig.h
gfx/skia/trunk/include/core/SkPreConfig.h
gfx/skia/trunk/include/core/SkRRect.h
gfx/skia/trunk/include/core/SkReadBuffer.h
gfx/skia/trunk/include/core/SkReader32.h
gfx/skia/trunk/include/core/SkRect.h
gfx/skia/trunk/include/core/SkRefCnt.h
gfx/skia/trunk/include/core/SkRegion.h
gfx/skia/trunk/include/core/SkScalar.h
gfx/skia/trunk/include/core/SkShader.h
gfx/skia/trunk/include/core/SkStringUtils.h
gfx/skia/trunk/include/core/SkStrokeRec.h
gfx/skia/trunk/include/core/SkSurface.h
gfx/skia/trunk/include/core/SkTArray.h
gfx/skia/trunk/include/core/SkTDict.h
gfx/skia/trunk/include/core/SkTInternalLList.h
gfx/skia/trunk/include/core/SkTemplates.h
gfx/skia/trunk/include/core/SkThread.h
gfx/skia/trunk/include/core/SkTileGridPicture.h
gfx/skia/trunk/include/core/SkTrace.h
gfx/skia/trunk/include/core/SkTypeface.h
gfx/skia/trunk/include/core/SkTypes.h
gfx/skia/trunk/include/core/SkUnitMapper.h
gfx/skia/trunk/include/core/SkUtils.h
gfx/skia/trunk/include/core/SkWriteBuffer.h
gfx/skia/trunk/include/core/SkWriter32.h
gfx/skia/trunk/include/core/SkXfermode.h
gfx/skia/trunk/include/device/xps/SkXPSDevice.h
gfx/skia/trunk/include/effects/Sk1DPathEffect.h
gfx/skia/trunk/include/effects/Sk2DPathEffect.h
gfx/skia/trunk/include/effects/SkAlphaThresholdFilter.h
gfx/skia/trunk/include/effects/SkArithmeticMode.h
gfx/skia/trunk/include/effects/SkAvoidXfermode.h
gfx/skia/trunk/include/effects/SkBicubicImageFilter.h
gfx/skia/trunk/include/effects/SkBitmapSource.h
gfx/skia/trunk/include/effects/SkBlurDrawLooper.h
gfx/skia/trunk/include/effects/SkBlurImageFilter.h
gfx/skia/trunk/include/effects/SkBlurMaskFilter.h
gfx/skia/trunk/include/effects/SkColorFilterImageFilter.h
gfx/skia/trunk/include/effects/SkColorMatrixFilter.h
gfx/skia/trunk/include/effects/SkComposeImageFilter.h
gfx/skia/trunk/include/effects/SkCornerPathEffect.h
gfx/skia/trunk/include/effects/SkDashPathEffect.h
gfx/skia/trunk/include/effects/SkDiscretePathEffect.h
gfx/skia/trunk/include/effects/SkDisplacementMapEffect.h
gfx/skia/trunk/include/effects/SkDropShadowImageFilter.h
gfx/skia/trunk/include/effects/SkEmbossMaskFilter.h
gfx/skia/trunk/include/effects/SkGradientShader.h
gfx/skia/trunk/include/effects/SkKernel33MaskFilter.h
gfx/skia/trunk/include/effects/SkLayerDrawLooper.h
gfx/skia/trunk/include/effects/SkLayerRasterizer.h
gfx/skia/trunk/include/effects/SkLightingImageFilter.h
gfx/skia/trunk/include/effects/SkLumaColorFilter.h
gfx/skia/trunk/include/effects/SkMagnifierImageFilter.h
gfx/skia/trunk/include/effects/SkMatrixConvolutionImageFilter.h
gfx/skia/trunk/include/effects/SkMatrixImageFilter.h
gfx/skia/trunk/include/effects/SkMergeImageFilter.h
gfx/skia/trunk/include/effects/SkMorphologyImageFilter.h
gfx/skia/trunk/include/effects/SkOffsetImageFilter.h
gfx/skia/trunk/include/effects/SkPerlinNoiseShader.h
gfx/skia/trunk/include/effects/SkPictureImageFilter.h
gfx/skia/trunk/include/effects/SkPixelXorXfermode.h
gfx/skia/trunk/include/effects/SkResizeImageFilter.h
gfx/skia/trunk/include/effects/SkStippleMaskFilter.h
gfx/skia/trunk/include/effects/SkTableMaskFilter.h
gfx/skia/trunk/include/effects/SkTestImageFilters.h
gfx/skia/trunk/include/effects/SkTileImageFilter.h
gfx/skia/trunk/include/effects/SkTransparentShader.h
gfx/skia/trunk/include/effects/SkXfermodeImageFilter.h
gfx/skia/trunk/include/gpu/GrBackendEffectFactory.h
gfx/skia/trunk/include/gpu/GrClipData.h
gfx/skia/trunk/include/gpu/GrColor.h
gfx/skia/trunk/include/gpu/GrConfig.h
gfx/skia/trunk/include/gpu/GrContext.h
gfx/skia/trunk/include/gpu/GrContextFactory.h
gfx/skia/trunk/include/gpu/GrCoordTransform.h
gfx/skia/trunk/include/gpu/GrDrawEffect.h
gfx/skia/trunk/include/gpu/GrEffect.h
gfx/skia/trunk/include/gpu/GrEffectStage.h
gfx/skia/trunk/include/gpu/GrEffectUnitTest.h
gfx/skia/trunk/include/gpu/GrFontScaler.h
gfx/skia/trunk/include/gpu/GrGlyph.h
gfx/skia/trunk/include/gpu/GrGpuResource.h
gfx/skia/trunk/include/gpu/GrKey.h
gfx/skia/trunk/include/gpu/GrPaint.h
gfx/skia/trunk/include/gpu/GrPoint.h
gfx/skia/trunk/include/gpu/GrRect.h
gfx/skia/trunk/include/gpu/GrRenderTarget.h
gfx/skia/trunk/include/gpu/GrResource.h
gfx/skia/trunk/include/gpu/GrSurface.h
gfx/skia/trunk/include/gpu/GrTBackendEffectFactory.h
gfx/skia/trunk/include/gpu/GrTexture.h
gfx/skia/trunk/include/gpu/GrTextureAccess.h
gfx/skia/trunk/include/gpu/GrTypes.h
gfx/skia/trunk/include/gpu/GrTypesPriv.h
gfx/skia/trunk/include/gpu/SkGpuDevice.h
gfx/skia/trunk/include/gpu/SkGr.h
gfx/skia/trunk/include/gpu/SkGrPixelRef.h
gfx/skia/trunk/include/gpu/gl/GrGLFunctions.h
gfx/skia/trunk/include/gpu/gl/GrGLInterface.h
gfx/skia/trunk/include/gpu/gl/SkANGLEGLContext.h
gfx/skia/trunk/include/gpu/gl/SkDebugGLContext.h
gfx/skia/trunk/include/gpu/gl/SkGLContextHelper.h
gfx/skia/trunk/include/gpu/gl/SkMesaGLContext.h
gfx/skia/trunk/include/gpu/gl/SkNativeGLContext.h
gfx/skia/trunk/include/gpu/gl/SkNullGLContext.h
gfx/skia/trunk/include/images/SkDecodingImageGenerator.h
gfx/skia/trunk/include/images/SkImageRef.h
gfx/skia/trunk/include/images/SkImageRef_GlobalPool.h
gfx/skia/trunk/include/images/SkImages.h
gfx/skia/trunk/include/pathops/SkPathOps.h
gfx/skia/trunk/include/pdf/SkPDFDevice.h
gfx/skia/trunk/include/pdf/SkPDFDocument.h
gfx/skia/trunk/include/ports/SkFontConfigInterface.h
gfx/skia/trunk/include/ports/SkFontMgr.h
gfx/skia/trunk/include/ports/SkFontMgr_indirect.h
gfx/skia/trunk/include/ports/SkHarfBuzzFont.h
gfx/skia/trunk/include/ports/SkRemotableFontMgr.h
gfx/skia/trunk/include/ports/SkTypeface_android.h
gfx/skia/trunk/include/ports/SkTypeface_win.h
gfx/skia/trunk/include/record/SkRecording.h
gfx/skia/trunk/include/text/SkTextLayout.h
gfx/skia/trunk/include/utils/SkCanvasStateUtils.h
gfx/skia/trunk/include/utils/SkCondVar.h
gfx/skia/trunk/include/utils/SkCountdown.h
gfx/skia/trunk/include/utils/SkDeferredCanvas.h
gfx/skia/trunk/include/utils/SkDumpCanvas.h
gfx/skia/trunk/include/utils/SkInterpolator.h
gfx/skia/trunk/include/utils/SkJSON.h
gfx/skia/trunk/include/utils/SkJSONCPP.h
gfx/skia/trunk/include/utils/SkLua.h
gfx/skia/trunk/include/utils/SkLuaCanvas.h
gfx/skia/trunk/include/utils/SkNWayCanvas.h
gfx/skia/trunk/include/utils/SkPictureUtils.h
gfx/skia/trunk/include/utils/SkProxyCanvas.h
gfx/skia/trunk/include/utils/SkThreadPool.h
gfx/skia/trunk/include/utils/SkUnitMappers.h
gfx/skia/trunk/include/utils/SkWGL.h
gfx/skia/trunk/include/utils/mac/SkCGUtils.h
gfx/skia/trunk/include/views/SkApplication.h
gfx/skia/trunk/src/animator/SkAnimateSet.cpp
gfx/skia/trunk/src/animator/SkBoundable.cpp
gfx/skia/trunk/src/animator/SkDisplayList.h
gfx/skia/trunk/src/animator/SkDrawBitmap.cpp
gfx/skia/trunk/src/animator/SkDrawBlur.cpp
gfx/skia/trunk/src/animator/SkDrawBlur.h
gfx/skia/trunk/src/animator/SkDrawColor.h
gfx/skia/trunk/src/animator/SkDrawDash.h
gfx/skia/trunk/src/animator/SkDrawDiscrete.h
gfx/skia/trunk/src/animator/SkDrawExtraPathEffect.cpp
gfx/skia/trunk/src/animator/SkDrawGradient.cpp
gfx/skia/trunk/src/animator/SkDrawGradient.h
gfx/skia/trunk/src/animator/SkDrawPaint.cpp
gfx/skia/trunk/src/animator/SkDrawSaveLayer.cpp
gfx/skia/trunk/src/animator/SkDrawShader.cpp
gfx/skia/trunk/src/animator/SkDrawShader.h
gfx/skia/trunk/src/animator/SkDrawTransparentShader.h
gfx/skia/trunk/src/animator/SkPaintPart.cpp
gfx/skia/trunk/src/animator/SkPaintPart.h
gfx/skia/trunk/src/animator/SkPaintParts.cpp
gfx/skia/trunk/src/animator/SkPaintParts.h
gfx/skia/trunk/src/animator/SkScript2.h
gfx/skia/trunk/src/animator/SkScriptTokenizer.cpp
gfx/skia/trunk/src/animator/SkSnapshot.cpp
gfx/skia/trunk/src/core/ARGB32_Clamp_Bilinear_BitmapShader.h
gfx/skia/trunk/src/core/SkBBHFactory.cpp
gfx/skia/trunk/src/core/SkBBoxHierarchyRecord.cpp
gfx/skia/trunk/src/core/SkBBoxHierarchyRecord.h
gfx/skia/trunk/src/core/SkBBoxRecord.cpp
gfx/skia/trunk/src/core/SkBBoxRecord.h
gfx/skia/trunk/src/core/SkBitmap.cpp
gfx/skia/trunk/src/core/SkBitmapDevice.cpp
gfx/skia/trunk/src/core/SkBitmapFilter.cpp
gfx/skia/trunk/src/core/SkBitmapProcShader.cpp
gfx/skia/trunk/src/core/SkBitmapProcShader.h
gfx/skia/trunk/src/core/SkBitmapProcState.cpp
gfx/skia/trunk/src/core/SkBitmapProcState.h
gfx/skia/trunk/src/core/SkBitmapProcState_filter.h
gfx/skia/trunk/src/core/SkBitmapProcState_matrix.h
gfx/skia/trunk/src/core/SkBitmapProcState_matrixProcs.cpp
gfx/skia/trunk/src/core/SkBitmapProcState_matrix_template.h
gfx/skia/trunk/src/core/SkBitmapProcState_procs.h
gfx/skia/trunk/src/core/SkBitmapScaler.cpp
gfx/skia/trunk/src/core/SkBitmapScaler.h
gfx/skia/trunk/src/core/SkBitmapShader16BilerpTemplate.h
gfx/skia/trunk/src/core/SkBitmapShaderTemplate.h
gfx/skia/trunk/src/core/SkBlitMask.h
gfx/skia/trunk/src/core/SkBlitMask_D32.cpp
gfx/skia/trunk/src/core/SkBlitRow_D16.cpp
gfx/skia/trunk/src/core/SkBlitRow_D32.cpp
gfx/skia/trunk/src/core/SkBlitter.cpp
gfx/skia/trunk/src/core/SkBlitter.h
gfx/skia/trunk/src/core/SkBlitter_A8.cpp
gfx/skia/trunk/src/core/SkBlitter_ARGB32.cpp
gfx/skia/trunk/src/core/SkBlitter_RGB16.cpp
gfx/skia/trunk/src/core/SkBlitter_Sprite.cpp
gfx/skia/trunk/src/core/SkCanvas.cpp
gfx/skia/trunk/src/core/SkChecksum.h
gfx/skia/trunk/src/core/SkClipStack.cpp
gfx/skia/trunk/src/core/SkColorFilter.cpp
gfx/skia/trunk/src/core/SkComposeShader.cpp
gfx/skia/trunk/src/core/SkConfig8888.cpp
gfx/skia/trunk/src/core/SkConfig8888.h
gfx/skia/trunk/src/core/SkConvolver.cpp
gfx/skia/trunk/src/core/SkCoreBlitters.h
gfx/skia/trunk/src/core/SkData.cpp
gfx/skia/trunk/src/core/SkDescriptor.h
gfx/skia/trunk/src/core/SkDevice.cpp
gfx/skia/trunk/src/core/SkDistanceFieldGen.cpp
gfx/skia/trunk/src/core/SkDistanceFieldGen.h
gfx/skia/trunk/src/core/SkDraw.cpp
gfx/skia/trunk/src/core/SkDrawLooper.cpp
gfx/skia/trunk/src/core/SkDrawProcs.h
gfx/skia/trunk/src/core/SkEmptyShader.h
gfx/skia/trunk/src/core/SkFilterShader.cpp
gfx/skia/trunk/src/core/SkFilterShader.h
gfx/skia/trunk/src/core/SkFlate.h
gfx/skia/trunk/src/core/SkFloatBits.cpp
gfx/skia/trunk/src/core/SkFont.cpp
gfx/skia/trunk/src/core/SkFontHost.cpp
gfx/skia/trunk/src/core/SkGeometry.h
gfx/skia/trunk/src/core/SkGlyph.h
gfx/skia/trunk/src/core/SkGlyphCache.cpp
gfx/skia/trunk/src/core/SkGlyphCache.h
gfx/skia/trunk/src/core/SkGraphics.cpp
gfx/skia/trunk/src/core/SkImageFilter.cpp
gfx/skia/trunk/src/core/SkImageGenerator.cpp
gfx/skia/trunk/src/core/SkImageGeneratorPriv.h
gfx/skia/trunk/src/core/SkImageInfo.cpp
gfx/skia/trunk/src/core/SkLazyFnPtr.h
gfx/skia/trunk/src/core/SkLazyPtr.h
gfx/skia/trunk/src/core/SkLineClipper.h
gfx/skia/trunk/src/core/SkLocalMatrixShader.cpp
gfx/skia/trunk/src/core/SkLocalMatrixShader.h
gfx/skia/trunk/src/core/SkMallocPixelRef.cpp
gfx/skia/trunk/src/core/SkMaskFilter.cpp
gfx/skia/trunk/src/core/SkMaskGamma.h
gfx/skia/trunk/src/core/SkMath.cpp
gfx/skia/trunk/src/core/SkMathPriv.h
gfx/skia/trunk/src/core/SkMatrix.cpp
gfx/skia/trunk/src/core/SkMatrixClipStateMgr.cpp
gfx/skia/trunk/src/core/SkMatrixClipStateMgr.h
gfx/skia/trunk/src/core/SkMessageBus.h
gfx/skia/trunk/src/core/SkMipMap.cpp
gfx/skia/trunk/src/core/SkOffsetTable.h
gfx/skia/trunk/src/core/SkPackBits.cpp
gfx/skia/trunk/src/core/SkPaint.cpp
gfx/skia/trunk/src/core/SkPaintPriv.cpp
gfx/skia/trunk/src/core/SkPaintPriv.h
gfx/skia/trunk/src/core/SkPatch.cpp
gfx/skia/trunk/src/core/SkPath.cpp
gfx/skia/trunk/src/core/SkPathEffect.cpp
gfx/skia/trunk/src/core/SkPathRef.cpp
gfx/skia/trunk/src/core/SkPicture.cpp
gfx/skia/trunk/src/core/SkPictureData.cpp
gfx/skia/trunk/src/core/SkPictureData.h
gfx/skia/trunk/src/core/SkPictureFlat.h
gfx/skia/trunk/src/core/SkPicturePlayback.cpp
gfx/skia/trunk/src/core/SkPicturePlayback.h
gfx/skia/trunk/src/core/SkPictureRangePlayback.cpp
gfx/skia/trunk/src/core/SkPictureRangePlayback.h
gfx/skia/trunk/src/core/SkPictureRecord.cpp
gfx/skia/trunk/src/core/SkPictureRecord.h
gfx/skia/trunk/src/core/SkPictureRecorder.cpp
gfx/skia/trunk/src/core/SkPictureReplacementPlayback.cpp
gfx/skia/trunk/src/core/SkPictureReplacementPlayback.h
gfx/skia/trunk/src/core/SkPictureShader.cpp
gfx/skia/trunk/src/core/SkPictureShader.h
gfx/skia/trunk/src/core/SkPictureStateTree.cpp
gfx/skia/trunk/src/core/SkPictureStateTree.h
gfx/skia/trunk/src/core/SkPixelRef.cpp
gfx/skia/trunk/src/core/SkPoint.cpp
gfx/skia/trunk/src/core/SkQuadTree.cpp
gfx/skia/trunk/src/core/SkQuadTree.h
gfx/skia/trunk/src/core/SkQuadTreePicture.cpp
gfx/skia/trunk/src/core/SkQuadTreePicture.h
gfx/skia/trunk/src/core/SkRRect.cpp
gfx/skia/trunk/src/core/SkReadBuffer.cpp
gfx/skia/trunk/src/core/SkRecord.h
gfx/skia/trunk/src/core/SkRecordAnalysis.cpp
gfx/skia/trunk/src/core/SkRecordAnalysis.h
gfx/skia/trunk/src/core/SkRecordDraw.cpp
gfx/skia/trunk/src/core/SkRecordDraw.h
gfx/skia/trunk/src/core/SkRecordOpts.cpp
gfx/skia/trunk/src/core/SkRecordOpts.h
gfx/skia/trunk/src/core/SkRecordPattern.h
gfx/skia/trunk/src/core/SkRecorder.cpp
gfx/skia/trunk/src/core/SkRecorder.h
gfx/skia/trunk/src/core/SkRecording.cpp
gfx/skia/trunk/src/core/SkRecords.h
gfx/skia/trunk/src/core/SkRegion.cpp
gfx/skia/trunk/src/core/SkRegionPriv.h
gfx/skia/trunk/src/core/SkRegion_path.cpp
gfx/skia/trunk/src/core/SkRegion_rects.cpp
gfx/skia/trunk/src/core/SkScaledImageCache.cpp
gfx/skia/trunk/src/core/SkScaledImageCache.h
gfx/skia/trunk/src/core/SkScalerContext.cpp
gfx/skia/trunk/src/core/SkScalerContext.h
gfx/skia/trunk/src/core/SkScan_AntiPath.cpp
gfx/skia/trunk/src/core/SkScan_Path.cpp
gfx/skia/trunk/src/core/SkShader.cpp
gfx/skia/trunk/src/core/SkSmallAllocator.h
gfx/skia/trunk/src/core/SkSpriteBlitter_ARGB32.cpp
gfx/skia/trunk/src/core/SkSpriteBlitter_RGB16.cpp
gfx/skia/trunk/src/core/SkStream.cpp
gfx/skia/trunk/src/core/SkStreamPriv.h
gfx/skia/trunk/src/core/SkStringUtils.h
gfx/skia/trunk/src/core/SkStrokeRec.cpp
gfx/skia/trunk/src/core/SkTDynamicHash.h
gfx/skia/trunk/src/core/SkTLList.h
gfx/skia/trunk/src/core/SkTMultiMap.h
gfx/skia/trunk/src/core/SkTObjectPool.h
gfx/skia/trunk/src/core/SkTextMapStateProc.h
gfx/skia/trunk/src/core/SkThreadPriv.h
gfx/skia/trunk/src/core/SkTileGrid.cpp
gfx/skia/trunk/src/core/SkTileGrid.h
gfx/skia/trunk/src/core/SkTileGridPicture.cpp
gfx/skia/trunk/src/core/SkTypeface.cpp
gfx/skia/trunk/src/core/SkUtils.cpp
gfx/skia/trunk/src/core/SkUtilsArm.h
gfx/skia/trunk/src/core/SkValidatingReadBuffer.cpp
gfx/skia/trunk/src/core/SkValidatingReadBuffer.h
gfx/skia/trunk/src/core/SkValidationUtils.h
gfx/skia/trunk/src/core/SkVertState.cpp
gfx/skia/trunk/src/core/SkVertState.h
gfx/skia/trunk/src/core/SkWriteBuffer.cpp
gfx/skia/trunk/src/core/SkWriter32.cpp
gfx/skia/trunk/src/core/SkXfermode.cpp
gfx/skia/trunk/src/core/SkXfermode_proccoeff.h
gfx/skia/trunk/src/device/xps/SkXPSDevice.cpp
gfx/skia/trunk/src/effects/SkAlphaThresholdFilter.cpp
gfx/skia/trunk/src/effects/SkArithmeticMode.cpp
gfx/skia/trunk/src/effects/SkBicubicImageFilter.cpp
gfx/skia/trunk/src/effects/SkBitmapSource.cpp
gfx/skia/trunk/src/effects/SkBlurDrawLooper.cpp
gfx/skia/trunk/src/effects/SkBlurImageFilter.cpp
gfx/skia/trunk/src/effects/SkBlurMask.cpp
gfx/skia/trunk/src/effects/SkBlurMask.h
gfx/skia/trunk/src/effects/SkBlurMaskFilter.cpp
gfx/skia/trunk/src/effects/SkColorFilterImageFilter.cpp
gfx/skia/trunk/src/effects/SkColorFilters.cpp
gfx/skia/trunk/src/effects/SkColorMatrixFilter.cpp
gfx/skia/trunk/src/effects/SkDashPathEffect.cpp
gfx/skia/trunk/src/effects/SkDiscretePathEffect.cpp
gfx/skia/trunk/src/effects/SkDisplacementMapEffect.cpp
gfx/skia/trunk/src/effects/SkDropShadowImageFilter.cpp
gfx/skia/trunk/src/effects/SkEmbossMaskFilter.cpp
gfx/skia/trunk/src/effects/SkGpuBlurUtils.cpp
gfx/skia/trunk/src/effects/SkKernel33MaskFilter.cpp
gfx/skia/trunk/src/effects/SkLayerDrawLooper.cpp
gfx/skia/trunk/src/effects/SkLayerRasterizer.cpp
gfx/skia/trunk/src/effects/SkLightingImageFilter.cpp
gfx/skia/trunk/src/effects/SkLumaColorFilter.cpp
gfx/skia/trunk/src/effects/SkMagnifierImageFilter.cpp
gfx/skia/trunk/src/effects/SkMatrixConvolutionImageFilter.cpp
gfx/skia/trunk/src/effects/SkMatrixImageFilter.cpp
gfx/skia/trunk/src/effects/SkMergeImageFilter.cpp
gfx/skia/trunk/src/effects/SkMorphologyImageFilter.cpp
gfx/skia/trunk/src/effects/SkOffsetImageFilter.cpp
gfx/skia/trunk/src/effects/SkPerlinNoiseShader.cpp
gfx/skia/trunk/src/effects/SkPictureImageFilter.cpp
gfx/skia/trunk/src/effects/SkRectShaderImageFilter.cpp
gfx/skia/trunk/src/effects/SkResizeImageFilter.cpp
gfx/skia/trunk/src/effects/SkTableColorFilter.cpp
gfx/skia/trunk/src/effects/SkTileImageFilter.cpp
gfx/skia/trunk/src/effects/SkTransparentShader.cpp
gfx/skia/trunk/src/effects/SkXfermodeImageFilter.cpp
gfx/skia/trunk/src/effects/gradients/SkClampRange.cpp
gfx/skia/trunk/src/effects/gradients/SkClampRange.h
gfx/skia/trunk/src/effects/gradients/SkGradientShader.cpp
gfx/skia/trunk/src/effects/gradients/SkGradientShaderPriv.h
gfx/skia/trunk/src/effects/gradients/SkLinearGradient.cpp
gfx/skia/trunk/src/effects/gradients/SkLinearGradient.h
gfx/skia/trunk/src/effects/gradients/SkRadialGradient.cpp
gfx/skia/trunk/src/effects/gradients/SkRadialGradient.h
gfx/skia/trunk/src/effects/gradients/SkSweepGradient.cpp
gfx/skia/trunk/src/effects/gradients/SkSweepGradient.h
gfx/skia/trunk/src/effects/gradients/SkTwoPointConicalGradient.cpp
gfx/skia/trunk/src/effects/gradients/SkTwoPointConicalGradient.h
gfx/skia/trunk/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
gfx/skia/trunk/src/effects/gradients/SkTwoPointConicalGradient_gpu.h
gfx/skia/trunk/src/effects/gradients/SkTwoPointRadialGradient.cpp
gfx/skia/trunk/src/effects/gradients/SkTwoPointRadialGradient.h
gfx/skia/trunk/src/fonts/SkFontMgr_fontconfig.cpp
gfx/skia/trunk/src/fonts/SkFontMgr_indirect.cpp
gfx/skia/trunk/src/fonts/SkGScalerContext.cpp
gfx/skia/trunk/src/fonts/SkRemotableFontMgr.cpp
gfx/skia/trunk/src/fonts/SkTestScalerContext.cpp
gfx/skia/trunk/src/fonts/SkTestScalerContext.h
gfx/skia/trunk/src/gpu/FlingState.cpp
gfx/skia/trunk/src/gpu/GrAAConvexPathRenderer.cpp
gfx/skia/trunk/src/gpu/GrAAConvexPathRenderer.h
gfx/skia/trunk/src/gpu/GrAAHairLinePathRenderer.cpp
gfx/skia/trunk/src/gpu/GrAARectRenderer.cpp
gfx/skia/trunk/src/gpu/GrAARectRenderer.h
gfx/skia/trunk/src/gpu/GrAddPathRenderers_none.cpp
gfx/skia/trunk/src/gpu/GrAllocPool.cpp
gfx/skia/trunk/src/gpu/GrAllocPool.h
gfx/skia/trunk/src/gpu/GrAllocator.h
gfx/skia/trunk/src/gpu/GrAtlas.cpp
gfx/skia/trunk/src/gpu/GrAtlas.h
gfx/skia/trunk/src/gpu/GrBinHashKey.h
gfx/skia/trunk/src/gpu/GrBitmapTextContext.cpp
gfx/skia/trunk/src/gpu/GrBitmapTextContext.h
gfx/skia/trunk/src/gpu/GrBufferAllocPool.cpp
gfx/skia/trunk/src/gpu/GrBufferAllocPool.h
gfx/skia/trunk/src/gpu/GrCacheID.cpp
gfx/skia/trunk/src/gpu/GrClipData.cpp
gfx/skia/trunk/src/gpu/GrClipMaskCache.h
gfx/skia/trunk/src/gpu/GrClipMaskManager.cpp
gfx/skia/trunk/src/gpu/GrClipMaskManager.h
gfx/skia/trunk/src/gpu/GrContext.cpp
gfx/skia/trunk/src/gpu/GrDefaultPathRenderer.cpp
gfx/skia/trunk/src/gpu/GrDistanceFieldTextContext.cpp
gfx/skia/trunk/src/gpu/GrDistanceFieldTextContext.h
gfx/skia/trunk/src/gpu/GrDrawState.cpp
gfx/skia/trunk/src/gpu/GrDrawState.h
gfx/skia/trunk/src/gpu/GrDrawTarget.cpp
gfx/skia/trunk/src/gpu/GrDrawTarget.h
gfx/skia/trunk/src/gpu/GrDrawTargetCaps.h
gfx/skia/trunk/src/gpu/GrEffect.cpp
gfx/skia/trunk/src/gpu/GrFontScaler.cpp
gfx/skia/trunk/src/gpu/GrGeometryBuffer.h
gfx/skia/trunk/src/gpu/GrGpu.cpp
gfx/skia/trunk/src/gpu/GrGpu.h
gfx/skia/trunk/src/gpu/GrGpuResource.cpp
gfx/skia/trunk/src/gpu/GrInOrderDrawBuffer.cpp
gfx/skia/trunk/src/gpu/GrInOrderDrawBuffer.h
gfx/skia/trunk/src/gpu/GrIndexBuffer.h
gfx/skia/trunk/src/gpu/GrLayerCache.cpp
gfx/skia/trunk/src/gpu/GrLayerCache.h
gfx/skia/trunk/src/gpu/GrMemory.cpp
gfx/skia/trunk/src/gpu/GrMemoryPool.cpp
gfx/skia/trunk/src/gpu/GrOrderedSet.h
gfx/skia/trunk/src/gpu/GrOvalRenderer.cpp
gfx/skia/trunk/src/gpu/GrOvalRenderer.h
gfx/skia/trunk/src/gpu/GrPaint.cpp
gfx/skia/trunk/src/gpu/GrPath.cpp
gfx/skia/trunk/src/gpu/GrPath.h
gfx/skia/trunk/src/gpu/GrPathRange.h
gfx/skia/trunk/src/gpu/GrPathUtils.cpp
gfx/skia/trunk/src/gpu/GrPathUtils.h
gfx/skia/trunk/src/gpu/GrPictureUtils.cpp
gfx/skia/trunk/src/gpu/GrPictureUtils.h
gfx/skia/trunk/src/gpu/GrPlotMgr.h
gfx/skia/trunk/src/gpu/GrRectanizer.cpp
gfx/skia/trunk/src/gpu/GrRectanizer.h
gfx/skia/trunk/src/gpu/GrRectanizer_fifo.cpp
gfx/skia/trunk/src/gpu/GrRectanizer_pow2.cpp
gfx/skia/trunk/src/gpu/GrRectanizer_pow2.h
gfx/skia/trunk/src/gpu/GrRectanizer_skyline.cpp
gfx/skia/trunk/src/gpu/GrRectanizer_skyline.h
gfx/skia/trunk/src/gpu/GrRedBlackTree.h
gfx/skia/trunk/src/gpu/GrRenderTarget.cpp
gfx/skia/trunk/src/gpu/GrResource.cpp
gfx/skia/trunk/src/gpu/GrResourceCache.cpp
gfx/skia/trunk/src/gpu/GrResourceCache.h
gfx/skia/trunk/src/gpu/GrSWMaskHelper.cpp
gfx/skia/trunk/src/gpu/GrSWMaskHelper.h
gfx/skia/trunk/src/gpu/GrSoftwarePathRenderer.cpp
gfx/skia/trunk/src/gpu/GrStencil.cpp
gfx/skia/trunk/src/gpu/GrStencilAndCoverTextContext.cpp
gfx/skia/trunk/src/gpu/GrStencilAndCoverTextContext.h
gfx/skia/trunk/src/gpu/GrStencilBuffer.h
gfx/skia/trunk/src/gpu/GrStrokeInfo.h
gfx/skia/trunk/src/gpu/GrSurface.cpp
gfx/skia/trunk/src/gpu/GrTHashTable.h
gfx/skia/trunk/src/gpu/GrTMultiMap.h
gfx/skia/trunk/src/gpu/GrTemplates.h
gfx/skia/trunk/src/gpu/GrTest.cpp
gfx/skia/trunk/src/gpu/GrTextContext.cpp
gfx/skia/trunk/src/gpu/GrTextContext.h
gfx/skia/trunk/src/gpu/GrTextStrike.cpp
gfx/skia/trunk/src/gpu/GrTextStrike.h
gfx/skia/trunk/src/gpu/GrTextStrike_impl.h
gfx/skia/trunk/src/gpu/GrTexture.cpp
gfx/skia/trunk/src/gpu/GrTextureAccess.cpp
gfx/skia/trunk/src/gpu/GrTraceMarker.cpp
gfx/skia/trunk/src/gpu/GrTraceMarker.h
gfx/skia/trunk/src/gpu/GrTracing.h
gfx/skia/trunk/src/gpu/GrVertexBuffer.h
gfx/skia/trunk/src/gpu/SkGpuDevice.cpp
gfx/skia/trunk/src/gpu/SkGr.cpp
gfx/skia/trunk/src/gpu/SkGrFontScaler.cpp
gfx/skia/trunk/src/gpu/SkGrPixelRef.cpp
gfx/skia/trunk/src/gpu/effects/GrBezierEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrBezierEffect.h
gfx/skia/trunk/src/gpu/effects/GrBicubicEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrBicubicEffect.h
gfx/skia/trunk/src/gpu/effects/GrConfigConversionEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrConfigConversionEffect.h
gfx/skia/trunk/src/gpu/effects/GrConvexPolyEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrConvexPolyEffect.h
gfx/skia/trunk/src/gpu/effects/GrConvolutionEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrConvolutionEffect.h
gfx/skia/trunk/src/gpu/effects/GrCustomCoordsTextureEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrCustomCoordsTextureEffect.h
gfx/skia/trunk/src/gpu/effects/GrDashingEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrDashingEffect.h
gfx/skia/trunk/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrDistanceFieldTextureEffect.h
gfx/skia/trunk/src/gpu/effects/GrDitherEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrDitherEffect.h
gfx/skia/trunk/src/gpu/effects/GrMatrixConvolutionEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrMatrixConvolutionEffect.h
gfx/skia/trunk/src/gpu/effects/GrOvalEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrOvalEffect.h
gfx/skia/trunk/src/gpu/effects/GrRRectEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrRRectEffect.h
gfx/skia/trunk/src/gpu/effects/GrSimpleTextureEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrSimpleTextureEffect.h
gfx/skia/trunk/src/gpu/effects/GrTextureDomain.cpp
gfx/skia/trunk/src/gpu/effects/GrTextureDomain.h
gfx/skia/trunk/src/gpu/effects/GrTextureStripAtlas.cpp
gfx/skia/trunk/src/gpu/effects/GrTextureStripAtlas.h
gfx/skia/trunk/src/gpu/effects/GrYUVtoRGBEffect.cpp
gfx/skia/trunk/src/gpu/effects/GrYUVtoRGBEffect.h
gfx/skia/trunk/src/gpu/gl/GrGLAssembleGLESInterface.h
gfx/skia/trunk/src/gpu/gl/GrGLAssembleInterface.cpp
gfx/skia/trunk/src/gpu/gl/GrGLAssembleInterface.h
gfx/skia/trunk/src/gpu/gl/GrGLBufferImpl.cpp
gfx/skia/trunk/src/gpu/gl/GrGLBufferImpl.h
gfx/skia/trunk/src/gpu/gl/GrGLCaps.cpp
gfx/skia/trunk/src/gpu/gl/GrGLCaps.h
gfx/skia/trunk/src/gpu/gl/GrGLContext.cpp
gfx/skia/trunk/src/gpu/gl/GrGLContext.h
gfx/skia/trunk/src/gpu/gl/GrGLCreateNullInterface.cpp
gfx/skia/trunk/src/gpu/gl/GrGLDefines.h
gfx/skia/trunk/src/gpu/gl/GrGLEffect.h
gfx/skia/trunk/src/gpu/gl/GrGLExtensions.cpp
gfx/skia/trunk/src/gpu/gl/GrGLIndexBuffer.cpp
gfx/skia/trunk/src/gpu/gl/GrGLIndexBuffer.h
gfx/skia/trunk/src/gpu/gl/GrGLInterface.cpp
gfx/skia/trunk/src/gpu/gl/GrGLNameAllocator.cpp
gfx/skia/trunk/src/gpu/gl/GrGLNameAllocator.h
gfx/skia/trunk/src/gpu/gl/GrGLNoOpInterface.cpp
gfx/skia/trunk/src/gpu/gl/GrGLNoOpInterface.h
gfx/skia/trunk/src/gpu/gl/GrGLPath.cpp
gfx/skia/trunk/src/gpu/gl/GrGLPath.h
gfx/skia/trunk/src/gpu/gl/GrGLPathRange.cpp
gfx/skia/trunk/src/gpu/gl/GrGLPathRange.h
gfx/skia/trunk/src/gpu/gl/GrGLProgram.cpp
gfx/skia/trunk/src/gpu/gl/GrGLProgram.h
gfx/skia/trunk/src/gpu/gl/GrGLProgramDesc.cpp
gfx/skia/trunk/src/gpu/gl/GrGLProgramDesc.h
gfx/skia/trunk/src/gpu/gl/GrGLProgramEffects.cpp
gfx/skia/trunk/src/gpu/gl/GrGLProgramEffects.h
gfx/skia/trunk/src/gpu/gl/GrGLRenderTarget.cpp
gfx/skia/trunk/src/gpu/gl/GrGLSL.cpp
gfx/skia/trunk/src/gpu/gl/GrGLSL.h
gfx/skia/trunk/src/gpu/gl/GrGLShaderBuilder.cpp
gfx/skia/trunk/src/gpu/gl/GrGLShaderBuilder.h
gfx/skia/trunk/src/gpu/gl/GrGLShaderVar.h
gfx/skia/trunk/src/gpu/gl/GrGLStencilBuffer.cpp
gfx/skia/trunk/src/gpu/gl/GrGLStencilBuffer.h
gfx/skia/trunk/src/gpu/gl/GrGLTexture.cpp
gfx/skia/trunk/src/gpu/gl/GrGLTexture.h
gfx/skia/trunk/src/gpu/gl/GrGLUniformManager.h
gfx/skia/trunk/src/gpu/gl/GrGLUtil.cpp
gfx/skia/trunk/src/gpu/gl/GrGLUtil.h
gfx/skia/trunk/src/gpu/gl/GrGLVertexArray.cpp
gfx/skia/trunk/src/gpu/gl/GrGLVertexArray.h
gfx/skia/trunk/src/gpu/gl/GrGLVertexBuffer.cpp
gfx/skia/trunk/src/gpu/gl/GrGLVertexBuffer.h
gfx/skia/trunk/src/gpu/gl/GrGLVertexEffect.h
gfx/skia/trunk/src/gpu/gl/GrGpuGL.cpp
gfx/skia/trunk/src/gpu/gl/GrGpuGL.h
gfx/skia/trunk/src/gpu/gl/GrGpuGL_program.cpp
gfx/skia/trunk/src/gpu/gl/SkGLContextHelper.cpp
gfx/skia/trunk/src/gpu/gl/SkNullGLContext.cpp
gfx/skia/trunk/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp
gfx/skia/trunk/src/gpu/gl/android/SkNativeGLContext_android.cpp
gfx/skia/trunk/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp
gfx/skia/trunk/src/gpu/gl/angle/SkANGLEGLContext.cpp
gfx/skia/trunk/src/gpu/gl/debug/GrBufferObj.h
gfx/skia/trunk/src/gpu/gl/debug/GrFakeRefObj.h
gfx/skia/trunk/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
gfx/skia/trunk/src/gpu/gl/debug/SkDebugGLContext.cpp
gfx/skia/trunk/src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp
gfx/skia/trunk/src/gpu/gl/iOS/SkNativeGLContext_iOS.mm
gfx/skia/trunk/src/gpu/gl/mac/GrGLCreateNativeInterface_mac.cpp
gfx/skia/trunk/src/gpu/gl/mac/SkNativeGLContext_mac.cpp
gfx/skia/trunk/src/gpu/gl/mesa/GrGLCreateMesaInterface.cpp
gfx/skia/trunk/src/gpu/gl/mesa/SkMesaGLContext.cpp
gfx/skia/trunk/src/gpu/gl/nacl/SkNativeGLContext_nacl.cpp
gfx/skia/trunk/src/gpu/gl/unix/GrGLCreateNativeInterface_unix.cpp
gfx/skia/trunk/src/gpu/gl/unix/SkNativeGLContext_unix.cpp
gfx/skia/trunk/src/gpu/gl/win/GrGLCreateNativeInterface_win.cpp
gfx/skia/trunk/src/gpu/gl/win/SkNativeGLContext_win.cpp
gfx/skia/trunk/src/image/SkImage.cpp
gfx/skia/trunk/src/image/SkImagePriv.cpp
gfx/skia/trunk/src/image/SkImagePriv.h
gfx/skia/trunk/src/image/SkImage_Base.h
gfx/skia/trunk/src/image/SkImage_Codec.cpp
gfx/skia/trunk/src/image/SkImage_Gpu.cpp
gfx/skia/trunk/src/image/SkImage_Picture.cpp
gfx/skia/trunk/src/image/SkImage_Raster.cpp
gfx/skia/trunk/src/image/SkSurface.cpp
gfx/skia/trunk/src/image/SkSurface_Base.h
gfx/skia/trunk/src/image/SkSurface_Gpu.cpp
gfx/skia/trunk/src/image/SkSurface_Picture.cpp
gfx/skia/trunk/src/image/SkSurface_Raster.cpp
gfx/skia/trunk/src/images/SkDecodingImageGenerator.cpp
gfx/skia/trunk/src/images/SkDecodingImageGenerator.h
gfx/skia/trunk/src/images/SkForceLinking.cpp
gfx/skia/trunk/src/images/SkImageDecoder.cpp
gfx/skia/trunk/src/images/SkImageDecoder_ktx.cpp
gfx/skia/trunk/src/images/SkImageDecoder_libbmp.cpp
gfx/skia/trunk/src/images/SkImageDecoder_libgif.cpp
gfx/skia/trunk/src/images/SkImageDecoder_libico.cpp
gfx/skia/trunk/src/images/SkImageDecoder_libjpeg.cpp
gfx/skia/trunk/src/images/SkImageDecoder_libpng.cpp
gfx/skia/trunk/src/images/SkImageDecoder_libwebp.cpp
gfx/skia/trunk/src/images/SkImageDecoder_pkm.cpp
gfx/skia/trunk/src/images/SkImageDecoder_wbmp.cpp
gfx/skia/trunk/src/images/SkImageEncoder_argb.cpp
gfx/skia/trunk/src/images/SkImageRef.cpp
gfx/skia/trunk/src/images/SkImageRefPool.cpp
gfx/skia/trunk/src/images/SkImageRefPool.h
gfx/skia/trunk/src/images/SkImageRef_GlobalPool.cpp
gfx/skia/trunk/src/images/SkImageRef_ashmem.cpp
gfx/skia/trunk/src/images/SkImageRef_ashmem.h
gfx/skia/trunk/src/images/SkImages.cpp
gfx/skia/trunk/src/images/SkScaledBitmapSampler.cpp
gfx/skia/trunk/src/images/SkScaledBitmapSampler.h
gfx/skia/trunk/src/images/SkStreamHelpers.cpp
gfx/skia/trunk/src/images/SkStreamHelpers.h
gfx/skia/trunk/src/lazy/SkCachingPixelRef.cpp
gfx/skia/trunk/src/lazy/SkCachingPixelRef.h
gfx/skia/trunk/src/lazy/SkDiscardableMemoryPool.cpp
gfx/skia/trunk/src/lazy/SkDiscardableMemoryPool.h
gfx/skia/trunk/src/lazy/SkDiscardablePixelRef.cpp
gfx/skia/trunk/src/lazy/SkDiscardablePixelRef.h
gfx/skia/trunk/src/lazy/SkPurgeableMemoryBlock.h
gfx/skia/trunk/src/lazy/SkPurgeableMemoryBlock_common.cpp
gfx/skia/trunk/src/opts/SkBitmapFilter_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkBitmapFilter_opts_SSE2.h
gfx/skia/trunk/src/opts/SkBitmapProcState_filter_neon.h
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_SSE2.h
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_SSSE3.cpp
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_SSSE3.h
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_arm.cpp
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_mips_dsp.cpp
gfx/skia/trunk/src/opts/SkBitmapProcState_opts_none.cpp
gfx/skia/trunk/src/opts/SkBlitMask_opts_arm.cpp
gfx/skia/trunk/src/opts/SkBlitMask_opts_none.cpp
gfx/skia/trunk/src/opts/SkBlitRect_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkBlitRect_opts_SSE2.h
gfx/skia/trunk/src/opts/SkBlitRow_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkBlitRow_opts_SSE2.h
gfx/skia/trunk/src/opts/SkBlitRow_opts_SSE4.h
gfx/skia/trunk/src/opts/SkBlitRow_opts_SSE4_asm.S
gfx/skia/trunk/src/opts/SkBlitRow_opts_SSE4_x64_asm.S
gfx/skia/trunk/src/opts/SkBlitRow_opts_arm.cpp
gfx/skia/trunk/src/opts/SkBlitRow_opts_arm.cpp.orig
gfx/skia/trunk/src/opts/SkBlitRow_opts_arm_neon.cpp
gfx/skia/trunk/src/opts/SkBlitRow_opts_mips_dsp.cpp
gfx/skia/trunk/src/opts/SkBlurImage_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkBlurImage_opts_SSE2.h
gfx/skia/trunk/src/opts/SkBlurImage_opts_SSE4.cpp
gfx/skia/trunk/src/opts/SkBlurImage_opts_SSE4.h
gfx/skia/trunk/src/opts/SkCachePreload_arm.h
gfx/skia/trunk/src/opts/SkColor_opts_SSE2.h
gfx/skia/trunk/src/opts/SkMath_opts_SSE2.h
gfx/skia/trunk/src/opts/SkMorphology_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkMorphology_opts_SSE2.h
gfx/skia/trunk/src/opts/SkTextureCompression_opts.h
gfx/skia/trunk/src/opts/SkTextureCompression_opts_arm.cpp
gfx/skia/trunk/src/opts/SkTextureCompression_opts_neon.cpp
gfx/skia/trunk/src/opts/SkTextureCompression_opts_neon.h
gfx/skia/trunk/src/opts/SkTextureCompression_opts_none.cpp
gfx/skia/trunk/src/opts/SkUtils_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkUtils_opts_SSE2.h
gfx/skia/trunk/src/opts/SkUtils_opts_arm.cpp
gfx/skia/trunk/src/opts/SkUtils_opts_none.cpp
gfx/skia/trunk/src/opts/SkXfermode_opts_SSE2.cpp
gfx/skia/trunk/src/opts/SkXfermode_opts_SSE2.h
gfx/skia/trunk/src/opts/SkXfermode_opts_arm_neon.cpp
gfx/skia/trunk/src/opts/opts_check_SSE2.cpp
gfx/skia/trunk/src/opts/opts_check_x86.cpp
gfx/skia/trunk/src/pathops/SkAddIntersections.cpp
gfx/skia/trunk/src/pathops/SkDCubicIntersection.cpp
gfx/skia/trunk/src/pathops/SkDCubicLineIntersection.cpp
gfx/skia/trunk/src/pathops/SkDCubicToQuads.cpp
gfx/skia/trunk/src/pathops/SkDLineIntersection.cpp
gfx/skia/trunk/src/pathops/SkDQuadIntersection.cpp
gfx/skia/trunk/src/pathops/SkDQuadLineIntersection.cpp
gfx/skia/trunk/src/pathops/SkIntersectionHelper.h
gfx/skia/trunk/src/pathops/SkIntersections.cpp
gfx/skia/trunk/src/pathops/SkIntersections.h
gfx/skia/trunk/src/pathops/SkLineParameters.h
gfx/skia/trunk/src/pathops/SkLineParameters.h.orig
gfx/skia/trunk/src/pathops/SkLineParameters.h.rej
gfx/skia/trunk/src/pathops/SkOpAngle.cpp
gfx/skia/trunk/src/pathops/SkOpAngle.h
gfx/skia/trunk/src/pathops/SkOpContour.cpp
gfx/skia/trunk/src/pathops/SkOpContour.h
gfx/skia/trunk/src/pathops/SkOpEdgeBuilder.cpp
gfx/skia/trunk/src/pathops/SkOpSegment.cpp
gfx/skia/trunk/src/pathops/SkOpSegment.h
gfx/skia/trunk/src/pathops/SkOpSpan.h
gfx/skia/trunk/src/pathops/SkPathOpsCommon.cpp
gfx/skia/trunk/src/pathops/SkPathOpsCommon.h
gfx/skia/trunk/src/pathops/SkPathOpsCubic.cpp
gfx/skia/trunk/src/pathops/SkPathOpsCubic.h
gfx/skia/trunk/src/pathops/SkPathOpsCurve.h
gfx/skia/trunk/src/pathops/SkPathOpsDebug.cpp
gfx/skia/trunk/src/pathops/SkPathOpsDebug.h
gfx/skia/trunk/src/pathops/SkPathOpsLine.cpp
gfx/skia/trunk/src/pathops/SkPathOpsLine.h
gfx/skia/trunk/src/pathops/SkPathOpsOp.cpp
gfx/skia/trunk/src/pathops/SkPathOpsPoint.h
gfx/skia/trunk/src/pathops/SkPathOpsQuad.cpp
gfx/skia/trunk/src/pathops/SkPathOpsQuad.h
gfx/skia/trunk/src/pathops/SkPathOpsSimplify.cpp
gfx/skia/trunk/src/pathops/SkPathOpsTightBounds.cpp
gfx/skia/trunk/src/pathops/SkPathOpsTriangle.cpp
gfx/skia/trunk/src/pathops/SkPathOpsTypes.cpp
gfx/skia/trunk/src/pathops/SkPathOpsTypes.h
gfx/skia/trunk/src/pathops/SkPathWriter.h
gfx/skia/trunk/src/pathops/SkQuarticRoot.cpp
gfx/skia/trunk/src/pathops/SkReduceOrder.cpp
gfx/skia/trunk/src/pdf/SkPDFDevice.cpp
gfx/skia/trunk/src/pdf/SkPDFDeviceFlattener.cpp
gfx/skia/trunk/src/pdf/SkPDFDocument.cpp
gfx/skia/trunk/src/pdf/SkPDFFont.cpp
gfx/skia/trunk/src/pdf/SkPDFFont.h
gfx/skia/trunk/src/pdf/SkPDFFontImpl.h
gfx/skia/trunk/src/pdf/SkPDFGraphicState.cpp
gfx/skia/trunk/src/pdf/SkPDFImage.cpp
gfx/skia/trunk/src/pdf/SkPDFPage.cpp
gfx/skia/trunk/src/pdf/SkPDFShader.cpp
gfx/skia/trunk/src/pdf/SkPDFStream.cpp
gfx/skia/trunk/src/pdf/SkPDFStream.h
gfx/skia/trunk/src/pdf/SkPDFTypes.cpp
gfx/skia/trunk/src/pdf/SkPDFTypes.h
gfx/skia/trunk/src/pipe/SkGPipePriv.h
gfx/skia/trunk/src/pipe/SkGPipeRead.cpp
gfx/skia/trunk/src/pipe/SkGPipeWrite.cpp
gfx/skia/trunk/src/pipe/utils/SamplePipeControllers.cpp
gfx/skia/trunk/src/ports/SkAtomics_android.h
gfx/skia/trunk/src/ports/SkAtomics_none.h
gfx/skia/trunk/src/ports/SkAtomics_sync.h
gfx/skia/trunk/src/ports/SkAtomics_win.h
gfx/skia/trunk/src/ports/SkBarriers_arm.h
gfx/skia/trunk/src/ports/SkBarriers_tsan.h
gfx/skia/trunk/src/ports/SkBarriers_x86.h
gfx/skia/trunk/src/ports/SkDebug_android.cpp
gfx/skia/trunk/src/ports/SkDiscardableMemory_ashmem.cpp
gfx/skia/trunk/src/ports/SkFontConfigInterface_android.cpp
gfx/skia/trunk/src/ports/SkFontConfigInterface_direct.cpp
gfx/skia/trunk/src/ports/SkFontConfigParser_android.cpp
gfx/skia/trunk/src/ports/SkFontConfigParser_android.h
gfx/skia/trunk/src/ports/SkFontConfigTypeface.h
gfx/skia/trunk/src/ports/SkFontHost_FreeType.cpp
gfx/skia/trunk/src/ports/SkFontHost_FreeType_common.cpp
gfx/skia/trunk/src/ports/SkFontHost_FreeType_common.h
gfx/skia/trunk/src/ports/SkFontHost_fontconfig.cpp
gfx/skia/trunk/src/ports/SkFontHost_linux.cpp
gfx/skia/trunk/src/ports/SkFontHost_mac.cpp
gfx/skia/trunk/src/ports/SkFontHost_win.cpp
gfx/skia/trunk/src/ports/SkFontHost_win_dw.cpp
gfx/skia/trunk/src/ports/SkFontMgr_android.cpp
gfx/skia/trunk/src/ports/SkFontMgr_win_dw.cpp
gfx/skia/trunk/src/ports/SkGlobalInitialization_chromium.cpp
gfx/skia/trunk/src/ports/SkGlobalInitialization_default.cpp
gfx/skia/trunk/src/ports/SkHarfBuzzFont.cpp
gfx/skia/trunk/src/ports/SkImageDecoder_CG.cpp
gfx/skia/trunk/src/ports/SkImageDecoder_WIC.cpp
gfx/skia/trunk/src/ports/SkImageDecoder_empty.cpp
gfx/skia/trunk/src/ports/SkMemory_malloc.cpp
gfx/skia/trunk/src/ports/SkMutex_none.h
gfx/skia/trunk/src/ports/SkMutex_pthread.h
gfx/skia/trunk/src/ports/SkMutex_win.h
gfx/skia/trunk/src/ports/SkOSFile_none.cpp
gfx/skia/trunk/src/ports/SkOSFile_posix.cpp
gfx/skia/trunk/src/ports/SkOSFile_stdio.cpp
gfx/skia/trunk/src/ports/SkOSFile_win.cpp
gfx/skia/trunk/src/ports/SkPurgeableMemoryBlock_android.cpp
gfx/skia/trunk/src/ports/SkPurgeableMemoryBlock_mac.cpp
gfx/skia/trunk/src/ports/SkPurgeableMemoryBlock_none.cpp
gfx/skia/trunk/src/ports/SkRemotableFontMgr_win_dw.cpp
gfx/skia/trunk/src/ports/SkScalerContext_win_dw.cpp
gfx/skia/trunk/src/ports/SkScalerContext_win_dw.h
gfx/skia/trunk/src/ports/SkTypeface_win_dw.cpp
gfx/skia/trunk/src/ports/SkTypeface_win_dw.h
gfx/skia/trunk/src/ports/SkXMLParser_expat.cpp
gfx/skia/trunk/src/ports/SkXMLParser_tinyxml.cpp
gfx/skia/trunk/src/ports/SkXMLPullParser_expat.cpp
gfx/skia/trunk/src/sfnt/SkOTTableTypes.h
gfx/skia/trunk/src/sfnt/SkOTTable_EBDT.h
gfx/skia/trunk/src/sfnt/SkOTTable_EBLC.h
gfx/skia/trunk/src/sfnt/SkOTTable_EBSC.h
gfx/skia/trunk/src/sfnt/SkOTTable_gasp.h
gfx/skia/trunk/src/sfnt/SkOTTable_maxp_CFF.h
gfx/skia/trunk/src/sfnt/SkOTTable_maxp_TT.h
gfx/skia/trunk/src/sfnt/SkOTUtils.cpp
gfx/skia/trunk/src/text/SkTextLayout.cpp
gfx/skia/trunk/src/utils/SkBitmapHasher.cpp
gfx/skia/trunk/src/utils/SkBitmapHasher.h
gfx/skia/trunk/src/utils/SkCanvasStateUtils.cpp
gfx/skia/trunk/src/utils/SkCountdown.cpp
gfx/skia/trunk/src/utils/SkDashPath.cpp
gfx/skia/trunk/src/utils/SkDashPathPriv.h
gfx/skia/trunk/src/utils/SkDebugTrace.h
gfx/skia/trunk/src/utils/SkDeferredCanvas.cpp
gfx/skia/trunk/src/utils/SkDumpCanvas.cpp
gfx/skia/trunk/src/utils/SkEventTracer.cpp
gfx/skia/trunk/src/utils/SkGatherPixelRefsAndRects.cpp
gfx/skia/trunk/src/utils/SkGatherPixelRefsAndRects.h
gfx/skia/trunk/src/utils/SkInterpolator.cpp
gfx/skia/trunk/src/utils/SkJSON.cpp
gfx/skia/trunk/src/utils/SkLua.cpp
gfx/skia/trunk/src/utils/SkLuaCanvas.cpp
gfx/skia/trunk/src/utils/SkMatrix22.cpp
gfx/skia/trunk/src/utils/SkMatrix22.h
gfx/skia/trunk/src/utils/SkNWayCanvas.cpp
gfx/skia/trunk/src/utils/SkOSFile.cpp
gfx/skia/trunk/src/utils/SkParseColor.cpp
gfx/skia/trunk/src/utils/SkPictureUtils.cpp
gfx/skia/trunk/src/utils/SkProxyCanvas.cpp
gfx/skia/trunk/src/utils/SkTLogic.h
gfx/skia/trunk/src/utils/SkTextureCompressor.cpp
gfx/skia/trunk/src/utils/SkTextureCompressor.h
gfx/skia/trunk/src/utils/SkTextureCompressor_ASTC.cpp
gfx/skia/trunk/src/utils/SkTextureCompressor_ASTC.h
gfx/skia/trunk/src/utils/SkTextureCompressor_LATC.cpp
gfx/skia/trunk/src/utils/SkTextureCompressor_LATC.h
gfx/skia/trunk/src/utils/SkTextureCompressor_R11EAC.cpp
gfx/skia/trunk/src/utils/SkTextureCompressor_R11EAC.h
gfx/skia/trunk/src/utils/SkUnitMappers.cpp
gfx/skia/trunk/src/utils/android/ashmem.cpp
gfx/skia/trunk/src/utils/android/ashmem.h
gfx/skia/trunk/src/utils/debugger/SkDebugCanvas.cpp
gfx/skia/trunk/src/utils/debugger/SkDebugCanvas.h
gfx/skia/trunk/src/utils/debugger/SkDrawCommand.cpp
gfx/skia/trunk/src/utils/debugger/SkDrawCommand.h
gfx/skia/trunk/src/utils/debugger/SkObjectParser.cpp
gfx/skia/trunk/src/utils/debugger/SkObjectParser.h
gfx/skia/trunk/src/utils/ios/SkImageDecoder_iOS.mm
gfx/skia/trunk/src/utils/mac/SkCreateCGImageRef.cpp
gfx/skia/trunk/src/utils/win/SkDWrite.cpp
gfx/skia/trunk/src/utils/win/SkDWrite.h
gfx/skia/trunk/src/utils/win/SkDWriteFontFileStream.h
gfx/skia/trunk/src/utils/win/SkHRESULT.cpp
gfx/skia/trunk/src/utils/win/SkWGL_win.cpp
gfx/skia/trunk/src/views/SkTouchGesture.cpp
gfx/skia/trunk/src/views/SkWindow.cpp
gfx/skia/trunk/src/views/mac/SkNSView.mm
gfx/skia/trunk/src/views/sdl/SkOSWindow_SDL.cpp
gfx/skia/trunk/src/views/unix/SkOSWindow_Unix.cpp
gfx/skia/trunk/src/views/win/SkOSWindow_win.cpp
gfx/skia/trunk/src/xml/SkJS.cpp
gfx/skia/trunk/src/xml/SkJSDisplayable.cpp
--- a/CLOBBER
+++ b/CLOBBER
@@ -17,9 +17,9 @@
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
 # Are you updating CLOBBER because you think it's needed for your WebIDL
 # changes to stick? As of bug 928195, this shouldn't be necessary! Please
 # don't change CLOBBER for WebIDL changes any more.
 
-Bug 1046533 needs a clobber on Android.
+Skia update needs a CLOBBER on all platforms.
--- a/gfx/skia/README_MOZILLA
+++ b/gfx/skia/README_MOZILLA
@@ -1,13 +1,13 @@
 The source from this directory was copied from the skia subversion trunk
 using the update.sh script. The changes made were those applied by update.sh,
 the addition/update of Makefile.in files for the Mozilla build system.
 
-The subversion revision used was r13827.
+This is an import of Skia from 2014-07-28 (b1ab5fdd11bb358d738c1bfa63737dc65174a281)
 
 To update to a new version of Skia:
 
 - Copy the entire trunk/ directory from a Skia clone to mozilla-central/gfx/skia
 - cd gfx/skia && ./gyp_mozbuild
 
 Once that's done, use git status to view the files that have changed. Keep an eye on GrUserConfig.h
 and SkUserConfig.h as those probably don't want to be overwritten by upstream versions.
--- a/gfx/skia/trunk/include/config/SkUserConfig.h
+++ b/gfx/skia/trunk/include/config/SkUserConfig.h
@@ -183,29 +183,30 @@
 /* Skia uses these defines as the target of include preprocessor directives.
  * The header files pointed to by these defines provide declarations and
  * possibly inline implementations of threading primitives.
  *
  * See SkThread.h for documentation on what these includes must contain.
  */
 //#define SK_ATOMICS_PLATFORM_H "SkAtomics_xxx.h"
 //#define SK_MUTEX_PLATFORM_H "SkMutex_xxx.h"
-#  if defined(_MSC_VER)
-#    define SK_ATOMICS_PLATFORM_H "skia/SkAtomics_win.h"
-#  elif defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
-#    define SK_ATOMICS_PLATFORM_H "skia/SkAtomics_android.h"
-#  else
-#    define SK_ATOMICS_PLATFORM_H "skia/SkAtomics_sync.h"
-#  endif
+#if defined(_MSC_VER)
+#  define SK_ATOMICS_PLATFORM_H "skia/SkAtomics_win.h"
+#  define SK_MUTEX_PLATFORM_H   "skia/SkMutex_win.h"
+#else
+#  define SK_ATOMICS_PLATFORM_H "skia/SkAtomics_sync.h"
+#  define SK_MUTEX_PLATFORM_H   "skia/SkMutex_pthread.h"
+#endif
 
-#  if defined(SK_BUILD_FOR_WIN32)
-#    define SK_MUTEX_PLATFORM_H "skia/SkMutex_win.h"
-#  else
-#    define SK_MUTEX_PLATFORM_H "skia/SkMutex_pthread.h"
-#  endif
+#if defined(SK_CPU_ARM32) || defined(SK_CPU_ARM64)
+#  define SK_BARRIERS_PLATFORM_H "skia/SkBarriers_arm.h"
+#else
+#  define SK_BARRIERS_PLATFORM_H "skia/SkBarriers_x86.h"
 #endif
 
 #define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 0
 
 #define SK_SUPPORT_LEGACY_GETDEVICE
 #define SK_SUPPORT_LEGACY_GETTOPDEVICE
 #define SK_SUPPORT_LEGACY_BITMAP_CONFIG
 #define SK_IGNORE_ETC1_SUPPORT
+
+#endif
--- a/gfx/skia/trunk/include/core/SkAdvancedTypefaceMetrics.h
+++ b/gfx/skia/trunk/include/core/SkAdvancedTypefaceMetrics.h
@@ -30,25 +30,31 @@ public:
     SkString fFontName;
 
     enum FontType {
         kType1_Font,
         kType1CID_Font,
         kCFF_Font,
         kTrueType_Font,
         kOther_Font,
-        kNotEmbeddable_Font
     };
     // The type of the underlying font program.  This field determines which
-    // of the following fields are valid.  If it is kOther_Font or
-    // kNotEmbeddable_Font, the per glyph information will never be populated.
+    // of the following fields are valid.  If it is kOther_Font the per glyph
+    // information will never be populated.
     FontType fType;
 
-    // fMultiMaster may be true for Type1_Font or CFF_Font.
-    bool fMultiMaster;
+    enum FontFlags {
+        kEmpty_FontFlag          = 0x0,  //!<No flags set
+        kMultiMaster_FontFlag    = 0x1,  //!<May be true for Type1 or CFF fonts.
+        kNotEmbeddable_FontFlag  = 0x2,  //!<May not be embedded.
+        kNotSubsettable_FontFlag = 0x4,  //!<May not be subset.
+    };
+    // Global font flags.
+    FontFlags fFlags;
+
     uint16_t fLastGlyphID; // The last valid glyph ID in the font.
     uint16_t fEmSize;  // The size of the em box (defines font units).
 
     // These enum values match the values used in the PDF file format.
     enum StyleFlags {
         kFixedPitch_Style  = 0x00001,
         kSerif_Style       = 0x00002,
         kScript_Style      = 0x00008,
new file mode 100644
--- /dev/null
+++ b/gfx/skia/trunk/include/core/SkBBHFactory.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkBBHFactory_DEFINED
+#define SkBBHFactory_DEFINED
+
+#include "SkSize.h"
+#include "SkPoint.h"
+
+class SkBBoxHierarchy;
+
+class SK_API SkBBHFactory {
+public:
+    /**
+     *  Allocate a new SkBBoxHierarchy. Return NULL on failure.
+     */
+    virtual SkBBoxHierarchy* operator()(int width, int height) const = 0;
+    virtual ~SkBBHFactory() {};
+};
+
+class SK_API SkQuadTreeFactory : public SkBBHFactory {
+public:
+    virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE;
+private:
+    typedef SkBBHFactory INHERITED;
+};
+
+
+class SK_API SkRTreeFactory : public SkBBHFactory {
+public:
+    virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE;
+private:
+    typedef SkBBHFactory INHERITED;
+};
+
+class SK_API SkTileGridFactory : public SkBBHFactory {
+public:
+    struct TileGridInfo {
+        /** Tile placement interval */
+        SkISize  fTileInterval;
+
+        /** Pixel coverage overlap between adjacent tiles */
+        SkISize  fMargin;
+
+        /** Offset added to device-space bounding box positions to convert
+          * them to tile-grid space. This can be used to adjust the "phase"
+          * of the tile grid to match probable query rectangles that will be
+          * used to search into the tile grid. As long as the offset is smaller
+          * or equal to the margin, there is no need to extend the domain of
+          * the tile grid to prevent data loss.
+          */
+        SkIPoint fOffset;
+    };
+
+    SkTileGridFactory(const TileGridInfo& info) : fInfo(info) { }
+
+    virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE;
+
+private:
+    TileGridInfo fInfo;
+
+    typedef SkBBHFactory INHERITED;
+};
+
+#endif
--- a/gfx/skia/trunk/include/core/SkBitmap.h
+++ b/gfx/skia/trunk/include/core/SkBitmap.h
@@ -22,45 +22,53 @@ class SkPixelRef;
 class SkPixelRefFactory;
 class SkRegion;
 class SkString;
 class GrTexture;
 
 /** \class SkBitmap
 
     The SkBitmap class specifies a raster bitmap. A bitmap has an integer width
-    and height, and a format (config), and a pointer to the actual pixels.
+    and height, and a format (colortype), and a pointer to the actual pixels.
     Bitmaps can be drawn into a SkCanvas, but they are also used to specify the
     target of a SkCanvas' drawing operations.
     A const SkBitmap exposes getAddr(), which lets a caller write its pixels;
     the constness is considered to apply to the bitmap's configuration, not
     its contents.
 */
 class SK_API SkBitmap {
 public:
     class SK_API Allocator;
 
+#ifdef SK_SUPPORT_LEGACY_BITMAP_CONFIG
     enum Config {
         kNo_Config,         //!< bitmap has not been configured
         kA8_Config,         //!< 8-bits per pixel, with only alpha specified (0 is transparent, 0xFF is opaque)
         kIndex8_Config,     //!< 8-bits per pixel, using SkColorTable to specify the colors
         kRGB_565_Config,    //!< 16-bits per pixel, (see SkColorPriv.h for packing)
         kARGB_4444_Config,  //!< 16-bits per pixel, (see SkColorPriv.h for packing)
         kARGB_8888_Config,  //!< 32-bits per pixel, (see SkColorPriv.h for packing)
     };
 
     // do not add this to the Config enum, otherwise the compiler will let us
     // pass this as a valid parameter for Config.
     enum {
         kConfigCount = kARGB_8888_Config + 1
     };
 
+    /** Return the config for the bitmap. */
+    Config  config() const;
+    
+    SK_ATTR_DEPRECATED("use config()")
+    Config  getConfig() const { return this->config(); }
+#endif
+
     /**
      *  Default construct creates a bitmap with zero width and height, and no pixels.
-     *  Its config is set to kNo_Config.
+     *  Its colortype is set to kUnknown_SkColorType.
      */
     SkBitmap();
 
     /**
      *  Copy the settings from the src into this bitmap. If the src has pixels
      *  allocated, they will be shared, not copied, so that the two bitmaps will
      *  reference the same memory for the pixels. If a deep copy is needed,
      *  where the new bitmap has its own separate copy of the pixels, use
@@ -83,34 +91,33 @@ public:
 
     const SkImageInfo& info() const { return fInfo; }
 
     int width() const { return fInfo.fWidth; }
     int height() const { return fInfo.fHeight; }
     SkColorType colorType() const { return fInfo.fColorType; }
     SkAlphaType alphaType() const { return fInfo.fAlphaType; }
 
-    /** Return the number of bytes per pixel based on the config. If the config
-     does not have at least 1 byte per (e.g. kA1_Config) then 0 is returned.
+    /**
+     *  Return the number of bytes per pixel based on the colortype. If the colortype is
+     *  kUnknown_SkColorType, then 0 is returned.
      */
     int bytesPerPixel() const { return fInfo.bytesPerPixel(); }
 
-    /** Return the rowbytes expressed as a number of pixels (like width and
-     height). Note, for 1-byte per pixel configs like kA8_Config, this will
-     return the same as rowBytes(). Is undefined for configs that are less
-     than 1-byte per pixel (e.g. kA1_Config)
+    /**
+     *  Return the rowbytes expressed as a number of pixels (like width and height).
+     *  If the colortype is kUnknown_SkColorType, then 0 is returned.
      */
     int rowBytesAsPixels() const {
         return fRowBytes >> this->shiftPerPixel();
     }
 
-    /** Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for
-     2-bytes per pixel configs, 2 for 4-bytes per pixel configs). Return 0
-     for configs that are not at least 1-byte per pixel (e.g. kA1_Config
-     or kNo_Config)
+    /**
+     *  Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for 2-bytes per pixel
+     *  colortypes, 2 for 4-bytes per pixel colortypes). Return 0 for kUnknown_SkColorType.
      */
     int shiftPerPixel() const { return this->bytesPerPixel() >> 1; }
 
     ///////////////////////////////////////////////////////////////////////////
 
     /** Return true iff the bitmap has empty dimensions.
      *  Hey!  Before you use this, see if you really want to know drawsNothing() instead.
      */
@@ -121,29 +128,23 @@ public:
      *  Hey!  Before you use this, see if you really want to know drawsNothing() instead.
      */
     bool isNull() const { return NULL == fPixelRef; }
 
     /** Return true iff drawing this bitmap has no effect.
      */
     bool drawsNothing() const { return this->empty() || this->isNull(); }
 
-    /** Return the config for the bitmap. */
-    Config  config() const;
-
-    SK_ATTR_DEPRECATED("use config()")
-    Config  getConfig() const { return this->config(); }
-
     /** Return the number of bytes between subsequent rows of the bitmap. */
     size_t rowBytes() const { return fRowBytes; }
 
     /**
      *  Set the bitmap's alphaType, returning true on success. If false is
      *  returned, then the specified new alphaType is incompatible with the
-     *  Config, and the current alphaType is unchanged.
+     *  colortype, and the current alphaType is unchanged.
      *
      *  Note: this changes the alphatype for the underlying pixels, which means
      *  that all bitmaps that might be sharing (subsets of) the pixels will
      *  be affected.
      */
     bool setAlphaType(SkAlphaType);
 
     /** Return the address of the pixels for this SkBitmap.
@@ -210,36 +211,16 @@ public:
     */
     void setIsVolatile(bool);
 
     /** Reset the bitmap to its initial state (see default constructor). If we are a (shared)
         owner of the pixels, that ownership is decremented.
     */
     void reset();
 
-    /** Given a config and a width, this computes the optimal rowBytes value. This is called automatically
-        if you pass 0 for rowBytes to setConfig().
-    */
-    static size_t ComputeRowBytes(Config c, int width);
-
-    /** Return the bytes-per-pixel for the specified config. If the config is
-        not at least 1-byte per pixel, return 0, including for kNo_Config.
-    */
-    static int ComputeBytesPerPixel(Config c);
-
-    /** Return the shift-per-pixel for the specified config. If the config is
-     not at least 1-byte per pixel, return 0, including for kNo_Config.
-     */
-    static int ComputeShiftPerPixel(Config c) {
-        return ComputeBytesPerPixel(c) >> 1;
-    }
-
-    static int64_t ComputeSize64(Config, int width, int height);
-    static size_t ComputeSize(Config, int width, int height);
-
     /**
      *  This will brute-force return true if all of the pixels in the bitmap
      *  are opaque. If it fails to read the pixels, or encounters an error,
      *  it will return false.
      *
      *  Since this can be an expensive operation, the bitmap stores a flag for
      *  this (isOpaque). Only call this if you need to compute this value from
      *  "unknown" pixels.
@@ -247,102 +228,80 @@ public:
     static bool ComputeIsOpaque(const SkBitmap&);
 
     /**
      *  Return the bitmap's bounds [0, 0, width, height] as an SkRect
      */
     void getBounds(SkRect* bounds) const;
     void getBounds(SkIRect* bounds) const;
 
-    /** Set the bitmap's config and dimensions. If rowBytes is 0, then
-        ComputeRowBytes() is called to compute the optimal value. This resets
-        any pixel/colortable ownership, just like reset().
-    */
-    bool setConfig(Config, int width, int height, size_t rowBytes, SkAlphaType);
-
-    bool setConfig(Config config, int width, int height, size_t rowBytes = 0) {
-        return this->setConfig(config, width, height, rowBytes,
-                               kPremul_SkAlphaType);
-    }
-
-    bool setConfig(const SkImageInfo& info, size_t rowBytes = 0);
+    bool setInfo(const SkImageInfo&, size_t rowBytes = 0);
 
     /**
-     *  Allocate a pixelref to match the specified image info. If the Factory
+     *  Allocate the bitmap's pixels to match the requested image info. If the Factory
      *  is non-null, call it to allcoate the pixelref. If the ImageInfo requires
      *  a colortable, then ColorTable must be non-null, and will be ref'd.
      *  On failure, the bitmap will be set to empty and return false.
      */
     bool allocPixels(const SkImageInfo&, SkPixelRefFactory*, SkColorTable*);
 
     /**
+     *  Allocate the bitmap's pixels to match the requested image info and
+     *  rowBytes. If the request cannot be met (e.g. the info is invalid or
+     *  the requested rowBytes are not compatible with the info
+     *  (e.g. rowBytes < info.minRowBytes() or rowBytes is not aligned with
+     *  the pixel size specified by info.colorType()) then false is returned
+     *  and the bitmap is set to empty.
+     */
+    bool allocPixels(const SkImageInfo& info, size_t rowBytes);
+
+    /**
      *  Allocate a pixelref to match the specified image info, using the default
      *  allocator.
      *  On success, the bitmap's pixels will be "locked", and return true.
      *  On failure, the bitmap will be set to empty and return false.
      */
     bool allocPixels(const SkImageInfo& info) {
-        return this->allocPixels(info, NULL, NULL);
+        return this->allocPixels(info, info.minRowBytes());
     }
 
-    /**
-     *  Legacy helper function, which creates an SkImageInfo from the specified
-     *  config and then calls allocPixels(info).
-     */
-    bool allocConfigPixels(Config, int width, int height, bool isOpaque = false);
-
     bool allocN32Pixels(int width, int height, bool isOpaque = false) {
         SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
         if (isOpaque) {
             info.fAlphaType = kOpaque_SkAlphaType;
         }
         return this->allocPixels(info);
     }
 
     /**
      *  Install a pixelref that wraps the specified pixels and rowBytes, and
      *  optional ReleaseProc and context. When the pixels are no longer
-     *  referenced, if ReleaseProc is not null, it will be called with the
+     *  referenced, if releaseProc is not null, it will be called with the
      *  pixels and context as parameters.
      *  On failure, the bitmap will be set to empty and return false.
      */
-    bool installPixels(const SkImageInfo&, void* pixels, size_t rowBytes,
-                       void (*ReleaseProc)(void* addr, void* context),
-                       void* context);
+    bool installPixels(const SkImageInfo&, void* pixels, size_t rowBytes, SkColorTable*,
+                       void (*releaseProc)(void* addr, void* context), void* context);
 
     /**
      *  Call installPixels with no ReleaseProc specified. This means that the
      *  caller must ensure that the specified pixels are valid for the lifetime
      *  of the created bitmap (and its pixelRef).
      */
     bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes) {
-        return this->installPixels(info, pixels, rowBytes, NULL, NULL);
+        return this->installPixels(info, pixels, rowBytes, NULL, NULL, NULL);
     }
 
     /**
      *  Calls installPixels() with the value in the SkMask. The caller must
      *  ensure that the specified mask pixels are valid for the lifetime
      *  of the created bitmap (and its pixelRef).
      */
     bool installMaskPixels(const SkMask&);
 
-    /**
-     *  DEPRECATED: call info().
-     */
-    bool asImageInfo(SkImageInfo* info) const {
-        // compatibility: return false for kUnknown
-        if (kUnknown_SkColorType == this->colorType()) {
-            return false;
-        }
-        if (info) {
-            *info = this->info();
-        }
-        return true;
-    }
-
     /** Use this to assign a new pixel address for an existing bitmap. This
         will automatically release any pixelref previously installed. Only call
         this if you are handling ownership/lifetime of the pixel memory.
 
         If the bitmap retains a reference to the colortable (assuming it is
         not null) it will take care of incrementing the reference count.
 
         @param pixels   Address for the pixels, managed by the caller.
@@ -367,47 +326,46 @@ public:
         @param dstRowBytes  Width of each line in the buffer. If 0, uses
                             bitmap's internal stride.
         @param preserveDstPad Must we preserve padding in the dst
     */
     bool copyPixelsTo(void* const dst, size_t dstSize, size_t dstRowBytes = 0,
                       bool preserveDstPad = false) const;
 
     /** Use the standard HeapAllocator to create the pixelref that manages the
-        pixel memory. It will be sized based on the current width/height/config.
+        pixel memory. It will be sized based on the current ImageInfo.
         If this is called multiple times, a new pixelref object will be created
         each time.
 
         If the bitmap retains a reference to the colortable (assuming it is
         not null) it will take care of incrementing the reference count.
 
         @param ctable   ColorTable (or null) to use with the pixels that will
-                        be allocated. Only used if config == Index8_Config
+                        be allocated. Only used if colortype == kIndex_8_SkColorType
         @return true if the allocation succeeds. If not the pixelref field of
                      the bitmap will be unchanged.
     */
     bool allocPixels(SkColorTable* ctable = NULL) {
         return this->allocPixels(NULL, ctable);
     }
 
     /** Use the specified Allocator to create the pixelref that manages the
-        pixel memory. It will be sized based on the current width/height/config.
+        pixel memory. It will be sized based on the current ImageInfo.
         If this is called multiple times, a new pixelref object will be created
         each time.
 
         If the bitmap retains a reference to the colortable (assuming it is
         not null) it will take care of incrementing the reference count.
 
         @param allocator The Allocator to use to create a pixelref that can
-                         manage the pixel memory for the current
-                         width/height/config. If allocator is NULL, the standard
-                         HeapAllocator will be used.
+                         manage the pixel memory for the current ImageInfo.
+                         If allocator is NULL, the standard HeapAllocator will be used.
         @param ctable   ColorTable (or null) to use with the pixels that will
-                        be allocated. Only used if config == Index8_Config.
-                        If it is non-null and the config is not Index8, it will
+                        be allocated. Only used if colortype == kIndex_8_SkColorType.
+                        If it is non-null and the colortype is not indexed, it will
                         be ignored.
         @return true if the allocation succeeds. If not the pixelref field of
                      the bitmap will be unchanged.
     */
     bool allocPixels(Allocator* allocator, SkColorTable* ctable);
 
     /**
      *  Return the current pixelref object or NULL if there is none. This does
@@ -461,17 +419,17 @@ public:
      *  Some bitmaps can return a copy of their pixels for lockPixels(), but
      *  that copy, if modified, will not be pushed back. These bitmaps should
      *  not be used as targets for a raster device/canvas (since all pixels
      *  modifications will be lost when unlockPixels() is called.)
      */
     bool lockPixelsAreWritable() const;
 
     /** Call this to be sure that the bitmap is valid enough to be drawn (i.e.
-        it has non-null pixels, and if required by its config, it has a
+        it has non-null pixels, and if required by its colortype, it has a
         non-null colortable. Returns true if all of the above are met.
     */
     bool readyToDraw() const {
         return this->getPixels() != NULL &&
                (this->colorType() != kIndex_8_SkColorType || NULL != fColorTable);
     }
 
     /** Returns the pixelRef's texture, or NULL
@@ -483,54 +441,54 @@ public:
         Otherwise returns NULL. Does not affect the colortable's
         reference count.
     */
     SkColorTable* getColorTable() const { return fColorTable; }
 
     /** Returns a non-zero, unique value corresponding to the pixels in our
         pixelref. Each time the pixels are changed (and notifyPixelsChanged
         is called), a different generation ID will be returned. Finally, if
-        their is no pixelRef then zero is returned.
+        there is no pixelRef then zero is returned.
     */
     uint32_t getGenerationID() const;
 
     /** Call this if you have changed the contents of the pixels. This will in-
         turn cause a different generation ID value to be returned from
         getGenerationID().
     */
     void notifyPixelsChanged() const;
 
     /**
      *  Fill the entire bitmap with the specified color.
-     *  If the bitmap's config does not support alpha (e.g. 565) then the alpha
-     *  of the color is ignored (treated as opaque). If the config only supports
+     *  If the bitmap's colortype does not support alpha (e.g. 565) then the alpha
+     *  of the color is ignored (treated as opaque). If the colortype only supports
      *  alpha (e.g. A1 or A8) then the color's r,g,b components are ignored.
      */
     void eraseColor(SkColor c) const {
         this->eraseARGB(SkColorGetA(c), SkColorGetR(c), SkColorGetG(c),
                         SkColorGetB(c));
     }
 
     /**
      *  Fill the entire bitmap with the specified color.
-     *  If the bitmap's config does not support alpha (e.g. 565) then the alpha
-     *  of the color is ignored (treated as opaque). If the config only supports
+     *  If the bitmap's colortype does not support alpha (e.g. 565) then the alpha
+     *  of the color is ignored (treated as opaque). If the colortype only supports
      *  alpha (e.g. A1 or A8) then the color's r,g,b components are ignored.
      */
     void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const;
 
     SK_ATTR_DEPRECATED("use eraseARGB or eraseColor")
     void eraseRGB(U8CPU r, U8CPU g, U8CPU b) const {
         this->eraseARGB(0xFF, r, g, b);
     }
 
     /**
      *  Fill the specified area of this bitmap with the specified color.
-     *  If the bitmap's config does not support alpha (e.g. 565) then the alpha
-     *  of the color is ignored (treated as opaque). If the config only supports
+     *  If the bitmap's colortype does not support alpha (e.g. 565) then the alpha
+     *  of the color is ignored (treated as opaque). If the colortype only supports
      *  alpha (e.g. A1 or A8) then the color's r,g,b components are ignored.
      */
     void eraseArea(const SkIRect& area, SkColor c) const;
 
     /** Scroll (a subset of) the contents of this bitmap by dx/dy. If there are
         no pixels allocated (i.e. getPixels() returns null) the method will
         still update the inval region (if present). If the bitmap is immutable,
         do nothing and return false.
@@ -539,30 +497,29 @@ public:
                       entire contents, specify [0, 0, width, height] or just
                       pass null.
         @param dx The amount to scroll in X
         @param dy The amount to scroll in Y
         @param inval Optional (may be null). Returns the area of the bitmap that
                      was scrolled away. E.g. if dx = dy = 0, then inval would
                      be set to empty. If dx >= width or dy >= height, then
                      inval would be set to the entire bounds of the bitmap.
-        @return true if the scroll was doable. Will return false if the bitmap
-                     uses an unsupported config for scrolling (only kA8,
-                     kIndex8, kRGB_565, kARGB_4444, kARGB_8888 are supported).
+        @return true if the scroll was doable. Will return false if the colortype is kUnkown or
+                     if the bitmap is immutable.
                      If no pixels are present (i.e. getPixels() returns false)
                      inval will still be updated, and true will be returned.
     */
     bool scrollRect(const SkIRect* subset, int dx, int dy,
                     SkRegion* inval = NULL) const;
 
     /**
      *  Return the SkColor of the specified pixel.  In most cases this will
-     *  require un-premultiplying the color.  Alpha only configs (A1 and A8)
+     *  require un-premultiplying the color.  Alpha only colortypes (e.g. kAlpha_8_SkColorType)
      *  return black with the appropriate alpha set.  The value is undefined
-     *  for kNone_Config or if x or y are out of bounds, or if the bitmap
+     *  for kUnknown_SkColorType or if x or y are out of bounds, or if the bitmap
      *  does not have any pixels (or has not be locked with lockPixels()).
      */
     SkColor getColor(int x, int y) const;
 
     /** Returns the address of the specified pixel. This performs a runtime
         check to know the size of the pixels, and will return the same answer
         as the corresponding size-specific method (e.g. getAddr16). Since the
         check happens at runtime, it is much slower than using a size-specific
@@ -570,91 +527,110 @@ public:
         getPixels() returns null, and returns that. The size-specific routines
         perform a debugging assert that getPixels() is not null, but they do
         not do any runtime checks.
     */
     void* getAddr(int x, int y) const;
 
     /** Returns the address of the pixel specified by x,y for 32bit pixels.
      *  In debug build, this asserts that the pixels are allocated and locked,
-     *  and that the config is 32-bit, however none of these checks are performed
+     *  and that the colortype is 32-bit, however none of these checks are performed
      *  in the release build.
      */
     inline uint32_t* getAddr32(int x, int y) const;
 
     /** Returns the address of the pixel specified by x,y for 16bit pixels.
      *  In debug build, this asserts that the pixels are allocated and locked,
-     *  and that the config is 16-bit, however none of these checks are performed
+     *  and that the colortype is 16-bit, however none of these checks are performed
      *  in the release build.
      */
     inline uint16_t* getAddr16(int x, int y) const;
 
     /** Returns the address of the pixel specified by x,y for 8bit pixels.
      *  In debug build, this asserts that the pixels are allocated and locked,
-     *  and that the config is 8-bit, however none of these checks are performed
+     *  and that the colortype is 8-bit, however none of these checks are performed
      *  in the release build.
      */
     inline uint8_t* getAddr8(int x, int y) const;
 
     /** Returns the color corresponding to the pixel specified by x,y for
      *  colortable based bitmaps.
      *  In debug build, this asserts that the pixels are allocated and locked,
-     *  that the config is kIndex8, and that the colortable is allocated,
+     *  that the colortype is indexed, and that the colortable is allocated,
      *  however none of these checks are performed in the release build.
      */
     inline SkPMColor getIndex8Color(int x, int y) const;
 
     /** Set dst to be a setset of this bitmap. If possible, it will share the
-        pixel memory, and just point into a subset of it. However, if the config
+        pixel memory, and just point into a subset of it. However, if the colortype
         does not support this, a local copy will be made and associated with
         the dst bitmap. If the subset rectangle, intersected with the bitmap's
-        dimensions is empty, or if there is an unsupported config, false will be
+        dimensions is empty, or if there is an unsupported colortype, false will be
         returned and dst will be untouched.
         @param dst  The bitmap that will be set to a subset of this bitmap
         @param subset The rectangle of pixels in this bitmap that dst will
                       reference.
         @return true if the subset copy was successfully made.
     */
     bool extractSubset(SkBitmap* dst, const SkIRect& subset) const;
 
     /** Makes a deep copy of this bitmap, respecting the requested colorType,
      *  and allocating the dst pixels on the cpu.
      *  Returns false if either there is an error (i.e. the src does not have
      *  pixels) or the request cannot be satisfied (e.g. the src has per-pixel
-     *  alpha, and the requested config does not support alpha).
+     *  alpha, and the requested colortype does not support alpha).
      *  @param dst The bitmap to be sized and allocated
      *  @param ct The desired colorType for dst
      *  @param allocator Allocator used to allocate the pixelref for the dst
      *                   bitmap. If this is null, the standard HeapAllocator
      *                   will be used.
      *  @return true if the copy was made.
      */
     bool copyTo(SkBitmap* dst, SkColorType ct, Allocator* = NULL) const;
 
     bool copyTo(SkBitmap* dst, Allocator* allocator = NULL) const {
         return this->copyTo(dst, this->colorType(), allocator);
     }
 
     /**
+     *  Copy the bitmap's pixels into the specified buffer (pixels + rowBytes),
+     *  converting them into the requested format (SkImageInfo). The src pixels are read
+     *  starting at the specified (srcX,srcY) offset, relative to the top-left corner.
+     *
+     *  The specified ImageInfo and (srcX,srcY) offset specifies a source rectangle
+     *
+     *      srcR.setXYWH(srcX, srcY, dstInfo.width(), dstInfo.height());
+     *
+     *  srcR is intersected with the bounds of the bitmap. If this intersection is not empty,
+     *  then we have two sets of pixels (of equal size). Replace the dst pixels with the
+     *  corresponding src pixels, performing any colortype/alphatype transformations needed
+     *  (in the case where the src and dst have different colortypes or alphatypes).
+     *
+     *  This call can fail, returning false, for several reasons:
+     *  - If srcR does not intersect the bitmap bounds.
+     *  - If the requested colortype/alphatype cannot be converted from the src's types.
+     *  - If the src pixels are not available.
+     */
+    bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
+                    int srcX, int srcY) const;
+
+    /**
      *  Returns true if this bitmap's pixels can be converted into the requested
      *  colorType, such that copyTo() could succeed.
      */
     bool canCopyTo(SkColorType colorType) const;
 
     /** Makes a deep copy of this bitmap, keeping the copied pixels
      *  in the same domain as the source: If the src pixels are allocated for
      *  the cpu, then so will the dst. If the src pixels are allocated on the
      *  gpu (typically as a texture), the it will do the same for the dst.
      *  If the request cannot be fulfilled, returns false and dst is unmodified.
      */
     bool deepCopyTo(SkBitmap* dst) const;
 
-    SK_ATTR_DEPRECATED("use setFilterLevel on SkPaint")
-    void buildMipMap(bool forceRebuild = false);
-
 #ifdef SK_BUILD_FOR_ANDROID
     bool hasHardwareMipMap() const {
         return (fFlags & kHasHardwareMipMap_Flag) != 0;
     }
 
     void setHasHardwareMipMap(bool hasHardwareMipMap) {
         if (hasHardwareMipMap) {
             fFlags |= kHasHardwareMipMap_Flag;
@@ -684,36 +660,26 @@ public:
                          will be used.
         @param offset If not null, it is set to top-left coordinate to position
                       the returned bitmap so that it visually lines up with the
                       original
     */
     bool extractAlpha(SkBitmap* dst, const SkPaint* paint, Allocator* allocator,
                       SkIPoint* offset) const;
 
-    /** The following two functions provide the means to both flatten and
-        unflatten the bitmap AND its pixels into the provided buffer.
-        It is recommended that you do not call these functions directly,
-        but instead call the write/readBitmap functions on the respective
-        buffers as they can optimize the recording process and avoid recording
-        duplicate bitmaps and pixelRefs.
-     */
-    void flatten(SkWriteBuffer&) const;
-    void unflatten(SkReadBuffer&);
-
     SkDEBUGCODE(void validate() const;)
 
     class Allocator : public SkRefCnt {
     public:
         SK_DECLARE_INST_COUNT(Allocator)
 
         /** Allocate the pixel memory for the bitmap, given its dimensions and
-            config. Return true on success, where success means either setPixels
+            colortype. Return true on success, where success means either setPixels
             or setPixelRef was called. The pixels need not be locked when this
-            returns. If the config requires a colortable, it also must be
+            returns. If the colortype requires a colortable, it also must be
             installed via setColorTable. If false is returned, the bitmap and
             colortable should be left unchanged.
         */
         virtual bool allocPixelRef(SkBitmap*, SkColorTable*) = 0;
     private:
         typedef SkRefCnt INHERITED;
     };
 
@@ -745,31 +711,26 @@ public:
     private:
         uint8_t** fYPtrs;
         int       fHeight;
     };
 
     SK_TO_STRING_NONVIRT()
 
 private:
-    struct MipMap;
-    mutable MipMap* fMipMap;
-
     mutable SkPixelRef* fPixelRef;
     mutable int         fPixelLockCount;
     // These are just caches from the locked pixelref
     mutable void*       fPixels;
     mutable SkColorTable* fColorTable;    // only meaningful for kIndex8
 
     SkIPoint    fPixelRefOrigin;
 
     enum Flags {
-        kImageIsOpaque_Flag     = 0x01,
         kImageIsVolatile_Flag   = 0x02,
-        kImageIsImmutable_Flag  = 0x04,
 #ifdef SK_BUILD_FOR_ANDROID
         /* A hint for the renderer responsible for drawing this bitmap
          * indicating that it should attempt to use mipmaps when this bitmap
          * is drawn scaled down.
          */
         kHasHardwareMipMap_Flag = 0x08,
 #endif
     };
@@ -777,46 +738,33 @@ private:
     SkImageInfo fInfo;
 
     uint32_t    fRowBytes;
 
     uint8_t     fFlags;
 
     void internalErase(const SkIRect&, U8CPU a, U8CPU r, U8CPU g, U8CPU b)const;
 
-    /* Internal computations for safe size.
-    */
-    static int64_t ComputeSafeSize64(Config   config,
-                                     uint32_t width,
-                                     uint32_t height,
-                                     size_t   rowBytes);
-    static size_t ComputeSafeSize(Config   config,
-                                  uint32_t width,
-                                  uint32_t height,
-                                  size_t   rowBytes);
-
     /*  Unreference any pixelrefs or colortables
     */
     void freePixels();
     void updatePixelsFromRef() const;
 
-    static SkFixed ComputeMipLevel(SkFixed sx, SkFixed dy);
+    void legacyUnflatten(SkReadBuffer&);
 
-    /** Given scale factors sx, sy, determine the miplevel available in the
-     bitmap, and return it (this is the amount to shift matrix iterators
-     by). If dst is not null, it is set to the correct level.
-     */
-    int extractMipLevel(SkBitmap* dst, SkFixed sx, SkFixed sy);
-    bool hasMipMap() const;
-    void freeMipMap();
+    static void WriteRawPixels(SkWriteBuffer*, const SkBitmap&);
+    static bool ReadRawPixels(SkReadBuffer*, SkBitmap*);
 
+    friend class SkBitmapSource;    // unflatten
+    friend class SkReadBuffer;      // unflatten, rawpixels
+    friend class SkWriteBuffer;     // rawpixels
     friend struct SkBitmapProcState;
 };
 
-class SkAutoLockPixels : public SkNoncopyable {
+class SkAutoLockPixels : SkNoncopyable {
 public:
     SkAutoLockPixels(const SkBitmap& bm, bool doLock = true) : fBitmap(bm) {
         fDidLock = doLock;
         if (doLock) {
             bm.lockPixels();
         }
     }
     ~SkAutoLockPixels() {
@@ -830,17 +778,17 @@ private:
     bool            fDidLock;
 };
 //TODO(mtklein): uncomment when 71713004 lands and Chromium's fixed.
 //#define SkAutoLockPixels(...) SK_REQUIRE_LOCAL_VAR(SkAutoLockPixels)
 
 /** Helper class that performs the lock/unlockColors calls on a colortable.
     The destructor will call unlockColors(false) if it has a bitmap's colortable
 */
-class SkAutoLockColors : public SkNoncopyable {
+class SkAutoLockColors : SkNoncopyable {
 public:
     /** Initialize with no bitmap. Call lockColors(bitmap) to lock bitmap's
         colortable
      */
     SkAutoLockColors() : fCTable(NULL), fColors(NULL) {}
     /** Initialize with bitmap, locking its colortable if present
      */
     explicit SkAutoLockColors(const SkBitmap& bm) {
@@ -912,16 +860,18 @@ inline uint8_t* SkBitmap::getAddr8(int x
 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const {
     SkASSERT(fPixels);
     SkASSERT(kIndex_8_SkColorType == this->colorType());
     SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)this->height());
     SkASSERT(fColorTable);
     return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)];
 }
 
+#ifdef SK_SUPPORT_LEGACY_BITMAP_CONFIG
 ///////////////////////////////////////////////////////////////////////////////
 //
 // Helpers until we can fully deprecate SkBitmap::Config
 //
-extern SkBitmap::Config SkColorTypeToBitmapConfig(SkColorType);
-extern SkColorType SkBitmapConfigToColorType(SkBitmap::Config);
+SK_API SkBitmap::Config SkColorTypeToBitmapConfig(SkColorType);
+SK_API SkColorType SkBitmapConfigToColorType(SkBitmap::Config);
+#endif
 
 #endif
--- a/gfx/skia/trunk/include/core/SkBitmapDevice.h
+++ b/gfx/skia/trunk/include/core/SkBitmapDevice.h
@@ -25,103 +25,22 @@ public:
 
     /**
      *  Construct a new device with the specified bitmap as its backend. It is
      *  valid for the bitmap to have no pixels associated with it. In that case,
      *  any drawing to this device will have no effect.
     */
     SkBitmapDevice(const SkBitmap& bitmap, const SkDeviceProperties& deviceProperties);
 
-#ifdef SK_SUPPORT_LEGACY_COMPATIBLEDEVICE_CONFIG
-    /**
-     *  Create a new raster device and have the pixels be automatically
-     *  allocated. The rowBytes of the device will be computed automatically
-     *  based on the config and the width.
-     *
-     *  @param config   The desired config for the pixels. If the request cannot
-     *                  be met, the closest matching support config will be used.
-     *  @param width    width (in pixels) of the device
-     *  @param height   height (in pixels) of the device
-     *  @param isOpaque Set to true if it is known that all of the pixels will
-     *                  be drawn to opaquely. Used as an accelerator when drawing
-     *                  these pixels to another device.
-     */
-    SkBitmapDevice(SkBitmap::Config config, int width, int height, bool isOpaque = false);
-
-    /**
-     *  Create a new raster device and have the pixels be automatically
-     *  allocated. The rowBytes of the device will be computed automatically
-     *  based on the config and the width.
-     *
-     *  @param config   The desired config for the pixels. If the request cannot
-     *                  be met, the closest matching support config will be used.
-     *  @param width    width (in pixels) of the device
-     *  @param height   height (in pixels) of the device
-     *  @param isOpaque Set to true if it is known that all of the pixels will
-     *                  be drawn to opaquely. Used as an accelerator when drawing
-     *                  these pixels to another device.
-     *  @param deviceProperties Properties which affect compositing.
-     */
-    SkBitmapDevice(SkBitmap::Config config, int width, int height, bool isOpaque,
-                   const SkDeviceProperties& deviceProperties);
-#endif
     static SkBitmapDevice* Create(const SkImageInfo&,
                                   const SkDeviceProperties* = NULL);
 
-    /** Return the width of the device (in pixels).
-    */
-    virtual int width() const SK_OVERRIDE { return fBitmap.width(); }
-    /** Return the height of the device (in pixels).
-    */
-    virtual int height() const SK_OVERRIDE { return fBitmap.height(); }
-
-    /** Returns true if the device's bitmap's config treats every pixels as
-        implicitly opaque.
-    */
-    virtual bool isOpaque() const SK_OVERRIDE { return fBitmap.isOpaque(); }
-
-    /** Return the bitmap config of the device's pixels
-    */
-    virtual SkBitmap::Config config() const SK_OVERRIDE { return fBitmap.config(); }
-
     virtual SkImageInfo imageInfo() const SK_OVERRIDE;
 
-#ifdef SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
-    /**
-     *  DEPRECATED: This will be made protected once WebKit stops using it.
-     *              Instead use Canvas' writePixels method.
-     *
-     *  Similar to draw sprite, this method will copy the pixels in bitmap onto
-     *  the device, with the top/left corner specified by (x, y). The pixel
-     *  values in the device are completely replaced: there is no blending.
-     *
-     *  Currently if bitmap is backed by a texture this is a no-op. This may be
-     *  relaxed in the future.
-     *
-     *  If the bitmap has config kARGB_8888_Config then the config8888 param
-     *  will determines how the pixel valuess are intepreted. If the bitmap is
-     *  not kARGB_8888_Config then this parameter is ignored.
-     */
-    virtual void writePixels(const SkBitmap& bitmap, int x, int y,
-                             SkCanvas::Config8888 config8888) SK_OVERRIDE;
-#endif
-    /**
-     * Return the device's associated gpu render target, or NULL.
-     */
-    virtual GrRenderTarget* accessRenderTarget() SK_OVERRIDE { return NULL; }
-
 protected:
-    /**
-     *  Device may filter the text flags for drawing text here. If it wants to
-     *  make a change to the specified values, it should write them into the
-     *  textflags parameter (output) and return true. If the paint is fine as
-     *  is, then ignore the textflags parameter and return false.
-     *
-     *  The baseclass SkDevice filters based on its depth and blitters.
-     */
     virtual bool filterTextFlags(const SkPaint& paint, TextFlags*) SK_OVERRIDE;
 
     /** Clears the entire device to the specified color (including alpha).
      *  Ignores the clip.
      */
     virtual void clear(SkColor color) SK_OVERRIDE;
 
     /** These are called inside the per-device-layer loop for each draw call.
@@ -202,86 +121,43 @@ protected:
 
     SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); }
     // just for subclasses, to assign a custom pixelref
     SkPixelRef* setPixelRef(SkPixelRef* pr) {
         fBitmap.setPixelRef(pr);
         return pr;
     }
 
-    /**
-     * Implements readPixels API. The caller will ensure that:
-     *  1. bitmap has pixel config kARGB_8888_Config.
-     *  2. bitmap has pixels.
-     *  3. The rectangle (x, y, x + bitmap->width(), y + bitmap->height()) is
-     *     contained in the device bounds.
-     */
-    virtual bool onReadPixels(const SkBitmap&, int x, int y, SkCanvas::Config8888) SK_OVERRIDE;
+    virtual bool onReadPixels(const SkImageInfo&, void*, size_t, int x, int y) SK_OVERRIDE;
     virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) SK_OVERRIDE;
     virtual void* onAccessPixels(SkImageInfo* info, size_t* rowBytes) SK_OVERRIDE;
 
     /** Called when this device is installed into a Canvas. Balanced by a call
         to unlockPixels() when the device is removed from a Canvas.
     */
     virtual void lockPixels() SK_OVERRIDE;
     virtual void unlockPixels() SK_OVERRIDE;
 
-    /**
-     *  Returns true if the device allows processing of this imagefilter. If
-     *  false is returned, then the filter is ignored. This may happen for
-     *  some subclasses that do not support pixel manipulations after drawing
-     *  has occurred (e.g. printing). The default implementation returns true.
-     */
-    virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE;
-
-    /**
-     *  Override and return true for filters that the device can handle
-     *  intrinsically. Doing so means that SkCanvas will pass-through this
-     *  filter to drawSprite and drawDevice (and potentially filterImage).
-     *  Returning false means the SkCanvas will have apply the filter itself,
-     *  and just pass the resulting image to the device.
-     */
-    virtual bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE;
-
-    /**
-     *  Related (but not required) to canHandleImageFilter, this method returns
-     *  true if the device could apply the filter to the src bitmap and return
-     *  the result (and updates offset as needed).
-     *  If the device does not recognize or support this filter,
-     *  it just returns false and leaves result and offset unchanged.
-     */
-    virtual bool filterImage(const SkImageFilter*, const SkBitmap&, const SkImageFilter::Context&,
-                             SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
-
 private:
     friend class SkCanvas;
     friend struct DeviceCM; //for setMatrixClip
     friend class SkDraw;
     friend class SkDrawIter;
     friend class SkDeviceFilteredPaint;
     friend class SkDeviceImageFilterProxy;
 
     friend class SkSurface_Raster;
 
     // used to change the backend's pixels (and possibly config/rowbytes)
     // but cannot change the width/height, so there should be no change to
     // any clip information.
     virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE;
 
-#ifdef SK_SUPPORT_LEGACY_COMPATIBLEDEVICE_CONFIG
-    // in support of legacy constructors
-    void init(SkBitmap::Config config, int width, int height, bool isOpaque);
-#endif
-
     virtual SkBaseDevice* onCreateDevice(const SkImageInfo&, Usage) SK_OVERRIDE;
 
-    /** Causes any deferred drawing to the device to be completed.
-     */
-    virtual void flush() SK_OVERRIDE {}
-
     virtual SkSurface* newSurface(const SkImageInfo&) SK_OVERRIDE;
     virtual const void* peekPixels(SkImageInfo*, size_t* rowBytes) SK_OVERRIDE;
 
     SkBitmap    fBitmap;
 
     typedef SkBaseDevice INHERITED;
 };
 
--- a/gfx/skia/trunk/include/core/SkBlitRow.h
+++ b/gfx/skia/trunk/include/core/SkBlitRow.h
@@ -31,17 +31,17 @@ public:
         @param alpha A global alpha to be applied to all of the src colors
         @param x The x coordinate of the beginning of the scanline
         @param y THe y coordinate of the scanline
      */
     typedef void (*Proc)(uint16_t* dst,
                          const SkPMColor* src,
                          int count, U8CPU alpha, int x, int y);
 
-    static Proc Factory(unsigned flags, SkBitmap::Config);
+    static Proc Factory(unsigned flags, SkColorType);
 
     ///////////// D32 version
 
     enum Flags32 {
         kGlobalAlpha_Flag32     = 1 << 0,
         kSrcPixelAlpha_Flag32   = 1 << 1
     };
 
new file mode 100644
--- /dev/null
+++ b/gfx/skia/trunk/include/core/SkBlurTypes.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkBlurTypes_DEFINED
+#define SkBlurTypes_DEFINED
+
+#include "SkTypes.h"
+
+enum SkBlurStyle {
+    kNormal_SkBlurStyle,  //!< fuzzy inside and outside
+    kSolid_SkBlurStyle,   //!< solid inside, fuzzy outside
+    kOuter_SkBlurStyle,   //!< nothing inside, fuzzy outside
+    kInner_SkBlurStyle,   //!< fuzzy inside, nothing outside
+
+    kLastEnum_SkBlurStyle = kInner_SkBlurStyle
+};
+
+enum SkBlurQuality {
+    kLow_SkBlurQuality,     //!< e.g. box filter
+    kHigh_SkBlurQuality,    //!< e.g. 3-pass similar to gaussian
+
+    kLastEnum_SkBlurQuality
+};
+
+#endif
deleted file mode 100644
--- a/gfx/skia/trunk/include/core/SkBounder.h
+++ /dev/null
@@ -1,93 +0,0 @@
-
-/*
- * Copyright 2006 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
-#ifndef SkBounder_DEFINED
-#define SkBounder_DEFINED
-
-#include "SkTypes.h"
-#include "SkRefCnt.h"
-#include "SkPoint.h"
-
-struct SkGlyph;
-struct SkIRect;
-struct SkPoint;
-struct SkRect;
-class SkPaint;
-class SkPath;
-class SkRegion;
-
-/** \class SkBounder
-
-    Base class for intercepting the device bounds of shapes before they are drawn.
-    Install a subclass of this in your canvas.
-*/
-class SkBounder : public SkRefCnt {
-public:
-    SK_DECLARE_INST_COUNT(SkBounder)
-
-    SkBounder();
-
-    /* Call to perform a clip test before calling onIRect.
-       Returns the result from onIRect.
-    */
-    bool doIRect(const SkIRect&);
-    bool doIRectGlyph(const SkIRect& , int x, int y, const SkGlyph&);
-
-protected:
-    /** Override in your subclass. This is called with the device bounds of an
-        object (text, geometry, image) just before it is drawn. If your method
-        returns false, the drawing for that shape is aborted. If your method
-        returns true, drawing continues. The bounds your method receives have already
-        been transformed in to device coordinates, and clipped to the current clip.
-    */
-    virtual bool onIRect(const SkIRect&) {
-        return false;
-    }
-
-    /** Passed to onIRectGlyph with the information about the current glyph.
-        LSB and RSB are fixed-point (16.16) coordinates of the start and end
-        of the glyph's advance
-     */
-    struct GlyphRec {
-        SkIPoint    fLSB;   //!< fixed-point left-side-bearing of the glyph
-        SkIPoint    fRSB;   //!< fixed-point right-side-bearing of the glyph
-        uint16_t    fGlyphID;
-        uint16_t    fFlags; //!< currently set to 0
-    };
-
-    /** Optionally, override in your subclass to receive the glyph ID when
-        text drawing supplies the device bounds of the object.
-    */
-    virtual bool onIRectGlyph(const SkIRect& r, const GlyphRec&) {
-        return onIRect(r);
-    }
-
-    /** Called after each shape has been drawn. The default implementation does
-        nothing, but your override could use this notification to signal itself
-        that the offscreen being rendered into needs to be updated to the screen.
-    */
-    virtual void commit();
-
-private:
-    bool doHairline(const SkPoint&, const SkPoint&, const SkPaint&);
-    bool doRect(const SkRect&, const SkPaint&);
-    bool doPath(const SkPath&, const SkPaint&, bool doFill);
-    void setClip(const SkRegion* clip) { fClip = clip; }
-
-    const SkRegion* fClip;
-    friend class SkAutoBounderCommit;
-    friend class SkDraw;
-    friend class SkDrawIter;
-    friend struct Draw1Glyph;
-    friend class SkMaskFilter;
-
-    typedef SkRefCnt INHERITED;
-};
-
-#endif
--- a/gfx/skia/trunk/include/core/SkCanvas.h
+++ b/gfx/skia/trunk/include/core/SkCanvas.h
@@ -13,26 +13,23 @@
 #include "SkDeque.h"
 #include "SkClipStack.h"
 #include "SkPaint.h"
 #include "SkRefCnt.h"
 #include "SkPath.h"
 #include "SkRegion.h"
 #include "SkXfermode.h"
 
-// if not defined, we always assume ClipToLayer for saveLayer()
-//#define SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
-
+#ifdef SK_SUPPORT_LEGACY_DRAWTEXT_VIRTUAL
+    #define SK_LEGACY_DRAWTEXT_VIRTUAL  virtual
+#else
+    #define SK_LEGACY_DRAWTEXT_VIRTUAL
+#endif
 
-//#define SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
-//#define SK_SUPPORT_LEGACY_GETCLIPTYPE
-//#define SK_SUPPORT_LEGACY_GETTOTALCLIP
-//#define SK_SUPPORT_LEGACY_GETTOPDEVICE
-
-class SkBounder;
+class SkCanvasClipVisitor;
 class SkBaseDevice;
 class SkDraw;
 class SkDrawFilter;
 class SkMetaData;
 class SkPicture;
 class SkRRect;
 class SkSurface;
 class SkSurface_Base;
@@ -162,17 +159,21 @@ public:
     SkISize getDeviceSize() const { return this->getBaseLayerSize(); }
 
     /**
      *  DEPRECATED.
      *  Return the canvas' device object, which may be null. The device holds
      *  the bitmap of the pixels that the canvas draws into. The reference count
      *  of the returned device is not changed by this call.
      */
+#ifndef SK_SUPPORT_LEGACY_GETDEVICE
+protected:  // Can we make this private?
+#endif
     SkBaseDevice* getDevice() const;
+public:
 
     /**
      *  saveLayer() can create another device (which is later drawn onto
      *  the previous device). getTopDevice() returns the top-most device current
      *  installed. Note that this can change on other calls like save/restore,
      *  so do not access this device after subsequent canvas calls.
      *  The reference count of the device is not changed.
      *
@@ -185,159 +186,93 @@ public:
 #ifndef SK_SUPPORT_LEGACY_GETTOPDEVICE
 private:
 #endif
     SkBaseDevice* getTopDevice(bool updateMatrixClip = false) const;
 public:
 
     /**
      *  Create a new surface matching the specified info, one that attempts to
-     *  be maximally compatible when used with this canvas.
+     *  be maximally compatible when used with this canvas. If there is no matching Surface type,
+     *  NULL is returned.
      */
     SkSurface* newSurface(const SkImageInfo&);
 
     /**
      * Return the GPU context of the device that is associated with the canvas.
      * For a canvas with non-GPU device, NULL is returned.
      */
     GrContext* getGrContext();
 
     ///////////////////////////////////////////////////////////////////////////
 
     /**
      *  If the canvas has writable pixels in its top layer (and is not recording to a picture
      *  or other non-raster target) and has direct access to its pixels (i.e. they are in
      *  local RAM) return the address of those pixels, and if not null,
-     *  return the ImageInfo and rowBytes. The returned address is only valid
+     *  return the ImageInfo, rowBytes and origin. The returned address is only valid
      *  while the canvas object is in scope and unchanged. Any API calls made on
      *  canvas (or its parent surface if any) will invalidate the
      *  returned address (and associated information).
      *
-     *  On failure, returns NULL and the info and rowBytes parameters are
-     *  ignored.
+     *  On failure, returns NULL and the info, rowBytes, and origin parameters are ignored.
      */
-    void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes);
+    void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes, SkIPoint* origin = NULL);
 
     /**
      *  If the canvas has readable pixels in its base layer (and is not recording to a picture
      *  or other non-raster target) and has direct access to its pixels (i.e. they are in
      *  local RAM) return the const-address of those pixels, and if not null,
      *  return the ImageInfo and rowBytes. The returned address is only valid
      *  while the canvas object is in scope and unchanged. Any API calls made on
      *  canvas (or its parent surface if any) will invalidate the
      *  returned address (and associated information).
      *
      *  On failure, returns NULL and the info and rowBytes parameters are
      *  ignored.
      */
     const void* peekPixels(SkImageInfo* info, size_t* rowBytes);
 
     /**
-     * This enum can be used with read/writePixels to perform a pixel ops to or
-     * from an 8888 config other than Skia's native config (SkPMColor). There
-     * are three byte orders supported: native, BGRA, and RGBA. Each has a
-     * premultiplied and unpremultiplied variant.
+     *  Copy the pixels from the base-layer into the specified buffer (pixels + rowBytes),
+     *  converting them into the requested format (SkImageInfo). The base-layer pixels are read
+     *  starting at the specified (srcX,srcY) location in the coordinate system of the base-layer.
+     *
+     *  The specified ImageInfo and (srcX,srcY) offset specifies a source rectangle
+     *
+     *      srcR.setXYWH(srcX, srcY, dstInfo.width(), dstInfo.height());
      *
-     * Components of a 8888 pixel can be packed/unpacked from a 32bit word using
-     * either byte offsets or shift values. Byte offsets are endian-invariant
-     * while shifts are not. BGRA and RGBA configs are defined by byte
-     * orderings. The native config is defined by shift values (SK_A32_SHIFT,
-     * ..., SK_B32_SHIFT).
+     *  srcR is intersected with the bounds of the base-layer. If this intersection is not empty,
+     *  then we have two sets of pixels (of equal size). Replace the dst pixels with the
+     *  corresponding src pixels, performing any colortype/alphatype transformations needed
+     *  (in the case where the src and dst have different colortypes or alphatypes).
+     *
+     *  This call can fail, returning false, for several reasons:
+     *  - If srcR does not intersect the base-layer bounds.
+     *  - If the requested colortype/alphatype cannot be converted from the base-layer's types.
+     *  - If this canvas is not backed by pixels (e.g. picture or PDF)
      */
-    enum Config8888 {
-        /**
-         * Skia's native order specified by:
-         *      SK_A32_SHIFT, SK_R32_SHIFT, SK_G32_SHIFT, and SK_B32_SHIFT
-         *
-         * kNative_Premul_Config8888 is equivalent to SkPMColor
-         * kNative_Unpremul_Config8888 has the same component order as SkPMColor
-         * but is not premultiplied.
-         */
-        kNative_Premul_Config8888,
-        kNative_Unpremul_Config8888,
-        /**
-         * low byte to high byte: B, G, R, A.
-         */
-        kBGRA_Premul_Config8888,
-        kBGRA_Unpremul_Config8888,
-        /**
-         * low byte to high byte: R, G, B, A.
-         */
-        kRGBA_Premul_Config8888,
-        kRGBA_Unpremul_Config8888
-    };
+    bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
+                    int srcX, int srcY);
 
     /**
-     *  On success (returns true), copy the canvas pixels into the bitmap.
-     *  On failure, the bitmap parameter is left unchanged and false is
-     *  returned.
-     *
-     *  The canvas' pixels are converted to the bitmap's config. The only
-     *  supported config is kARGB_8888_Config, though this is likely to be
-     *  relaxed in  the future. The meaning of config kARGB_8888_Config is
-     *  modified by the enum param config8888. The default value interprets
-     *  kARGB_8888_Config as SkPMColor
-     *
-     *  If the bitmap has pixels already allocated, the canvas pixels will be
-     *  written there. If not, bitmap->allocPixels() will be called
-     *  automatically. If the bitmap is backed by a texture readPixels will
-     *  fail.
-     *
-     *  The actual pixels written is the intersection of the canvas' bounds, and
-     *  the rectangle formed by the bitmap's width,height and the specified x,y.
-     *  If bitmap pixels extend outside of that intersection, they will not be
-     *  modified.
-     *
-     *  Other failure conditions:
-     *    * If the canvas is backed by a non-raster device (e.g. PDF) then
-     *       readPixels will fail.
-     *    * If bitmap is texture-backed then readPixels will fail. (This may be
-     *       relaxed in the future.)
-     *
-     *  Example that reads the entire canvas into a bitmap using the native
-     *  SkPMColor:
-     *    SkISize size = canvas->getDeviceSize();
-     *    bitmap->setConfig(SkBitmap::kARGB_8888_Config, size.fWidth,
-     *                                                   size.fHeight);
-     *    if (canvas->readPixels(bitmap, 0, 0)) {
-     *       // use the pixels
-     *    }
+     *  Helper for calling readPixels(info, ...). This call will check if bitmap has been allocated.
+     *  If not, it will attempt to call allocPixels(). If this fails, it will return false. If not,
+     *  it calls through to readPixels(info, ...) and returns its result.
      */
-    bool readPixels(SkBitmap* bitmap,
-                    int x, int y,
-                    Config8888 config8888 = kNative_Premul_Config8888);
+    bool readPixels(SkBitmap* bitmap, int srcX, int srcY);
 
     /**
-     * DEPRECATED: This will be removed as soon as webkit is no longer relying
-     * on it. The bitmap is resized to the intersection of srcRect and the
-     * canvas bounds. New pixels are always allocated on success. Bitmap is
-     * unmodified on failure.
+     *  Helper for allocating pixels and then calling readPixels(info, ...). The bitmap is resized
+     *  to the intersection of srcRect and the base-layer bounds. On success, pixels will be
+     *  allocated in bitmap and true returned. On failure, false is returned and bitmap will be
+     *  set to empty.
      */
     bool readPixels(const SkIRect& srcRect, SkBitmap* bitmap);
 
-#ifdef SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
-    /**
-     *  DEPRECATED
-     *  Similar to draw sprite, this method will copy the pixels in bitmap onto
-     *  the canvas, with the top/left corner specified by (x, y). The canvas'
-     *  pixel values are completely replaced: there is no blending.
-     *
-     *  Currently if bitmap is backed by a texture this is a no-op. This may be
-     *  relaxed in the future.
-     *
-     *  If the bitmap has config kARGB_8888_Config then the config8888 param
-     *  will determines how the pixel valuess are intepreted. If the bitmap is
-     *  not kARGB_8888_Config then this parameter is ignored.
-     *
-     *  Note: If you are recording drawing commands on this canvas to
-     *  SkPicture, writePixels() is ignored!
-     */
-    void writePixels(const SkBitmap& bitmap, int x, int y, Config8888 config8888);
-#endif
-
     /**
      *  This method affects the pixels in the base-layer, and operates in pixel coordinates,
      *  ignoring the matrix and clip.
      *
      *  The specified ImageInfo and (x,y) offset specifies a rectangle: target.
      *
      *      target.setXYWH(x, y, info.width(), info.height());
      *
@@ -358,84 +293,113 @@ public:
      *  is just wrapping a texture, returns false and does nothing.
      */
     bool writePixels(const SkBitmap& bitmap, int x, int y);
 
     ///////////////////////////////////////////////////////////////////////////
 
     enum SaveFlags {
         /** save the matrix state, restoring it on restore() */
+        // [deprecated] kMatrix_SaveFlag            = 0x01,
         kMatrix_SaveFlag            = 0x01,
         /** save the clip state, restoring it on restore() */
+        // [deprecated] kClip_SaveFlag              = 0x02,
         kClip_SaveFlag              = 0x02,
         /** the layer needs to support per-pixel alpha */
         kHasAlphaLayer_SaveFlag     = 0x04,
         /** the layer needs to support 8-bits per color component */
         kFullColorLayer_SaveFlag    = 0x08,
         /**
          *  the layer should clip against the bounds argument
          *
          *  if SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG is undefined, this is treated as always on.
          */
         kClipToLayer_SaveFlag       = 0x10,
 
         // helper masks for common choices
+        // [deprecated] kMatrixClip_SaveFlag        = 0x03,
         kMatrixClip_SaveFlag        = 0x03,
 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
         kARGB_NoClipLayer_SaveFlag  = 0x0F,
 #endif
         kARGB_ClipLayer_SaveFlag    = 0x1F
     };
 
     /** This call saves the current matrix, clip, and drawFilter, and pushes a
         copy onto a private stack. Subsequent calls to translate, scale,
         rotate, skew, concat or clipRect, clipPath, and setDrawFilter all
         operate on this copy.
         When the balancing call to restore() is made, the previous matrix, clip,
         and drawFilter are restored.
-        @param flags The flags govern what portion of the Matrix/Clip/drawFilter
-                     state the save (and matching restore) effect. For example,
-                     if only kMatrix is specified, then only the matrix state
-                     will be pushed and popped. Likewise for the clip if kClip
-                     is specified.  However, the drawFilter is always affected
-                     by calls to save/restore.
+
         @return The value to pass to restoreToCount() to balance this save()
     */
-    int save(SaveFlags flags = kMatrixClip_SaveFlag);
+    int save();
 
     /** This behaves the same as save(), but in addition it allocates an
         offscreen bitmap. All drawing calls are directed there, and only when
         the balancing call to restore() is made is that offscreen transfered to
         the canvas (or the previous layer).
         @param bounds (may be null) This rect, if non-null, is used as a hint to
                       limit the size of the offscreen, and thus drawing may be
                       clipped to it, though that clipping is not guaranteed to
                       happen. If exact clipping is desired, use clipRect().
         @param paint (may be null) This is copied, and is applied to the
                      offscreen when restore() is called
+        @return The value to pass to restoreToCount() to balance this save()
+    */
+    int saveLayer(const SkRect* bounds, const SkPaint* paint);
+
+    /** DEPRECATED - use saveLayer(const SkRect*, const SkPaint*) instead.
+
+        This behaves the same as saveLayer(const SkRect*, const SkPaint*),
+        but it allows fine-grained control of which state bits to be saved
+        (and subsequently restored).
+
+        @param bounds (may be null) This rect, if non-null, is used as a hint to
+                      limit the size of the offscreen, and thus drawing may be
+                      clipped to it, though that clipping is not guaranteed to
+                      happen. If exact clipping is desired, use clipRect().
+        @param paint (may be null) This is copied, and is applied to the
+                     offscreen when restore() is called
         @param flags  LayerFlags
         @return The value to pass to restoreToCount() to balance this save()
     */
-    int saveLayer(const SkRect* bounds, const SkPaint* paint,
-                  SaveFlags flags = kARGB_ClipLayer_SaveFlag);
+    SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
+    int saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags);
 
     /** This behaves the same as save(), but in addition it allocates an
         offscreen bitmap. All drawing calls are directed there, and only when
         the balancing call to restore() is made is that offscreen transfered to
         the canvas (or the previous layer).
         @param bounds (may be null) This rect, if non-null, is used as a hint to
                       limit the size of the offscreen, and thus drawing may be
                       clipped to it, though that clipping is not guaranteed to
                       happen. If exact clipping is desired, use clipRect().
         @param alpha  This is applied to the offscreen when restore() is called.
+        @return The value to pass to restoreToCount() to balance this save()
+    */
+    int saveLayerAlpha(const SkRect* bounds, U8CPU alpha);
+
+    /** DEPRECATED - use saveLayerAlpha(const SkRect*, U8CPU) instead.
+
+        This behaves the same as saveLayerAlpha(const SkRect*, U8CPU),
+        but it allows fine-grained control of which state bits to be saved
+        (and subsequently restored).
+
+        @param bounds (may be null) This rect, if non-null, is used as a hint to
+                      limit the size of the offscreen, and thus drawing may be
+                      clipped to it, though that clipping is not guaranteed to
+                      happen. If exact clipping is desired, use clipRect().
+        @param alpha  This is applied to the offscreen when restore() is called.
         @param flags  LayerFlags
         @return The value to pass to restoreToCount() to balance this save()
     */
-    int saveLayerAlpha(const SkRect* bounds, U8CPU alpha,
-                       SaveFlags flags = kARGB_ClipLayer_SaveFlag);
+    SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
+    int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, SaveFlags flags);
 
     /** This call balances a previous call to save(), and is used to remove all
         modifications to the matrix/clip/drawFilter state since the last save
         call.
         It is an error to call restore() more times than save() was called.
     */
     void restore();
 
@@ -456,45 +420,40 @@ public:
     /** Returns true if drawing is currently going to a layer (from saveLayer)
      *  rather than to the root device.
      */
     virtual bool isDrawingToLayer() const;
 
     /** Preconcat the current matrix with the specified translation
         @param dx   The distance to translate in X
         @param dy   The distance to translate in Y
-        returns true if the operation succeeded (e.g. did not overflow)
     */
-    bool translate(SkScalar dx, SkScalar dy);
+    void translate(SkScalar dx, SkScalar dy);
 
     /** Preconcat the current matrix with the specified scale.
         @param sx   The amount to scale in X
         @param sy   The amount to scale in Y
-        returns true if the operation succeeded (e.g. did not overflow)
     */
-    bool scale(SkScalar sx, SkScalar sy);
+    void scale(SkScalar sx, SkScalar sy);
 
     /** Preconcat the current matrix with the specified rotation.
         @param degrees  The amount to rotate, in degrees
-        returns true if the operation succeeded (e.g. did not overflow)
     */
-    bool rotate(SkScalar degrees);
+    void rotate(SkScalar degrees);
 
     /** Preconcat the current matrix with the specified skew.
         @param sx   The amount to skew in X
         @param sy   The amount to skew in Y
-        returns true if the operation succeeded (e.g. did not overflow)
     */
-    bool skew(SkScalar sx, SkScalar sy);
+    void skew(SkScalar sx, SkScalar sy);
 
     /** Preconcat the current matrix with the specified matrix.
         @param matrix   The matrix to preconcatenate with the current matrix
-        @return true if the operation succeeded (e.g. did not overflow)
     */
-    bool concat(const SkMatrix& matrix);
+    void concat(const SkMatrix& matrix);
 
     /** Replace the current matrix with a copy of the specified matrix.
         @param matrix The matrix that will be copied into the current matrix.
     */
     void setMatrix(const SkMatrix& matrix);
 
     /** Helper for setMatrix(identity). Sets the current matrix to identity.
     */
@@ -665,16 +624,30 @@ public:
      *      paint.setXfermodeMode(kSrc_Mode);
      *      canvas.drawPaint(paint);
      *      canvas.restore();
      *  though it is almost always much more efficient.
      */
     virtual void clear(SkColor);
 
     /**
+     * This makes the contents of the canvas undefined. Subsequent calls that
+     * require reading the canvas contents will produce undefined results. Examples
+     * include blending and readPixels. The actual implementation is backend-
+     * dependent and one legal implementation is to do nothing. Like clear(), this
+     * ignores the clip.
+     *
+     * This function should only be called if the caller intends to subsequently
+     * draw to the canvas. The canvas may do real work at discard() time in order
+     * to optimize performance on subsequent draws. Thus, if you call this and then
+     * never draw to the canvas subsequently you may pay a perfomance penalty.
+     */
+    void discard() { this->onDiscard(); }
+
+    /**
      *  Fill the entire canvas' bitmap (restricted to the current clip) with the
      *  specified paint.
      *  @param paint    The paint used to fill the canvas
      */
     virtual void drawPaint(const SkPaint& paint);
 
     enum PointMode {
         /** drawPoints draws each point separately */
@@ -829,17 +802,17 @@ public:
     /** Draw the specified bitmap, with its top/left corner at (x,y), using the
         specified paint, transformed by the current matrix. Note: if the paint
         contains a maskfilter that generates a mask which extends beyond the
         bitmap's original width/height, then the bitmap will be drawn as if it
         were in a Shader with CLAMP mode. Thus the color outside of the original
         width/height will be the edge color replicated.
 
         If a shader is present on the paint it will be ignored, except in the
-        case where the bitmap is kA8_Config. In that case, the color is
+        case where the bitmap is kAlpha_8_SkColorType. In that case, the color is
         generated by the shader.
 
         @param bitmap   The bitmap to be drawn
         @param left     The position of the left side of the bitmap being drawn
         @param top      The position of the top side of the bitmap being drawn
         @param paint    The paint used to draw the bitmap, or NULL
     */
     virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
@@ -922,39 +895,39 @@ public:
     /** Draw the text, with origin at (x,y), using the specified paint.
         The origin is interpreted based on the Align setting in the paint.
         @param text The text to be drawn
         @param byteLength   The number of bytes to read from the text parameter
         @param x        The x-coordinate of the origin of the text being drawn
         @param y        The y-coordinate of the origin of the text being drawn
         @param paint    The paint used for the text (e.g. color, size, style)
     */
-    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
+    SK_LEGACY_DRAWTEXT_VIRTUAL void drawText(const void* text, size_t byteLength, SkScalar x,
                           SkScalar y, const SkPaint& paint);
 
     /** Draw the text, with each character/glyph origin specified by the pos[]
         array. The origin is interpreted by the Align setting in the paint.
         @param text The text to be drawn
         @param byteLength   The number of bytes to read from the text parameter
         @param pos      Array of positions, used to position each character
         @param paint    The paint used for the text (e.g. color, size, style)
         */
-    virtual void drawPosText(const void* text, size_t byteLength,
+    SK_LEGACY_DRAWTEXT_VIRTUAL void drawPosText(const void* text, size_t byteLength,
                              const SkPoint pos[], const SkPaint& paint);
 
     /** Draw the text, with each character/glyph origin specified by the x
         coordinate taken from the xpos[] array, and the y from the constY param.
         The origin is interpreted by the Align setting in the paint.
         @param text The text to be drawn
         @param byteLength   The number of bytes to read from the text parameter
         @param xpos     Array of x-positions, used to position each character
         @param constY   The shared Y coordinate for all of the positions
         @param paint    The paint used for the text (e.g. color, size, style)
         */
-    virtual void drawPosTextH(const void* text, size_t byteLength,
+    SK_LEGACY_DRAWTEXT_VIRTUAL void drawPosTextH(const void* text, size_t byteLength,
                               const SkScalar xpos[], SkScalar constY,
                               const SkPaint& paint);
 
     /** Draw the text, with origin at (x,y), using the specified paint, along
         the specified path. The paint's Align setting determins where along the
         path to start the text.
         @param text The text to be drawn
         @param byteLength   The number of bytes to read from the text parameter
@@ -974,43 +947,48 @@ public:
         path to start the text.
         @param text The text to be drawn
         @param byteLength   The number of bytes to read from the text parameter
         @param path         The path the text should follow for its baseline
         @param matrix       (may be null) Applied to the text before it is
                             mapped onto the path
         @param paint        The paint used for the text
         */
-    virtual void drawTextOnPath(const void* text, size_t byteLength,
+    SK_LEGACY_DRAWTEXT_VIRTUAL void drawTextOnPath(const void* text, size_t byteLength,
                                 const SkPath& path, const SkMatrix* matrix,
                                 const SkPaint& paint);
 
     /** PRIVATE / EXPERIMENTAL -- do not call
         Perform back-end analysis/optimization of a picture. This may attach
         optimization data to the picture which can be used by a later
         drawPicture call.
         @param picture The recorded drawing commands to analyze/optimize
     */
-    void EXPERIMENTAL_optimize(SkPicture* picture);
+    void EXPERIMENTAL_optimize(const SkPicture* picture);
 
     /** Draw the picture into this canvas. This method effective brackets the
         playback of the picture's draw calls with save/restore, so the state
         of this canvas will be unchanged after this call.
         @param picture The recorded drawing commands to playback into this
                        canvas.
     */
-    virtual void drawPicture(SkPicture& picture);
+    void drawPicture(const SkPicture* picture);
 
     enum VertexMode {
         kTriangles_VertexMode,
         kTriangleStrip_VertexMode,
         kTriangleFan_VertexMode
     };
 
     /** Draw the array of vertices, interpreted as triangles (based on mode).
+
+        If both textures and vertex-colors are NULL, it strokes hairlines with
+        the paint's color. This behavior is a useful debugging mode to visualize
+        the mesh.
+