| // |
| // 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 kIterations = 1000; |
| |
| class ResultPerfTest : public ANGLEPerfTest |
| { |
| public: |
| ResultPerfTest(); |
| void step() override; |
| }; |
| |
| ResultPerfTest::ResultPerfTest() : ANGLEPerfTest("ResultPerf", "_run") |
| { |
| } |
| |
| ANGLE_NOINLINE gl::Error ExternalCall() |
| { |
| if (gThing != 0) |
| { |
| printf("Something very slow"); |
| return gl::Error(GL_INVALID_OPERATION); |
| } |
| else |
| { |
| return gl::NoError(); |
| } |
| } |
| |
| gl::Error 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 < kIterations; i++) |
| { |
| (void)CallReturningResult(0); |
| (void)CallReturningResult(0); |
| (void)CallReturningResult(0); |
| (void)CallReturningResult(0); |
| (void)CallReturningResult(0); |
| } |
| } |
| |
| TEST_F(ResultPerfTest, Run) |
| { |
| run(); |
| } |
| } // anonymous namespace |