| 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); ) | 
|  |