Edit

kc3-lang/angle/util/posix/test_utils_posix.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2019-10-20 21:44:36
    Hash : f939cb63
    Message : Revert "Reland "Add more test_utils functions."" This reverts commit 7923e234bc458eda5936b8cb4f09fa19e28c0452. Reason for revert: Fails compilation on rollers: [2097/6048] SOLINK ./lib_angle_unittests__library.cr.so FAILED: lib_angle_unittests__library.cr.so lib_angle_unittests__library.cr.so.TOC lib.unstripped/lib_angle_unittests__library.cr.so python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="../../third_party/android_ndk/toolch...(too long) ld.lld: error: undefined symbol: glCreateShader >>> referenced by shader_utils.cpp >>> angle_util_static/shader_utils.o:(CompileShader(unsigned int, char const*)) in archive obj/third_party/angle/libangle_util_static.a ld.lld: error: undefined symbol: glShaderSource Original change's description: > Reland "Add more test_utils functions." > > This is a reland of 5fcfcea4a9379633a83a67fc1d94938cb31f2a9c > > Re-land uses static linking with angle_util. The root cause > of the CFI error wasn't solved. Static linking works around > the problem by not using any export rules. > > Original change's description: > > Add more test_utils functions. > > > > Includes methods for creating temporary files, deleting files, and > > reading files into a string. Also renames GetPathSeparator to mention > > it's only used for environment variables. Includes a new virtual type > > angle::Process that will be used to implement cross-platform async > > Process launching for tests. Also includes a way to specify a custom > > crash handler callback. > > > > Also adds a few unit tests for the new functionality. They are disabled > > on Android because the functions are not needed by the new test runner. > > > > Bug: angleproject:3162 > > Change-Id: I3e2c2e9837608884c98379fa0f78c9ffbe158d73 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1821940 > > Commit-Queue: Jamie Madill <jmadill@chromium.org> > > Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> > > Bug: chromium:1015810 > Bug: angleproject:3162 > Change-Id: I6a2c1e7b585a13ca846759f32da0777c00d7f7e6 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1869541 > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=ynovikov@chromium.org,jonahr@google.com,jmadill@chromium.org Change-Id: I975b2214411906cb981bffa04fa50e0a65ff8b4e No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:1015810, angleproject:3162 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1870811 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • util/posix/test_utils_posix.cpp
  • //
    // Copyright 2015 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.
    //
    
    // test_utils_posix.cpp: Implementation of OS-specific functions for Posix systems
    
    #include "util/test_utils.h"
    
    #include <errno.h>
    #include <sched.h>
    #include <time.h>
    #include <unistd.h>
    #include <cstdarg>
    
    #include "common/platform.h"
    
    #if !defined(ANGLE_PLATFORM_FUCHSIA)
    #    include <dlfcn.h>
    #    include <sys/resource.h>
    #    include <sys/stat.h>
    #    include <sys/types.h>
    #    include <sys/wait.h>
    #endif
    
    namespace angle
    {
    void Sleep(unsigned int milliseconds)
    {
        // On Windows Sleep(0) yields while it isn't guaranteed by Posix's sleep
        // so we replicate Windows' behavior with an explicit yield.
        if (milliseconds == 0)
        {
            sched_yield();
        }
        else
        {
            timespec sleepTime = {
                .tv_sec  = milliseconds / 1000,
                .tv_nsec = (milliseconds % 1000) * 1000000,
            };
    
            nanosleep(&sleepTime, nullptr);
        }
    }
    
    void SetLowPriorityProcess()
    {
    #if !defined(ANGLE_PLATFORM_FUCHSIA)
        setpriority(PRIO_PROCESS, getpid(), 10);
    #endif
    }
    
    void WriteDebugMessage(const char *format, ...)
    {
        va_list vararg;
        va_start(vararg, format);
        vfprintf(stderr, format, vararg);
        va_end(vararg);
    }
    
    bool StabilizeCPUForBenchmarking()
    {
    #if !defined(ANGLE_PLATFORM_FUCHSIA)
        bool success = true;
        errno        = 0;
        setpriority(PRIO_PROCESS, getpid(), -20);
        if (errno)
        {
            // A friendly warning in case the test was run without appropriate permission.
            perror(
                "Warning: setpriority failed in StabilizeCPUForBenchmarking. Process will retain "
                "default priority");
            success = false;
        }
    #    if ANGLE_PLATFORM_LINUX
        cpu_set_t affinity;
        CPU_SET(0, &affinity);
        errno = 0;
        if (sched_setaffinity(getpid(), sizeof(affinity), &affinity))
        {
            perror(
                "Warning: sched_setaffinity failed in StabilizeCPUForBenchmarking. Process will retain "
                "default affinity");
            success = false;
        }
    #    else
        // TODO(jmadill): Implement for non-linux. http://anglebug.com/2923
    #    endif
    
        return success;
    #else  // defined(ANGLE_PLATFORM_FUCHSIA)
        return false;
    #endif
    }
    }  // namespace angle