OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
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 "SkPDFShader.h" | 10 #include "SkPDFShader.h" |
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
652 SkPDFObject* SkPDFShader::GetPDFShader(const SkShader& shader, | 652 SkPDFObject* SkPDFShader::GetPDFShader(const SkShader& shader, |
653 const SkMatrix& matrix, | 653 const SkMatrix& matrix, |
654 const SkIRect& surfaceBBox) { | 654 const SkIRect& surfaceBBox) { |
655 SkAutoMutexAcquire lock(CanonicalShadersMutex()); | 655 SkAutoMutexAcquire lock(CanonicalShadersMutex()); |
656 return GetPDFShaderByState( | 656 return GetPDFShaderByState( |
657 SkNEW_ARGS(State, (shader, matrix, surfaceBBox))); | 657 SkNEW_ARGS(State, (shader, matrix, surfaceBBox))); |
658 } | 658 } |
659 | 659 |
660 // static | 660 // static |
661 SkTDArray<SkPDFShader::ShaderCanonicalEntry>& SkPDFShader::CanonicalShaders() { | 661 SkTDArray<SkPDFShader::ShaderCanonicalEntry>& SkPDFShader::CanonicalShaders() { |
662 // This initialization is only thread safe with gcc. | 662 SkPDFShader::CanonicalShadersMutex().assertHeld(); |
663 static SkTDArray<ShaderCanonicalEntry> gCanonicalShaders; | 663 static SkTDArray<ShaderCanonicalEntry> gCanonicalShaders; |
664 return gCanonicalShaders; | 664 return gCanonicalShaders; |
665 } | 665 } |
666 | 666 |
667 // static | 667 // static |
668 SkBaseMutex& SkPDFShader::CanonicalShadersMutex() { | 668 SkBaseMutex& SkPDFShader::CanonicalShadersMutex() { |
669 // This initialization is only thread safe with gcc or when | |
670 // POD-style mutex initialization is used. | |
671 SK_DECLARE_STATIC_MUTEX(gCanonicalShadersMutex); | 669 SK_DECLARE_STATIC_MUTEX(gCanonicalShadersMutex); |
672 return gCanonicalShadersMutex; | 670 return gCanonicalShadersMutex; |
673 } | 671 } |
674 | 672 |
675 // static | 673 // static |
676 SkPDFObject* SkPDFFunctionShader::RangeObject() { | 674 SkPDFObject* SkPDFFunctionShader::RangeObject() { |
677 // This initialization is only thread safe with gcc. | 675 SkPDFShader::CanonicalShadersMutex().assertHeld(); |
678 static SkPDFArray* range = NULL; | 676 static SkPDFArray* range = NULL; |
679 // This method is only used with CanonicalShadersMutex, so it's safe to | 677 // This method is only used with CanonicalShadersMutex, so it's safe to |
680 // populate domain. | 678 // populate domain. |
681 if (range == NULL) { | 679 if (range == NULL) { |
682 range = new SkPDFArray; | 680 range = new SkPDFArray; |
683 range->reserve(6); | 681 range->reserve(6); |
684 range->appendInt(0); | 682 range->appendInt(0); |
685 range->appendInt(1); | 683 range->appendInt(1); |
686 range->appendInt(0); | 684 range->appendInt(0); |
687 range->appendInt(1); | 685 range->appendInt(1); |
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1339 return false; | 1337 return false; |
1340 } | 1338 } |
1341 | 1339 |
1342 void SkPDFShader::State::AllocateGradientInfoStorage() { | 1340 void SkPDFShader::State::AllocateGradientInfoStorage() { |
1343 fColorData.set(sk_malloc_throw( | 1341 fColorData.set(sk_malloc_throw( |
1344 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); | 1342 fInfo.fColorCount * (sizeof(SkColor) + sizeof(SkScalar)))); |
1345 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); | 1343 fInfo.fColors = reinterpret_cast<SkColor*>(fColorData.get()); |
1346 fInfo.fColorOffsets = | 1344 fInfo.fColorOffsets = |
1347 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); | 1345 reinterpret_cast<SkScalar*>(fInfo.fColors + fInfo.fColorCount); |
1348 } | 1346 } |
OLD | NEW |