| Index: bench/SortBench.cpp
|
| diff --git a/bench/SortBench.cpp b/bench/SortBench.cpp
|
| index f8bb6862733a8963a56bb389192328f32e916b9b..6fb3a71bf9816646189cbf8d7c4575e4d45054e3 100644
|
| --- a/bench/SortBench.cpp
|
| +++ b/bench/SortBench.cpp
|
| @@ -12,40 +12,40 @@
|
|
|
| static const int N = 1000;
|
|
|
| -static void rand_proc(int array[], int count) {
|
| +static void rand_proc(int array[N]) {
|
| SkRandom rand;
|
| - for (int i = 0; i < count; ++i) {
|
| + for (int i = 0; i < N; ++i) {
|
| array[i] = rand.nextS();
|
| }
|
| }
|
|
|
| -static void randN_proc(int array[], int count) {
|
| +static void randN_proc(int array[N]) {
|
| SkRandom rand;
|
| int mod = N / 10;
|
| - for (int i = 0; i < count; ++i) {
|
| + for (int i = 0; i < N; ++i) {
|
| array[i] = rand.nextU() % mod;
|
| }
|
| }
|
|
|
| -static void forward_proc(int array[], int count) {
|
| - for (int i = 0; i < count; ++i) {
|
| +static void forward_proc(int array[N]) {
|
| + for (int i = 0; i < N; ++i) {
|
| array[i] = i;
|
| }
|
| }
|
|
|
| -static void backward_proc(int array[], int count) {
|
| - for (int i = 0; i < count; ++i) {
|
| +static void backward_proc(int array[N]) {
|
| + for (int i = 0; i < N; ++i) {
|
| array[i] = -i;
|
| }
|
| }
|
|
|
| -static void same_proc(int array[], int count) {
|
| - for (int i = 0; i < count; ++i) {
|
| - array[i] = count;
|
| +static void same_proc(int array[N]) {
|
| + for (int i = 0; i < N; ++i) {
|
| + array[i] = N;
|
| }
|
| }
|
|
|
| -typedef void (*SortProc)(int array[], int count);
|
| +typedef void (*SortProc)(int array[N]);
|
|
|
| enum Type {
|
| kRand, kRandN, kFore, kBack, kSame
|
| @@ -62,12 +62,13 @@ static const struct {
|
| { "repeated", same_proc },
|
| };
|
|
|
| -static void skqsort_sort(int array[], int count) {
|
| - SkTQSort<int>(array, array + count);
|
| +static void skqsort_sort(int array[N]) {
|
| + // End is inclusive for SkTQSort!
|
| + SkTQSort<int>(array, array + N - 1);
|
| }
|
|
|
| -static void skheap_sort(int array[], int count) {
|
| - SkTHeapSort<int>(array, count);
|
| +static void skheap_sort(int array[N]) {
|
| + SkTHeapSort<int>(array, N);
|
| }
|
|
|
| extern "C" {
|
| @@ -78,8 +79,8 @@ extern "C" {
|
| }
|
| }
|
|
|
| -static void qsort_sort(int array[], int count) {
|
| - qsort(array, count, sizeof(int), int_compare);
|
| +static void qsort_sort(int array[N]) {
|
| + qsort(array, N, sizeof(int), int_compare);
|
| }
|
|
|
| enum SortType {
|
| @@ -96,23 +97,15 @@ static const struct {
|
| };
|
|
|
| class SortBench : public SkBenchmark {
|
| - SkString fName;
|
| - enum { MAX = 100000 };
|
| - int fUnsorted[MAX];
|
| - int fSorted[MAX];
|
| - int fCount;
|
| - SortProc fSortProc;
|
| + SkString fName;
|
| + const Type fType;
|
| + const SortProc fSortProc;
|
| + SkAutoTMalloc<int> fUnsorted;
|
|
|
| public:
|
| - SortBench(Type t, int n, SortType s) {
|
| - if (n > MAX) {
|
| - n = MAX;
|
| - }
|
| - fName.printf("sort_%s_%s", gSorts[s].fName, gRec[t].fName);
|
| - fCount = n;
|
| - gRec[t].fProc(fUnsorted, n);
|
| - fSortProc = gSorts[s].fProc;
|
| + SortBench(Type t, SortType s) : fType(t), fSortProc(gSorts[s].fProc) {
|
| fIsRendering = false;
|
| + fName.printf("sort_%s_%s", gSorts[s].fName, gRec[t].fName);
|
| }
|
|
|
| protected:
|
| @@ -120,13 +113,20 @@ protected:
|
| return fName.c_str();
|
| }
|
|
|
| - virtual void onDraw(SkCanvas*) {
|
| + // Delayed initialization only done if onDraw will be called.
|
| + virtual void onPreDraw() SK_OVERRIDE {
|
| + fUnsorted.reset(N);
|
| + gRec[fType].fProc(fUnsorted.get());
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas*) SK_OVERRIDE {
|
| + SkAutoTMalloc<int> sorted(N);
|
| for (int i = 0; i < this->getLoops(); i++) {
|
| - memcpy(fSorted, fUnsorted, fCount * sizeof(int));
|
| - fSortProc(fSorted, fCount);
|
| + memcpy(sorted.get(), fUnsorted.get(), N*sizeof(int));
|
| + fSortProc(sorted.get());
|
| #ifdef SK_DEBUG
|
| - for (int j = 1; j < fCount; ++j) {
|
| - SkASSERT(fSorted[j - 1] <= fSorted[j]);
|
| + for (int j = 1; j < N; ++j) {
|
| + SkASSERT(sorted[j - 1] <= sorted[j]);
|
| }
|
| #endif
|
| }
|
| @@ -139,13 +139,13 @@ private:
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| static SkBenchmark* NewSkQSort(Type t) {
|
| - return new SortBench(t, N, kSKQSort);
|
| + return new SortBench(t, kSKQSort);
|
| }
|
| static SkBenchmark* NewSkHeap(Type t) {
|
| - return new SortBench(t, N, kSKHeap);
|
| + return new SortBench(t, kSKHeap);
|
| }
|
| static SkBenchmark* NewQSort(Type t) {
|
| - return new SortBench(t, N, kQSort);
|
| + return new SortBench(t, kQSort);
|
| }
|
|
|
| DEF_BENCH( return NewSkQSort(kRand); )
|
|
|