Edit

kc3-lang/angle/src/tests/perf_tests/ResultPerf.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-05-29 15:21:41
    Hash : 4fef7738
    Message : Add perf test for Error/Result class. This is a performance test that stresses the Error class. It also is used in tests for the new Result class. Bug: angleproject:2575 Change-Id: Ie23c2a1ea74108d2ba72bf26f1db04e14f7eda64 Reviewed-on: https://chromium-review.googlesource.com/1077129 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/tests/perf_tests/ResultPerf.cpp
  • //
    // 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