Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Unified Diff: src/gpu/GrPath.cpp

Issue 1116123003: Improve caching of dashed paths in GrStencilAndCoverPathRenderer (Closed) Base URL: https://skia.googlesource.com/skia.git@dashing-nvpr-01
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrPath.cpp
diff --git a/src/gpu/GrPath.cpp b/src/gpu/GrPath.cpp
index 3a66865c6e5d3448eaeaefce22db731364340519..4af6cc6beaa6c1dcf8ef9d6738f0d1cea49d3f0b 100644
--- a/src/gpu/GrPath.cpp
+++ b/src/gpu/GrPath.cpp
@@ -7,49 +7,12 @@
#include "GrPath.h"
-template<int NumBits> static uint64_t get_top_n_float_bits(float f) {
- char* floatData = reinterpret_cast<char*>(&f);
- uint32_t floatBits = *reinterpret_cast<uint32_t*>(floatData);
- return floatBits >> (32 - NumBits);
+void GrPath::ComputeKey(const SkPath& path, const GrStrokeInfo& stroke, GrUniqueKey* key) {
+ static const GrUniqueKey::Domain kPathDomain = GrUniqueKey::GenerateDomain();
+ GrUniqueKey::Builder builder(key, kPathDomain,
+ 2 + stroke.computeUniqueKeyFragmentData32Cnt());
+ builder[0] = path.getGenerationID();
+ builder[1] = path.getFillType();
+ stroke.asUniqueKeyFragment(&builder[2]);
egdaniel 2015/05/15 15:28:53 We should probably Assert here the computeUniqueKe
Kimmo Kinnunen 2015/05/18 06:48:40 Hmm. I expect you hint at the Builder operator[] a
egdaniel 2015/05/18 13:43:46 Yeah it was the builder[2] that I was worried abou
}
-void GrPath::ComputeKey(const SkPath& path, const SkStrokeRec& stroke, GrUniqueKey* key) {
- static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
- GrUniqueKey::Builder builder(key, kDomain, 3);
- *reinterpret_cast<uint64_t*>(&builder[0]) = ComputeStrokeKey(stroke);
- builder[2] = path.getGenerationID();
-}
-
-uint64_t GrPath::ComputeStrokeKey(const SkStrokeRec& stroke) {
- enum {
- kStyleBits = 2,
- kJoinBits = 2,
- kCapBits = 2,
- kWidthBits = 29,
- kMiterBits = 29,
-
- kJoinShift = kStyleBits,
- kCapShift = kJoinShift + kJoinBits,
- kWidthShift = kCapShift + kCapBits,
- kMiterShift = kWidthShift + kWidthBits,
-
- kBitCount = kMiterShift + kMiterBits
- };
-
- SK_COMPILE_ASSERT(SkStrokeRec::kStyleCount <= (1 << kStyleBits), style_shift_will_be_wrong);
- SK_COMPILE_ASSERT(SkPaint::kJoinCount <= (1 << kJoinBits), cap_shift_will_be_wrong);
- SK_COMPILE_ASSERT(SkPaint::kCapCount <= (1 << kCapBits), miter_shift_will_be_wrong);
- SK_COMPILE_ASSERT(kBitCount == 64, wrong_stroke_key_size);
-
- if (!stroke.needToApply()) {
- return SkStrokeRec::kFill_Style;
- }
-
- uint64_t key = stroke.getStyle();
- key |= stroke.getJoin() << kJoinShift;
- key |= stroke.getCap() << kCapShift;
- key |= get_top_n_float_bits<kWidthBits>(stroke.getWidth()) << kWidthShift;
- key |= get_top_n_float_bits<kMiterBits>(stroke.getMiter()) << kMiterShift;
-
- return key;
-}

Powered by Google App Engine
This is Rietveld 408576698