Ignore:
Timestamp:
Apr 15, 2019, 3:23:38 PM (6 years ago)
Author:
Tadeu Zagallo
Message:

Bytecode cache should not encode the SourceProvider for UnlinkedFunctionExecutable's classSource
https://bugs.webkit.org/show_bug.cgi?id=196878

Reviewed by Saam Barati.

Every time we encode an (Unlinked)SourceCode, we encode its SourceProvider,
including the full source if it's a StringSourceProvider. This wasn't an issue,
since the SourceCode contains a RefPtr to the SourceProvider, and the Encoder
would avoid encoding the provider multiple times. With the addition of the
incremental cache, each UnlinkedFunctionCodeBlock is encoded in isolation, which
means we can no longer deduplicate it and the full program text was being encoded
multiple times in the cache.
As a work around, this patch adds a custom cached type for encoding the SourceCode
without its provider, and later injects the SourceProvider through the Decoder.

  • parser/SourceCode.h:
  • parser/UnlinkedSourceCode.h:

(JSC::UnlinkedSourceCode::provider const):

  • runtime/CachedTypes.cpp:

(JSC::Decoder::Decoder):
(JSC::Decoder::create):
(JSC::Decoder::provider const):
(JSC::CachedSourceCodeWithoutProvider::encode):
(JSC::CachedSourceCodeWithoutProvider::decode const):
(JSC::decodeCodeBlockImpl):

  • runtime/CachedTypes.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/UnlinkedSourceCode.h

    r243163 r244300  
    3737        template<typename SourceType>
    3838        friend class CachedUnlinkedSourceCodeShape;
     39        friend class CachedSourceCodeWithoutProvider;
    3940
    4041    public:
     
    7475        bool isHashTableDeletedValue() const { return m_provider.isHashTableDeletedValue(); }
    7576
    76         const SourceProvider& provider() const
     77        SourceProvider& provider() const
    7778        {
    7879            return *m_provider;
Note: See TracChangeset for help on using the changeset viewer.