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 |