Changeset 215471 in webkit


Ignore:
Timestamp:
Apr 18, 2017 10:54:26 AM (7 years ago)
Author:
msaboff@apple.com
Message:

REGRESSION(215272): microbenchmark/seal-and-do-work and microbenchmark/freeze-and-do-work are 27x slower
https://bugs.webkit.org/show_bug.cgi?id=170881

Reviewed by Saam Barati.

  • runtime/ObjectConstructor.cpp:

(JSC::objectConstructorSeal):
(JSC::objectConstructorFreeze):
Restored fast paths for final objects that don't have indexed properties.

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r215466 r215471  
     12017-04-18  Michael Saboff  <msaboff@apple.com>
     2
     3        REGRESSION(215272): microbenchmark/seal-and-do-work and microbenchmark/freeze-and-do-work are 27x slower
     4        https://bugs.webkit.org/show_bug.cgi?id=170881
     5
     6        Reviewed by Saam Barati.
     7
     8        * runtime/ObjectConstructor.cpp:
     9        (JSC::objectConstructorSeal):
     10        (JSC::objectConstructorFreeze):
     11        Restored fast paths for final objects that don't have indexed properties.
     12
    1132017-04-18  Yusuke Suzuki  <utatane.tea@gmail.com>
    214
  • trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp

    r215272 r215471  
    609609    JSObject* object = asObject(obj);
    610610
     611    if (isJSFinalObject(object) && !hasIndexedProperties(object->indexingType())) {
     612        object->seal(vm);
     613        return JSValue::encode(obj);
     614    }
     615
    611616    bool success = setIntegrityLevel<IntegrityLevel::Sealed>(exec, vm, object);
    612617    RETURN_IF_EXCEPTION(scope, encodedJSValue());
     
    623628    VM& vm = exec->vm();
    624629    auto scope = DECLARE_THROW_SCOPE(vm);
     630
     631    if (isJSFinalObject(object) && !hasIndexedProperties(object->indexingType())) {
     632        object->freeze(vm);
     633        return object;
     634    }
    625635
    626636    bool success = setIntegrityLevel<IntegrityLevel::Frozen>(exec, vm, object);
     
    665675    JSObject* object = asObject(obj);
    666676
     677    // Quick check for final objects.
     678    if (isJSFinalObject(object) && !hasIndexedProperties(object->indexingType()))
     679        return JSValue::encode(jsBoolean(object->isSealed(vm)));
     680
    667681    // 2. Return ? TestIntegrityLevel(O, "sealed").
    668682    return JSValue::encode(jsBoolean(testIntegrityLevel<IntegrityLevel::Sealed>(exec, vm, object)));
     
    678692        return JSValue::encode(jsBoolean(true));
    679693    JSObject* object = asObject(obj);
     694
     695    // Quick check for final objects.
     696    if (isJSFinalObject(object) && !hasIndexedProperties(object->indexingType()))
     697        return JSValue::encode(jsBoolean(object->isFrozen(vm)));
    680698
    681699    // 2. Return ? TestIntegrityLevel(O, "frozen").
Note: See TracChangeset for help on using the changeset viewer.