// // Copyright 2018 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ResultPerf: // Performance test for ANGLE's Error result class. // #include "ANGLEPerfTest.h" #include "libANGLE/Error.h" volatile int gThing = 0; namespace { constexpr int kIterationsPerStep = 1000; class ResultPerfTest : public ANGLEPerfTest { public: ResultPerfTest(); void step() override; }; ResultPerfTest::ResultPerfTest() : ANGLEPerfTest("ResultPerf", "", "_run", kIterationsPerStep) {} ANGLE_NOINLINE angle::Result ExternalCall() { if (gThing != 0) { printf("Something very slow"); return angle::Result::Stop; } else { return angle::Result::Continue; } } angle::Result CallReturningResult(int depth) { ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); ANGLE_TRY(ExternalCall()); return ExternalCall(); } void ResultPerfTest::step() { for (int i = 0; i < kIterationsPerStep; i++) { (void)CallReturningResult(0); (void)CallReturningResult(0); (void)CallReturningResult(0); (void)CallReturningResult(0); (void)CallReturningResult(0); } } TEST_F(ResultPerfTest, Run) { run(); } } // anonymous namespace