skia2/include/core
mtklein 0c263fa9f8 Deduplicate typefaces across sub-pictures
Old flow to serialize a picture:
   1) serialize picture ops
   2) serialize all sub pictures recursively
   3) flatten the rest of this picture into a buffer, deduping flattenable factories and typefaces as we go
   4) serialize the factories and typefaces
   5) serialize the bytes from 3)

This allows the data in step 5) to refer to the deduplicated factories and typefaces from step 4).  But, each sub picture in step 2) is completely siloed, so they can't dedup with the parent picture or each other.

New flow:
   1) serialize picture ops
   2) flatten the rest of this picture into a buffer, deduping flattenable factories and typefaces as we go
   3) dummy-serialize sub pictures into /dev/null, with the effect of adding any new typefaces to our dedup set
   4) serialize the factories and typefaces
   5) serialize the bytes from 2)
   6) serialize all sub pictures recursively, with perfect deduplication because of step 3).

Now all typefaces in the top-level picture and all sub pictures recursively should end up deduplicated in the top-level typeface set.

Decoding changes are similar: we just thread through the top-level typefaces to the sub pictures.  What's convenient / surprising is that this new code correctly reads old pictures if we just have each picture prefer its local typeface set over the top-level one: old pictures always just use their own typefaces, and new pictures always use the top-level ones.

BUG=skia:4092

