| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2006 The Android Open Source Project | 2  * Copyright 2006 The Android Open Source Project | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkPaint.h" | 8 #include "SkPaint.h" | 
| 9 #include "SkAutoKern.h" | 9 #include "SkAutoKern.h" | 
| 10 #include "SkChecksum.h" | 10 #include "SkChecksum.h" | 
| (...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1191     if (nullptr == typeface) { | 1191     if (nullptr == typeface) { | 
| 1192         typeface = SkTypeface::GetDefaultTypeface(); | 1192         typeface = SkTypeface::GetDefaultTypeface(); | 
| 1193     } | 1193     } | 
| 1194 | 1194 | 
| 1195     SkRect bounds; | 1195     SkRect bounds; | 
| 1196     m.mapRect(&bounds, typeface->getBounds()); | 1196     m.mapRect(&bounds, typeface->getBounds()); | 
| 1197     return bounds; | 1197     return bounds; | 
| 1198 } | 1198 } | 
| 1199 | 1199 | 
| 1200 static void add_flattenable(SkDescriptor* desc, uint32_t tag, | 1200 static void add_flattenable(SkDescriptor* desc, uint32_t tag, | 
| 1201                             SkWriteBuffer* buffer) { | 1201                             SkBinaryWriteBuffer* buffer) { | 
| 1202     buffer->writeToMemory(desc->addEntry(tag, buffer->bytesWritten(), nullptr)); | 1202     buffer->writeToMemory(desc->addEntry(tag, buffer->bytesWritten(), nullptr)); | 
| 1203 } | 1203 } | 
| 1204 | 1204 | 
| 1205 static SkMask::Format compute_mask_format(const SkPaint& paint) { | 1205 static SkMask::Format compute_mask_format(const SkPaint& paint) { | 
| 1206     uint32_t flags = paint.getFlags(); | 1206     uint32_t flags = paint.getFlags(); | 
| 1207 | 1207 | 
| 1208     // Antialiasing being disabled trumps all other settings. | 1208     // Antialiasing being disabled trumps all other settings. | 
| 1209     if (!(flags & SkPaint::kAntiAlias_Flag)) { | 1209     if (!(flags & SkPaint::kAntiAlias_Flag)) { | 
| 1210         return SkMask::kBW_Format; | 1210         return SkMask::kBW_Format; | 
| 1211     } | 1211     } | 
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1521     } | 1521     } | 
| 1522 } | 1522 } | 
| 1523 | 1523 | 
| 1524 #define MIN_SIZE_FOR_EFFECT_BUFFER  1024 | 1524 #define MIN_SIZE_FOR_EFFECT_BUFFER  1024 | 
| 1525 | 1525 | 
| 1526 #ifdef SK_DEBUG | 1526 #ifdef SK_DEBUG | 
| 1527     #define TEST_DESC | 1527     #define TEST_DESC | 
| 1528 #endif | 1528 #endif | 
| 1529 | 1529 | 
| 1530 static void write_out_descriptor(SkDescriptor* desc, const SkScalerContext::Rec&
       rec, | 1530 static void write_out_descriptor(SkDescriptor* desc, const SkScalerContext::Rec&
       rec, | 
| 1531                                  const SkPathEffect* pe, SkWriteBuffer* peBuffer
      , | 1531                                  const SkPathEffect* pe, SkBinaryWriteBuffer* pe
      Buffer, | 
| 1532                                  const SkMaskFilter* mf, SkWriteBuffer* mfBuffer
      , | 1532                                  const SkMaskFilter* mf, SkBinaryWriteBuffer* mf
      Buffer, | 
| 1533                                  const SkRasterizer* ra, SkWriteBuffer* raBuffer
      , | 1533                                  const SkRasterizer* ra, SkBinaryWriteBuffer* ra
      Buffer, | 
| 1534                                  size_t descSize) { | 1534                                  size_t descSize) { | 
| 1535     desc->init(); | 1535     desc->init(); | 
| 1536     desc->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); | 1536     desc->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); | 
| 1537 | 1537 | 
| 1538     if (pe) { | 1538     if (pe) { | 
| 1539         add_flattenable(desc, kPathEffect_SkDescriptorTag, peBuffer); | 1539         add_flattenable(desc, kPathEffect_SkDescriptorTag, peBuffer); | 
| 1540     } | 1540     } | 
| 1541     if (mf) { | 1541     if (mf) { | 
| 1542         add_flattenable(desc, kMaskFilter_SkDescriptorTag, mfBuffer); | 1542         add_flattenable(desc, kMaskFilter_SkDescriptorTag, mfBuffer); | 
| 1543     } | 1543     } | 
| 1544     if (ra) { | 1544     if (ra) { | 
| 1545         add_flattenable(desc, kRasterizer_SkDescriptorTag, raBuffer); | 1545         add_flattenable(desc, kRasterizer_SkDescriptorTag, raBuffer); | 
| 1546     } | 1546     } | 
| 1547 | 1547 | 
| 1548     desc->computeChecksum(); | 1548     desc->computeChecksum(); | 
| 1549 } | 1549 } | 
| 1550 | 1550 | 
| 1551 static size_t fill_out_rec(const SkPaint& paint, SkScalerContext::Rec* rec, | 1551 static size_t fill_out_rec(const SkPaint& paint, SkScalerContext::Rec* rec, | 
| 1552                            const SkSurfaceProps* surfaceProps, | 1552                            const SkSurfaceProps* surfaceProps, | 
| 1553                            bool fakeGamma, bool boostContrast, | 1553                            bool fakeGamma, bool boostContrast, | 
| 1554                            const SkMatrix* deviceMatrix, | 1554                            const SkMatrix* deviceMatrix, | 
| 1555                            const SkPathEffect* pe, SkWriteBuffer* peBuffer, | 1555                            const SkPathEffect* pe, SkBinaryWriteBuffer* peBuffer
      , | 
| 1556                            const SkMaskFilter* mf, SkWriteBuffer* mfBuffer, | 1556                            const SkMaskFilter* mf, SkBinaryWriteBuffer* mfBuffer
      , | 
| 1557                            const SkRasterizer* ra, SkWriteBuffer* raBuffer) { | 1557                            const SkRasterizer* ra, SkBinaryWriteBuffer* raBuffer
      ) { | 
| 1558     SkScalerContext::MakeRec(paint, surfaceProps, deviceMatrix, rec); | 1558     SkScalerContext::MakeRec(paint, surfaceProps, deviceMatrix, rec); | 
| 1559     if (!fakeGamma) { | 1559     if (!fakeGamma) { | 
| 1560         rec->ignoreGamma(); | 1560         rec->ignoreGamma(); | 
| 1561     } | 1561     } | 
| 1562     if (!boostContrast) { | 1562     if (!boostContrast) { | 
| 1563         rec->setContrast(0); | 1563         rec->setContrast(0); | 
| 1564     } | 1564     } | 
| 1565 | 1565 | 
| 1566     int entryCount = 1; | 1566     int entryCount = 1; | 
| 1567     size_t descSize = sizeof(*rec); | 1567     size_t descSize = sizeof(*rec); | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 1594     /////////////////////////////////////////////////////////////////////////// | 1594     /////////////////////////////////////////////////////////////////////////// | 
| 1595     // Now that we're done tweaking the rec, call the PostMakeRec cleanup | 1595     // Now that we're done tweaking the rec, call the PostMakeRec cleanup | 
| 1596     SkScalerContext::PostMakeRec(paint, rec); | 1596     SkScalerContext::PostMakeRec(paint, rec); | 
| 1597 | 1597 | 
| 1598     descSize += SkDescriptor::ComputeOverhead(entryCount); | 1598     descSize += SkDescriptor::ComputeOverhead(entryCount); | 
| 1599     return descSize; | 1599     return descSize; | 
| 1600 } | 1600 } | 
| 1601 | 1601 | 
| 1602 #ifdef TEST_DESC | 1602 #ifdef TEST_DESC | 
| 1603 static void test_desc(const SkScalerContext::Rec& rec, | 1603 static void test_desc(const SkScalerContext::Rec& rec, | 
| 1604                       const SkPathEffect* pe, SkWriteBuffer* peBuffer, | 1604                       const SkPathEffect* pe, SkBinaryWriteBuffer* peBuffer, | 
| 1605                       const SkMaskFilter* mf, SkWriteBuffer* mfBuffer, | 1605                       const SkMaskFilter* mf, SkBinaryWriteBuffer* mfBuffer, | 
| 1606                       const SkRasterizer* ra, SkWriteBuffer* raBuffer, | 1606                       const SkRasterizer* ra, SkBinaryWriteBuffer* raBuffer, | 
| 1607                       const SkDescriptor* desc, size_t descSize) { | 1607                       const SkDescriptor* desc, size_t descSize) { | 
| 1608     // Check that we completely write the bytes in desc (our key), and that | 1608     // Check that we completely write the bytes in desc (our key), and that | 
| 1609     // there are no uninitialized bytes. If there were, then we would get | 1609     // there are no uninitialized bytes. If there were, then we would get | 
| 1610     // false-misses (or worse, false-hits) in our fontcache. | 1610     // false-misses (or worse, false-hits) in our fontcache. | 
| 1611     // | 1611     // | 
| 1612     // We do this buy filling 2 others, one with 0s and the other with 1s | 1612     // We do this buy filling 2 others, one with 0s and the other with 1s | 
| 1613     // and create those, and then check that all 3 are identical. | 1613     // and create those, and then check that all 3 are identical. | 
| 1614     SkAutoDescriptor    ad1(descSize); | 1614     SkAutoDescriptor    ad1(descSize); | 
| 1615     SkAutoDescriptor    ad2(descSize); | 1615     SkAutoDescriptor    ad2(descSize); | 
| 1616     SkDescriptor*       desc1 = ad1.getDesc(); | 1616     SkDescriptor*       desc1 = ad1.getDesc(); | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1651                                          SkAutoDescriptor* ad, | 1651                                          SkAutoDescriptor* ad, | 
| 1652                                          const SkSurfaceProps& surfaceProps, | 1652                                          const SkSurfaceProps& surfaceProps, | 
| 1653                                          uint32_t scalerContextFlags, | 1653                                          uint32_t scalerContextFlags, | 
| 1654                                          const SkMatrix* deviceMatrix) const { | 1654                                          const SkMatrix* deviceMatrix) const { | 
| 1655     SkScalerContext::Rec    rec; | 1655     SkScalerContext::Rec    rec; | 
| 1656 | 1656 | 
| 1657     SkPathEffect*   pe = this->getPathEffect(); | 1657     SkPathEffect*   pe = this->getPathEffect(); | 
| 1658     SkMaskFilter*   mf = this->getMaskFilter(); | 1658     SkMaskFilter*   mf = this->getMaskFilter(); | 
| 1659     SkRasterizer*   ra = this->getRasterizer(); | 1659     SkRasterizer*   ra = this->getRasterizer(); | 
| 1660 | 1660 | 
| 1661     SkWriteBuffer   peBuffer, mfBuffer, raBuffer; | 1661     SkBinaryWriteBuffer   peBuffer, mfBuffer, raBuffer; | 
| 1662     size_t descSize = fill_out_rec(*this, &rec, &surfaceProps, | 1662     size_t descSize = fill_out_rec(*this, &rec, &surfaceProps, | 
| 1663                                    SkToBool(scalerContextFlags & kFakeGamma_Scal
      erContextFlag), | 1663                                    SkToBool(scalerContextFlags & kFakeGamma_Scal
      erContextFlag), | 
| 1664                                    SkToBool(scalerContextFlags & kBoostContrast_
      ScalerContextFlag), | 1664                                    SkToBool(scalerContextFlags & kBoostContrast_
      ScalerContextFlag), | 
| 1665                                    deviceMatrix, pe, &peBuffer, mf, &mfBuffer, r
      a, &raBuffer); | 1665                                    deviceMatrix, pe, &peBuffer, mf, &mfBuffer, r
      a, &raBuffer); | 
| 1666 | 1666 | 
| 1667     ad->reset(descSize); | 1667     ad->reset(descSize); | 
| 1668     SkDescriptor* desc = ad->getDesc(); | 1668     SkDescriptor* desc = ad->getDesc(); | 
| 1669 | 1669 | 
| 1670     write_out_descriptor(desc, rec, pe, &peBuffer, mf, &mfBuffer, ra, &raBuffer,
       descSize); | 1670     write_out_descriptor(desc, rec, pe, &peBuffer, mf, &mfBuffer, ra, &raBuffer,
       descSize); | 
| 1671 | 1671 | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 1690                              const SkMatrix* deviceMatrix, | 1690                              const SkMatrix* deviceMatrix, | 
| 1691                              void (*proc)(SkTypeface*, const SkScalerContextEffe
      cts&, | 1691                              void (*proc)(SkTypeface*, const SkScalerContextEffe
      cts&, | 
| 1692                                           const SkDescriptor*, void*), | 1692                                           const SkDescriptor*, void*), | 
| 1693                              void* context) const { | 1693                              void* context) const { | 
| 1694     SkScalerContext::Rec    rec; | 1694     SkScalerContext::Rec    rec; | 
| 1695 | 1695 | 
| 1696     SkPathEffect*   pe = this->getPathEffect(); | 1696     SkPathEffect*   pe = this->getPathEffect(); | 
| 1697     SkMaskFilter*   mf = this->getMaskFilter(); | 1697     SkMaskFilter*   mf = this->getMaskFilter(); | 
| 1698     SkRasterizer*   ra = this->getRasterizer(); | 1698     SkRasterizer*   ra = this->getRasterizer(); | 
| 1699 | 1699 | 
| 1700     SkWriteBuffer   peBuffer, mfBuffer, raBuffer; | 1700     SkBinaryWriteBuffer   peBuffer, mfBuffer, raBuffer; | 
| 1701     size_t descSize = fill_out_rec(*this, &rec, surfaceProps, | 1701     size_t descSize = fill_out_rec(*this, &rec, surfaceProps, | 
| 1702                                    SkToBool(scalerContextFlags & kFakeGamma_Scal
      erContextFlag), | 1702                                    SkToBool(scalerContextFlags & kFakeGamma_Scal
      erContextFlag), | 
| 1703                                    SkToBool(scalerContextFlags & kBoostContrast_
      ScalerContextFlag), | 1703                                    SkToBool(scalerContextFlags & kBoostContrast_
      ScalerContextFlag), | 
| 1704                                    deviceMatrix, pe, &peBuffer, mf, &mfBuffer, r
      a, &raBuffer); | 1704                                    deviceMatrix, pe, &peBuffer, mf, &mfBuffer, r
      a, &raBuffer); | 
| 1705 | 1705 | 
| 1706     SkAutoDescriptor    ad(descSize); | 1706     SkAutoDescriptor    ad(descSize); | 
| 1707     SkDescriptor*       desc = ad.getDesc(); | 1707     SkDescriptor*       desc = ad.getDesc(); | 
| 1708 | 1708 | 
| 1709     write_out_descriptor(desc, rec, pe, &peBuffer, mf, &mfBuffer, ra, &raBuffer,
       descSize); | 1709     write_out_descriptor(desc, rec, pe, &peBuffer, mf, &mfBuffer, ra, &raBuffer,
       descSize); | 
| 1710 | 1710 | 
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2320 } | 2320 } | 
| 2321 | 2321 | 
| 2322 uint32_t SkPaint::getHash() const { | 2322 uint32_t SkPaint::getHash() const { | 
| 2323     // We're going to hash 10 pointers and 7 32-bit values, finishing up with fB
      itfields, | 2323     // We're going to hash 10 pointers and 7 32-bit values, finishing up with fB
      itfields, | 
| 2324     // so fBitfields should be 10 pointers and 6 32-bit values from the start. | 2324     // so fBitfields should be 10 pointers and 6 32-bit values from the start. | 
| 2325     static_assert(offsetof(SkPaint, fBitfields) == 9 * sizeof(void*) + 6 * sizeo
      f(uint32_t), | 2325     static_assert(offsetof(SkPaint, fBitfields) == 9 * sizeof(void*) + 6 * sizeo
      f(uint32_t), | 
| 2326                   "SkPaint_notPackedTightly"); | 2326                   "SkPaint_notPackedTightly"); | 
| 2327     return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this), | 2327     return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this), | 
| 2328                                offsetof(SkPaint, fBitfields) + sizeof(fBitfields
      )); | 2328                                offsetof(SkPaint, fBitfields) + sizeof(fBitfields
      )); | 
| 2329 } | 2329 } | 
| OLD | NEW | 
|---|