Changeset 270665 in webkit
- Timestamp:
- Dec 10, 2020 8:20:19 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/PerformanceTests/APIBench/api-bench
r270659 r270665 38 38 UPCOMING_API=() 39 39 ARCHS=${ARCHS:-$(uname -m)} 40 CONFIGURATION=${CONFIGURATION:-Release} 40 41 41 42 shouldBuild=true … … 149 150 150 151 log "Building $BENCHMARK_NAME... (FRAMEWORK_SEARCH_PATHS='$BUILD_DIRECTORY')" 151 xcodebuild -project "$project" -target "$BENCHMARK_NAME" -configuration Releasebuild "FRAMEWORK_SEARCH_PATHS='$BUILD_DIRECTORY'" "ARCHS='$ARCHS'"152 xcodebuild -project "$project" -target "$BENCHMARK_NAME" -configuration "$CONFIGURATION" build "FRAMEWORK_SEARCH_PATHS='$BUILD_DIRECTORY'" "ARCHS='$ARCHS'" 152 153 } 153 154 … … 162 163 163 164 runNativeBenchmark() { 164 pushd "build/ Release" &> /dev/null165 pushd "build/$CONFIGURATION" &> /dev/null 165 166 "./$BENCHMARK_NAME" 167 local exitCode=$? 168 if [ $exitCode -ne 0 ]; then 169 echo "Benchmark exited with an error: $PWD/$BENCHMARK_NAME exited with $exitCode" 1>&2 170 fi 166 171 popd &> /dev/null 172 return $exitCode 167 173 } 168 174 … … 180 186 local result 181 187 result=$(runBenchmarkIteration) 188 if [ $? -ne 0 ]; then 189 exit 1 190 fi 182 191 RESULTS[$((BENCHMARK_ID * iterations + ITERATION))]=$result 183 192 log "Finished in ${result}ms" -
trunk/PerformanceTests/ChangeLog
r270659 r270665 1 2020-12-10 Tadeu Zagallo <tzagallo@apple.com> 2 3 Removing unnecessary locking from JSValue API functions 4 https://bugs.webkit.org/show_bug.cgi?id=219723 5 6 Reviewed by Filip Pizlo. 7 8 Print an error message when benchmarks fail to run and add option to change 9 the configuration used to build the benchmarks. 10 11 * APIBench/api-bench: 12 1 13 2020-12-10 Tadeu Zagallo <tzagallo@apple.com> 2 14 -
trunk/Source/JavaScriptCore/API/APICast.h
r251425 r270665 89 89 } 90 90 91 #if CPU(ADDRESS64) 92 inline JSC::JSValue toJS(JSValueRef value) 93 { 94 return bitwise_cast<JSC::JSValue>(value); 95 } 96 #endif 97 91 98 inline JSC::JSValue toJSForGC(JSC::JSGlobalObject* globalObject, JSValueRef v) 92 99 { … … 149 156 } 150 157 158 #if CPU(ADDRESS64) 159 inline JSValueRef toRef(JSC::JSValue v) 160 { 161 return bitwise_cast<JSValueRef>(v); 162 } 163 #endif 164 151 165 inline JSObjectRef toRef(JSC::JSObject* o) 152 166 { -
trunk/Source/JavaScriptCore/API/JSValue.mm
r260366 r270665 399 399 - (BOOL)isUndefined 400 400 { 401 #if !CPU(ADDRESS64) 401 402 return JSValueIsUndefined([_context JSGlobalContextRef], m_value); 403 #else 404 return toJS(m_value).isUndefined(); 405 #endif 402 406 } 403 407 404 408 - (BOOL)isNull 405 409 { 406 return JSValueIsNull([_context JSGlobalContextRef], m_value); 410 #if !CPU(ADDRESS64) 411 return JSValueIsUndefined([_context JSGlobalContextRef], m_value); 412 #else 413 return toJS(m_value).isNull(); 414 #endif 407 415 } 408 416 409 417 - (BOOL)isBoolean 410 418 { 411 return JSValueIsBoolean([_context JSGlobalContextRef], m_value); 419 #if !CPU(ADDRESS64) 420 return JSValueIsUndefined([_context JSGlobalContextRef], m_value); 421 #else 422 return toJS(m_value).isBoolean(); 423 #endif 412 424 } 413 425 414 426 - (BOOL)isNumber 415 427 { 416 return JSValueIsNumber([_context JSGlobalContextRef], m_value); 428 #if !CPU(ADDRESS64) 429 return JSValueIsUndefined([_context JSGlobalContextRef], m_value); 430 #else 431 return toJS(m_value).isNumber(); 432 #endif 417 433 } 418 434 419 435 - (BOOL)isString 420 436 { 421 return JSValueIsString([_context JSGlobalContextRef], m_value); 437 #if !CPU(ADDRESS64) 438 return JSValueIsUndefined([_context JSGlobalContextRef], m_value); 439 #else 440 return toJS(m_value).isString(); 441 #endif 422 442 } 423 443 424 444 - (BOOL)isObject 425 445 { 446 #if !CPU(ADDRESS64) 426 447 return JSValueIsObject([_context JSGlobalContextRef], m_value); 448 #else 449 return toJS(m_value).isObject(); 450 #endif 427 451 } 428 452 429 453 - (BOOL)isSymbol 430 454 { 455 #if !CPU(ADDRESS64) 431 456 return JSValueIsSymbol([_context JSGlobalContextRef], m_value); 457 #else 458 return toJS(m_value).isSymbol(); 459 #endif 432 460 } 433 461 -
trunk/Source/JavaScriptCore/API/JSValueRef.cpp
r270659 r270665 55 55 return kJSTypeUndefined; 56 56 } 57 JSGlobalObject* globalObject = toJS(ctx); 58 JSLockHolder locker(globalObject); 59 60 JSValue jsValue = toJS(globalObject, value); 57 #if !CPU(ADDRESS64) 58 JSGlobalObject* globalObject = toJS(ctx); 59 JSLockHolder locker(globalObject); 60 JSValue jsValue = toJS(globalObject, value); 61 #else 62 JSValue jsValue = toJS(value); 63 #endif 61 64 62 65 if (jsValue.isUndefined()) … … 82 85 return false; 83 86 } 84 JSGlobalObject* globalObject = toJS(ctx); 85 JS LockHolder locker(globalObject);86 87 #if !CPU(ADDRESS64) 88 JSGlobalObject* globalObject = toJS(ctx); 89 JSLockHolder locker(globalObject); 87 90 return toJS(globalObject, value).isUndefined(); 91 #else 92 return toJS(value).isUndefined(); 93 #endif 88 94 } 89 95 … … 94 100 return false; 95 101 } 96 JSGlobalObject* globalObject = toJS(ctx); 97 JSLockHolder locker(globalObject); 98 102 103 #if !CPU(ADDRESS64) 104 JSGlobalObject* globalObject = toJS(ctx); 105 JSLockHolder locker(globalObject); 99 106 return toJS(globalObject, value).isNull(); 107 #else 108 return toJS(value).isNull(); 109 #endif 100 110 } 101 111 … … 106 116 return false; 107 117 } 108 JSGlobalObject* globalObject = toJS(ctx); 109 JS LockHolder locker(globalObject);110 118 #if !CPU(ADDRESS64) 119 JSGlobalObject* globalObject = toJS(ctx); 120 JSLockHolder locker(globalObject); 111 121 return toJS(globalObject, value).isBoolean(); 122 #else 123 return toJS(value).isBoolean(); 124 #endif 112 125 } 113 126 … … 118 131 return false; 119 132 } 120 JSGlobalObject* globalObject = toJS(ctx); 121 JS LockHolder locker(globalObject);122 133 #if !CPU(ADDRESS64) 134 JSGlobalObject* globalObject = toJS(ctx); 135 JSLockHolder locker(globalObject); 123 136 return toJS(globalObject, value).isNumber(); 137 #else 138 return toJS(value).isNumber(); 139 #endif 124 140 } 125 141 … … 130 146 return false; 131 147 } 132 JSGlobalObject* globalObject = toJS(ctx); 133 JS LockHolder locker(globalObject);134 148 #if !CPU(ADDRESS64) 149 JSGlobalObject* globalObject = toJS(ctx); 150 JSLockHolder locker(globalObject); 135 151 return toJS(globalObject, value).isString(); 152 #else 153 return toJS(value).isString(); 154 #endif 136 155 } 137 156 … … 142 161 return false; 143 162 } 144 JSGlobalObject* globalObject = toJS(ctx); 145 JS LockHolder locker(globalObject);146 163 #if !CPU(ADDRESS64) 164 JSGlobalObject* globalObject = toJS(ctx); 165 JSLockHolder locker(globalObject); 147 166 return toJS(globalObject, value).isObject(); 167 #else 168 return toJS(value).isObject(); 169 #endif 148 170 } 149 171 … … 154 176 return false; 155 177 } 156 JSGlobalObject* globalObject = toJS(ctx); 157 JS LockHolder locker(globalObject);158 178 #if !CPU(ADDRESS64) 179 JSGlobalObject* globalObject = toJS(ctx); 180 JSLockHolder locker(globalObject); 159 181 return toJS(globalObject, value).isSymbol(); 182 #else 183 return toJS(value).isSymbol(); 184 #endif 160 185 } 161 186 … … 278 303 return nullptr; 279 304 } 280 JSGlobalObject* globalObject = toJS(ctx); 281 JS LockHolder locker(globalObject);282 305 #if !CPU(ADDRESS64) 306 JSGlobalObject* globalObject = toJS(ctx); 307 JSLockHolder locker(globalObject); 283 308 return toRef(globalObject, jsUndefined()); 309 #else 310 return toRef(jsUndefined()); 311 #endif 284 312 } 285 313 … … 290 318 return nullptr; 291 319 } 292 JSGlobalObject* globalObject = toJS(ctx); 293 JS LockHolder locker(globalObject);294 320 #if !CPU(ADDRESS64) 321 JSGlobalObject* globalObject = toJS(ctx); 322 JSLockHolder locker(globalObject); 295 323 return toRef(globalObject, jsNull()); 324 #else 325 return toRef(jsNull()); 326 #endif 296 327 } 297 328 … … 302 333 return nullptr; 303 334 } 304 JSGlobalObject* globalObject = toJS(ctx); 305 JS LockHolder locker(globalObject);306 335 #if !CPU(ADDRESS64) 336 JSGlobalObject* globalObject = toJS(ctx); 337 JSLockHolder locker(globalObject); 307 338 return toRef(globalObject, jsBoolean(value)); 339 #else 340 return toRef(jsBoolean(value)); 341 #endif 308 342 } 309 343 … … 314 348 return nullptr; 315 349 } 316 JSGlobalObject* globalObject = toJS(ctx); 317 JS LockHolder locker(globalObject);318 350 #if !CPU(ADDRESS64) 351 JSGlobalObject* globalObject = toJS(ctx); 352 JSLockHolder locker(globalObject); 319 353 return toRef(globalObject, jsNumber(purifyNaN(value))); 354 #else 355 return toRef(jsNumber(purifyNaN(value))); 356 #endif 320 357 } 321 358 -
trunk/Source/JavaScriptCore/ChangeLog
r270664 r270665 1 2020-12-10 Tadeu Zagallo <tzagallo@apple.com> 2 3 Removing unnecessary locking from JSValue API functions 4 https://bugs.webkit.org/show_bug.cgi?id=219723 5 6 Reviewed by Filip Pizlo. 7 8 Remove the unnecessary locking from the JSValueIs* and JSValueMake* API functions 9 that only work on primitives. Also remove the unnecessary method dispatching and 10 call from the -[JSValue is*] methods. 11 12 This improves the APIBench score by another ~8% since these are such common operations. 13 Here are the results: (Baseline includes https://bugs.webkit.org/show_bug.cgi?id=219663) 14 15 CURRENT_API: Baseline Change 16 ---------------------------------------- 17 RichardsMostlyC: 74ms 60ms 18 RichardsMostlyObjC: 304ms 300ms 19 RichardsMostlySwift: 305ms 293ms 20 RichardsSomeC: 97ms 77ms 21 RichardsSomeObjC: 158ms 159ms 22 RichardsSomeSwift: 202ms 198ms 23 24 UPCOMING_API: Baseline Change 25 ---------------------------------------- 26 RichardsMostlyC: 23ms 19ms 27 RichardsMostlyObjC: 282ms 282ms 28 RichardsMostlySwift: 280ms 282ms 29 RichardsSomeC: 95ms 76ms 30 RichardsSomeObjC: 157ms 156ms 31 RichardsSomeSwift: 202ms 197ms 32 ---------------------------------------- 33 Score: 33.6404 36.4006 34 35 * API/APICast.h: 36 (toRef): 37 * API/JSValue.mm: 38 (-[JSValue isUndefined]): 39 (-[JSValue isNull]): 40 (-[JSValue isBoolean]): 41 (-[JSValue isNumber]): 42 (-[JSValue isString]): 43 (-[JSValue isObject]): 44 (-[JSValue isSymbol]): 45 * API/JSValueRef.cpp: 46 (JSValueGetType): 47 (JSValueIsUndefined): 48 (JSValueIsNull): 49 (JSValueIsBoolean): 50 (JSValueIsNumber): 51 (JSValueIsString): 52 (JSValueIsObject): 53 (JSValueIsSymbol): 54 (JSValueMakeUndefined): 55 (JSValueMakeNull): 56 (JSValueMakeBoolean): 57 (JSValueMakeNumber): 58 1 59 2020-12-10 Alexey Shvayka <shvaikalesh@gmail.com> 2 60
Note: See TracChangeset
for help on using the changeset viewer.