Bug 1581875 Comment 8 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

In the current state, I get the following profile:

```
Weight | Weight% | Self Weight | Symbol
------ | ------- | ----------- | ---------
11.68 s | 6.3% | 11.68 s | mozilla::Result<js::frontend::HuffmanLookup, JS::Error&> js::frontend::BinASTTokenReaderContext::BitBuffer::getHuffmanLookup<(js::frontend::BinASTTokenReaderContext::Compression)0>(js::frontend::BinASTTokenReaderContext&)
10.28 s | 5.6% | 10.28 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<JSAtom*, unsigned char>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<JSAtom*, unsigned char>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
8.24 s | 4.5% | 8.24 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<js::frontend::BinASTKind, unsigned char>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<js::frontend::BinASTKind, unsigned char>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
7.94 s | 4.3% | 7.94 s | js::frontend::TagReader::operator()(js::frontend::HuffmanTableIndexedSymbolsSum const&)
6.96 s | 3.8% | 6.96 s | js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>::lookup(js::frontend::HuffmanLookup) const
6.41 s | 3.5% | 6.41 s | js::frontend::BinASTTokenReaderContext::enterTaggedTuple(js::frontend::BinASTKind&, js::frontend::BinASTTokenReaderContext::BinASTFields&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&, js::frontend::BinASTTokenReaderContext::AutoTaggedTuple&)
4.29 s | 2.3% | 4.29 s | js::frontend::FunctionBox::FunctionBox(JSContext*, js::frontend::TraceListNode*, JSFunction*, unsigned int, js::frontend::Directives, bool, js::GeneratorKind, js::FunctionAsyncKind)
3.98 s | 2.1% | 3.98 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 0ul, js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString>::match<js::frontend::TagReader, mozilla::Variant<js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString> const>(js::frontend::TagReader&&, mozilla::Variant<js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString> const&)
3.91 s | 2.1% | 3.91 s | js::frontend::UsedNameTracker::noteUse(JSContext*, JSAtom*, unsigned int, unsigned int)
3.84 s | 2.1% | 3.84 s | mozilla::Result<js::frontend::HuffmanTableIndexedSymbolsLiteralString::Contents, JS::Error&> js::frontend::BinASTTokenReaderContext::readFieldFromTable<js::frontend::HuffmanTableIndexedSymbolsLiteralString>(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.67 s | 2.0% | 3.67 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceIdentifierExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.62 s | 1.9% | 3.62 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceStaticMemberExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.54 s | 1.9% | 3.54 s | bool GetUTF8AtomizationData<JS::WTF8Chars>(JSContext*, JS::WTF8Chars, unsigned long*, JS::SmallestEncoding*, unsigned int*)
3.48 s | 1.9% | 3.48 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<unsigned int, unsigned char>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<unsigned int, unsigned char>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
3.39 s | 1.8% | 3.39 s | js::frontend::ParseNodeAllocator::allocNode(unsigned long)
2.54 s | 1.3% | 2.54 s | JSAtom* AtomizeUTF8OrWTF8Chars<JS::WTF8Chars>(JSContext*, char const*, unsigned long)
2.41 s | 1.3% | 2.41 s | js::frontend::BinASTTokenReaderContext::enterList(unsigned int&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&, js::frontend::BinASTTokenReaderContext::AutoList&)
2.23 s | 1.2% | 2.23 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceCallExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
2.10 s | 1.1% | 2.10 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseArguments(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
2.02 s | 1.1% | 2.02 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceBinaryExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
1.96 s | 1.0% | 1.96 s | mozilla::Result<js::frontend::HuffmanTableIndexedSymbolsBool::Contents, JS::Error&> js::frontend::BinASTTokenReaderContext::readFieldFromTable<js::frontend::HuffmanTableIndexedSymbolsBool>(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
```
In the current state, I get the following profile:

