196638d1db4c710e6fb72c4c286547800a63fb3dfreed/*
296638d1db4c710e6fb72c4c286547800a63fb3dfreed * Copyright 2015 Google Inc.
396638d1db4c710e6fb72c4c286547800a63fb3dfreed *
496638d1db4c710e6fb72c4c286547800a63fb3dfreed * Use of this source code is governed by a BSD-style license that can be
596638d1db4c710e6fb72c4c286547800a63fb3dfreed * found in the LICENSE file.
696638d1db4c710e6fb72c4c286547800a63fb3dfreed */
796638d1db4c710e6fb72c4c286547800a63fb3dfreed
896638d1db4c710e6fb72c4c286547800a63fb3dfreed#include "Benchmark.h"
996638d1db4c710e6fb72c4c286547800a63fb3dfreed#include "SkBitmap.h"
1096638d1db4c710e6fb72c4c286547800a63fb3dfreed#include "SkMipMap.h"
1196638d1db4c710e6fb72c4c286547800a63fb3dfreed
1296638d1db4c710e6fb72c4c286547800a63fb3dfreedclass MipMapBench: public Benchmark {
1396638d1db4c710e6fb72c4c286547800a63fb3dfreed    SkBitmap fBitmap;
1496638d1db4c710e6fb72c4c286547800a63fb3dfreed
1596638d1db4c710e6fb72c4c286547800a63fb3dfreedpublic:
1696638d1db4c710e6fb72c4c286547800a63fb3dfreed    MipMapBench() {}
1796638d1db4c710e6fb72c4c286547800a63fb3dfreed
1896638d1db4c710e6fb72c4c286547800a63fb3dfreedprotected:
1936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isSuitableFor(Backend backend) override {
2096638d1db4c710e6fb72c4c286547800a63fb3dfreed        return kNonRendering_Backend == backend;
2196638d1db4c710e6fb72c4c286547800a63fb3dfreed    }
2296638d1db4c710e6fb72c4c286547800a63fb3dfreed
2336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    const char* onGetName() override { return "mipmap_build"; }
2496638d1db4c710e6fb72c4c286547800a63fb3dfreed
2536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onPreDraw() override {
2696638d1db4c710e6fb72c4c286547800a63fb3dfreed        fBitmap.allocN32Pixels(1000, 1000, true);
2796638d1db4c710e6fb72c4c286547800a63fb3dfreed        fBitmap.eraseColor(SK_ColorWHITE);  // so we don't read uninitialized memory
2896638d1db4c710e6fb72c4c286547800a63fb3dfreed    }
2996638d1db4c710e6fb72c4c286547800a63fb3dfreed
3036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(const int loops, SkCanvas*) override {
3196638d1db4c710e6fb72c4c286547800a63fb3dfreed        for (int i = 0; i < loops; i++) {
3296638d1db4c710e6fb72c4c286547800a63fb3dfreed            SkMipMap::Build(fBitmap, NULL)->unref();
3396638d1db4c710e6fb72c4c286547800a63fb3dfreed        }
3496638d1db4c710e6fb72c4c286547800a63fb3dfreed    }
3596638d1db4c710e6fb72c4c286547800a63fb3dfreed
3696638d1db4c710e6fb72c4c286547800a63fb3dfreedprivate:
3796638d1db4c710e6fb72c4c286547800a63fb3dfreed    typedef Benchmark INHERITED;
3896638d1db4c710e6fb72c4c286547800a63fb3dfreed};
3996638d1db4c710e6fb72c4c286547800a63fb3dfreed
4096638d1db4c710e6fb72c4c286547800a63fb3dfreedDEF_BENCH( return new MipMapBench; )
41