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