xref: /aosp_15_r20/external/angle/src/common/system_utils_ios.mm (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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