| Index: src/core/SkMatrix.cpp
|
| diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
|
| index 40f6e5298d9375df55a8822b2a0c2372b1b0f116..8778f78f4105f833a7cb10f5cb48b137f625a1b2 100644
|
| --- a/src/core/SkMatrix.cpp
|
| +++ b/src/core/SkMatrix.cpp
|
| @@ -7,7 +7,7 @@
|
|
|
| #include "SkMatrix.h"
|
| #include "SkFloatBits.h"
|
| -#include "SkOnce.h"
|
| +#include "SkLazyPtr.h"
|
| #include "SkString.h"
|
|
|
| // In a few places, we performed the following
|
| @@ -1558,29 +1558,33 @@ bool SkMatrix::getMinMaxScales(SkScalar scaleFactors[2]) const {
|
| return get_scale_factor<kBoth_MinMaxOrBoth>(this->getType(), fMat, scaleFactors);
|
| }
|
|
|
| -static void reset_identity_matrix(SkMatrix* identity) {
|
| - identity->reset();
|
| +namespace {
|
| +
|
| +SkMatrix* create_identity() {
|
| + SkMatrix* m = SkNEW(SkMatrix);
|
| + m->reset();
|
| + return m;
|
| +}
|
| +
|
| +SkMatrix* create_invalid() {
|
| + SkMatrix* m = SkNEW(SkMatrix);
|
| + m->setAll(SK_ScalarMax, SK_ScalarMax, SK_ScalarMax,
|
| + SK_ScalarMax, SK_ScalarMax, SK_ScalarMax,
|
| + SK_ScalarMax, SK_ScalarMax, SK_ScalarMax);
|
| + m->getType(); // Force the type to be computed.
|
| + return m;
|
| }
|
|
|
| +} // namespace
|
| +
|
| const SkMatrix& SkMatrix::I() {
|
| - // If you can use C++11 now, you might consider replacing this with a constexpr constructor.
|
| - static SkMatrix gIdentity;
|
| - SK_DECLARE_STATIC_ONCE(once);
|
| - SkOnce(&once, reset_identity_matrix, &gIdentity);
|
| - return gIdentity;
|
| + SK_DECLARE_STATIC_LAZY_PTR(SkMatrix, identity, create_identity);
|
| + return *identity.get();
|
| }
|
|
|
| const SkMatrix& SkMatrix::InvalidMatrix() {
|
| - static SkMatrix gInvalid;
|
| - static bool gOnce;
|
| - if (!gOnce) {
|
| - gInvalid.setAll(SK_ScalarMax, SK_ScalarMax, SK_ScalarMax,
|
| - SK_ScalarMax, SK_ScalarMax, SK_ScalarMax,
|
| - SK_ScalarMax, SK_ScalarMax, SK_ScalarMax);
|
| - gInvalid.getType(); // force the type to be computed
|
| - gOnce = true;
|
| - }
|
| - return gInvalid;
|
| + SK_DECLARE_STATIC_LAZY_PTR(SkMatrix, invalid, create_invalid);
|
| + return *invalid.get();
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|