Commit Graph

34 Commits

Author SHA1 Message Date
John Stiles
847f03ab20 Add std::string/string_view support to SkGoodHash.
This will allow these types to be used as the key in an SkTHashSet/Map
without providing a custom Traits class.

Change-Id: I41bfc1d43f3909d3653b4f12ac39e2a288235052
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/515356
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
2022-03-03 18:09:00 +00:00
Brian Osman
0074706b80 Fix SkOpts::hash_fn slightly
We were folding together a string of 4 byte values as 8 byte values,
causing us to CRC in quite a few zeros. This appears to really poison
the algorithm, resulting in frequent hash collisions.

Change-Id: I1e363088d821d2fc0bbc392b78d1e24690fdc70a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/432938
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Herb Derby <herb@google.com>
2021-07-26 18:08:56 +00:00
Mike Klein
5334e8976d Revert "restore murmur3 for older iOS devices"
This reverts commit 3c161467f0.

Reason for revert: need to keep iOS simulator (Build-Mac-Clang-x64-Release-iOS) in mind

Original change's description:
> restore murmur3 for older iOS devices
>
> For reference, the relative costs are roughly,
>    - our hash with CRC32c instructions    1x
>    - Murmur3                             11x
>    - our hash with CRC32c fallback       23x
>
> So this should be a ~2x speedup for those
> older iOS devices not using an arm64e slice.
>
> Bug: skia:11001
> Cq-Include-Trybots: luci.skia.skia.primary:Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All,Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All,Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All,Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All,Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All
> Change-Id: Ib56195ddc0c522380d263d56e767331d9f635728
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/340178
> Commit-Queue: Mike Klein <mtklein@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>

TBR=mtklein@google.com,brianosman@google.com

Change-Id: I0e3b23e63c33910e482031d7475feb624bd6e1f6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:11001
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/340396
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-12-02 22:39:01 +00:00
Mike Klein
3c161467f0 restore murmur3 for older iOS devices
For reference, the relative costs are roughly,
   - our hash with CRC32c instructions    1x
   - Murmur3                             11x
   - our hash with CRC32c fallback       23x

So this should be a ~2x speedup for those
older iOS devices not using an arm64e slice.

Bug: skia:11001
Cq-Include-Trybots: luci.skia.skia.primary:Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All,Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All,Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All,Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All,Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All
Change-Id: Ib56195ddc0c522380d263d56e767331d9f635728
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/340178
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-12-02 20:17:26 +00:00
Mike Klein
3e2e7b28b6 replace SkOpts::hash_fn
This new version always delivers the same results,
and I think can be simplified like this without
spoiling any of the bulk speed.

Change-Id: I20e42e58418e658278bb5db9472c39722b33160a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/338339
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2020-11-25 14:55:27 +00:00
Mike Klein
c0bd9f9fe5 rewrite includes to not need so much -Ifoo
Current strategy: everything from the top

Things to look at first are the manual changes:

   - added tools/rewrite_includes.py
   - removed -Idirectives from BUILD.gn
   - various compile.sh simplifications
   - tweak tools/embed_resources.py
   - update gn/find_headers.py to write paths from the top
   - update gn/gn_to_bp.py SkUserConfig.h layout
     so that #include "include/config/SkUserConfig.h" always
     gets the header we want.

No-Presubmit: true
Change-Id: I73a4b181654e0e38d229bc456c0d0854bae3363e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/209706
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Hal Canary <halcanary@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-04-24 16:27:11 +00:00
Mike Klein
fd69b6da3a tune SkOpts::hash_fn() quality
We noticed a hash collision scenario we'd like to avoid, and it looks
pretty easy.  The new test failed on my desktop at both asserts,
depending on whether I build 32- or 64-bit, and also on my
CRC-supporting phone.  The Murmur3 path should be fine.

Change-Id: I005de38d68f9b0461536c29e48cf7e5be5caac3e
Reviewed-on: https://skia-review.googlesource.com/c/159621
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2018-10-04 18:32:21 +00:00
Ben Wagner
b607a8fbf0 IWYU for some test files starting with 'C'.
Change-Id: Iea274ae52da8b4b87ec55222c856f40a0d88c4e0
Reviewed-on: https://skia-review.googlesource.com/113746
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-on: https://skia-review.googlesource.com/113944
Reviewed-by: Ben Wagner <bungeman@google.com>
2018-03-13 15:16:22 +00:00
Ben Wagner
501c17cb91 Revert "IWYU for some test files starting with 'C'."
This reverts commit 1a462bd0fe.

