| // |
| // 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 |