Index: src/core/SkRegion_path.cpp |
diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp |
index 03830e6ce542a1864f5a6ad144ad8b027c8090b7..108511c6c5d905eeb0df1186267a269b3e29bc8a 100644 |
--- a/src/core/SkRegion_path.cpp |
+++ b/src/core/SkRegion_path.cpp |
@@ -1,4 +1,3 @@ |
- |
/* |
* Copyright 2006 The Android Open Source Project |
* |
@@ -6,13 +5,23 @@ |
* found in the LICENSE file. |
*/ |
- |
#include "SkRegionPriv.h" |
#include "SkBlitter.h" |
#include "SkScan.h" |
#include "SkTDArray.h" |
#include "SkPath.h" |
+// The rgnbuilder caller *seems* to pass short counts, possible often seens early failure, so |
+// we may not want to promote this to a "std" routine just yet. |
+static bool sk_memeq32(const int32_t* SK_RESTRICT a, const int32_t* SK_RESTRICT b, int count) { |
+ for (int i = 0; i < count; ++i) { |
+ if (a[i] != b[i]) { |
+ return false; |
+ } |
+ } |
+ return true; |
+} |
+ |
class SkRgnBuilder : public SkBlitter { |
public: |
SkRgnBuilder(); |
@@ -87,9 +96,7 @@ private: |
if (fPrevScanline != NULL && |
fPrevScanline->fLastY + 1 == fCurrScanline->fLastY && |
fPrevScanline->fXCount == fCurrScanline->fXCount && |
- !memcmp(fPrevScanline->firstX(), |
- fCurrScanline->firstX(), |
- fCurrScanline->fXCount * sizeof(SkRegion::RunType))) |
+ sk_memeq32(fPrevScanline->firstX(), fCurrScanline->firstX(), fCurrScanline->fXCount)) |
{ |
// update the height of fPrevScanline |
fPrevScanline->fLastY = fCurrScanline->fLastY; |