Reason for revert: Broke android. Need to run android bot for these.

Original change's description:
> IWYU for some test files starting with 'C'.
> 
> Change-Id: I9a9596f7a941cdd8f01e055965c70a4b24438499
> Reviewed-on: https://skia-review.googlesource.com/113746
> Reviewed-by: Herb Derby <herb@google.com>
> Commit-Queue: Ben Wagner <bungeman@google.com>

TBR=bungeman@google.com,herb@google.com

Change-Id: Ic63c2fcc7457e442e9b29a9ccd429927e24e3b77
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/113841
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2018-03-12 20:04:39 +00:00
Ben Wagner
1a462bd0fe IWYU for some test files starting with 'C'.
Change-Id: I9a9596f7a941cdd8f01e055965c70a4b24438499
Reviewed-on: https://skia-review.googlesource.com/113746
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2018-03-12 19:21:48 +00:00
mtklein
9dcdc352c1 add missing include
CQ_INCLUDE_TRYBOTS=master.client.skia:Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN-Trybot

Review-Url: https://codereview.chromium.org/2226783002
2016-08-08 12:54:08 -07:00
mtklein
4e97607d9a Use sse4.2 CRC32 instructions to hash when available.
About 9x faster than Murmur3 for long inputs.

Most of this is a mechanical change from SkChecksum::Murmur3(...) to SkOpts::hash(...).

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2208903002
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot;master.client.skia.compile:Build-Ubuntu-GCC-x86_64-Release-CMake-Trybot,Build-Mac-Clang-x86_64-Release-CMake-Trybot

Review-Url: https://codereview.chromium.org/2208903002
2016-08-08 09:06:28 -07:00
mtklein
56da025020 Switch uses of SkChecksum::Compute to Murmur3.
SkChecksum::Compute is a very, very poorly distributed hash function.
This replaces all remaining uses with Murmur3.

The only interesting stuff is in src/gpu.

BUG=skia:

Committed: https://skia.googlesource.com/skia/+/1d024a3c909ae5cefa5e8b339e2b52dc73ee85ac

Committed: https://skia.googlesource.com/skia/+/540e95483d285b555e9b1a73d18c16e7d7c0deba

