| Index: src/core/SkUtils.cpp
|
| diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp
|
| index 591a198c6510a52603b62546b10d977430afd5a4..ca18e0cb2d08138c64f16ff48d5e6d3e2fe32fb1 100644
|
| --- a/src/core/SkUtils.cpp
|
| +++ b/src/core/SkUtils.cpp
|
| @@ -8,7 +8,7 @@
|
|
|
|
|
| #include "SkUtils.h"
|
| -#include "SkLazyFnPtr.h"
|
| +#include "SkOnce.h"
|
|
|
| #if 0
|
| #define assign_16_longs(dst, value) \
|
| @@ -113,34 +113,52 @@
|
| memcpy(dst, src, count * sizeof(uint32_t));
|
| }
|
|
|
| -static SkMemset16Proc choose_memset16() {
|
| - SkMemset16Proc proc = SkMemset16GetPlatformProc();
|
| - return proc ? proc : sk_memset16_portable;
|
| +static void choose_memset16(SkMemset16Proc* proc) {
|
| + *proc = SkMemset16GetPlatformProc();
|
| + if (NULL == *proc) {
|
| + *proc = &sk_memset16_portable;
|
| + }
|
| }
|
|
|
| void sk_memset16(uint16_t dst[], uint16_t value, int count) {
|
| - SK_DECLARE_STATIC_LAZY_FN_PTR(SkMemset16Proc, choice);
|
| - return choice.get(choose_memset16)(dst, value, count);
|
| -}
|
| -
|
| -static SkMemset32Proc choose_memset32() {
|
| - SkMemset32Proc proc = SkMemset32GetPlatformProc();
|
| - return proc ? proc : sk_memset32_portable;
|
| + SK_DECLARE_STATIC_ONCE(once);
|
| + static SkMemset16Proc proc = NULL;
|
| + SkOnce(&once, choose_memset16, &proc);
|
| + SkASSERT(proc != NULL);
|
| +
|
| + return proc(dst, value, count);
|
| +}
|
| +
|
| +static void choose_memset32(SkMemset32Proc* proc) {
|
| + *proc = SkMemset32GetPlatformProc();
|
| + if (NULL == *proc) {
|
| + *proc = &sk_memset32_portable;
|
| + }
|
| }
|
|
|
| void sk_memset32(uint32_t dst[], uint32_t value, int count) {
|
| - SK_DECLARE_STATIC_LAZY_FN_PTR(SkMemset32Proc, choice);
|
| - return choice.get(choose_memset32)(dst, value, count);
|
| -}
|
| -
|
| -static SkMemcpy32Proc choose_memcpy32() {
|
| - SkMemcpy32Proc proc = SkMemcpy32GetPlatformProc();
|
| - return proc ? proc : sk_memcpy32_portable;
|
| + SK_DECLARE_STATIC_ONCE(once);
|
| + static SkMemset32Proc proc = NULL;
|
| + SkOnce(&once, choose_memset32, &proc);
|
| + SkASSERT(proc != NULL);
|
| +
|
| + return proc(dst, value, count);
|
| +}
|
| +
|
| +static void choose_memcpy32(SkMemcpy32Proc* proc) {
|
| + *proc = SkMemcpy32GetPlatformProc();
|
| + if (NULL == *proc) {
|
| + *proc = &sk_memcpy32_portable;
|
| + }
|
| }
|
|
|
| void sk_memcpy32(uint32_t dst[], const uint32_t src[], int count) {
|
| - SK_DECLARE_STATIC_LAZY_FN_PTR(SkMemcpy32Proc, choice);
|
| - return choice.get(choose_memcpy32)(dst, src, count);
|
| + SK_DECLARE_STATIC_ONCE(once);
|
| + static SkMemcpy32Proc proc = NULL;
|
| + SkOnce(&once, choose_memcpy32, &proc);
|
| + SkASSERT(proc != NULL);
|
| +
|
| + return proc(dst, src, count);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|