Ignore:
Timestamp:
Apr 11, 2022, 1:10:44 PM (3 years ago)
Author:
[email protected]
Message:

[JSC] Reduce use of unnecessary cryptographicallyRandom numbers
https://bugs.webkit.org/show_bug.cgi?id=239026

Reviewed by Saam Barati.

Source/JavaScriptCore:

This patch removes cryptographically random calls in some of super hot critical path.
MarkedBlock's use is very hot and it appears on Speedometer2 artrace. But this is just
a random shuffling of freelist, and WeakRandom is enough for that. This patch replaces
them with WeakRandom. It offers 0.3% improvement in Speedometer2.

  • assembler/AbstractMacroAssembler.cpp:

(JSC::AbstractMacroAssemblerBase::initializeRandom):
(WTF::printInternal):

  • assembler/AbstractMacroAssembler.h:

(JSC::AbstractMacroAssemblerBase::random):
(JSC::AbstractMacroAssembler::AbstractMacroAssembler):
(JSC::AbstractMacroAssembler::random): Deleted.

  • b3/air/AirCode.cpp:

(JSC::B3::Air::Code::Code):

  • b3/air/AirCode.h:

(JSC::B3::Air::Code::weakRandom): Deleted.

  • heap/MarkedBlockInlines.h:

(JSC::MarkedBlock::Handle::specializedSweep):

  • runtime/VM.cpp:

(JSC::VM::VM):

  • runtime/VM.h:

(JSC::VM::heapRandom):

Source/WebCore:

We use createVersion4UUIDStringWeak since there is no need to use cryptographically random numbers for KeyframeEffect names.

  • animation/KeyframeEffect.cpp:

(WebCore::KeyframeEffect::copyPropertiesFromSource):
(WebCore::KeyframeEffect::updateBlendingKeyframes):
(WebCore::KeyframeEffect::computeCSSTransitionBlendingKeyframes):

Source/WTF:

We add createVersion4UUIDStringWeak, which can generate UUID with WeakRandom numbers.

  • wtf/UUID.cpp:

(WTF::convertRandomUInt128ToUUIDVersion4):
(WTF::generateCryptographicallyRandomUUIDVersion4):
(WTF::generateWeakRandomUUIDVersion4):
(WTF::UUID::UUID):
(WTF::createVersion4UUIDStringWeak):

  • wtf/UUID.h:
  • wtf/WeakRandom.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h

    r292540 r292714  
    7575        return Success;
    7676    }
     77
     78protected:
     79    uint32_t random()
     80    {
     81        if (!m_randomSource)
     82            initializeRandom();
     83        return m_randomSource->getUint32();
     84    }
     85
     86private:
     87    JS_EXPORT_PRIVATE void initializeRandom();
     88
     89    std::optional<WeakRandom> m_randomSource;
    7790};
    7891
     
    10081021protected:
    10091022    AbstractMacroAssembler()
    1010         : m_randomSource(0)
    1011         , m_assembler()
     1023        : m_assembler()
    10121024    {
    10131025        invalidateAllTempRegisters();
    10141026    }
    10151027
    1016     uint32_t random()
    1017     {
    1018         if (!m_randomSourceIsInitialized) {
    1019             m_randomSourceIsInitialized = true;
    1020             m_randomSource.setSeed(cryptographicallyRandomNumber());
    1021         }
    1022         return m_randomSource.getUint32();
    1023     }
    1024 
    1025     bool m_randomSourceIsInitialized { false };
    1026     WeakRandom m_randomSource;
    10271028public:
    10281029    AssemblerType m_assembler;
Note: See TracChangeset for help on using the changeset viewer.