Ignore:
Timestamp:
Nov 9, 2009, 7:39:19 PM (16 years ago)
Author:
[email protected]
Message:

Some manual inlining and constant propogation in Date code.

Reviewed by Sam Weinig.

SunSpider reports a 0.4% speedup on date-*, no overall speedup. Shark
says some previously evident stalls are now gone.

  • runtime/DateConstructor.cpp:

(JSC::callDate):

  • runtime/DateConversion.cpp:

(JSC::formatTime):
(JSC::formatTimeUTC): Split formatTime into UTC and non-UTC variants.

  • runtime/DateConversion.h:
  • runtime/DateInstance.cpp:

(JSC::DateInstance::calculateGregorianDateTime):
(JSC::DateInstance::calculateGregorianDateTimeUTC):

  • runtime/DateInstance.h:

(JSC::DateInstance::gregorianDateTime):
(JSC::DateInstance::gregorianDateTimeUTC): Split gregorianDateTime into
a UTC and non-UTC variant, and split each variant into a fast inline
case and a slow out-of-line case.

  • runtime/DatePrototype.cpp:

(JSC::formatLocaleDate):
(JSC::dateProtoFuncToString):
(JSC::dateProtoFuncToUTCString):
(JSC::dateProtoFuncToISOString):
(JSC::dateProtoFuncToDateString):
(JSC::dateProtoFuncToTimeString):
(JSC::dateProtoFuncGetFullYear):
(JSC::dateProtoFuncGetUTCFullYear):
(JSC::dateProtoFuncToGMTString):
(JSC::dateProtoFuncGetMonth):
(JSC::dateProtoFuncGetUTCMonth):
(JSC::dateProtoFuncGetDate):
(JSC::dateProtoFuncGetUTCDate):
(JSC::dateProtoFuncGetDay):
(JSC::dateProtoFuncGetUTCDay):
(JSC::dateProtoFuncGetHours):
(JSC::dateProtoFuncGetUTCHours):
(JSC::dateProtoFuncGetMinutes):
(JSC::dateProtoFuncGetUTCMinutes):
(JSC::dateProtoFuncGetSeconds):
(JSC::dateProtoFuncGetUTCSeconds):
(JSC::dateProtoFuncGetTimezoneOffset):
(JSC::setNewValueFromTimeArgs):
(JSC::setNewValueFromDateArgs):
(JSC::dateProtoFuncSetYear):
(JSC::dateProtoFuncGetYear): Updated for the gregorianDateTime change above.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/DateInstance.cpp

    r50608 r50708  
    4747}
    4848
    49 const GregorianDateTime* DateInstance::gregorianDateTime(ExecState* exec, bool outputIsUTC) const
     49const GregorianDateTime* DateInstance::calculateGregorianDateTime(ExecState* exec) const
    5050{
    5151    double milli = internalNumber();
     
    5656        m_data = exec->globalData().dateInstanceCache.add(milli);
    5757
    58     if (outputIsUTC) {
    59         if (m_data->m_gregorianDateTimeUTCCachedForMS != milli) {
    60             msToGregorianDateTime(exec, internalNumber(), true, m_data->m_cachedGregorianDateTimeUTC);
    61             m_data->m_gregorianDateTimeUTCCachedForMS = milli;
    62         }
    63         return &m_data->m_cachedGregorianDateTimeUTC;
    64     }
    65 
    6658    if (m_data->m_gregorianDateTimeCachedForMS != milli) {
    67         msToGregorianDateTime(exec, internalNumber(), false, m_data->m_cachedGregorianDateTime);
     59        msToGregorianDateTime(exec, milli, false, m_data->m_cachedGregorianDateTime);
    6860        m_data->m_gregorianDateTimeCachedForMS = milli;
    6961    }
     
    7163}
    7264
     65const GregorianDateTime* DateInstance::calculateGregorianDateTimeUTC(ExecState* exec) const
     66{
     67    double milli = internalNumber();
     68    if (isnan(milli))
     69        return 0;
     70
     71    if (!m_data)
     72        m_data = exec->globalData().dateInstanceCache.add(milli);
     73
     74    if (m_data->m_gregorianDateTimeUTCCachedForMS != milli) {
     75        msToGregorianDateTime(exec, milli, true, m_data->m_cachedGregorianDateTimeUTC);
     76        m_data->m_gregorianDateTimeUTCCachedForMS = milli;
     77    }
     78    return &m_data->m_cachedGregorianDateTimeUTC;
     79}
     80
    7381} // namespace JSC
Note: See TracChangeset for help on using the changeset viewer.