1ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com/*
2ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com * Copyright 2012 Google Inc.
3ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com *
4ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com * Use of this source code is governed by a BSD-style license that can be
5ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com * found in the LICENSE file.
6ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com */
7ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com
8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h"
9ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com#include "SkCanvas.h"
10f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkChunkAlloc.h"
11ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com#include "SkPaint.h"
12ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com#include "SkRandom.h"
13ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com#include "SkString.h"
14ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com
15f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass ChunkAllocBench : public Benchmark {
16ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com    SkString    fName;
17ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com    size_t      fMinSize;
18ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.compublic:
19410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com    ChunkAllocBench(size_t minSize)  {
20ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        fMinSize = minSize;
213a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org        fName.printf("chunkalloc_" SK_SIZE_T_SPECIFIER, minSize);
22644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org    }
23644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org
2436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isSuitableFor(Backend backend) override {
25644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org        return backend == kNonRendering_Backend;
26ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com    }
27fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
28ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.comprotected:
2936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    const char* onGetName() override {
30ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        return fName.c_str();
31ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com    }
32fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(const int loops, SkCanvas*) override {
34ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        size_t inc = fMinSize >> 4;
35ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        SkASSERT(inc > 0);
36ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        size_t total = fMinSize * 64;
37ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com
38ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        SkChunkAlloc alloc(fMinSize);
39ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com
403361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org        for (int i = 0; i < loops; ++i) {
41ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com            size_t size = 0;
42ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com            int calls = 0;
43ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com            while (size < total) {
44ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com                alloc.allocThrow(inc);
45ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com                size += inc;
46ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com                calls += 1;
47ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com            }
48ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com            alloc.reset();
49ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com        }
50ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com    }
51fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
52ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.comprivate:
53f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina    typedef Benchmark INHERITED;
54ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com};
55ebd24962dfdb7a62cf97c0e3938851d56cabd10freed@google.com
56410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ChunkAllocBench(64); )
57410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ChunkAllocBench(8*1024); )
58519f9677a41239808f41a7c13ef1f6e05eb1ed50mtklein@google.com
59