Review URL: https://codereview.chromium.org/1436973003
2015-11-16 11:16:23 -08:00
mtklein
3c2d32b8e2 Revert of Switch uses of SkChecksum::Compute to Murmur3. (patchset #2 id:20001 of https://codereview.chromium.org/1436973003/ )
Reason for revert:
gotta put back *compute = 0.

Original issue's description:
> Switch uses of SkChecksum::Compute to Murmur3.
>
> SkChecksum::Compute is a very, very poorly distributed hash function.
> This replaces all remaining uses with Murmur3.
>
> The only interesting stuff is in src/gpu.
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/1d024a3c909ae5cefa5e8b339e2b52dc73ee85ac
>
> Committed: https://skia.googlesource.com/skia/+/540e95483d285b555e9b1a73d18c16e7d7c0deba

TBR=bsalomon@google.com,mtklein@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/1448023005
2015-11-16 11:01:18 -08:00
mtklein
540e95483d Switch uses of SkChecksum::Compute to Murmur3.
SkChecksum::Compute is a very, very poorly distributed hash function.
This replaces all remaining uses with Murmur3.

The only interesting stuff is in src/gpu.

BUG=skia:

Committed: https://skia.googlesource.com/skia/+/1d024a3c909ae5cefa5e8b339e2b52dc73ee85ac

Review URL: https://codereview.chromium.org/1436973003
2015-11-16 09:08:21 -08:00
mtklein
0274efbd3d Revert of Switch uses of SkChecksum::Compute to Murmur3. (patchset #2 id:20001 of https://codereview.chromium.org/1436973003/ )
Reason for revert:
I would not have expected this to change any images.

Looks like it's changed both MSAA and non-MSAA GMs:
https://gold.skia.org/search2?blame=1d024a3c909ae5cefa5e8b339e2b52dc73ee85ac&unt=true&head=true&query=source_type%3Dgm

Original issue's description:
> Switch uses of SkChecksum::Compute to Murmur3.
>
> SkChecksum::Compute is a very, very poorly distributed hash function.
> This replaces all remaining uses with Murmur3.
>
> The only interesting stuff is in src/gpu.
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/1d024a3c909ae5cefa5e8b339e2b52dc73ee85ac

TBR=bsalomon@google.com,mtklein@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/1445523003
2015-11-13 07:07:47 -08:00
mtklein
1d024a3c90 Switch uses of SkChecksum::Compute to Murmur3.
SkChecksum::Compute is a very, very poorly distributed hash function.
This replaces all remaining uses with Murmur3.

The only interesting stuff is in src/gpu.

BUG=skia:

Review URL: https://codereview.chromium.org/1436973003
2015-11-12 15:44:09 -08:00
mtklein
c8d1dd48c0 SkTHash: hash from fnptr to functor type
Passing &SkGoodHash to SkTHashMap and SkTHashSet doesn't guarantee that it's actually instantiated.  Using a functor does.

BUG=skia:

Review URL: https://codereview.chromium.org/1405053002
2015-10-15 12:23:02 -07:00
halcanary
96fcdcc219 Style Change: NULL->nullptr
DOCS_PREVIEW= https://skia.org/?cl=1316233002

Review URL: https://codereview.chromium.org/1316233002
2015-08-27 07:41:16 -07:00
mtklein
02f46cf878 Some usability ideas around SkTHash.
- By default, use new SkGoodHash to hash keys, which is:
    * for 4 byte values, use SkChecksum::Mix,
    * for SkStrings, use SkChecksum::Murmur3 on the data,
    * for other structs, shallow hash the struct with Murmur3.
  - Expand SkChecksum::Murmur3 to support non-4-byte-aligned data.
  - Add const foreach() methods.
  - Have foreach() take a functor, which allows lambdas.

BUG=skia:

Review URL: https://codereview.chromium.org/1021033002
2015-03-20 13:48:42 -07:00
reed
bbf9f6d1cb Revert of Slim Skia down to just one murmur3 implementation. (https://codereview.chromium.org/376183004/)
Reason for revert:
broke 10.6 compile

[17:13:56.863876] [4/336] CXX obj/src/core/core.SkBBoxHierarchyRecord.o
[17:13:56.863997] FAILED: c++ -MMD -MF obj/src/core/core.SkBBoxRecord.o.d -DSK_INTERNAL -DSK_GAMMA_SRGB -DSK_GAMMA_APPLY_TO_A8 -DSK_SCALAR_TO_FLOAT_EXCLUDED -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 -DSK_SUPPORT_GPU=1 -DSK_SUPPORT_OPENCL=0 -DSK_FORCE_DISTANCEFIELD_FONTS=0 -DSK_SCALAR_IS_FLOAT -DSK_BUILD_FOR_MAC -DSK_USE_POSIX_THREADS -DSK_RELEASE -DNDEBUG -I../../include/config -I../../include/core -I../../include/pathops -I../../include/pipe -I../../include/ports -I../../include/utils -I../../include/xml -I../../src/core -I../../src/sfnt -I../../src/image -I../../src/opts -I../../src/utils -I../../include/utils/mac -I../../include/gpu -I../../src/gpu -fasm-blocks -mpascal-strings -O3 -gdwarf-2 -Wnewline-eof -mmacosx-version-min=10.6 -arch x86_64 -mssse3 -fvisibility=hidden -fvisibility-inlines-hidden  -c ../../src/core/SkBBoxRecord.cpp -o obj/src/core/core.SkBBoxRecord.o
[17:13:56.864085] In file included from ../../src/core/SkPictureFlat.h:14,
[17:13:56.864130]                  from ../../src/core/SkPictureData.h:14,
[17:13:56.864173]                  from ../../src/core/SkPictureRecord.h:18,
[17:13:56.864217]                  from ../../src/core/SkBBoxRecord.h:12,
[17:13:56.864261]                  from ../../src/core/SkBBoxRecord.cpp:9:
[17:13:56.864336] ../../src/core/SkChecksum.h: In static member function ‘static uint32_t SkChecksum::Compute(const uint32_t*, size_t)’:
[17:13:56.864397] ../../src/core/SkChecksum.h:127: error: invalid conversion from ‘const uint32_t*’ to ‘const uint32_t*’
[17:13:56.864462] ../../src/core/SkChecksum.h:128: error: invalid conversion from ‘const uint32_t*’ to ‘const uint32_t*’
[17:13:56.864510] ../../src/core/SkChecksum.h:129: error: comparison between distinct pointer types ‘const uint32_t*’ and ‘const uint32_t*’ lacks a cast

Original issue's description:
> Slim Skia down to just one murmur3 implementation.
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/6ac0037b70410ff7d5ce5788bc89314223e1a587
>
> Committed: https://skia.googlesource.com/skia/+/67a3271f0de9ccc32d559b042b862528272047cc
>
> Committed: https://skia.googlesource.com/skia/+/53d435990bdb4d14df78013da45a9364d0287ebe

R=mtklein@google.com, mtklein@chromium.org
TBR=mtklein@chromium.org, mtklein@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Author: reed@google.com

Review URL: https://codereview.chromium.org/381253003
2014-07-10 14:29:43 -07:00
mtklein
53d435990b Slim Skia down to just one murmur3 implementation.
BUG=skia:

Committed: https://skia.googlesource.com/skia/+/6ac0037b70410ff7d5ce5788bc89314223e1a587

Committed: https://skia.googlesource.com/skia/+/67a3271f0de9ccc32d559b042b862528272047cc

R=reed@google.com, mtklein@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/376183004
2014-07-10 14:10:47 -07:00
commit-bot@chromium.org
e2eac8b2fd Move macros from TestClassDef.h to Test.h
Motivation: those macros don't make any sense without the definitions
in Test.h.

BUG=
R=mtklein@google.com

Author: halcanary@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@13074 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-01-14 21:04:37 +00:00
commit-bot@chromium.org
2b0f7c321c Convert Checksum test to DEF_TEST() macro.
BUG=None
TEST=tests
R=mtklein@google.com, bungeman@google.com

Author: tfarina@chromium.org

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

git-svn-id: http://skia.googlecode.com/svn/trunk@12996 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-01-09 17:48:48 +00:00
commit-bot@chromium.org
70d75ca764 Add SkChecksum::Murmur3.
BUG=
R=reed@google.com

Author: mtklein@google.com

Review URL: https://chromiumcodereview.appspot.com/19500020

git-svn-id: http://skia.googlecode.com/svn/trunk@10292 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-07-23 20:25:34 +00:00
epoger@google.com
0a117be391 Re-land r9059 with empty cityhash.gyp, instead of deleted cityhash.gyp
R=rmistry@google.com

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



git-svn-id: http://skia.googlecode.com/svn/trunk@9064 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-05-08 16:04:02 +00:00
epoger@google.com
e8d08a0fc2 Roll out r9059 to unbreak bots
git-svn-id: http://skia.googlecode.com/svn/trunk@9060 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-05-08 15:22:36 +00:00
epoger@google.com
aaf7343e16 Remove third-party cityhash, unused since r8992
R=djsollen@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@9059 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-05-08 14:49:50 +00:00
epoger@google.com
908f583662 rename SkBitmapChecksummer as SkBitmapHasher, and prepare for it to possibly use
some algorithm other than CityHash
Review URL: https://codereview.chromium.org/14170010

git-svn-id: http://skia.googlecode.com/svn/trunk@8639 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-04-12 02:23:55 +00:00
epoger@google.com
31114c69f3 Create SkBitmapChecksummer and associated SkBitmapTransformer
As needed to start capturing gm image checksums.
Review URL: https://codereview.appspot.com/6920050

git-svn-id: http://skia.googlecode.com/svn/trunk@6759 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-12 17:22:23 +00:00
epoger@google.com
b485832b66 Mark 64-bit constants as ULL to fix broken 32-bit Mac 10.6 build
TBR=bungeman
Review URL: https://codereview.appspot.com/6867079

git-svn-id: http://skia.googlecode.com/svn/trunk@6704 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-07 15:54:01 +00:00
epoger@google.com
0bba6bd78a Replace SkConsistentChecksum with SkCityHash (now including CityHash via DEPS)
Alternative to https://codereview.appspot.com/6847087/ ('Change SkConsistentChecksum to use SuperFastHash')
Review URL: https://codereview.appspot.com/6867060

git-svn-id: http://skia.googlecode.com/svn/trunk@6701 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-07 15:12:01 +00:00
epoger@google.com
f74dd16e9a Add self-test that reveals SkChecksum weakness
Review URL: https://codereview.appspot.com/6845064

git-svn-id: http://skia.googlecode.com/svn/trunk@6535 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-11-21 19:04:17 +00:00
epoger@google.com
4adfab8745 Split off SkConsistentChecksum from SkChecksum
as part of https://goto.google.com/ImprovingTheSkiaRebaseliningProcess
Review URL: https://codereview.appspot.com/6820074

git-svn-id: http://skia.googlecode.com/svn/trunk@6270 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-11-02 18:35:04 +00:00