SkLazyPtr, mk. 2
authorcommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 29 May 2014 20:13:22 +0000 (20:13 +0000)
committercommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 29 May 2014 20:13:22 +0000 (20:13 +0000)
commit97de357270e54be53acb17e1cb4b4d5e25bacc01
treef66e2395aa435070d3c6bb4bffa3e16dfa096356
parentf9bd04faffb936602f7f957413a8cd5b7fc44add
SkLazyPtr, mk. 2

SK_DECLARE_STATIC_LAZY_PTR and
SK_DECLARE_STATIC_LAZY_PTR_ARRAY let you declare a single or
array of static pointers that are lazily initialized.

You can think of this as a restricted, lighter-weight
version of SkOnce.  There's no guarantee that Create will be
called exactly once, but we do guarantee all threads will
agree on the resulting pointer.

We'll clean up any other extra pointers we Create()ed by
calling Destroy(), which defaults to SkDELETE.  In debug
mode, we also clean up the winning pointer at process exit,
so we can make sure we didn't leak it or free it early.

I've ported SkData (singleton) and SkXfermode (array) as
examples.  Once this lands I'll port most other users of
SkOnce.

BUG=skia:
R=bungeman@google.com, mtklein@google.com, reed@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/306943003

git-svn-id: http://skia.googlecode.com/svn/trunk@14976 2bbb7eff-a529-9590-31e7-b0007b416f81
include/core/SkData.h
include/core/SkXfermode.h
src/core/SkData.cpp
src/core/SkGraphics.cpp
src/core/SkLazyPtr.h [new file with mode: 0644]
src/core/SkThreadPriv.h
src/core/SkXfermode.cpp