1*8975f5c5SAndroid Build Coastguard Worker// 2*8975f5c5SAndroid Build Coastguard Worker// Copyright 2015 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_ios.mm: Implementation of iOS-specific functions for OSX 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 <array> 18*8975f5c5SAndroid Build Coastguard Worker#include <cstdlib> 19*8975f5c5SAndroid Build Coastguard Worker#include <vector> 20*8975f5c5SAndroid Build Coastguard Worker 21*8975f5c5SAndroid Build Coastguard Worker#import <Foundation/Foundation.h> 22*8975f5c5SAndroid Build Coastguard Worker 23*8975f5c5SAndroid Build Coastguard Workernamespace angle 24*8975f5c5SAndroid Build Coastguard Worker{ 25*8975f5c5SAndroid Build Coastguard Workerstd::string GetExecutablePath() 26*8975f5c5SAndroid Build Coastguard Worker{ 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Worker NSString *executableString = [[NSBundle mainBundle] executablePath]; 29*8975f5c5SAndroid Build Coastguard Worker std::string result([executableString UTF8String]); 30*8975f5c5SAndroid Build Coastguard Worker return result; 31*8975f5c5SAndroid Build Coastguard Worker} 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Workerstd::string GetExecutableDirectory() 34*8975f5c5SAndroid Build Coastguard Worker{ 35*8975f5c5SAndroid Build Coastguard Worker std::string executablePath = GetExecutablePath(); 36*8975f5c5SAndroid Build Coastguard Worker size_t lastPathSepLoc = executablePath.find_last_of("/"); 37*8975f5c5SAndroid Build Coastguard Worker return (lastPathSepLoc != std::string::npos) ? executablePath.substr(0, lastPathSepLoc) : ""; 38*8975f5c5SAndroid Build Coastguard Worker} 39*8975f5c5SAndroid Build Coastguard Worker 40*8975f5c5SAndroid Build Coastguard Workerconst char *GetSharedLibraryExtension() 41*8975f5c5SAndroid Build Coastguard Worker{ 42*8975f5c5SAndroid Build Coastguard Worker return "dylib"; 43*8975f5c5SAndroid Build Coastguard Worker} 44*8975f5c5SAndroid Build Coastguard Worker 45*8975f5c5SAndroid Build Coastguard Workerdouble GetCurrentTime() 46*8975f5c5SAndroid Build Coastguard Worker{ 47*8975f5c5SAndroid Build Coastguard Worker mach_timebase_info_data_t timebaseInfo; 48*8975f5c5SAndroid Build Coastguard Worker mach_timebase_info(&timebaseInfo); 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard Worker double secondCoeff = timebaseInfo.numer * 1e-9 / timebaseInfo.denom; 51*8975f5c5SAndroid Build Coastguard Worker return secondCoeff * mach_absolute_time(); 52*8975f5c5SAndroid Build Coastguard Worker} 53*8975f5c5SAndroid Build Coastguard Worker} // namespace angle 54