OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #if SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX || SK_BUILD_FOR_ANDROID | 8 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_
FOR_ANDROID) |
9 # include <unistd.h> | 9 # include <unistd.h> |
10 # include <sys/time.h> | 10 # include <sys/time.h> |
11 # include <dirent.h> | 11 # include <dirent.h> |
12 #endif | 12 #endif |
13 | 13 |
14 #if SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX | 14 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) |
15 # include <glob.h> | 15 # include <glob.h> |
16 #endif | 16 #endif |
17 | 17 |
18 #if SK_BUILD_FOR_MAC | 18 #if defined(SK_BUILD_FOR_MAC) |
19 # include <sys/syslimits.h> // PATH_MAX is here for Macs | 19 # include <sys/syslimits.h> // PATH_MAX is here for Macs |
20 #endif | 20 #endif |
21 | 21 |
22 #if SK_BUILD_FOR_WIN32 | 22 #if defined(SK_BUILD_FOR_WIN32) |
23 # include <windows.h> | 23 # include <windows.h> |
24 #endif | 24 #endif |
25 | 25 |
26 #include <stdlib.h> | 26 #include <stdlib.h> |
27 #include <time.h> | 27 #include <time.h> |
28 #include "SkOSFile.h" | 28 #include "SkOSFile.h" |
29 #include "skpdiff_util.h" | 29 #include "skpdiff_util.h" |
30 | 30 |
31 #if SK_SUPPORT_OPENCL | 31 #if SK_SUPPORT_OPENCL |
32 const char* cl_error_to_string(cl_int err) { | 32 const char* cl_error_to_string(cl_int err) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 case CL_INVALID_BUFFER_SIZE: return "CL_INVALID_BUFFER_SIZE"
; | 78 case CL_INVALID_BUFFER_SIZE: return "CL_INVALID_BUFFER_SIZE"
; |
79 case CL_INVALID_MIP_LEVEL: return "CL_INVALID_MIP_LEVEL"; | 79 case CL_INVALID_MIP_LEVEL: return "CL_INVALID_MIP_LEVEL"; |
80 default: return "UNKNOWN"; | 80 default: return "UNKNOWN"; |
81 } | 81 } |
82 return "UNKNOWN"; | 82 return "UNKNOWN"; |
83 } | 83 } |
84 #endif | 84 #endif |
85 | 85 |
86 // TODO refactor Timer to be used here | 86 // TODO refactor Timer to be used here |
87 double get_seconds() { | 87 double get_seconds() { |
88 #if SK_BUILD_FOR_WIN32 | 88 #if defined(SK_BUILD_FOR_WIN32) |
89 LARGE_INTEGER currentTime; | 89 LARGE_INTEGER currentTime; |
90 LARGE_INTEGER frequency; | 90 LARGE_INTEGER frequency; |
91 QueryPerformanceCounter(¤tTime); | 91 QueryPerformanceCounter(¤tTime); |
92 QueryPerformanceFrequency(&frequency); | 92 QueryPerformanceFrequency(&frequency); |
93 return (double)currentTime.QuadPart / (double)frequency.QuadPart; | 93 return (double)currentTime.QuadPart / (double)frequency.QuadPart; |
94 #elif _POSIX_TIMERS > 0 && defined(CLOCK_REALTIME) | 94 #elif _POSIX_TIMERS > 0 && defined(CLOCK_REALTIME) |
95 struct timespec currentTime; | 95 struct timespec currentTime; |
96 clock_gettime(CLOCK_REALTIME, ¤tTime); | 96 clock_gettime(CLOCK_REALTIME, ¤tTime); |
97 return currentTime.tv_sec + (double)currentTime.tv_nsec / 1e9; | 97 return currentTime.tv_sec + (double)currentTime.tv_nsec / 1e9; |
98 #elif SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX || SK_BUILD_FOR_ANDROID | 98 #elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUIL
D_FOR_ANDROID) |
99 struct timeval currentTime; | 99 struct timeval currentTime; |
100 gettimeofday(¤tTime, NULL); | 100 gettimeofday(¤tTime, NULL); |
101 return currentTime.tv_sec + (double)currentTime.tv_usec / 1e6; | 101 return currentTime.tv_sec + (double)currentTime.tv_usec / 1e6; |
102 #else | 102 #else |
103 return clock() / (double)CLOCKS_PER_SEC; | 103 return clock() / (double)CLOCKS_PER_SEC; |
104 #endif | 104 #endif |
105 } | 105 } |
106 | 106 |
107 bool get_directory(const char path[], SkTArray<SkString>* entries) { | 107 bool get_directory(const char path[], SkTArray<SkString>* entries) { |
108 #if SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX || SK_BUILD_FOR_ANDROID | 108 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_
FOR_ANDROID) |
109 // Open the directory and check for success | 109 // Open the directory and check for success |
110 DIR* dir = opendir(path); | 110 DIR* dir = opendir(path); |
111 if (NULL == dir) { | 111 if (NULL == dir) { |
112 return false; | 112 return false; |
113 } | 113 } |
114 | 114 |
115 // Loop through dir entries until there are none left (i.e. readdir returns
NULL) | 115 // Loop through dir entries until there are none left (i.e. readdir returns
NULL) |
116 struct dirent* entry; | 116 struct dirent* entry; |
117 while ((entry = readdir(dir))) { | 117 while ((entry = readdir(dir))) { |
118 // dirent only gives relative paths, we need to join them to the base pa
th to check if they | 118 // dirent only gives relative paths, we need to join them to the base pa
th to check if they |
119 // are directories. | 119 // are directories. |
120 SkString joinedPath = SkOSPath::Join(path, entry->d_name); | 120 SkString joinedPath = SkOSPath::Join(path, entry->d_name); |
121 | 121 |
122 // We only care about files | 122 // We only care about files |
123 if (!sk_isdir(joinedPath.c_str())) { | 123 if (!sk_isdir(joinedPath.c_str())) { |
124 entries->push_back(SkString(entry->d_name)); | 124 entries->push_back(SkString(entry->d_name)); |
125 } | 125 } |
126 } | 126 } |
127 | 127 |
128 closedir(dir); | 128 closedir(dir); |
129 | 129 |
130 return true; | 130 return true; |
131 #elif SK_BUILD_FOR_WIN32 | 131 #elif defined(SK_BUILD_FOR_WIN32) |
132 char pathDirGlob[MAX_PATH]; | 132 char pathDirGlob[MAX_PATH]; |
133 size_t pathLength = strlen(path); | 133 size_t pathLength = strlen(path); |
134 strncpy(pathDirGlob, path, pathLength); | 134 strncpy(pathDirGlob, path, pathLength); |
135 | 135 |
136 if (path[pathLength - 1] == '/' || path[pathLength - 1] == '\\') { | 136 if (path[pathLength - 1] == '/' || path[pathLength - 1] == '\\') { |
137 SkASSERT(pathLength + 2 <= MAX_PATH); | 137 SkASSERT(pathLength + 2 <= MAX_PATH); |
138 pathDirGlob[pathLength] = '*'; | 138 pathDirGlob[pathLength] = '*'; |
139 pathDirGlob[pathLength + 1] = '\0'; | 139 pathDirGlob[pathLength + 1] = '\0'; |
140 } else { | 140 } else { |
141 SkASSERT(pathLength + 3 <= MAX_PATH); | 141 SkASSERT(pathLength + 3 <= MAX_PATH); |
(...skipping 15 matching lines...) Expand all Loading... |
157 } while (FindNextFile(hFind, &findFileData) != 0); | 157 } while (FindNextFile(hFind, &findFileData) != 0); |
158 | 158 |
159 FindClose(hFind); | 159 FindClose(hFind); |
160 return true; | 160 return true; |
161 #else | 161 #else |
162 return false; | 162 return false; |
163 #endif | 163 #endif |
164 } | 164 } |
165 | 165 |
166 bool glob_files(const char globPattern[], SkTArray<SkString>* entries) { | 166 bool glob_files(const char globPattern[], SkTArray<SkString>* entries) { |
167 #if SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX | 167 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) |
168 // TODO Make sure this works on windows. This may require use of FindNextFil
e windows function. | 168 // TODO Make sure this works on windows. This may require use of FindNextFil
e windows function. |
169 glob_t globBuffer; | 169 glob_t globBuffer; |
170 if (glob(globPattern, 0, NULL, &globBuffer) != 0) { | 170 if (glob(globPattern, 0, NULL, &globBuffer) != 0) { |
171 return false; | 171 return false; |
172 } | 172 } |
173 | 173 |
174 // Note these paths are in sorted order by default according to http://linux
.die.net/man/3/glob | 174 // Note these paths are in sorted order by default according to http://linux
.die.net/man/3/glob |
175 // Check under the flag GLOB_NOSORT | 175 // Check under the flag GLOB_NOSORT |
176 char** paths = globBuffer.gl_pathv; | 176 char** paths = globBuffer.gl_pathv; |
177 while(*paths) { | 177 while(*paths) { |
178 entries->push_back(SkString(*paths)); | 178 entries->push_back(SkString(*paths)); |
179 paths++; | 179 paths++; |
180 } | 180 } |
181 | 181 |
182 globfree(&globBuffer); | 182 globfree(&globBuffer); |
183 | 183 |
184 return true; | 184 return true; |
185 #else | 185 #else |
186 return false; | 186 return false; |
187 #endif | 187 #endif |
188 } | 188 } |
189 | 189 |
190 SkString get_absolute_path(const SkString& path) { | 190 SkString get_absolute_path(const SkString& path) { |
191 #if SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX || SK_BUILD_FOR_ANDROID | 191 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_
FOR_ANDROID) |
192 SkString fullPath(PATH_MAX + 1); | 192 SkString fullPath(PATH_MAX + 1); |
193 if (realpath(path.c_str(), fullPath.writable_str()) == NULL) { | 193 if (realpath(path.c_str(), fullPath.writable_str()) == NULL) { |
194 fullPath.reset(); | 194 fullPath.reset(); |
195 } | 195 } |
196 return fullPath; | 196 return fullPath; |
197 #elif SK_BUILD_FOR_WIN32 | 197 #elif defined(SK_BUILD_FOR_WIN32) |
198 SkString fullPath(MAX_PATH); | 198 SkString fullPath(MAX_PATH); |
199 if (_fullpath(fullPath.writable_str(), path.c_str(), MAX_PATH) == NULL) { | 199 if (_fullpath(fullPath.writable_str(), path.c_str(), MAX_PATH) == NULL) { |
200 fullPath.reset(); | 200 fullPath.reset(); |
201 } | 201 } |
202 return fullPath; | 202 return fullPath; |
203 #else | 203 #else |
204 return SkString(); | 204 return SkString(); |
205 #endif | 205 #endif |
206 } | 206 } |
OLD | NEW |