```
Weight | Weight% | Self Weight | Symbol
------ | ------- | ----------- | ---------
11.68 s | 6.3% | 11.68 s | mozilla::Result<js::frontend::HuffmanLookup, JS::Error&> js::frontend::BinASTTokenReaderContext::BitBuffer::getHuffmanLookup<(js::frontend::BinASTTokenReaderContext::Compression)0>(js::frontend::BinASTTokenReaderContext&)
10.28 s | 5.6% | 10.28 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<JSAtom*, unsigned char>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<JSAtom*, unsigned char>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
8.24 s | 4.5% | 8.24 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<js::frontend::BinASTKind, unsigned char>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<js::frontend::BinASTKind, unsigned char>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
7.94 s | 4.3% | 7.94 s | js::frontend::TagReader::operator()(js::frontend::HuffmanTableIndexedSymbolsSum const&)
6.96 s | 3.8% | 6.96 s | js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>::lookup(js::frontend::HuffmanLookup) const
6.41 s | 3.5% | 6.41 s | js::frontend::BinASTTokenReaderContext::enterTaggedTuple(js::frontend::BinASTKind&, js::frontend::BinASTTokenReaderContext::BinASTFields&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&, js::frontend::BinASTTokenReaderContext::AutoTaggedTuple&)
4.29 s | 2.3% | 4.29 s | js::frontend::FunctionBox::FunctionBox(JSContext*, js::frontend::TraceListNode*, JSFunction*, unsigned int, js::frontend::Directives, bool, js::GeneratorKind, js::FunctionAsyncKind)
3.98 s | 2.1% | 3.98 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 0ul, js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString>::match<js::frontend::TagReader, mozilla::Variant<js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString> const>(js::frontend::TagReader&&, mozilla::Variant<js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString> const&)
3.91 s | 2.1% | 3.91 s | js::frontend::UsedNameTracker::noteUse(JSContext*, JSAtom*, unsigned int, unsigned int)
3.84 s | 2.1% | 3.84 s | mozilla::Result<js::frontend::HuffmanTableIndexedSymbolsLiteralString::Contents, JS::Error&> js::frontend::BinASTTokenReaderContext::readFieldFromTable<js::frontend::HuffmanTableIndexedSymbolsLiteralString>(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.67 s | 2.0% | 3.67 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceIdentifierExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.62 s | 1.9% | 3.62 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceStaticMemberExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.54 s | 1.9% | 3.54 s | bool GetUTF8AtomizationData<JS::WTF8Chars>(JSContext*, JS::WTF8Chars, unsigned long*, JS::SmallestEncoding*, unsigned int*)
3.48 s | 1.9% | 3.48 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<unsigned int, unsigned char>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<unsigned int, unsigned char>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
3.39 s | 1.8% | 3.39 s | js::frontend::ParseNodeAllocator::allocNode(unsigned long)
2.54 s | 1.3% | 2.54 s | JSAtom* AtomizeUTF8OrWTF8Chars<JS::WTF8Chars>(JSContext*, char const*, unsigned long)
2.41 s | 1.3% | 2.41 s | js::frontend::BinASTTokenReaderContext::enterList(unsigned int&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&, js::frontend::BinASTTokenReaderContext::AutoList&)
2.23 s | 1.2% | 2.23 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceCallExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
2.10 s | 1.1% | 2.10 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseArguments(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
2.02 s | 1.1% | 2.02 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceBinaryExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
1.96 s | 1.0% | 1.96 s | mozilla::Result<js::frontend::HuffmanTableIndexedSymbolsBool::Contents, JS::Error&> js::frontend::BinASTTokenReaderContext::readFieldFromTable<js::frontend::HuffmanTableIndexedSymbolsBool>(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
```

Decoding a bit, the worst offenders are:

- 6.3% fetching bits from the bit stream (should be faster once we merge with bug 1581052);
- 5.6% Huffman lookup for strings (all);
- 4.5% Huffman lookup for tagged tuples;
- 4.3% treating tagged tuples(?);
- 3.8% Huffman lookup for strings (very large tables);
- 3.5% entering tagged tuples.

So, next steps should probably be to work on:

- improving bit stream (bug 1581052);
- making lookup faster for small tables (tagged tuples);
- making lookup faster for large tables (strings).

Back to Bug 1581875 Comment 8