speed up rgn building by inlining memcmp for 32bit values
on mac/clang, using circularclips gm/bench - before: 400ms - after: 250ms BUG=skia: R=tomhudson@chromium.org, mtklein@google.com Author: reed@google.com Review URL: https://codereview.chromium.org/348143002
This commit is contained in:
parent
61843107f6
commit
b8f0798849
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user