144d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein/*
244d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein * Copyright 2015 Google Inc.
344d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein *
444d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein * Use of this source code is governed by a BSD-style license that can be
544d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein * found in the LICENSE file.
644d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein */
744d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein
844d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein#include "Benchmark.h"
944d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein
1044d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein// This benchmark's runtime should be fairly constant for a given machine,
1144d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein// so it can be used as a baseline to control for thermal or other throttling.
1244d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein
1344d43d8d6e4f9321c9001f269ff433bd06aa81e1mtkleinstruct ControlBench : public Benchmark {
1444d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein    const char* onGetName() override { return "control"; }
1544d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein    bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
1644d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein
1744d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein    void onDraw(const int loops, SkCanvas*) override {
1844d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein        // Nothing terribly useful: force a memory read, a memory write, and some math.
1944d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein        volatile uint32_t rand = 0;
2044d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein        for (int i = 0; i < 1000*loops; i++) {
2144d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein            rand *= 1664525;
2244d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein            rand += 1013904223;
2344d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein        }
2444d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein    }
2544d43d8d6e4f9321c9001f269ff433bd06aa81e1mtklein};
2644d43d8d6e4f9321c9001f269ff433bd06aa81e1mtkleinDEF_BENCH(return new ControlBench;)
27