diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-28 19:58:14 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-28 19:58:14 +0000 |
commit | 05d1cc23ec8c7c4befa039330c48901f9ff1251c (patch) | |
tree | c181737a55a4c09cf64b09264d114e77ae1b939e /src/core/SkUtils.cpp | |
parent | 6640ee3378e3ecf23749faa3b513642ce188b055 (diff) |
Revert of Spin off just SkLazyFnPtr from 305513002. (https://codereview.chromium.org/305753002/)
Reason for revert:
depends on bad cl
Original issue's description:
> Spin off just SkLazyFnPtr from 305513002.
>
> The memory barrier in SkOnce is a perf regression for sk_mem{set,cpy} in
> SkUtils on ARM. We can do a lot better for function pointers.
>
> BUG=skia:
>
> Committed: http://code.google.com/p/skia/source/detail?r=14929
R=bungeman@google.com, mtklein@chromium.org
TBR=bungeman@google.com, mtklein@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Author: mtklein@google.com
Review URL: https://codereview.chromium.org/300843012
git-svn-id: http://skia.googlecode.com/svn/trunk@14933 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkUtils.cpp')
-rw-r--r-- | src/core/SkUtils.cpp | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp index 591a198c65..ca18e0cb2d 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 @@ static void sk_memcpy32_portable(uint32_t dst[], const uint32_t src[], int count 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); + SK_DECLARE_STATIC_ONCE(once); + static SkMemset16Proc proc = NULL; + SkOnce(&once, choose_memset16, &proc); + SkASSERT(proc != NULL); + + return proc(dst, value, count); } -static SkMemset32Proc choose_memset32() { - SkMemset32Proc proc = SkMemset32GetPlatformProc(); - return proc ? proc : sk_memset32_portable; +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); + SK_DECLARE_STATIC_ONCE(once); + static SkMemset32Proc proc = NULL; + SkOnce(&once, choose_memset32, &proc); + SkASSERT(proc != NULL); + + return proc(dst, value, count); } -static SkMemcpy32Proc choose_memcpy32() { - SkMemcpy32Proc proc = SkMemcpy32GetPlatformProc(); - return proc ? proc : sk_memcpy32_portable; +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); } /////////////////////////////////////////////////////////////////////////////// |