Changeset 110382 in webkit


Ignore:
Timestamp:
Mar 10, 2012 10:44:59 AM (12 years ago)
Author:
Martin Robinson
Message:

[WK2] run-perf-tests should be able to run with WTR
https://bugs.webkit.org/show_bug.cgi?id=80042

Patch by Zan Dobersek <zandobersek@gmail.com> on 2012-03-09
Reviewed by Martin Robinson.

Add an option to PerfTestRunner to use WebKitTestRunner instead of
DumpRenderTree and add the '--no-timeout' flag to WebKitTestRunner
to avoid timing out when running performance tests.

  • Scripts/webkitpy/performance_tests/perftestsrunner.py:

(PerfTestsRunner._parse_args):

  • WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:

(WTR::InjectedBundle::InjectedBundle): Initialize m_useWaitToDumpWatchdogTimer
to true.
(WTR::InjectedBundle::didReceiveMessage): Unpack the 'BeginTest' message
as a dictionary containing DumpPixels and UseWaitToDumpWatchdogTimer keys.

  • WebKitTestRunner/InjectedBundle/InjectedBundle.h:

(WTR::InjectedBundle::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
publicly accessible.

  • WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:

(WTR::LayoutTestController::waitUntilDone): Only initialize the watchdog if it
is required.

  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::TestController): Initialize m_useWaitToDumpWatchdogTimer
to true.
(WTR::TestController::initialize): Set m_useWaitToDumpWatchdogTimer to false
if '--no-timeout' option is present.
(WTR::TestController::runUntil): Translate TimeoutDuration to a proper timeout
value, or -1.0 if timeout should not occur.

  • WebKitTestRunner/TestController.h:

