src/tests/perf_tests/ANGLEPerfTest.cpp


Log

Author Commit Date CI Message
Jamie Madill 35cd7332 2018-12-02T12:03:33 Refactor test shader style. This change enforces a lot more consistency. We pass const char * to the Compile functions instead of std::string. Also fixes the indentation of C++11 block comments to be more consistent. Bug: angleproject:2995 Change-Id: Id6e5ea94055d8cbd420df4ea2e81b2d96cb5ce78 Reviewed-on: https://chromium-review.googlesource.com/c/1357103 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill b980c563 2018-11-27T11:34:27 Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 0e604f9f 2018-11-19T21:33:25 ANGLE Perf Test fixes. Includes the following fixes: * Removes obsolete global variable. * Disables trace event collection when trace events disabled. * Fixes calibrated steps getting stuck after first test. * Scale calibrated steps with actual time after glFinish. Should fix a few crashes and timeouts with the perf tests. Bug: angleproject:2923 Change-Id: I9ba1c042dee31cf2400ccbeedca0d497ed52fb12 Reviewed-on: https://chromium-review.googlesource.com/c/1343677 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill f3acb8c1 2018-11-14T16:24:25 Retool perf test running. This change does a few things involving the way we run the perf tests: - Perf test runner can capture different metrics Useful for capturing the new "nanoSecPerIteration" metric. - Removes the "score" metric We'll move to the new time-based metrics. These new metrics are scaled correctly with iteration counts. - Runs three trials per perf test This gives more measurements per test. Each trial is approximately one second. First the perf tests set a fixed number of iterations after calibrating the number of steps that we can run in one second. After that the three trials are run. This should give more stable results. - Apply more CPU stabilization on Windows Use SetPriorityClass to apply more CPU priority. Also upgrade SetThreadPriority to the highest level. - Always build the Vulkan command buffer test This catches build regressions more easily. We still skip the test on non-Android platforms. Bug: angleproject:2923 Change-Id: I7da234c5af07775ba4a232bb8d65e0138ee7073f Reviewed-on: https://chromium-review.googlesource.com/c/1330262 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 557a1ee4 2018-10-30T17:26:24 Make perf tests faster in correctness-only mode. When running with "--one-frame-only" we can also skip the test warmup. Also we can reduce the internal iteration count to 1 to make the tests as fast as possible. Bug: angleproject:2923 Change-Id: I2f82ae0dd237767ea7b15074e459ed1094ba9943 Reviewed-on: https://chromium-review.googlesource.com/c/1308737 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 3402d523 2018-10-30T15:14:52 Try to reduce variance in angle_perftests. This change does a few things: - make perf test runner script print % variation instead of stddev This makes it a bit more clear how much variance there is. - stabilize CPU in the render perf tests Setting a thread affinity and priority should stop from switching cores during the run. Hopefully can prevent background noise from changing the test results. - warm up the benchmark with a few iterations This should hopefully make the test results a bit more stable. - output a new normalized perf result value The new result is normalized against the number of iterations. So it should hopefully be stable even if the number of iterations is changed. - increases the iteration count in the draw call perf tests. These tests were completely dominated by SwapBuffers time. Increasing the iterations per step means we actually are bottlenecked on CPU time instead. Bug: angleproject:2923 Change-Id: I5ee347cf93df239ac33b83dc5effe4c21e066736 Reviewed-on: https://chromium-review.googlesource.com/c/1303679 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 0ea96210 2018-10-30T15:14:51 Vulkan: Enable more perf tests. Also fixes the check for the correct UINT index extension that wasn't available on Vulkan. Also includes a workaround for the mock ICD not implementing buffer state for index ranges. Bug: angleproject:2923 Change-Id: Iab35809d15f890525a9e658d4148272c46cf1320 Reviewed-on: https://chromium-review.googlesource.com/c/1308733 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 25224e78 2018-10-22T11:56:02 Vulkan: add GPU trace events RendererVk now tries, as best as it can, to match the CPU and GPU timers on init as well as every finish(). A clock-sync event is generated for each such synchronization point. RendererVk::traceGpuEvent() is a new function that, given a command buffer, performs timestamp queries corresponding to GPU events. These queries are read back when done, without incurring GPU bubbles, at which point an event is generated with that timestamp. Bug: angleproject:2908 Change-Id: I08d7d11ff9f8ad6c9f9a9899767c9cd746d0623e Reviewed-on: https://chromium-review.googlesource.com/c/1296954 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 4024e217 2018-10-17T14:53:29 perftests: Record trace events to JSON file. This allows us to view the timeline of events in the trace event browser. We can extend this to do GPU timestamp queries and analyze when work is actually in flight. The trace is enabled in standalone ANGLE only using the flag --enable-trace with angle_perftests. You can also optionally specify the trace output file with --trace-file <blah>. The default file is ANGLETrace.json. Bug: angleproject:2781 Change-Id: I871f28545d9bf18220b55aaf69e9554dcb4c834d Reviewed-on: https://chromium-review.googlesource.com/c/1259763 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Geoff Lang c801e359 2017-11-21T13:53:48 Add configurations of the TexturePerf benchmark that use robust init. BUG=angleproject:2188 Change-Id: Ia23b54044a85435c761478bceeb9aac961fac0d1 Reviewed-on: https://chromium-review.googlesource.com/783230 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill 981f0f8f 2017-09-21T09:07:41 Add flag to do a fast pass through perf tests. This flag will only render the first frame of each perf test, regardless of their preferences for how many seconds to run. It will be useful for speeding up the run time of the perf tests on testing infrastructure that only cares about correctness. BUG=chromium:725308 BUG=chromium:765321 Change-Id: I926f488c42f27ef23ef06a0159902613cff04080 Reviewed-on: https://chromium-review.googlesource.com/677306 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Martin Radev fca78130 2017-09-06T13:51:39 Extend multiview perf tests to cover all extension code paths The ANGLE_multiview extension can be supported with three possible code paths - through view being selected in the vertex shader on D3D and OpenGL, and through the view being selected in the geometry shader on D3D only. This patch extends the multi-view performance tests to benchmark these three different code paths. BUG=angleproject:2062 TEST=angle_end2end_tests Change-Id: I443e4db64a95eede1142718a43a095ee5a03738c Reviewed-on: https://chromium-review.googlesource.com/652466 Commit-Queue: Martin Radev <mradev@nvidia.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Martin Radev 6a6199b4 2017-06-05T17:30:55 Add multiview performance tests The patch adds two tests to measure the performance of the ANGLE_multiview extension implementation: 1) The first test renders onto two views by issuing thousands of state changes and draw calls. The aim of the test is to stress the CPU. 2) The second test renders onto two views by drawing with one draw call half a million quads with multiple attributes per vertex. The attributes are passed to the fragment shader where they are used for computing the color. The aim of the test is to stress the GPU's memory system. The patch also extends the ANGLEPerfTest's functionality to only run the benchmark if the necessary extensions are available. BUG=angleproject:2062 TEST=angle_end2end_tests Change-Id: Ic63d54a69fdddb72439eeeb1951a500fb1247e95 Reviewed-on: https://chromium-review.googlesource.com/597630 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Jamie Madill 3764b257 2017-02-15T10:41:31 Vulkan: Run simple triangle perf test. The most basic perf test possible. BUG=angleproject:xxxx Change-Id: I71b28098c0a1f2174a0177b08bddf74d337438e9 Reviewed-on: https://chromium-review.googlesource.com/427270 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Hans Wennborg e1743f37 2016-01-06T05:24:22 Clang warning fixes This fixes member initialization order and unused private member warnings that broke the Clang build after the last Angle roll. BUG=82385 Change-Id: If866f352bda6d66093c180fdbec6c16bf902b628 Reviewed-on: https://chromium-review.googlesource.com/320466 Reviewed-by: Nico Weber <thakis@chromium.org> Tryjob-Request: Nico Weber <thakis@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Tryjob-Request: Geoff Lang <geofflang@chromium.org> Tested-by: Nico Weber <thakis@chromium.org>
Corentin Wallez 7ee40d1a 2016-01-04T08:37:00 Fix compilation failures on OSX standalone builds BUG= Change-Id: Ifd40ae30d601227caf550546fcffc286cf533a73 Reviewed-on: https://chromium-review.googlesource.com/320290 Tryjob-Request: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>
Olli Etuaho 8047f065 2015-12-15T17:54:42 Improve perf testing framework The ANGLERenderTest subclasses have a parameter "iterations". Previously most of these tests would perform iterations^2 iterations, since the looping was done both in ANGLERenderTest and in the individual test classes. Do the looping only in the individual test classes instead. This enables getting rid of separate beginDrawBenchmark() and endDrawBenchmark() functions. Some other unused code is also removed: 1. stepBenchmark function 2. unused parameters to step() This makes the core loop of running tests simpler. The perf testing framework also now has shared logic for deciding when to end a given test. The score calculation for tests is also changed. Instead of reporting just the number of operations done, it is reported relative to the actual run time of the test. This should make the test results more accurate, since run time of the tests may have some variation. It also enables changing the run time of the tests without rebaselining them. In the tests that use GPU, GPU operations are also waited to finish before stopping the timer. BUG=angleproject:1261 TEST=angle_perftests Change-Id: I69e9aad8afd2d9dedd60e144f0a5d4203618feef Reviewed-on: https://chromium-review.googlesource.com/319381 Tryjob-Request: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Olli Etuaho fecbed9f 2015-12-17T12:01:12 Fix code style in perf tests 1) Format switch/case with git cl format 2) Change NULL -> nullptr 3) Change int to GLint where appropriate 4) Use more appropriate variants of asserts BUG=angleproject:1261 TEST=angle_perftests Change-Id: I97d6260dbd72ef3897fff145682b7043bf323b76 Reviewed-on: https://chromium-review.googlesource.com/319380 Tryjob-Request: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 5ade8459 2015-09-02T11:00:30 Properly check for EGL_KHR_create_context before creating ES3 context. Mark EGL_KHR_create_context as supported in the DisplayGLs. BUG=angleproject:1149 Change-Id: I20671535680eb2c3b9c08205cee243b3aa5c5821 Reviewed-on: https://chromium-review.googlesource.com/297080 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>
Corentin Wallez f3357ee2 2015-07-22T14:10:19 EGLWindow: remove the unused width and height EGLWindow does nothing with it per se, but some code was relying on it to store it. Add width and height to ANGLETest and SampleApplication instead. Also fix a typo in PerfTestParams, widowWidth -> windowWidth. BUG=angleproject:1105 Change-Id: I26da607a2e6342864b508a50ee3cf8944608f868 Reviewed-on: https://chromium-review.googlesource.com/287379 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>
Jamie Madill 9e582b93 2015-06-22T11:18:32 perf_tests: Normalize MS counts in EGL init test. The un-normalized values depend on the number of frames rendered, so if we optimize down one time, the other ms values all increase, because we are rendering more frames. This generates spurious perf alerts from the perf dashboard. BUG=None Change-Id: I1bc480141a8cad7eee96bcdf4d6747a3cbae30f2 Reviewed-on: https://chromium-review.googlesource.com/280980 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang dd323e95 2015-06-09T15:16:31 Only run tests that the current hardware can support. For each config, determine if a context can be created at test instantiation time. This allows skipping of ES3 tests when the hardware does not support ES3. Updated the perf_tests to use the EGLPlatformParameters struct so that they can be filtered in the same way. Change-Id: If664604b057cec4005eb4b63bebd83cd4964b7b2 Reviewed-on: https://chromium-review.googlesource.com/276460 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>
Corentin Wallez b45a80db 2015-05-21T10:39:43 Make perftests use ANGLE_INSTANTIATE_TEST This also moves ANGLE_INSTANTIATE_TEST to its own header and makes it generic over the type of test parameter. BUG=angleproject:892 Change-Id: Id4e3929d7ad06964b3259015915be84a8ee414f9 Reviewed-on: https://chromium-review.googlesource.com/272553 Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>
Jamie Madill 3c8870a1 2015-04-20T16:00:15 perf_tests: Use 'score' units. The dashboard automatically marks 'frames' as 'lower is better', while 'score' is automatically marked as 'higher is better'. Hence, use score instead of frames. BUG=468852 Change-Id: I02b3a9e4b74989793d4bfbf21a94e43670b3e028 Reviewed-on: https://chromium-review.googlesource.com/266522 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 304dcde8 2015-04-15T14:26:36 perftests: Use gtest asserts macro helpers. We still were using the old cassert code, with a boolean return value on our initialization code. We can make use of the gtest macros and helpers to check for a successful init or GL errors. BUG=476658 Change-Id: I09cbb3d40748cbeaf530ae8f23fb8a1b07e7611f Reviewed-on: https://chromium-review.googlesource.com/265837 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Brandon Jones <bajones@chromium.org>
Jamie Madill 835be965 2015-04-13T14:17:49 perf_tests: Only print final score result. Don't print all the other measurements and values, since they'll just add noise to the perf bot dashboards. Also increase the run time of the DrawCallPerfTest to 10.0 seconds. BUG=angleproject:744 BUG=468852 Change-Id: If076055ad46b4e6923f39687edcaa25930b188a7 Reviewed-on: https://chromium-review.googlesource.com/265464 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 514df7f7 2015-03-27T09:46:42 Remove uses of std::unique_ptr in perftests. This is disallowed in Chromium because it isn't currently portable. We can put it back later if the rules change. BUG=angleproject:956 Change-Id: I5be28590f494719b8cc995739dde26726283fced Reviewed-on: https://chromium-review.googlesource.com/262777 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Brandon Jones <bajones@chromium.org>
Geoff Lang 7afd4617 2015-03-30T10:56:05 Disable vsync for perf tests and don't report the total time. BUG=angleproject:955 Change-Id: I8223349622531c8fff7c7cd45bdf4754d7619ae2 Reviewed-on: https://chromium-review.googlesource.com/263062 Tested-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 9bd4dbef 2015-03-27T09:46:40 Split ANGLEPerfTest into a Render and basic test. The basic test we can use for perf testing internal classes with mocks. The render tests are more specific to doing draw calls. BUG=angleproject:956 Change-Id: Iade393facc30c8d7288b1b94a159ce3afe993021 Reviewed-on: https://chromium-review.googlesource.com/262775 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 19a43dbe 2015-03-20T16:14:04 Add a perf test for draw call overhead. These perf tests use the D3D NULL renderers to measure pure CPU time, with no GPU limitations. Also fix our D3D9 SwapChain code to skip creating a SwapChain for NULLREF D3D9 devices, and the vertex decl code to reinitialize the formats when finding a mismatch with the previous value. BUG=angleproject:955 Change-Id: I449e63177b48afd1559c36244de0bc252814e813 Reviewed-on: https://chromium-review.googlesource.com/262208 Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill be13ffca 2015-03-19T13:42:16 Use google test to wrap our perf tests. This provides easy implementation with the Chromium perf bots. BUG=angleproject:744 Change-Id: I71c04e3d67cae9344ddca9fd95fd3c9849494922 Reviewed-on: https://chromium-review.googlesource.com/260644 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>