diff options
author | Matt Sarett <msarett@google.com> | 2016-10-16 10:20:41 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-10-16 14:51:57 +0000 |
commit | f489886915034093278353d06c6f1973b2e8b7d2 (patch) | |
tree | 284181b7f901cd0ac47ed0e52df17cc64a86fb49 /src/core/SkColorSpace.cpp | |
parent | 24a865c2c048faa615fcdde3b209a9c10a9be923 (diff) |
Cache dst LUTs in SkColorSpaceXform
This is only useful in the rare case that the dst does not
fall into one of our main paths.
But it's a good optimization, since this does happen,
and typically, the dst won't change.
ColorCodecBench z620 --nonstd --xform_only
Without Patch 511us
With Patch 348us
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3400
Change-Id: Ibf68d9ce7072680465662922f4aa15630545e3d6
Reviewed-on: https://skia-review.googlesource.com/3400
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/core/SkColorSpace.cpp')
-rw-r--r-- | src/core/SkColorSpace.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp index bdef5b3b75..b956c7fe3e 100644 --- a/src/core/SkColorSpace.cpp +++ b/src/core/SkColorSpace.cpp @@ -8,6 +8,7 @@ #include "SkColorSpace.h" #include "SkColorSpace_Base.h" #include "SkColorSpacePriv.h" +#include "SkColorSpaceXform_Base.h" #include "SkOnce.h" #include "SkPoint3.h" @@ -319,6 +320,23 @@ const SkMatrix44& SkColorSpace_Base::fromXYZD50() const { return fFromXYZD50; } +void SkColorSpace_Base::toDstGammaTables(const uint8_t* tables[3], sk_sp<SkData>* storage, + int numTables) const { + fToDstGammaOnce([this, numTables] { + const bool gammasAreMatching = numTables <= 1; + fDstStorage = + SkData::MakeUninitialized(numTables * SkColorSpaceXform_Base::kDstGammaTableSize); + SkColorSpaceXform_Base::BuildDstGammaTables(fToDstGammaTables, + (uint8_t*) fDstStorage->writable_data(), this, + gammasAreMatching); + }); + + *storage = fDstStorage; + tables[0] = fToDstGammaTables[0]; + tables[1] = fToDstGammaTables[1]; + tables[2] = fToDstGammaTables[2]; +} + /////////////////////////////////////////////////////////////////////////////////////////////////// enum Version { |