Ignore:
Timestamp:
Mar 24, 2018, 12:04:18 PM (7 years ago)
Author:
Yusuke Suzuki
Message:

[JSC] Add options to report parsing and bytecode compiling times
https://bugs.webkit.org/show_bug.cgi?id=183982

Reviewed by Mark Lam.

This patch adds reportParseTimes and reportBytecodeCompileTimes options.
When they are enabled, JSC reports times consumed for parsing and bytecode
compiling.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • Sources.txt:
  • bytecode/ParseHash.cpp: Added.

(JSC::ParseHash::ParseHash):

  • bytecode/ParseHash.h: Added.

(JSC::ParseHash::hashForCall const):
(JSC::ParseHash::hashForConstruct const):

  • bytecode/UnlinkedFunctionExecutable.cpp:

(JSC::generateUnlinkedFunctionCodeBlock):

  • bytecompiler/BytecodeGenerator.h:

(JSC::BytecodeGenerator::generate):

  • parser/Parser.h:

(JSC::parse):

  • runtime/CodeCache.h:

(JSC::generateUnlinkedCodeBlock):

  • runtime/Options.h:
File:
1 edited

Legend:

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

    r229608 r229952  
    2727#include "ModuleScopeData.h"
    2828#include "Nodes.h"
     29#include "ParseHash.h"
    2930#include "ParserArena.h"
    3031#include "ParserError.h"
     
    19521953{
    19531954    ASSERT(!source.provider()->source().isNull());
     1955
     1956    MonotonicTime before;
     1957    if (UNLIKELY(Options::reportParseTimes()))
     1958        before = MonotonicTime::now();
     1959
     1960    std::unique_ptr<ParsedNode> result;
    19541961    if (source.provider()->source().is8Bit()) {
    19551962        Parser<Lexer<LChar>> parser(vm, source, builtinMode, strictMode, scriptMode, parseMode, superBinding, defaultConstructorKind, derivedContextType, isEvalNode<ParsedNode>(), evalContextType, debuggerParseData);
    1956         std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode);
     1963        result = parser.parse<ParsedNode>(error, name, parseMode);
    19571964        if (positionBeforeLastNewline)
    19581965            *positionBeforeLastNewline = parser.positionBeforeLastNewline();
    19591966        if (builtinMode == JSParserBuiltinMode::Builtin) {
    19601967            if (!result)
    1961                 WTF::dataLog("Error compiling builtin: ", error.message(), "\n");
    1962         }
    1963         return result;
    1964     }
    1965     ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, "BuiltinExecutables::createDefaultConstructor should always use a 8-bit string");
    1966     Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, scriptMode, parseMode, superBinding, defaultConstructorKind, derivedContextType, isEvalNode<ParsedNode>(), evalContextType, debuggerParseData);
    1967     std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode);
    1968     if (positionBeforeLastNewline)
    1969         *positionBeforeLastNewline = parser.positionBeforeLastNewline();
     1968                dataLogLn("Error compiling builtin: ", error.message());
     1969        }
     1970    } else {
     1971        ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, "BuiltinExecutables::createDefaultConstructor should always use a 8-bit string");
     1972        Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, scriptMode, parseMode, superBinding, defaultConstructorKind, derivedContextType, isEvalNode<ParsedNode>(), evalContextType, debuggerParseData);
     1973        result = parser.parse<ParsedNode>(error, name, parseMode);
     1974        if (positionBeforeLastNewline)
     1975            *positionBeforeLastNewline = parser.positionBeforeLastNewline();
     1976    }
     1977
     1978    if (UNLIKELY(Options::reportParseTimes())) {
     1979        MonotonicTime after = MonotonicTime::now();
     1980        ParseHash hash(source);
     1981        dataLogLn(result ? "Parsed #" : "Failed to parse #", hash.hashForCall(), "/#", hash.hashForConstruct(), " in ", (after - before).milliseconds(), " ms.");
     1982    }
     1983
    19701984    return result;
    19711985}
Note: See TracChangeset for help on using the changeset viewer.