#ifndef COMMON_SYSTEM_UTILS_H_
#define COMMON_SYSTEM_UTILS_H_
#include "common/Optional.h"
#include "common/angleutils.h"
#include <functional>
#include <string>
#include <string_view>
namespace angle
{
std::string GetExecutableName();
std::string GetExecutablePath();
std::string GetExecutableDirectory();
std::string GetModuleDirectory();
const char *GetSharedLibraryExtension();
const char *GetExecutableExtension();
char GetPathSeparator();
Optional<std::string> GetCWD();
bool SetCWD(const char *dirName);
bool SetEnvironmentVar(const char *variableName, const char *value);
bool UnsetEnvironmentVar(const char *variableName);
bool GetBoolEnvironmentVar(const char *variableName);
std::string GetEnvironmentVar(const char *variableName);
std::string GetEnvironmentVarOrUnCachedAndroidProperty(const char *variableName,
const char *propertyName);
std::string GetAndSetEnvironmentVarOrUnCachedAndroidProperty(const char *variableName,
const char *propertyName);
std::string GetEnvironmentVarOrAndroidProperty(const char *variableName, const char *propertyName);
const char *GetPathSeparatorForEnvironmentVar();
bool PrependPathToEnvironmentVar(const char *variableName, const char *path);
bool IsDirectory(const char *filename);
bool IsFullPath(std::string dirName);
bool CreateDirectories(const std::string &path);
void MakeForwardSlashThePathSeparator(std::string &path);
std::string GetRootDirectory();
std::string ConcatenatePath(std::string first, std::string second);
Optional<std::string> GetTempDirectory();
Optional<std::string> CreateTemporaryFileInDirectory(const std::string &directory);
Optional<std::string> CreateTemporaryFile();
#if defined(ANGLE_PLATFORM_POSIX)
Optional<std::string> CreateTemporaryFileInDirectoryWithExtension(const std::string &directory,
const std::string &extension);
#endif
double GetCurrentSystemTime();
double GetCurrentProcessCpuTime();
uint64_t GetCurrentThreadUniqueId();
ThreadId GetCurrentThreadId();
ThreadId InvalidThreadId();
bool RunApp(const std::vector<const char *> &args,
std::string *stdoutOut,
std::string *stderrOut,
int *exitCodeOut);
enum class SearchType
{ … };
void *OpenSystemLibrary(const char *libraryName, SearchType searchType);
void *OpenSystemLibraryWithExtension(const char *libraryName, SearchType searchType);
void *OpenSystemLibraryAndGetError(const char *libraryName,
SearchType searchType,
std::string *errorOut);
void *OpenSystemLibraryWithExtensionAndGetError(const char *libraryName,
SearchType searchType,
std::string *errorOut);
void *GetLibrarySymbol(void *libraryHandle, const char *symbolName);
std::string GetLibraryPath(void *libraryHandle);
void CloseSystemLibrary(void *libraryHandle);
class Library : angle::NonCopyable
{ … };
Library *OpenSharedLibrary(const char *libraryName, SearchType searchType);
Library *OpenSharedLibraryWithExtension(const char *libraryName, SearchType searchType);
Library *OpenSharedLibraryAndGetError(const char *libraryName,
SearchType searchType,
std::string *errorOut);
Library *OpenSharedLibraryWithExtensionAndGetError(const char *libraryName,
SearchType searchType,
std::string *errorOut);
bool IsDebuggerAttached();
void BreakDebugger();
uint64_t GetProcessMemoryUsageKB();
bool ProtectMemory(uintptr_t start, size_t size);
bool UnprotectMemory(uintptr_t start, size_t size);
size_t GetPageSize();
enum class PageFaultHandlerRangeType
{ … };
PageFaultCallback;
class PageFaultHandler : angle::NonCopyable
{ … };
PageFaultHandler *CreatePageFaultHandler(PageFaultCallback callback);
#ifdef ANGLE_PLATFORM_WINDOWS
std::string Narrow(const std::wstring_view &utf16);
std::wstring Widen(const std::string_view &utf8);
#endif
std::string StripFilenameFromPath(const std::string &path);
#if defined(ANGLE_PLATFORM_LINUX) || defined(ANGLE_PLATFORM_WINDOWS)
ANGLE_INLINE ThreadId GetCurrentThreadId()
{ … }
ANGLE_INLINE ThreadId InvalidThreadId()
{ … }
#else
ANGLE_INLINE ThreadId GetCurrentThreadId()
{
return std::this_thread::get_id();
}
ANGLE_INLINE ThreadId InvalidThreadId()
{
return ThreadId();
}
#endif
void SetCurrentThreadName(const char *name);
}
#endif