/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "SkBenchmark.h"
#include "SkThread.h"

class MutexBench : public SkBenchmark {
    enum {
        N = SkBENCHLOOP(80),
        M = SkBENCHLOOP(200)
    };
public:
    MutexBench(void* param) : INHERITED(param) {

    }
protected:
    virtual const char* onGetName() {
        return "mutex";
    }

    virtual void onDraw(SkCanvas* canvas) {
        for (int i = 0; i < N; i++) {
            SkMutex mu;
            for (int j = 0; j < M; j++) {
                mu.acquire();
                mu.release();
            }
        }
    }

private:
    typedef SkBenchmark INHERITED;
};

///////////////////////////////////////////////////////////////////////////////

static SkBenchmark* Fact(void* p) { return new MutexBench(p); }

static BenchRegistry gReg01(Fact);