Review URL: https://codereview.chromium.org/1233953004
2015-08-18 08:29:59 -07:00
..
SkAnnotation.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkAtomics.h Clean up a few includes, introduce iwyu. 2015-07-29 11:49:40 -07:00
SkBBHFactory.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkBitmap.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkBitmapDevice.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkBlitRow.h Re-proc SkBlitRow::Color32 for ARM. 2015-05-22 06:08:29 -07:00
SkBlurTypes.h move common blur types into central header 2014-04-28 16:25:35 +00:00
SkCanvas.h api helpers inspired by blink use-cases 2015-08-09 19:41:13 -07:00
SkChunkAlloc.h Add rewind capability to SkChunkAlloc 2015-02-27 08:31:57 -08:00
SkClipStack.h Clean up clipping code a bit 2015-02-10 08:16:55 -08:00
SkColor.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkColorFilter.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkColorPriv.h The compiler can generate smulbb perfectly well nowadays. 2015-08-07 08:48:12 -07:00
SkColorTable.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkComposeShader.h C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla} 2015-03-25 18:17:32 -07:00
SkData.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDataTable.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDeque.h This CL addresses "SkCanvas::save flags are not respected by GPU backend" (https://code.google.com/p/skia/issues/detail?id=1503). 2013-08-16 00:53:34 +00:00
SkDevice.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkDither.h Result of running tools/sanitize_source_files.py (which was added in https://codereview.appspot.com/6465078/) 2012-08-23 18:09:54 +00:00
SkDocument.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDraw.h Revert[2] SkDraw and all Blitters to use pixmap instead of bitmapi 2015-06-09 12:16:53 -07:00
SkDrawable.h add matrix options to drawDrawable 2015-07-07 10:22:31 -07:00
SkDrawFilter.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDrawLooper.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkError.h Sanitizing source files in Housekeeper-Nightly 2013-09-05 07:01:19 +00:00
SkFilterQuality.h add newImage API 2015-01-23 05:58:07 -08:00
SkFixed.h Correct SkFixedToDouble. 2015-04-17 10:05:43 -07:00
SkFlattenable.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkFlattenableSerialization.h Removed unnecessary define 2013-11-08 15:24:12 +00:00
SkFont.h Treat embedded bitmaps as a hinting method. 2014-08-19 13:18:58 -07:00
SkFontHost.h Remove a layer of indirection and code from SkFontHost. 2014-09-10 15:49:48 -07:00
SkFontLCDConfig.h Sanitizing source files in Skia_Periodic_House_Keeping 2013-03-13 07:01:04 +00:00
SkFontStyle.h Replace SkTypeface::Style with SkFontStyle. 2014-10-20 13:33:19 -07:00
SkGraphics.h Lay groundwork for SkOpts. 2015-07-30 07:30:16 -07:00
SkImage.h add SkImage::NewFromPicture and a GM to test it 2015-08-13 09:37:45 -07:00
SkImageDecoder.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkImageEncoder.h Add SkEncodedFormat, used by SkCodec. 2015-03-20 11:55:55 -07:00
SkImageFilter.h Remove SK_LEGACY_IMAGE_FILTER_CROP_RECT_EDGES code. 2015-07-21 11:11:17 -07:00
SkImageGenerator.h some catchup CL revisions 2015-08-13 14:06:46 -07:00
SkImageInfo.h Extend SkImageGenerator to support natively generated GrTextures. As part of this, added uniqueID() to the generator, and made it be in the same namespace is bitmaps, pixelrefs, images. 2015-08-13 13:32:39 -07:00
SkLazyPtr.h Clean up SkDynamicAnnotations. 2015-03-12 05:27:46 -07:00
SkMallocPixelRef.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkMask.h remove unused kLCD_MaskFormat 2014-11-13 14:39:58 -08:00
SkMaskFilter.h Misc cleanup 2015-07-22 11:54:44 -07:00
SkMath.h The compiler can generate smulbb perfectly well nowadays. 2015-08-07 08:48:12 -07:00
SkMatrix.h api helpers inspired by blink use-cases 2015-08-09 19:41:13 -07:00
SkMetaData.h "NULL !=" = NULL 2014-09-05 13:34:00 -07:00
SkMultiPictureDraw.h Add sk_parallel_for() 2015-06-17 15:26:15 -07:00
SkMutex.h Clean up a few includes, introduce iwyu. 2015-07-29 11:49:40 -07:00
SkOnce.h Move instanced index buffer creation to flush time 2015-05-04 10:36:43 -07:00
SkOSFile.h Move SkOSFile::Iter impls into ports. 2015-02-12 07:18:27 -08:00
SkPackBits.h Remove unused PackBits methods and fix length checks 2015-06-04 15:10:37 -07:00
SkPaint.h Make SkPaint::glyphsToUnichars use explicit SkSurfaceProps 2015-06-26 12:17:59 -07:00
SkPath.h change getBounds to return 0000 iff there are zero points 2015-07-28 06:00:50 -07:00
SkPathEffect.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkPathMeasure.h use conics 2014-12-17 08:21:05 -08:00
SkPathRef.h Implement caching of filled paths in the tessellated path renderer. 2015-08-04 10:01:58 -07:00
SkPicture.h Deduplicate typefaces across sub-pictures 2015-08-18 08:29:59 -07:00
SkPictureRecorder.h Move the last headers. Cross your fingers. 2015-07-29 13:31:22 -07:00
SkPixelRef.h Every pixel ref gets its own mutex. 2015-08-13 14:02:06 -07:00
SkPixelSerializer.h add const to encodePixels pixel parameter 2014-12-19 12:26:07 -08:00
SkPixmap.h Make peekPixels() usable with raster surface snapshots 2015-07-27 10:27:29 -07:00
SkPoint.h Revert of Revert of stop calling SkScalarDiv (patchset #1 id:1 of https://codereview.chromium.org/1138263002/) 2015-05-12 10:37:34 -07:00
SkPostConfig.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkPreConfig.h The compiler can generate smulbb perfectly well nowadays. 2015-08-07 08:48:12 -07:00
SkRasterizer.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkRect.h Simple CL to add a joinWithPossiblyEmptyArg to SkRect 2015-05-01 08:51:48 -07:00
SkRefCnt.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkRegion.h Remove useless SkASSERT in SkRect.h and SkRegion.h 2015-04-28 12:47:48 -07:00
SkRRect.h api helpers inspired by blink use-cases 2015-08-09 19:41:13 -07:00
SkRSXform.h add helper to create RSXform w/ anchorPt 2015-07-30 05:46:05 -07:00
SkScalar.h Revert[8] "move some public headers into private" 2015-08-17 18:29:48 -07:00
SkShader.h rename GrShaderDataManager -> GrProcessorDataManager 2015-07-09 06:28:14 -07:00
SkSize.h deprecate SkScalarRound (and its ilk), use SkScalarRound[ToInt,ToScalar]. #define SK_SUPPORT_DEPRECATED_SCALARROUND for legacy clients 2013-12-17 19:22:07 +00:00
SkSpinlock.h Fix componene debug build failure in chromium 2015-07-10 08:32:23 -07:00
SkStream.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkString.h Added mangleString member and onBefore*, onAfter* functions to GrGLFragmentShaderBuilder 2015-08-13 06:51:35 -07:00
SkStrokeRec.h Make GrStrokeInfo inherit from SkStrokeRec 2015-05-18 22:23:54 -07:00
SkSurface.h add ability to get FBO ID to Surface 2015-07-08 12:54:04 -07:00
SkSurfaceProps.h Clean up usage of SkSurfaceProps 2015-06-22 12:06:08 -07:00
SkTArray.h Remove unnecessary virtual destructor on SkTArray 2015-07-31 11:53:11 -07:00
SkTDArray.h Fix some lingering typos 2015-04-24 11:10:51 -07:00
SkTDict.h move some headers out of public 2014-06-17 09:04:45 -07:00
SkTDStack.h Sanitizing source files in Skia_Periodic_House_Keeping 2013-01-26 07:06:02 +00:00
SkTemplates.h Make GrBatch carry its own GrPipeline 2015-08-11 14:47:42 -07:00
SkTextBlob.h Start canonicalizing color for all A8 textblobs 2015-04-14 12:17:27 -07:00
SkTime.h SkTime: return timezone information; format in ISO-8601 2015-05-01 07:06:23 -07:00
SkTInternalLList.h "NULL !=" = NULL 2014-09-05 13:34:00 -07:00
SkTLazy.h Use forwarding with SkTLazy::init. 2015-08-12 13:37:17 -07:00
SkTRegistry.h Rewrite SkTRegistry to take any trivially-copyable type. 2013-09-04 17:20:18 +00:00
SkTSearch.h One SkTSearch to rule them all. Allow key to be of different type than the array. 2013-05-17 19:05:03 +00:00
SkTypeface.h Revert[8] "move some public headers into private" 2015-08-17 18:29:48 -07:00
SkTypes.h IWYU: 'core' target, files starting A-C. 2015-08-05 13:57:49 -07:00
SkUnPreMultiply.h Factor out UnPreMultiplyPreservingByteOrder 2014-01-15 22:24:58 +00:00
SkUtils.h Move SkOpts.h back to src/core. 2015-07-31 14:02:36 -07:00
SkWriteBuffer.h change old picture serialization to really handle images 2015-06-22 12:48:26 -07:00
SkWriter32.h Make SkWriter32::snapshotAsData() a dumb copy. 2015-01-29 12:03:53 -08:00
SkXfermode.h No one calls SkXfermode::GetProc16 2015-07-27 12:07:29 -07:00