1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2020 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 7*8975f5c5SAndroid Build Coastguard Worker // system_utils_apple.cpp: Implementation of OS-specific functions for Apple platforms 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #include "system_utils.h" 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker #include <unistd.h> 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include <CoreServices/CoreServices.h> 14*8975f5c5SAndroid Build Coastguard Worker #include <mach-o/dyld.h> 15*8975f5c5SAndroid Build Coastguard Worker #include <mach/mach.h> 16*8975f5c5SAndroid Build Coastguard Worker #include <mach/mach_time.h> 17*8975f5c5SAndroid Build Coastguard Worker #include <cstdlib> 18*8975f5c5SAndroid Build Coastguard Worker #include <vector> 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Worker #include <array> 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Worker namespace angle 23*8975f5c5SAndroid Build Coastguard Worker { GetExecutablePath()24*8975f5c5SAndroid Build Coastguard Workerstd::string GetExecutablePath() 25*8975f5c5SAndroid Build Coastguard Worker { 26*8975f5c5SAndroid Build Coastguard Worker std::string result; 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Worker uint32_t size = 0; 29*8975f5c5SAndroid Build Coastguard Worker _NSGetExecutablePath(nullptr, &size); 30*8975f5c5SAndroid Build Coastguard Worker 31*8975f5c5SAndroid Build Coastguard Worker std::vector<char> buffer; 32*8975f5c5SAndroid Build Coastguard Worker buffer.resize(size + 1); 33*8975f5c5SAndroid Build Coastguard Worker 34*8975f5c5SAndroid Build Coastguard Worker _NSGetExecutablePath(buffer.data(), &size); 35*8975f5c5SAndroid Build Coastguard Worker buffer[size] = '\0'; 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker if (!strrchr(buffer.data(), '/')) 38*8975f5c5SAndroid Build Coastguard Worker { 39*8975f5c5SAndroid Build Coastguard Worker return ""; 40*8975f5c5SAndroid Build Coastguard Worker } 41*8975f5c5SAndroid Build Coastguard Worker return buffer.data(); 42*8975f5c5SAndroid Build Coastguard Worker } 43*8975f5c5SAndroid Build Coastguard Worker GetExecutableDirectory()44*8975f5c5SAndroid Build Coastguard Workerstd::string GetExecutableDirectory() 45*8975f5c5SAndroid Build Coastguard Worker { 46*8975f5c5SAndroid Build Coastguard Worker std::string executablePath = GetExecutablePath(); 47*8975f5c5SAndroid Build Coastguard Worker size_t lastPathSepLoc = executablePath.find_last_of("/"); 48*8975f5c5SAndroid Build Coastguard Worker return (lastPathSepLoc != std::string::npos) ? executablePath.substr(0, lastPathSepLoc) : ""; 49*8975f5c5SAndroid Build Coastguard Worker } 50*8975f5c5SAndroid Build Coastguard Worker GetCurrentSystemTime()51*8975f5c5SAndroid Build Coastguard Workerdouble GetCurrentSystemTime() 52*8975f5c5SAndroid Build Coastguard Worker { 53*8975f5c5SAndroid Build Coastguard Worker mach_timebase_info_data_t timebaseInfo; 54*8975f5c5SAndroid Build Coastguard Worker mach_timebase_info(&timebaseInfo); 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker double secondCoeff = timebaseInfo.numer * 1e-9 / timebaseInfo.denom; 57*8975f5c5SAndroid Build Coastguard Worker return secondCoeff * mach_absolute_time(); 58*8975f5c5SAndroid Build Coastguard Worker } 59*8975f5c5SAndroid Build Coastguard Worker SetCurrentThreadName(const char * name)60*8975f5c5SAndroid Build Coastguard Workervoid SetCurrentThreadName(const char *name) 61*8975f5c5SAndroid Build Coastguard Worker { 62*8975f5c5SAndroid Build Coastguard Worker pthread_setname_np(name); 63*8975f5c5SAndroid Build Coastguard Worker } 64*8975f5c5SAndroid Build Coastguard Worker } // namespace angle 65