Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(884)

Side by Side Diff: src/core/SkXfermode.cpp

Issue 134163010: Refactor read and write buffers. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: original write flags were fine Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkXfermode.h" 10 #include "SkXfermode.h"
11 #include "SkXfermode_proccoeff.h" 11 #include "SkXfermode_proccoeff.h"
12 #include "SkColorPriv.h" 12 #include "SkColorPriv.h"
13 #include "SkFlattenableBuffers.h" 13 #include "SkReadBuffer.h"
14 #include "SkWriteBuffer.h"
14 #include "SkMathPriv.h" 15 #include "SkMathPriv.h"
15 #include "SkString.h" 16 #include "SkString.h"
16 #include "SkUtilsArm.h" 17 #include "SkUtilsArm.h"
17 18
18 #if !SK_ARM_NEON_IS_NONE 19 #if !SK_ARM_NEON_IS_NONE
19 #include "SkXfermode_opts_arm_neon.h" 20 #include "SkXfermode_opts_arm_neon.h"
20 #endif 21 #endif
21 22
22 #define SkAlphaMulAlpha(a, b) SkMulDiv255Round(a, b) 23 #define SkAlphaMulAlpha(a, b) SkMulDiv255Round(a, b)
23 24
(...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 if (0xFF != a) { 854 if (0xFF != a) {
854 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); 855 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a));
855 } 856 }
856 dst[i] = SkToU8(A); 857 dst[i] = SkToU8(A);
857 } 858 }
858 } 859 }
859 } 860 }
860 } 861 }
861 } 862 }
862 863
863 SkProcXfermode::SkProcXfermode(SkFlattenableReadBuffer& buffer) 864 SkProcXfermode::SkProcXfermode(SkReadBuffer& buffer)
864 : SkXfermode(buffer) { 865 : SkXfermode(buffer) {
865 fProc = NULL; 866 fProc = NULL;
866 if (!buffer.isCrossProcess()) { 867 if (!buffer.isCrossProcess()) {
867 fProc = (SkXfermodeProc)buffer.readFunctionPtr(); 868 fProc = (SkXfermodeProc)buffer.readFunctionPtr();
868 } 869 }
869 } 870 }
870 871
871 void SkProcXfermode::flatten(SkFlattenableWriteBuffer& buffer) const { 872 void SkProcXfermode::flatten(SkWriteBuffer& buffer) const {
872 this->INHERITED::flatten(buffer); 873 this->INHERITED::flatten(buffer);
873 if (!buffer.isCrossProcess()) { 874 if (!buffer.isCrossProcess()) {
874 buffer.writeFunctionPtr((void*)fProc); 875 buffer.writeFunctionPtr((void*)fProc);
875 } 876 }
876 } 877 }
877 878
878 #ifdef SK_DEVELOPER 879 #ifdef SK_DEVELOPER
879 void SkProcXfermode::toString(SkString* str) const { 880 void SkProcXfermode::toString(SkString* str) const {
880 str->appendf("SkProcXfermode: %p", fProc); 881 str->appendf("SkProcXfermode: %p", fProc);
881 } 882 }
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 1337
1337 AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermode::Mode >(mode), NULL))); 1338 AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermode::Mode >(mode), NULL)));
1338 return CreateEffectRef(gEffect); 1339 return CreateEffectRef(gEffect);
1339 } 1340 }
1340 1341
1341 #endif 1342 #endif
1342 1343
1343 /////////////////////////////////////////////////////////////////////////////// 1344 ///////////////////////////////////////////////////////////////////////////////
1344 /////////////////////////////////////////////////////////////////////////////// 1345 ///////////////////////////////////////////////////////////////////////////////
1345 1346
1346 SkProcCoeffXfermode::SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHE RITED(buffer) { 1347 SkProcCoeffXfermode::SkProcCoeffXfermode(SkReadBuffer& buffer) : INHERITED(buffe r) {
1347 uint32_t mode32 = buffer.read32() % SK_ARRAY_COUNT(gProcCoeffs); 1348 uint32_t mode32 = buffer.read32() % SK_ARRAY_COUNT(gProcCoeffs);
1348 if (mode32 >= SK_ARRAY_COUNT(gProcCoeffs)) { 1349 if (mode32 >= SK_ARRAY_COUNT(gProcCoeffs)) {
1349 // out of range, just set to something harmless 1350 // out of range, just set to something harmless
1350 mode32 = SkXfermode::kSrcOut_Mode; 1351 mode32 = SkXfermode::kSrcOut_Mode;
1351 } 1352 }
1352 fMode = (SkXfermode::Mode)mode32; 1353 fMode = (SkXfermode::Mode)mode32;
1353 1354
1354 const ProcCoeff& rec = gProcCoeffs[fMode]; 1355 const ProcCoeff& rec = gProcCoeffs[fMode];
1355 // these may be valid, or may be CANNOT_USE_COEFF 1356 // these may be valid, or may be CANNOT_USE_COEFF
1356 fSrcCoeff = rec.fSC; 1357 fSrcCoeff = rec.fSC;
(...skipping 30 matching lines...) Expand all
1387 if (NULL != effect) { 1388 if (NULL != effect) {
1388 *effect = XferEffect::Create(fMode, background); 1389 *effect = XferEffect::Create(fMode, background);
1389 SkASSERT(NULL != *effect); 1390 SkASSERT(NULL != *effect);
1390 } 1391 }
1391 return true; 1392 return true;
1392 } 1393 }
1393 return false; 1394 return false;
1394 } 1395 }
1395 #endif 1396 #endif
1396 1397
1397 void SkProcCoeffXfermode::flatten(SkFlattenableWriteBuffer& buffer) const { 1398 void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const {
1398 this->INHERITED::flatten(buffer); 1399 this->INHERITED::flatten(buffer);
1399 buffer.write32(fMode); 1400 buffer.write32(fMode);
1400 } 1401 }
1401 1402
1402 const char* SkXfermode::ModeName(Mode mode) { 1403 const char* SkXfermode::ModeName(Mode mode) {
1403 SkASSERT((unsigned) mode <= (unsigned)kLastMode); 1404 SkASSERT((unsigned) mode <= (unsigned)kLastMode);
1404 const char* gModeStrings[] = { 1405 const char* gModeStrings[] = {
1405 "Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn", 1406 "Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn",
1406 "SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus", 1407 "SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus",
1407 "Modulate", "Screen", "Overlay", "Darken", "Lighten", "ColorDodge", 1408 "Modulate", "Screen", "Overlay", "Darken", "Lighten", "ColorDodge",
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 public: 1446 public:
1446 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode ) {} 1447 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode ) {}
1447 1448
1448 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE; 1449 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
1449 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S K_OVERRIDE; 1450 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S K_OVERRIDE;
1450 1451
1451 SK_DEVELOPER_TO_STRING() 1452 SK_DEVELOPER_TO_STRING()
1452 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode) 1453 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode)
1453 1454
1454 private: 1455 private:
1455 SkClearXfermode(SkFlattenableReadBuffer& buffer) 1456 SkClearXfermode(SkReadBuffer& buffer)
1456 : SkProcCoeffXfermode(buffer) {} 1457 : SkProcCoeffXfermode(buffer) {}
1457 1458
1458 typedef SkProcCoeffXfermode INHERITED; 1459 typedef SkProcCoeffXfermode INHERITED;
1459 }; 1460 };
1460 1461
1461 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, 1462 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
1462 const SkPMColor* SK_RESTRICT, int count, 1463 const SkPMColor* SK_RESTRICT, int count,
1463 const SkAlpha* SK_RESTRICT aa) const { 1464 const SkAlpha* SK_RESTRICT aa) const {
1464 SkASSERT(dst && count >= 0); 1465 SkASSERT(dst && count >= 0);
1465 1466
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1507 public: 1508 public:
1508 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} 1509 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {}
1509 1510
1510 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE; 1511 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
1511 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S K_OVERRIDE; 1512 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S K_OVERRIDE;
1512 1513
1513 SK_DEVELOPER_TO_STRING() 1514 SK_DEVELOPER_TO_STRING()
1514 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode) 1515 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode)
1515 1516
1516 private: 1517 private:
1517 SkSrcXfermode(SkFlattenableReadBuffer& buffer) 1518 SkSrcXfermode(SkReadBuffer& buffer)
1518 : SkProcCoeffXfermode(buffer) {} 1519 : SkProcCoeffXfermode(buffer) {}
1519 1520
1520 typedef SkProcCoeffXfermode INHERITED; 1521 typedef SkProcCoeffXfermode INHERITED;
1521 }; 1522 };
1522 1523
1523 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, 1524 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
1524 const SkPMColor* SK_RESTRICT src, int count, 1525 const SkPMColor* SK_RESTRICT src, int count,
1525 const SkAlpha* SK_RESTRICT aa) const { 1526 const SkAlpha* SK_RESTRICT aa) const {
1526 SkASSERT(dst && src && count >= 0); 1527 SkASSERT(dst && src && count >= 0);
1527 1528
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 class SkDstInXfermode : public SkProcCoeffXfermode { 1574 class SkDstInXfermode : public SkProcCoeffXfermode {
1574 public: 1575 public:
1575 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode ) {} 1576 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode ) {}
1576 1577
1577 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE; 1578 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
1578 1579
1579 SK_DEVELOPER_TO_STRING() 1580 SK_DEVELOPER_TO_STRING()
1580 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode) 1581 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode)
1581 1582
1582 private: 1583 private:
1583 SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} 1584 SkDstInXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {}
1584 1585
1585 typedef SkProcCoeffXfermode INHERITED; 1586 typedef SkProcCoeffXfermode INHERITED;
1586 }; 1587 };
1587 1588
1588 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, 1589 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
1589 const SkPMColor* SK_RESTRICT src, int count, 1590 const SkPMColor* SK_RESTRICT src, int count,
1590 const SkAlpha* SK_RESTRICT aa) const { 1591 const SkAlpha* SK_RESTRICT aa) const {
1591 SkASSERT(dst && src); 1592 SkASSERT(dst && src);
1592 1593
1593 if (count <= 0) { 1594 if (count <= 0) {
(...skipping 22 matching lines...) Expand all
1616 class SkDstOutXfermode : public SkProcCoeffXfermode { 1617 class SkDstOutXfermode : public SkProcCoeffXfermode {
1617 public: 1618 public:
1618 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo de) {} 1619 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo de) {}
1619 1620
1620 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE; 1621 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
1621 1622
1622 SK_DEVELOPER_TO_STRING() 1623 SK_DEVELOPER_TO_STRING()
1623 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode) 1624 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode)
1624 1625
1625 private: 1626 private:
1626 SkDstOutXfermode(SkFlattenableReadBuffer& buffer) 1627 SkDstOutXfermode(SkReadBuffer& buffer)
1627 : INHERITED(buffer) {} 1628 : INHERITED(buffer) {}
1628 1629
1629 typedef SkProcCoeffXfermode INHERITED; 1630 typedef SkProcCoeffXfermode INHERITED;
1630 }; 1631 };
1631 1632
1632 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, 1633 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
1633 const SkPMColor* SK_RESTRICT src, int count, 1634 const SkPMColor* SK_RESTRICT src, int count,
1634 const SkAlpha* SK_RESTRICT aa) const { 1635 const SkAlpha* SK_RESTRICT aa) const {
1635 SkASSERT(dst && src); 1636 SkASSERT(dst && src);
1636 1637
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1970 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) 1971 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode)
1971 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) 1972 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode)
1972 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) 1973 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode)
1973 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) 1974 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode)
1974 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) 1975 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode)
1975 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) 1976 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode)
1976 #if !SK_ARM_NEON_IS_NONE 1977 #if !SK_ARM_NEON_IS_NONE
1977 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkNEONProcCoeffXfermode) 1978 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkNEONProcCoeffXfermode)
1978 #endif 1979 #endif
1979 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1980 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698