(WTR::TestController::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
publicly accessible.

  • WebKitTestRunner/TestInvocation.cpp:

(WTR::TestInvocation::invoke): Pack the 'BeginTest' message as a dictionary,
containing DumpPixels and UseWaitToDumpWatchdogTimer keys and corresponding values.
Waiting for final message should not time out if not necessary.

  • WebKitTestRunner/gtk/TestControllerGtk.cpp:

(WTR::TestController::platformRunUntil): Only set up a timeout if necessary.

  • WebKitTestRunner/qt/TestControllerQt.cpp:

(WTR::TestController::platformRunUntil): Ditto.

  • WebKitTestRunner/mac/TestControllerMac.mm:

(WTR::TestController::platformRunUntil): Add a FIXME, indicating functionality
is missing.

  • WebKitTestRunner/win/TestControllerWin.cpp:

(WTR::TestController::platformRunUntil): Ditto.

Location:
trunk/Tools
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r110381 r110382  
     12012-03-09  Zan Dobersek  <zandobersek@gmail.com>
     2
     3        [WK2] run-perf-tests should be able to run with WTR
     4        https://bugs.webkit.org/show_bug.cgi?id=80042
     5
     6        Reviewed by Martin Robinson.
     7
     8        Add an option to PerfTestRunner to use WebKitTestRunner instead of
     9        DumpRenderTree and add the '--no-timeout' flag to WebKitTestRunner
     10        to avoid timing out when running performance tests.
     11
     12        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
     13        (PerfTestsRunner._parse_args):
     14        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
     15        (WTR::InjectedBundle::InjectedBundle): Initialize m_useWaitToDumpWatchdogTimer
     16        to true.
     17        (WTR::InjectedBundle::didReceiveMessage): Unpack the 'BeginTest' message
     18        as a dictionary containing DumpPixels and UseWaitToDumpWatchdogTimer keys.
     19        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
     20        (WTR::InjectedBundle::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
     21        publicly accessible.
     22        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
     23        (WTR::LayoutTestController::waitUntilDone): Only initialize the watchdog if it
     24        is required.
     25        * WebKitTestRunner/TestController.cpp:
     26        (WTR::TestController::TestController): Initialize m_useWaitToDumpWatchdogTimer
     27        to true.
     28        (WTR::TestController::initialize): Set m_useWaitToDumpWatchdogTimer to false
     29        if '--no-timeout' option is present.
     30        (WTR::TestController::runUntil): Translate TimeoutDuration to a proper timeout
     31        value, or -1.0 if timeout should not occur.
     32        * WebKitTestRunner/TestController.h:
     33        (WTR::TestController::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
     34        publicly accessible.
     35        * WebKitTestRunner/TestInvocation.cpp:
     36        (WTR::TestInvocation::invoke): Pack the 'BeginTest' message as a dictionary,
     37        containing DumpPixels and UseWaitToDumpWatchdogTimer keys and corresponding values.
     38        Waiting for final message should not time out if not necessary.
     39        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
     40        (WTR::TestController::platformRunUntil): Only set up a timeout if necessary.
     41        * WebKitTestRunner/qt/TestControllerQt.cpp:
     42        (WTR::TestController::platformRunUntil): Ditto.
     43        * WebKitTestRunner/mac/TestControllerMac.mm:
     44        (WTR::TestController::platformRunUntil): Add a FIXME, indicating functionality
     45        is missing.
     46        * WebKitTestRunner/win/TestControllerWin.cpp:
     47        (WTR::TestController::platformRunUntil): Ditto.
     48
    1492012-03-09  Jon Lee  <jonlee@apple.com>
    250
  • trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py

    r109482 r110382  
    100100            optparse.make_option("--test-results-server",
    101101                help="Upload the generated JSON file to the specified server when --output-json-path is present"),
     102            optparse.make_option("--webkit-test-runner", "-2", action="store_true",
     103                help="Use WebKitTestRunner rather than DumpRenderTree."),
    102104            ]
    103105
  • trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp

    r100488 r110382  
    5252    , m_state(Idle)
    5353    , m_dumpPixels(false)
     54    , m_useWaitToDumpWatchdogTimer(true)
    5455{
    5556}
     
    132133    if (WKStringIsEqualToUTF8CString(messageName, "BeginTest")) {
    133134        ASSERT(messageBody);
    134         ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());
    135         m_dumpPixels = WKBooleanGetValue(static_cast<WKBooleanRef>(messageBody));
     135        ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID());
     136        WKDictionaryRef messageBodyDictionary = static_cast<WKDictionaryRef>(messageBody);
     137
     138        WKRetainPtr<WKStringRef> dumpPixelsKey(AdoptWK, WKStringCreateWithUTF8CString("DumpPixels"));
     139        m_dumpPixels = WKBooleanGetValue(static_cast<WKBooleanRef>(WKDictionaryGetItemForKey(messageBodyDictionary, dumpPixelsKey.get())));
     140
     141        WKRetainPtr<WKStringRef> useWaitToDumpWatchdogTimerKey(AdoptWK, WKStringCreateWithUTF8CString("UseWaitToDumpWatchdogTimer"));
     142        m_useWaitToDumpWatchdogTimer = WKBooleanGetValue(static_cast<WKBooleanRef>(WKDictionaryGetItemForKey(messageBodyDictionary, useWaitToDumpWatchdogTimerKey.get())));
    136143
    137144        WKRetainPtr<WKStringRef> ackMessageName(AdoptWK, WKStringCreateWithUTF8CString("Ack"));
  • trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h

    r100488 r110382  
    7777
    7878    bool shouldDumpPixels() const { return m_dumpPixels; }
     79    bool useWaitToDumpWatchdogTimer() const { return m_useWaitToDumpWatchdogTimer; }
    7980   
    8081    void postNewBeforeUnloadReturnValue(bool);
     
    126127
    127128    bool m_dumpPixels;
     129    bool m_useWaitToDumpWatchdogTimer;
    128130
    129131    WKRetainPtr<WKImageRef> m_pixelResult;
  • trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp

    r106005 r110382  
    151151{
    152152    m_waitToDump = true;
    153     initializeWaitToDumpWatchdogTimerIfNeeded();
     153    if (InjectedBundle::shared().useWaitToDumpWatchdogTimer())
     154        initializeWaitToDumpWatchdogTimerIfNeeded();
    154155}
    155156
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r108643 r110382  
    4747static const double defaultLongTimeout = 30;
    4848static const double defaultShortTimeout = 5;
     49static const double defaultNoTimeout = -1;
    4950
    5051static WKURLRef blankURL()
     
    7374    , m_longTimeout(defaultLongTimeout)
    7475    , m_shortTimeout(defaultShortTimeout)
     76    , m_noTimeout(defaultNoTimeout)
     77    , m_useWaitToDumpWatchdogTimer(true)
    7578    , m_didPrintWebProcessCrashedMessage(false)
    7679    , m_shouldExitWhenWebProcessCrashes(true)
     
    249252        }
    250253
     254        if (argument == "--no-timeout") {
     255            m_useWaitToDumpWatchdogTimer = false;
     256            continue;
     257        }
     258
    251259        if (argument == "--skip-pixel-test-if-no-baseline") {
    252260            m_skipPixelTestOption = true;
     
    538546void TestController::runUntil(bool& done, TimeoutDuration timeoutDuration)
    539547{
    540     platformRunUntil(done, timeoutDuration == ShortTimeout ? m_shortTimeout : m_longTimeout);
     548    double timeout;
     549    switch (timeoutDuration) {
     550    case ShortTimeout:
     551        timeout = m_shortTimeout;
     552        break;
     553    case LongTimeout:
     554        timeout = m_longTimeout;
     555        break;
     556    case NoTimeout:
     557    default:
     558        timeout = m_noTimeout;
     559        break;
     560    }
     561
     562    platformRunUntil(done, timeout);
    541563}
    542564
  • trunk/Tools/WebKitTestRunner/TestController.h

    r107113 r110382  
    5555
    5656    // Runs the run loop until `done` is true or the timeout elapses.
    57     enum TimeoutDuration { ShortTimeout, LongTimeout };
     57    enum TimeoutDuration { ShortTimeout, LongTimeout, NoTimeout };
     58    bool useWaitToDumpWatchdogTimer() { return m_useWaitToDumpWatchdogTimer; }
    5859    void runUntil(bool& done, TimeoutDuration);
    5960    void notifyDone();
     
    128129    double m_longTimeout;
    129130    double m_shortTimeout;
     131    double m_noTimeout;
     132    bool m_useWaitToDumpWatchdogTimer;
    130133
    131134    bool m_didPrintWebProcessCrashedMessage;
  • trunk/Tools/WebKitTestRunner/TestInvocation.cpp

    r109509 r110382  
    141141
    142142    WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("BeginTest"));
    143     WKRetainPtr<WKBooleanRef> dumpPixels = adoptWK(WKBooleanCreate(m_dumpPixels));
    144     WKContextPostMessageToInjectedBundle(TestController::shared().context(), messageName.get(), dumpPixels.get());
     143    WKRetainPtr<WKMutableDictionaryRef> beginTestMessageBody = adoptWK(WKMutableDictionaryCreate());
     144
     145    WKRetainPtr<WKStringRef> dumpPixelsKey = adoptWK(WKStringCreateWithUTF8CString("DumpPixels"));
     146    WKRetainPtr<WKBooleanRef> dumpPixelsValue = adoptWK(WKBooleanCreate(m_dumpPixels));
     147    WKDictionaryAddItem(beginTestMessageBody.get(), dumpPixelsKey.get(), dumpPixelsValue.get());
     148
     149    WKRetainPtr<WKStringRef> useWaitToDumpWatchdogTimerKey = adoptWK(WKStringCreateWithUTF8CString("UseWaitToDumpWatchdogTimer"));
     150    WKRetainPtr<WKBooleanRef> useWaitToDumpWatchdogTimerValue = adoptWK(WKBooleanCreate(TestController::shared().useWaitToDumpWatchdogTimer()));
     151    WKDictionaryAddItem(beginTestMessageBody.get(), useWaitToDumpWatchdogTimerKey.get(), useWaitToDumpWatchdogTimerValue.get());
     152
     153    WKContextPostMessageToInjectedBundle(TestController::shared().context(), messageName.get(), beginTestMessageBody.get());
    145154
    146155    TestController::shared().runUntil(m_gotInitialResponse, TestController::ShortTimeout);
     
    159168    WKPageLoadURL(TestController::shared().mainWebView()->page(), m_url.get());
    160169
    161     TestController::shared().runUntil(m_gotFinalMessage, TestController::LongTimeout);
     170    TestController::shared().runUntil(m_gotFinalMessage, TestController::shared().useWaitToDumpWatchdogTimer() ? TestController::LongTimeout : TestController::NoTimeout);
    162171    if (!m_gotFinalMessage)
    163172        dump("Timed out waiting for final message from web process\n");
  • trunk/Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp

    r89616 r110382  
    6565{
    6666    cancelTimeout();
    67     gTimeoutSourceId = g_timeout_add(timeout * 1000, timeoutCallback, 0);
     67    if (timeout != m_noTimeout)
     68        gTimeoutSourceId = g_timeout_add(timeout * 1000, timeoutCallback, 0);
    6869    gtk_main();
    6970}
  • trunk/Tools/WebKitTestRunner/mac/TestControllerMac.mm

    r81140 r110382  
    5454void TestController::platformRunUntil(bool& done, double timeout)
    5555{
     56    // FIXME: No timeout should occur if timeout is equal to m_noTimeout (necessary when running performance tests).
    5657    CFAbsoluteTime end = CFAbsoluteTimeGetCurrent() + timeout;
    5758    CFDateRef endDate = CFDateCreate(0, end);
  • trunk/Tools/WebKitTestRunner/qt/TestControllerQt.cpp

    r103329 r110382  
    5656void TestController::platformRunUntil(bool& condition, double timeout)
    5757{
    58     if (qgetenv("QT_WEBKIT2_DEBUG") == "1") {
    59         // Never timeout if we are debugging.
     58    if (qgetenv("QT_WEBKIT2_DEBUG") == "1" || timeout == m_noTimeout) {
     59        // Never timeout if we are debugging or not meant to timeout.
    6060        while (!condition)
    6161            QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents, 50);
  • trunk/Tools/WebKitTestRunner/win/TestControllerWin.cpp

    r81135 r110382  
    173173void TestController::platformRunUntil(bool& done, double timeout)
    174174{
     175    // FIXME: No timeout should occur if timeout is equal to m_noTimeout (necessary when running performance tests).
    175176    RunLoopResult result = runRunLoopUntil(done, webProcessCrashingEvent, timeout);
    176177    if (result == TimedOut || result == ConditionSatisfied)
Note: See TracChangeset for help on using the changeset viewer.