1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2018 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // ResultPerf: 7*8975f5c5SAndroid Build Coastguard Worker // Performance test for ANGLE's Error result class. 8*8975f5c5SAndroid Build Coastguard Worker // 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Worker #include "ANGLEPerfTest.h" 11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker volatile int gThing = 0; 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard Worker namespace 16*8975f5c5SAndroid Build Coastguard Worker { 17*8975f5c5SAndroid Build Coastguard Worker constexpr int kIterationsPerStep = 1000; 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker class ResultPerfTest : public ANGLEPerfTest 20*8975f5c5SAndroid Build Coastguard Worker { 21*8975f5c5SAndroid Build Coastguard Worker public: 22*8975f5c5SAndroid Build Coastguard Worker ResultPerfTest(); 23*8975f5c5SAndroid Build Coastguard Worker void step() override; 24*8975f5c5SAndroid Build Coastguard Worker }; 25*8975f5c5SAndroid Build Coastguard Worker ResultPerfTest()26*8975f5c5SAndroid Build Coastguard WorkerResultPerfTest::ResultPerfTest() : ANGLEPerfTest("ResultPerf", "", "_run", kIterationsPerStep) {} 27*8975f5c5SAndroid Build Coastguard Worker ExternalCall()28*8975f5c5SAndroid Build Coastguard WorkerANGLE_NOINLINE angle::Result ExternalCall() 29*8975f5c5SAndroid Build Coastguard Worker { 30*8975f5c5SAndroid Build Coastguard Worker if (gThing != 0) 31*8975f5c5SAndroid Build Coastguard Worker { 32*8975f5c5SAndroid Build Coastguard Worker printf("Something very slow"); 33*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Stop; 34*8975f5c5SAndroid Build Coastguard Worker } 35*8975f5c5SAndroid Build Coastguard Worker else 36*8975f5c5SAndroid Build Coastguard Worker { 37*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue; 38*8975f5c5SAndroid Build Coastguard Worker } 39*8975f5c5SAndroid Build Coastguard Worker } 40*8975f5c5SAndroid Build Coastguard Worker CallReturningResult(int depth)41*8975f5c5SAndroid Build Coastguard Workerangle::Result CallReturningResult(int depth) 42*8975f5c5SAndroid Build Coastguard Worker { 43*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 44*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 45*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 46*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 47*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 48*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 49*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 50*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 51*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(ExternalCall()); 52*8975f5c5SAndroid Build Coastguard Worker return ExternalCall(); 53*8975f5c5SAndroid Build Coastguard Worker } 54*8975f5c5SAndroid Build Coastguard Worker step()55*8975f5c5SAndroid Build Coastguard Workervoid ResultPerfTest::step() 56*8975f5c5SAndroid Build Coastguard Worker { 57*8975f5c5SAndroid Build Coastguard Worker for (int i = 0; i < kIterationsPerStep; i++) 58*8975f5c5SAndroid Build Coastguard Worker { 59*8975f5c5SAndroid Build Coastguard Worker (void)CallReturningResult(0); 60*8975f5c5SAndroid Build Coastguard Worker (void)CallReturningResult(0); 61*8975f5c5SAndroid Build Coastguard Worker (void)CallReturningResult(0); 62*8975f5c5SAndroid Build Coastguard Worker (void)CallReturningResult(0); 63*8975f5c5SAndroid Build Coastguard Worker (void)CallReturningResult(0); 64*8975f5c5SAndroid Build Coastguard Worker } 65*8975f5c5SAndroid Build Coastguard Worker } 66*8975f5c5SAndroid Build Coastguard Worker TEST_F(ResultPerfTest,Run)67*8975f5c5SAndroid Build Coastguard WorkerTEST_F(ResultPerfTest, Run) 68*8975f5c5SAndroid Build Coastguard Worker { 69*8975f5c5SAndroid Build Coastguard Worker run(); 70*8975f5c5SAndroid Build Coastguard Worker } 71*8975f5c5SAndroid Build Coastguard Worker } // anonymous namespace 72