Hash :
c0d806b4
        
        Author :
  
        
        Date :
2025-02-10T23:01:33
        
      
CL: OpenCL support for ANGLE Capture/Replay Implementation of OpenCL Capture/Replay tool in ANGLE. Brief notes about the change: - Most meaningful changes for the capture process are made in src/libANGLE/capture/ - Most meaningful changes for replay are made in util/capture/ and src/tests/perf_tests/ - Many autogenerated files are changed/added to allow the capture of OpenCL objects & calls - The following applications were captured/replayed: benchmark_model, GeekBench Compute, GeekBench ML, AI-Benchmark, various OCL CTS tests - End2end test added to capture_tests. CapturedTestCL.MultiFrameCL/ES3_Vulkan Bug: angleproject:383841335 Change-Id: I55fdaa6cd6c7ba740aaa2351e4d29050059d6d1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6102105 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
//
// Copyright 2025 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.
//
// ANGLEComputeTestCL:
//   Base class for ANGLEComputeTestCL performance tests
//
#include "ANGLEComputeTestCL.h"
#include "ANGLEPerfTestArgs.h"
#include "common/system_utils.h"
#include "util/shader_utils.h"
#include "util/test_utils.h"
#include <string>
using namespace angle;
ANGLEComputeTestCL::ANGLEComputeTestCL(const std::string &name,
                                       const RenderTestParams &testParams,
                                       const char *units)
    : ANGLEPerfTest(name,
                    testParams.backend(),
                    testParams.story(),
                    OneFrame() ? 1 : testParams.iterationsPerStep,
                    units),
      mTestParams(testParams)
{
    // Force fast tests to make sure our slowest bots don't time out.
    if (OneFrame())
    {
        const_cast<RenderTestParams &>(testParams).iterationsPerStep = 1;
    }
}
ANGLEComputeTestCL::~ANGLEComputeTestCL() {}
void ANGLEComputeTestCL::step()
{
    drawBenchmark();
    // Sample system memory
    uint64_t processMemoryUsageKB = GetProcessMemoryUsageKB();
    if (processMemoryUsageKB)
    {
        mProcessMemoryUsageKBSamples.push_back(processMemoryUsageKB);
    }
}
void ANGLEComputeTestCL::SetUp()
{
    if (mSkipTest)
    {
        return;
    }
    // Set a consistent CPU core affinity and high priority.
    StabilizeCPUForBenchmarking();
    initializeBenchmark();
    ANGLEPerfTest::SetUp();
}
void ANGLEComputeTestCL::TearDown()
{
    ANGLEPerfTest::TearDown();
}
void ANGLEComputeTestCL::updatePerfCounters()
{
    if (mPerfCounterInfo.empty())
    {
        return;
    }
    std::vector<PerfMonitorTriplet> perfData = GetPerfMonitorTriplets();
    ASSERT(!perfData.empty());
    for (auto &iter : mPerfCounterInfo)
    {
        uint32_t counter               = iter.first;
        std::vector<GLuint64> &samples = iter.second.samples;
        samples.push_back(perfData[counter].value);
    }
}