Merge from Chromium at DEPS revision r205460
This commit was generated by merge_to_master.py.
Change-Id: Id50fcfa40590db3bd322348190cb5192c432eadf
diff --git a/Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp b/Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp
index c219cb1..b1e9c08 100644
--- a/Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp
+++ b/Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp
@@ -77,7 +77,7 @@
],
'dependencies': [
'TestRunner_resources',
- '<(source_dir)/WebKit/chromium/WebKit.gyp:webkit',
+ '../../../public/blink.gyp:blink',
'<(source_dir)/WebKit/chromium/WebKit.gyp:webkit_test_support',
],
'include_dirs': [
@@ -233,8 +233,8 @@
'dependencies': [
'TestRunner',
'DumpRenderTree_resources',
+ '../../../public/blink.gyp:blink',
'<(source_dir)/devtools/devtools.gyp:devtools_frontend_resources',
- '<(source_dir)/WebKit/chromium/WebKit.gyp:webkit',
'<(source_dir)/wtf/wtf.gyp:wtf',
'<(DEPTH)/base/base.gyp:test_support_base',
'<(DEPTH)/build/temp_gyp/googleurl.gyp:googleurl',
diff --git a/Tools/DumpRenderTree/chromium/DEPS b/Tools/DumpRenderTree/chromium/DEPS
new file mode 100644
index 0000000..4cf2544
--- /dev/null
+++ b/Tools/DumpRenderTree/chromium/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+public/platform",
+]
diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp b/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp
index 663f7ef..0d1ac7e 100644
--- a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp
+++ b/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp
@@ -37,7 +37,7 @@
#include "WebDevToolsAgent.h"
#include "WebView.h"
#include "webkit/support/webkit_support.h"
-#include <public/WebCString.h>
+#include "public/platform/WebCString.h"
using namespace WebKit;
using namespace WebTestRunner;
diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h b/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h
index 9b9b9f4..b97c29d 100644
--- a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h
+++ b/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h
@@ -33,7 +33,7 @@
#include "WebDevToolsAgentClient.h"
#include "WebTask.h"
-#include <public/WebString.h>
+#include "public/platform/WebString.h"
#include <wtf/HashMap.h>
#include <wtf/Noncopyable.h>
diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h b/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h
index 702660a..bb5f278 100644
--- a/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h
+++ b/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h
@@ -33,7 +33,7 @@
#include "WebDevToolsFrontendClient.h"
#include "WebTask.h"
-#include <public/WebString.h>
+#include "public/platform/WebString.h"
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
namespace WebKit {
diff --git a/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp b/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp
index 9913676..7b448fb 100644
--- a/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp
+++ b/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp
@@ -34,7 +34,7 @@
#include "MockPlatform.h"
#include "TestShell.h"
#include "webkit/support/webkit_support.h"
-#include <public/WebCompositorSupport.h>
+#include "public/platform/WebCompositorSupport.h"
#include <v8/include/v8-testing.h>
#include <v8/include/v8.h>
#include <wtf/OwnPtr.h>
diff --git a/Tools/DumpRenderTree/chromium/MockPlatform.cpp b/Tools/DumpRenderTree/chromium/MockPlatform.cpp
index ee94578..2d9cffc 100644
--- a/Tools/DumpRenderTree/chromium/MockPlatform.cpp
+++ b/Tools/DumpRenderTree/chromium/MockPlatform.cpp
@@ -32,7 +32,7 @@
#include "MockPlatform.h"
#include "WebTestInterfaces.h"
-#include <public/WebMediaStreamCenter.h>
+#include "public/platform/WebMediaStreamCenter.h"
#include <wtf/Assertions.h>
#include <wtf/PassOwnPtr.h>
diff --git a/Tools/DumpRenderTree/chromium/MockPlatform.h b/Tools/DumpRenderTree/chromium/MockPlatform.h
index 726e135..cf9d1cc 100644
--- a/Tools/DumpRenderTree/chromium/MockPlatform.h
+++ b/Tools/DumpRenderTree/chromium/MockPlatform.h
@@ -31,7 +31,7 @@
#ifndef MockPlatform_h
#define MockPlatform_h
-#include <public/Platform.h>
+#include "public/platform/Platform.h"
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
diff --git a/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h b/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h
index 570230c..f16f09d 100644
--- a/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h
+++ b/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h
@@ -31,7 +31,7 @@
#ifndef MockWebPrerenderingSupport_h
#define MockWebPrerenderingSupport_h
-#include <public/WebPrerenderingSupport.h>
+#include "public/platform/WebPrerenderingSupport.h"
class MockWebPrerenderingSupport : public WebKit::WebPrerenderingSupport {
public:
diff --git a/Tools/DumpRenderTree/chromium/Task.cpp b/Tools/DumpRenderTree/chromium/Task.cpp
index 4d5144f..a859b40 100644
--- a/Tools/DumpRenderTree/chromium/Task.cpp
+++ b/Tools/DumpRenderTree/chromium/Task.cpp
@@ -34,7 +34,7 @@
#include "WebKit.h"
#include "WebTask.h"
#include "webkit/support/webkit_support.h"
-#include <public/Platform.h>
+#include "public/platform/Platform.h"
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
diff --git a/Tools/DumpRenderTree/chromium/TestNavigationController.h b/Tools/DumpRenderTree/chromium/TestNavigationController.h
index 145fc52..88aa600 100644
--- a/Tools/DumpRenderTree/chromium/TestNavigationController.h
+++ b/Tools/DumpRenderTree/chromium/TestNavigationController.h
@@ -34,8 +34,8 @@
#include "WebDataSource.h"
#include "WebHistoryItem.h"
#include "webkit/support/webkit_support.h"
-#include <public/WebString.h>
-#include <public/WebURL.h>
+#include "public/platform/WebString.h"
+#include "public/platform/WebURL.h"
#include <string>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h
index d86024a..0c1d0e6 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h
@@ -135,15 +135,15 @@
// Invoked when the test finished.
virtual void testFinished() = 0;
- // Invoked if the test timed out.
- virtual void testTimedOut() = 0;
+ // DEPRECATED: Invoked if the test timed out.
+ virtual void testTimedOut() { };
- // If true, never abort a test because of a timeout.
- virtual bool isBeingDebugged() = 0;
+ // DEPRECATED: If true, never abort a test because of a timeout.
+ virtual bool isBeingDebugged() { return false; };
- // The time in milliseconds after which a test is considered to have timed
+ // DEPRECATED: The time in milliseconds after which a test is considered to have timed
// out.
- virtual int layoutTestTimeout() = 0;
+ virtual int layoutTestTimeout() { return 0; };
// Invoked when the embedder should close all but the main WebView.
virtual void closeRemainingWindows() = 0;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h
index b9b583c..c3d2a3b 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h
@@ -78,6 +78,7 @@
class WebURLResponse;
class WebUserMediaClient;
class WebView;
+class WebWidget;
struct WebConsoleMessage;
struct WebContextMenuData;
struct WebPluginParams;
@@ -104,6 +105,7 @@
public:
void setInterfaces(WebTestInterfaces*);
void setDelegate(WebTestDelegate*);
+ void setWidget(WebKit::WebWidget*);
void reset();
@@ -180,7 +182,7 @@
void didCancelClientRedirect(WebKit::WebFrame*);
void didStartProvisionalLoad(WebKit::WebFrame*);
void didReceiveServerRedirectForProvisionalLoad(WebKit::WebFrame*);
- void didFailProvisionalLoad(WebKit::WebFrame*, const WebKit::WebURLError&);
+ bool didFailProvisionalLoad(WebKit::WebFrame*, const WebKit::WebURLError&);
void didCommitProvisionalLoad(WebKit::WebFrame*, bool isNewNavigation);
void didReceiveTitle(WebKit::WebFrame*, const WebKit::WebString& title, WebKit::WebTextDirection);
void didChangeIcon(WebKit::WebFrame*, WebKit::WebIconURL::Type);
@@ -217,8 +219,12 @@
SkCanvas* canvas();
void displayRepaintMask();
+ WebKit::WebWidget* webWidget();
+ WebKit::WebView* webView();
+
TestInterfaces* m_testInterfaces;
WebTestDelegate* m_delegate;
+ WebKit::WebWidget* m_webWidget;
std::auto_ptr<SpellCheckClient> m_spellcheck;
std::auto_ptr<WebUserMediaClientMock> m_userMediaClient;
@@ -467,7 +473,10 @@
}
virtual void didFailProvisionalLoad(WebKit::WebFrame* frame, const WebKit::WebURLError& error)
{
- WebTestProxyBase::didFailProvisionalLoad(frame, error);
+ // If the test finished, don't notify the embedder of the failed load,
+ // as we already destroyed the document loader.
+ if (WebTestProxyBase::didFailProvisionalLoad(frame, error))
+ return;
Base::didFailProvisionalLoad(frame, error);
}
virtual void didCommitProvisionalLoad(WebKit::WebFrame* frame, bool isNewNavigation)
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp
index 903d29c..303992c 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp
@@ -37,7 +37,7 @@
#include "WebNode.h"
#include "WebTestDelegate.h"
#include "WebView.h"
-#include <public/WebCString.h>
+#include "public/platform/WebCString.h"
using namespace WebKit;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp
index ed82881..b8f5f5d 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp
@@ -33,10 +33,10 @@
#include "TestCommon.h"
#include "WebAccessibilityObject.h"
-#include <public/WebCString.h>
-#include <public/WebPoint.h>
-#include <public/WebRect.h>
-#include <public/WebString.h>
+#include "public/platform/WebCString.h"
+#include "public/platform/WebPoint.h"
+#include "public/platform/WebRect.h"
+#include "public/platform/WebString.h"
using namespace WebKit;
using namespace std;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp
index 7211eea..be54abe 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp
@@ -46,7 +46,7 @@
#include "WebBindings.h"
#include "WebFrame.h"
#include <memory>
-#include <public/WebString.h>
+#include "public/platform/WebString.h"
using namespace WebKit;
using namespace std;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
index cf579ca..9eec50e 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
@@ -52,10 +52,10 @@
#include "WebTestDelegate.h"
#include "WebTouchPoint.h"
#include "WebView.h"
-#include <public/WebDragData.h>
-#include <public/WebPoint.h>
-#include <public/WebString.h>
-#include <public/WebVector.h>
+#include "public/platform/WebDragData.h"
+#include "public/platform/WebPoint.h"
+#include "public/platform/WebString.h"
+#include "public/platform/WebVector.h"
#ifdef WIN32
#include "win/WebInputEventFactory.h"
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h
index 009f595..399e7f5 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h
@@ -42,7 +42,7 @@
#include "WebInputEvent.h"
#include "WebTask.h"
#include <memory>
-#include <public/WebPoint.h>
+#include "public/platform/WebPoint.h"
namespace WebKit {
class WebDragData;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h b/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h
index 5dcab6c..86a3b77 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h
@@ -32,7 +32,7 @@
#define GamepadController_h
#include "CppBoundClass.h"
-#include <public/WebGamepads.h>
+#include "public/platform/WebGamepads.h"
namespace WebKit {
class WebGamepads;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp
index 539c5a6..cb0f4df 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp
@@ -32,7 +32,7 @@
#include "MockConstraints.h"
-#include <public/WebMediaConstraints.h>
+#include "public/platform/WebMediaConstraints.h"
using namespace WebKit;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp
index cbe6879..054e8fb 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp
@@ -32,7 +32,7 @@
#include "MockSpellCheck.h"
#include "TestCommon.h"
-#include <public/WebCString.h>
+#include "public/platform/WebCString.h"
using namespace WebKit;
using namespace std;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp
index 2528825..3642b5e 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp
@@ -32,13 +32,14 @@
#include "MockWebMediaStreamCenter.h"
-#include <public/WebAudioDestinationConsumer.h>
-#include <public/WebMediaStream.h>
-#include <public/WebMediaStreamCenterClient.h>
-#include <public/WebMediaStreamSource.h>
-#include <public/WebMediaStreamSourcesRequest.h>
-#include <public/WebMediaStreamTrack.h>
-#include <public/WebVector.h>
+#include "public/platform/WebAudioDestinationConsumer.h"
+#include "public/platform/WebMediaStream.h"
+#include "public/platform/WebMediaStreamCenterClient.h"
+#include "public/platform/WebMediaStreamSource.h"
+#include "public/platform/WebMediaStreamSourcesRequest.h"
+#include "public/platform/WebMediaStreamTrack.h"
+#include "public/platform/WebSourceInfo.h"
+#include "public/platform/WebVector.h"
using namespace WebKit;
@@ -54,6 +55,16 @@
request.didCompleteQuery(audioSources, videoSources);
}
+bool MockWebMediaStreamCenter::getSourceInfos(const WebString& url, WebVector<WebSourceInfo>& webSourceInfoVector)
+{
+ size_t size = 2;
+ WebVector<WebSourceInfo> results(size);
+ results[0].initialize("MockAudioDevice#1", WebSourceInfo::SourceKindAudio, "Mock audio device", WebSourceInfo::VideoFacingModeNone);
+ results[1].initialize("MockVideoDevice#1", WebSourceInfo::SourceKindVideo, "Mock video device", WebSourceInfo::VideoFacingModeEnvironment);
+ webSourceInfoVector.swap(results);
+ return true;
+}
+
void MockWebMediaStreamCenter::didEnableMediaStreamTrack(const WebMediaStream&, const WebMediaStreamTrack& component)
{
component.source().setReadyState(WebMediaStreamSource::ReadyStateLive);
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.h b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.h
index 1c028a2..e8d0772 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.h
@@ -32,7 +32,7 @@
#define MockWebMediaStreamCenter_h
#include "TestCommon.h"
-#include <public/WebMediaStreamCenter.h>
+#include "public/platform/WebMediaStreamCenter.h"
namespace WebKit {
class WebMediaStreamCenterClient;
@@ -45,6 +45,7 @@
explicit MockWebMediaStreamCenter(WebKit::WebMediaStreamCenterClient*);
virtual void queryMediaStreamSources(const WebKit::WebMediaStreamSourcesRequest&) OVERRIDE;
+ virtual bool getSourceInfos(const WebKit::WebString& url, WebKit::WebVector<WebKit::WebSourceInfo>&) OVERRIDE;
virtual void didEnableMediaStreamTrack(const WebKit::WebMediaStream&, const WebKit::WebMediaStreamTrack&) OVERRIDE;
virtual void didDisableMediaStreamTrack(const WebKit::WebMediaStream&, const WebKit::WebMediaStreamTrack&) OVERRIDE;
virtual bool didAddMediaStreamTrack(const WebKit::WebMediaStream&, const WebKit::WebMediaStreamTrack&) OVERRIDE;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp
index 85cad72..72895dc 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp
@@ -29,8 +29,8 @@
#include "WebTestDelegate.h"
#include <assert.h>
-#include <public/WebMediaStreamSource.h>
-#include <public/WebRTCDTMFSenderHandlerClient.h>
+#include "public/platform/WebMediaStreamSource.h"
+#include "public/platform/WebRTCDTMFSenderHandlerClient.h"
using namespace WebKit;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.h b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.h
index f90dab8..6dd3060 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.h
@@ -28,9 +28,9 @@
#include "TestCommon.h"
#include "WebTask.h"
-#include <public/WebMediaStreamTrack.h>
-#include <public/WebRTCDTMFSenderHandler.h>
-#include <public/WebString.h>
+#include "public/platform/WebMediaStreamTrack.h"
+#include "public/platform/WebRTCDTMFSenderHandler.h"
+#include "public/platform/WebString.h"
namespace WebTestRunner {
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp
index 0376ee0..24eba9a 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp
@@ -28,7 +28,8 @@
#include "WebTestDelegate.h"
#include <assert.h>
-#include <public/WebRTCDataChannelHandlerClient.h>
+#include "public/platform/WebRTCDataChannelHandlerClient.h"
+#include "public/platform/WebRTCDataChannelInit.h"
using namespace WebKit;
@@ -55,12 +56,12 @@
/////////////////////
-MockWebRTCDataChannelHandler::MockWebRTCDataChannelHandler(WebString label, bool reliable, WebTestDelegate* delegate)
+MockWebRTCDataChannelHandler::MockWebRTCDataChannelHandler(WebString label, const WebRTCDataChannelInit& init, WebTestDelegate* delegate)
: m_client(0)
, m_label(label)
- , m_reliable(reliable)
, m_delegate(delegate)
{
+ m_reliable = (init.ordered && init.maxRetransmits == -1 && init.maxRetransmitTime == -1);
}
void MockWebRTCDataChannelHandler::setClient(WebRTCDataChannelHandlerClient* client)
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.h b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.h
index 3c93811..9032593 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.h
@@ -27,8 +27,12 @@
#include "TestCommon.h"
#include "WebTask.h"
-#include <public/WebRTCDataChannelHandler.h>
-#include <public/WebString.h>
+#include "public/platform/WebRTCDataChannelHandler.h"
+#include "public/platform/WebString.h"
+
+namespace WebKit {
+struct WebRTCDataChannelInit;
+}
namespace WebTestRunner {
@@ -36,7 +40,7 @@
class MockWebRTCDataChannelHandler : public WebKit::WebRTCDataChannelHandler {
public:
- MockWebRTCDataChannelHandler(WebKit::WebString label, bool reliable, WebTestDelegate*);
+ MockWebRTCDataChannelHandler(WebKit::WebString label, const WebKit::WebRTCDataChannelInit&, WebTestDelegate*);
virtual void setClient(WebKit::WebRTCDataChannelHandlerClient*) OVERRIDE;
virtual WebKit::WebString label() OVERRIDE { return m_label; }
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp
index 4edd796..ef9207c 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp
@@ -36,17 +36,18 @@
#include "MockWebRTCDataChannelHandler.h"
#include "TestInterfaces.h"
#include "WebTestDelegate.h"
-#include <public/WebMediaConstraints.h>
-#include <public/WebMediaStream.h>
-#include <public/WebMediaStreamTrack.h>
-#include <public/WebRTCPeerConnectionHandlerClient.h>
-#include <public/WebRTCSessionDescription.h>
-#include <public/WebRTCSessionDescriptionRequest.h>
-#include <public/WebRTCStatsRequest.h>
-#include <public/WebRTCStatsResponse.h>
-#include <public/WebRTCVoidRequest.h>
-#include <public/WebString.h>
-#include <public/WebVector.h>
+#include "public/platform/WebMediaConstraints.h"
+#include "public/platform/WebMediaStream.h"
+#include "public/platform/WebMediaStreamTrack.h"
+#include "public/platform/WebRTCDataChannelInit.h"
+#include "public/platform/WebRTCPeerConnectionHandlerClient.h"
+#include "public/platform/WebRTCSessionDescription.h"
+#include "public/platform/WebRTCSessionDescriptionRequest.h"
+#include "public/platform/WebRTCStatsRequest.h"
+#include "public/platform/WebRTCStatsResponse.h"
+#include "public/platform/WebRTCVoidRequest.h"
+#include "public/platform/WebString.h"
+#include "public/platform/WebVector.h"
using namespace WebKit;
@@ -162,7 +163,8 @@
virtual void runIfValid() OVERRIDE
{
- WebRTCDataChannelHandler* remoteDataChannel = new MockWebRTCDataChannelHandler("MockRemoteDataChannel", true, m_delegate);
+ WebRTCDataChannelInit init;
+ WebRTCDataChannelHandler* remoteDataChannel = new MockWebRTCDataChannelHandler("MockRemoteDataChannel", init, m_delegate);
m_client->didAddRemoteDataChannel(remoteDataChannel);
}
@@ -284,11 +286,11 @@
m_interfaces->delegate()->postTask(new RTCStatsRequestSucceededTask(this, request, response));
}
-WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel(const WebString& label, bool reliable)
+WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel(const WebString& label, const WebKit::WebRTCDataChannelInit& init)
{
m_interfaces->delegate()->postTask(new RemoteDataChannelTask(this, m_client, m_interfaces->delegate()));
- return new MockWebRTCDataChannelHandler(label, reliable, m_interfaces->delegate());
+ return new MockWebRTCDataChannelHandler(label, init, m_interfaces->delegate());
}
WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender(const WebMediaStreamTrack& track)
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.h b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.h
index 965a208..be35fe9 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.h
@@ -33,10 +33,10 @@
#include "TestCommon.h"
#include "WebTask.h"
-#include <public/WebRTCPeerConnectionHandler.h>
-#include <public/WebRTCSessionDescription.h>
-#include <public/WebRTCSessionDescriptionRequest.h>
-#include <public/WebRTCStatsRequest.h>
+#include "public/platform/WebRTCPeerConnectionHandler.h"
+#include "public/platform/WebRTCSessionDescription.h"
+#include "public/platform/WebRTCSessionDescriptionRequest.h"
+#include "public/platform/WebRTCStatsRequest.h"
namespace WebKit {
class WebRTCPeerConnectionHandlerClient;
@@ -63,7 +63,7 @@
virtual bool addStream(const WebKit::WebMediaStream&, const WebKit::WebMediaConstraints&) OVERRIDE;
virtual void removeStream(const WebKit::WebMediaStream&) OVERRIDE;
virtual void getStats(const WebKit::WebRTCStatsRequest&) OVERRIDE;
- virtual WebKit::WebRTCDataChannelHandler* createDataChannel(const WebKit::WebString& label, bool reliable) OVERRIDE;
+ virtual WebKit::WebRTCDataChannelHandler* createDataChannel(const WebKit::WebString& label, const WebKit::WebRTCDataChannelInit&) OVERRIDE;
virtual WebKit::WebRTCDTMFSenderHandler* createDTMFSender(const WebKit::WebMediaStreamTrack&) OVERRIDE;
virtual void stop() OVERRIDE;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp
index c4df32a..15a4264 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp
@@ -28,8 +28,8 @@
#include "WebSpeechInputListener.h"
#include "WebTestDelegate.h"
-#include <public/WebCString.h>
-#include <public/WebVector.h>
+#include "public/platform/WebCString.h"
+#include "public/platform/WebVector.h"
#if ENABLE_INPUT_SPEECH
@@ -195,7 +195,6 @@
{
m_object->m_speechTask = 0;
cancel();
- delete this;
}
void MockWebSpeechInputController::SpeechTask::runIfValid()
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h
index 84034e3..8e82b64 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h
@@ -31,7 +31,7 @@
#include "WebSpeechInputResult.h"
#include "WebTask.h"
#include <map>
-#include <public/WebRect.h>
+#include "public/platform/WebRect.h"
#include <string>
#include <vector>
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.cpp
index 80c2726..8890290 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.cpp
@@ -39,9 +39,9 @@
#include "WebSecurityOrigin.h"
#include "WebTestDelegate.h"
#include "googleurl/src/gurl.h"
-#include <public/Platform.h>
-#include <public/WebString.h>
-#include <public/WebURL.h>
+#include "public/platform/Platform.h"
+#include "public/platform/WebString.h"
+#include "public/platform/WebURL.h"
using namespace WebKit;
using namespace std;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp
index 5ef3294..d177995 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp
@@ -127,6 +127,8 @@
void SpellCheckClient::finishLastTextCheck()
{
+ if (!m_lastRequestedTextCheckingCompletion)
+ return;
vector<WebTextCheckingResult> results;
int offset = 0;
string16 text = m_lastRequestedTextCheckString;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h
index f5f00f2..8055ec4 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h
@@ -32,7 +32,7 @@
#define TestCommon_h
#include <base/compiler_specific.h>
-#include <public/WebCommon.h>
+#include "public/platform/WebCommon.h"
#include <stdio.h>
#include <string>
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp
index 857ae76..be19f35 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp
@@ -40,8 +40,10 @@
#include "WebCache.h"
#include "WebKit.h"
#include "WebRuntimeFeatures.h"
-#include <public/WebString.h>
-#include <public/WebURL.h>
+#include "WebTestProxy.h"
+#include "WebView.h"
+#include "public/platform/WebString.h"
+#include "public/platform/WebURL.h"
using namespace WebKit;
using namespace std;
@@ -54,7 +56,6 @@
, m_gamepadController(new GamepadController())
, m_textInputController(new TextInputController())
, m_testRunner(new TestRunner(this))
- , m_webView(0)
, m_delegate(0)
{
WebKit::setLayoutTestMode(true);
@@ -83,7 +84,6 @@
void TestInterfaces::setWebView(WebView* webView, WebTestProxyBase* proxy)
{
- m_webView = webView;
m_proxy = proxy;
m_accessibilityController->setWebView(webView);
m_eventSender->setWebView(webView);
@@ -171,11 +171,6 @@
return m_testRunner.get();
}
-WebView* TestInterfaces::webView()
-{
- return m_webView;
-}
-
WebTestDelegate* TestInterfaces::delegate()
{
return m_delegate;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h
index 05dc8d1..ee3b696 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h
@@ -75,7 +75,6 @@
AccessibilityController* accessibilityController();
EventSender* eventSender();
TestRunner* testRunner();
- WebKit::WebView* webView();
WebTestDelegate* delegate();
WebTestProxyBase* proxy();
const std::vector<WebTestProxyBase*>& windowList();
@@ -87,7 +86,6 @@
std::auto_ptr<GamepadController> m_gamepadController;
std::auto_ptr<TextInputController> m_textInputController;
std::auto_ptr<TestRunner> m_testRunner;
- WebKit::WebView* m_webView;
WebTestDelegate* m_delegate;
WebTestProxyBase* m_proxy;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp
index 53895ef..a46cc8c 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp
@@ -34,9 +34,9 @@
#include "WebTestDelegate.h"
#include "WebTouchPoint.h"
#include "WebUserGestureIndicator.h"
-#include <public/Platform.h>
-#include <public/WebCompositorSupport.h>
-#include <public/WebGraphicsContext3D.h>
+#include "public/platform/Platform.h"
+#include "public/platform/WebCompositorSupport.h"
+#include "public/platform/WebGraphicsContext3D.h"
using namespace WebKit;
using namespace std;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.h
index 6e5522d..d582847 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestPlugin.h
@@ -29,8 +29,8 @@
#include "WebPlugin.h"
#include "WebPluginContainer.h"
#include <memory>
-#include <public/WebExternalTextureLayer.h>
-#include <public/WebExternalTextureLayerClient.h>
+#include "public/platform/WebExternalTextureLayer.h"
+#include "public/platform/WebExternalTextureLayerClient.h"
#include <string>
namespace WebTestRunner {
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp
index 69ffce3..a3e2bdb 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp
@@ -61,9 +61,9 @@
#include "v8/include/v8.h"
#include <limits>
#include <memory>
-#include <public/WebData.h>
-#include <public/WebPoint.h>
-#include <public/WebURLResponse.h>
+#include "public/platform/WebData.h"
+#include "public/platform/WebPoint.h"
+#include "public/platform/WebURLResponse.h"
#if defined(__linux__) || defined(ANDROID)
#include "linux/WebFontRendering.h"
@@ -753,8 +753,6 @@
void TestRunner::waitUntilDone(const CppArgumentList&, CppVariant* result)
{
- if (!m_delegate->isBeingDebugged())
- m_delegate->postDelayedTask(new NotifyDoneTimedOutTask(this), m_delegate->layoutTestTimeout());
m_waitUntilDone = true;
result->setNull();
}
@@ -764,18 +762,14 @@
// Test didn't timeout. Kill the timeout timer.
taskList()->revokeAll();
- completeNotifyDone(false);
+ completeNotifyDone();
result->setNull();
}
-void TestRunner::completeNotifyDone(bool isTimeout)
+void TestRunner::completeNotifyDone()
{
- if (m_waitUntilDone && !topLoadingFrame() && m_workQueue.isEmpty()) {
- if (isTimeout)
- m_delegate->testTimedOut();
- else
- m_delegate->testFinished();
- }
+ if (m_waitUntilDone && !topLoadingFrame() && m_workQueue.isEmpty())
+ m_delegate->testFinished();
m_waitUntilDone = false;
}
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h
index 0d5cecf..1556ec3 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h
@@ -41,7 +41,7 @@
#include "WebTextDirection.h"
#include <deque>
#include <memory>
-#include <public/WebURL.h>
+#include "public/platform/WebURL.h"
#include <set>
#include <string>
@@ -495,13 +495,7 @@
///////////////////////////////////////////////////////////////////////////
// Internal helpers
void checkResponseMimeType();
- void completeNotifyDone(bool isTimeout);
- class NotifyDoneTimedOutTask: public WebMethodTask<TestRunner> {
- public:
- NotifyDoneTimedOutTask(TestRunner* object): WebMethodTask<TestRunner>(object) { }
- virtual void runIfValid() { m_object->completeNotifyDone(true); }
- };
-
+ void completeNotifyDone();
class HostMethodTask : public WebMethodTask<TestRunner> {
public:
typedef void (TestRunner::*CallbackMethodType)();
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp
index f5f9b2a..49c6bdc 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp
@@ -38,8 +38,8 @@
#include "WebInputEvent.h"
#include "WebRange.h"
#include "WebView.h"
-#include <public/WebString.h>
-#include <public/WebVector.h>
+#include "public/platform/WebString.h"
+#include "public/platform/WebVector.h"
#include <string>
using namespace WebKit;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp
index 161cbc7..fa2a135 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp
@@ -33,8 +33,8 @@
#include "TestCommon.h"
#include "WebTestDelegate.h"
-#include <public/WebCString.h>
-#include <public/WebURL.h>
+#include "public/platform/WebCString.h"
+#include "public/platform/WebURL.h"
using namespace std;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp
index d11a18c..60cf3a0 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp
@@ -66,10 +66,10 @@
// FIXME: Including platform_canvas.h here is a layering violation.
#include <cctype>
#include "skia/ext/platform_canvas.h"
-#include <public/WebCString.h>
-#include <public/WebURLError.h>
-#include <public/WebURLRequest.h>
-#include <public/WebURLResponse.h>
+#include "public/platform/WebCString.h"
+#include "public/platform/WebURLError.h"
+#include "public/platform/WebURLRequest.h"
+#include "public/platform/WebURLResponse.h"
using namespace WebKit;
using namespace std;
@@ -439,6 +439,7 @@
WebTestProxyBase::WebTestProxyBase()
: m_testInterfaces(0)
, m_delegate(0)
+ , m_webWidget(0)
, m_spellcheck(new SpellCheckClient)
, m_chooserCount(0)
{
@@ -468,6 +469,23 @@
m_speechRecognizer->setDelegate(delegate);
}
+void WebTestProxyBase::setWidget(WebWidget* widget)
+{
+ m_webWidget = widget;
+}
+
+WebWidget* WebTestProxyBase::webWidget()
+{
+ return m_webWidget;
+}
+
+WebView* WebTestProxyBase::webView()
+{
+ WEBKIT_ASSERT(m_webWidget);
+ // TestRunner does not support popup widgets. So m_webWidget is always a WebView.
+ return static_cast<WebView*>(m_webWidget);
+}
+
void WebTestProxyBase::reset()
{
m_paintRect = WebRect();
@@ -500,7 +518,7 @@
bool shouldDumpAsText = m_testInterfaces->testRunner()->shouldDumpAsText();
bool shouldDumpAsPrinted = m_testInterfaces->testRunner()->isPrinting();
- WebFrame* frame = m_testInterfaces->webView()->mainFrame();
+ WebFrame* frame = webView()->mainFrame();
string dataUtf8;
if (shouldDumpAsText) {
bool recursive = m_testInterfaces->testRunner()->shouldDumpChildFramesAsText();
@@ -524,9 +542,9 @@
SkCanvas* WebTestProxyBase::capturePixels()
{
- m_testInterfaces->webView()->layout();
+ webWidget()->layout();
if (m_testInterfaces->testRunner()->testRepaint()) {
- WebSize viewSize = m_testInterfaces->webView()->size();
+ WebSize viewSize = webWidget()->size();
int width = viewSize.width;
int height = viewSize.height;
if (m_testInterfaces->testRunner()->sweepHorizontally()) {
@@ -546,7 +564,7 @@
// The rect should be drawn after everything is laid out and painted.
if (m_testInterfaces->testRunner()->shouldDumpSelectionRect()) {
// If there is a selection rect - draw a red 1px border enclosing rect
- WebRect wr = m_testInterfaces->webView()->mainFrame()->selectionBoundsRect();
+ WebRect wr = webView()->mainFrame()->selectionBoundsRect();
if (!wr.isEmpty()) {
// Render a red rectangle bounding selection rect
SkPaint paint;
@@ -573,21 +591,21 @@
WEBKIT_ASSERT(!m_isPainting);
WEBKIT_ASSERT(canvas());
m_isPainting = true;
- float deviceScaleFactor = m_testInterfaces->webView()->deviceScaleFactor();
+ float deviceScaleFactor = webView()->deviceScaleFactor();
int scaledX = static_cast<int>(static_cast<float>(rect.x) * deviceScaleFactor);
int scaledY = static_cast<int>(static_cast<float>(rect.y) * deviceScaleFactor);
int scaledWidth = static_cast<int>(ceil(static_cast<float>(rect.width) * deviceScaleFactor));
int scaledHeight = static_cast<int>(ceil(static_cast<float>(rect.height) * deviceScaleFactor));
WebRect deviceRect(scaledX, scaledY, scaledWidth, scaledHeight);
- m_testInterfaces->webView()->paint(canvas(), deviceRect);
+ webWidget()->paint(canvas(), deviceRect);
m_isPainting = false;
}
void WebTestProxyBase::paintInvalidatedRegion()
{
- m_testInterfaces->webView()->animate(0.0);
- m_testInterfaces->webView()->layout();
- WebSize widgetSize = m_testInterfaces->webView()->size();
+ webWidget()->animate(0.0);
+ webWidget()->layout();
+ WebSize widgetSize = webWidget()->size();
WebRect clientRect(0, 0, widgetSize.width, widgetSize.height);
// Paint the canvas if necessary. Allow painting to generate extra rects
@@ -620,8 +638,8 @@
WEBKIT_ASSERT(canvas());
m_isPainting = true;
- WebSize pageSizeInPixels = m_testInterfaces->webView()->size();
- WebFrame* webFrame = m_testInterfaces->webView()->mainFrame();
+ WebSize pageSizeInPixels = webWidget()->size();
+ WebFrame* webFrame = webView()->mainFrame();
int pageCount = webFrame->printBegin(pageSizeInPixels);
int totalHeight = pageCount * (pageSizeInPixels.height + 1) - 1;
@@ -645,8 +663,8 @@
{
if (m_canvas.get())
return m_canvas.get();
- WebSize widgetSize = m_testInterfaces->webView()->size();
- float deviceScaleFactor = m_testInterfaces->webView()->deviceScaleFactor();
+ WebSize widgetSize = webWidget()->size();
+ float deviceScaleFactor = webView()->deviceScaleFactor();
int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor));
int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.height) * deviceScaleFactor));
m_canvas.reset(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, true));
@@ -662,7 +680,7 @@
void WebTestProxyBase::display()
{
- const WebKit::WebSize& size = m_testInterfaces->webView()->size();
+ const WebKit::WebSize& size = webWidget()->size();
WebRect rect(0, 0, size.width, size.height);
m_paintRect = rect;
paintInvalidatedRegion();
@@ -1007,7 +1025,7 @@
// Simulate a print by going into print mode and then exit straight away.
void WebTestProxyBase::printPage(WebFrame* frame)
{
- WebSize pageSizeInPixels = m_testInterfaces->webView()->size();
+ WebSize pageSizeInPixels = webWidget()->size();
WebPrintParams printParams(pageSizeInPixels);
frame->printBegin(printParams);
frame->printEnd();
@@ -1143,13 +1161,14 @@
}
}
-void WebTestProxyBase::didFailProvisionalLoad(WebFrame* frame, const WebURLError&)
+bool WebTestProxyBase::didFailProvisionalLoad(WebFrame* frame, const WebURLError&)
{
if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
printFrameDescription(m_delegate, frame);
m_delegate->printMessage(" - didFailProvisionalLoadWithError\n");
}
locationChangeDone(frame);
+ return !frame->provisionalDataSource();
}
void WebTestProxyBase::didCommitProvisionalLoad(WebFrame* frame, bool)
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h
index f0b5232..f805861 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h
@@ -30,7 +30,7 @@
#ifndef WebTestThemeEngineMac_h
#define WebTestThemeEngineMac_h
-#include <public/mac/WebThemeEngine.h>
+#include "public/platform/mac/WebThemeEngine.h"
namespace WebTestRunner {
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm
index f39fd53..8b5f057 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm
@@ -30,8 +30,8 @@
#include "WebTestThemeEngineMac.h"
-#include <public/WebCanvas.h>
-#include <public/WebRect.h>
+#include "public/platform/WebCanvas.h"
+#include "public/platform/WebRect.h"
#include "skia/ext/skia_utils_mac.h"
#import <AppKit/NSAffineTransform.h>
#import <AppKit/NSGraphicsContext.h>
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp
index 50339f5..0fb102a 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp
@@ -34,7 +34,7 @@
#include "TestCommon.h"
#include "WebTestThemeControlWin.h"
#include "third_party/skia/include/core/SkRect.h"
-#include <public/WebRect.h>
+#include "public/platform/WebRect.h"
// Although all this code is generic, we include these headers
// to pull in the Windows #defines for the parts and states of
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h
index 84a3ec4..77a5672 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h
@@ -47,7 +47,7 @@
#ifndef WebTestThemeEngineWin_h
#define WebTestThemeEngineWin_h
-#include <public/win/WebThemeEngine.h>
+#include "public/platform/win/WebThemeEngine.h"
namespace WebTestRunner {
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp
index bed7ebc..703ec97 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp
@@ -36,11 +36,11 @@
#include "WebMediaStreamRegistry.h"
#include "WebTestDelegate.h"
#include "WebUserMediaRequest.h"
-#include <public/WebMediaConstraints.h>
-#include <public/WebMediaStream.h>
-#include <public/WebMediaStreamSource.h>
-#include <public/WebMediaStreamTrack.h>
-#include <public/WebVector.h>
+#include "public/platform/WebMediaConstraints.h"
+#include "public/platform/WebMediaStream.h"
+#include "public/platform/WebMediaStreamSource.h"
+#include "public/platform/WebMediaStreamTrack.h"
+#include "public/platform/WebVector.h"
using namespace WebKit;
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h b/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h
index ec992a0..7146180 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h
@@ -34,9 +34,9 @@
#include "TestCommon.h"
#include "WebTask.h"
#include "WebUserMediaClient.h"
-#include <public/WebCommon.h>
-#include <public/WebString.h>
-#include <public/WebURL.h>
+#include "public/platform/WebCommon.h"
+#include "public/platform/WebString.h"
+#include "public/platform/WebURL.h"
namespace WebTestRunner {
diff --git a/Tools/DumpRenderTree/chromium/TestShell.cpp b/Tools/DumpRenderTree/chromium/TestShell.cpp
index f67dbc9..b711f34 100644
--- a/Tools/DumpRenderTree/chromium/TestShell.cpp
+++ b/Tools/DumpRenderTree/chromium/TestShell.cpp
@@ -50,14 +50,14 @@
#include "skia/ext/platform_canvas.h"
#include "webkit/support/webkit_support.h"
#include "webkit/support/webkit_support_gfx.h"
-#include <public/Platform.h>
-#include <public/WebCompositorSupport.h>
-#include <public/WebPoint.h>
-#include <public/WebSize.h>
-#include <public/WebString.h>
-#include <public/WebThread.h>
-#include <public/WebURLRequest.h>
-#include <public/WebURLResponse.h>
+#include "public/platform/Platform.h"
+#include "public/platform/WebCompositorSupport.h"
+#include "public/platform/WebPoint.h"
+#include "public/platform/WebSize.h"
+#include "public/platform/WebString.h"
+#include "public/platform/WebThread.h"
+#include "public/platform/WebURLRequest.h"
+#include "public/platform/WebURLResponse.h"
#include <algorithm>
#include <cctype>
#include <vector>
diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.cpp b/Tools/DumpRenderTree/chromium/WebViewHost.cpp
index 9195175..5255605 100644
--- a/Tools/DumpRenderTree/chromium/WebViewHost.cpp
+++ b/Tools/DumpRenderTree/chromium/WebViewHost.cpp
@@ -60,16 +60,16 @@
#include "webkit/support/webkit_support.h"
#include <cctype>
#include <clocale>
-#include <public/WebCString.h>
-#include <public/WebCompositorOutputSurface.h>
-#include <public/WebCompositorSupport.h>
-#include <public/WebDragData.h>
-#include <public/WebRect.h>
-#include <public/WebSize.h>
-#include <public/WebStorageNamespace.h>
-#include <public/WebThread.h>
-#include <public/WebURLRequest.h>
-#include <public/WebURLResponse.h>
+#include "public/platform/WebCString.h"
+#include "public/platform/WebCompositorOutputSurface.h"
+#include "public/platform/WebCompositorSupport.h"
+#include "public/platform/WebDragData.h"
+#include "public/platform/WebRect.h"
+#include "public/platform/WebSize.h"
+#include "public/platform/WebStorageNamespace.h"
+#include "public/platform/WebThread.h"
+#include "public/platform/WebURLRequest.h"
+#include "public/platform/WebURLResponse.h"
#include <wtf/Assertions.h>
#include <wtf/OwnArrayPtr.h>
@@ -219,8 +219,7 @@
// Query preferred width to emulate the same functionality in Chromium:
// see RenderView::CheckPreferredSize (src/content/renderer/render_view.cc)
// and TabContentsViewMac::RenderViewCreated (src/chrome/browser/tab_contents/tab_contents_view_mac.mm)
- webView()->mainFrame()->contentsPreferredWidth();
- webView()->mainFrame()->documentElementScrollHeight();
+ webView()->contentsPreferredMinimumSize();
queryingPreferredSize = false;
#endif
}
@@ -672,21 +671,6 @@
m_shell->testFinished(this);
}
-void WebViewHost::testTimedOut()
-{
- m_shell->testTimedOut();
-}
-
-bool WebViewHost::isBeingDebugged()
-{
- return webkit_support::BeingDebugged();
-}
-
-int WebViewHost::layoutTestTimeout()
-{
- return m_shell->layoutTestTimeout();
-}
-
void WebViewHost::closeRemainingWindows()
{
m_shell->closeRemainingWindows();
@@ -779,6 +763,7 @@
void WebViewHost::setWebWidget(WebKit::WebWidget* widget)
{
m_webWidget = widget;
+ m_proxy->setWidget(widget);
webView()->setSpellCheckClient(proxy()->spellCheckClient());
webView()->setPrerendererClient(this);
}
diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.h b/Tools/DumpRenderTree/chromium/WebViewHost.h
index d0b8e9a..47e8861 100644
--- a/Tools/DumpRenderTree/chromium/WebViewHost.h
+++ b/Tools/DumpRenderTree/chromium/WebViewHost.h
@@ -39,7 +39,7 @@
#include "WebTestDelegate.h"
#include "WebTestProxy.h"
#include "WebViewClient.h"
-#include <public/WebFileSystemType.h>
+#include "public/platform/WebFileSystemType.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/Vector.h>
@@ -114,9 +114,6 @@
virtual std::string pathToLocalResource(const std::string& url) OVERRIDE;
virtual void setLocale(const std::string&) OVERRIDE;
virtual void testFinished() OVERRIDE;
- virtual void testTimedOut() OVERRIDE;
- virtual bool isBeingDebugged() OVERRIDE;
- virtual int layoutTestTimeout() OVERRIDE;
virtual void closeRemainingWindows() OVERRIDE;
virtual int navigationEntryCount() OVERRIDE;
virtual void goToOffset(int) OVERRIDE;
diff --git a/Tools/GardeningServer/garden-o-matic.html b/Tools/GardeningServer/garden-o-matic.html
index 10ef791..6766019 100644
--- a/Tools/GardeningServer/garden-o-matic.html
+++ b/Tools/GardeningServer/garden-o-matic.html
@@ -28,14 +28,14 @@
-->
<html>
<head>
-<meta http-equiv="X-WebKit-CSP" content="default-src 'none';
+<meta http-equiv="Content-Security-Policy" content="default-src 'none';
script-src 'self' file: https://ajax.googleapis.com;
style-src 'self' 'unsafe-inline' file: https://ajax.googleapis.com http://fonts.googleapis.com;
font-src http://themes.googleusercontent.com;
img-src 'self' https://ajax.googleapis.com http://build.chromium.org http://build.webkit.org;
media-src 'self' http://build.chromium.org http://build.webkit.org;
frame-src 'self' http://build.chromium.org http://build.webkit.org http://test-results.appspot.com;
- connect-src 'self' http://trac.webkit.org http://build.chromium.org http://build.webkit.org">
+ connect-src 'self' http://trac.webkit.org http://build.chromium.org http://build.webkit.org https://codereview.chromium.org">
<title>Garden-O-Matic</title>
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:400,700">
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/themes/base/jquery-ui.css">
@@ -53,6 +53,7 @@
<script src="scripts/base.js"></script>
<script src="scripts/config.js"></script>
<script src="scripts/net.js"></script>
+<script src="scripts/rollbot.js"></script>
<script src="scripts/svn-log.js"></script>
<script src="scripts/builders.js"></script>
<script src="scripts/checkout.js"></script>
diff --git a/Tools/GardeningServer/run-unittests.html b/Tools/GardeningServer/run-unittests.html
index 6cae329..dae1e9c 100644
--- a/Tools/GardeningServer/run-unittests.html
+++ b/Tools/GardeningServer/run-unittests.html
@@ -44,6 +44,8 @@
<script src="scripts/base_unittests.js"></script>
<script src="scripts/net.js"></script>
<script src="scripts/net_unittests.js"></script>
+<script src="scripts/rollbot.js"></script>
+<script src="scripts/rollbot_unittests.js"></script>
<script src="scripts/svn-log.js"></script>
<script src="scripts/svn-log_unittests.js"></script>
<script src="scripts/builders.js"></script>
diff --git a/Tools/GardeningServer/scripts/config.js b/Tools/GardeningServer/scripts/config.js
index cbcefcb..103610a 100644
--- a/Tools/GardeningServer/scripts/config.js
+++ b/Tools/GardeningServer/scripts/config.js
@@ -68,6 +68,7 @@
config.kBlinkSvnURL = 'svn://svn.chromium.org/blink/trunk';
config.kBlinkRevisionURL = 'http://src.chromium.org/viewvc/blink';
config.kSvnLogURL = 'http://build.chromium.org/cgi-bin/svn-log';
+config.kRietveldURL = "https://codereview.chromium.org";
var kTenMinutesInMilliseconds = 10 * 60 * 1000;
config.kUpdateFrequency = kTenMinutesInMilliseconds;
diff --git a/Tools/GardeningServer/scripts/controllers_unittests.js b/Tools/GardeningServer/scripts/controllers_unittests.js
index 00f676b..914159a 100644
--- a/Tools/GardeningServer/scripts/controllers_unittests.js
+++ b/Tools/GardeningServer/scripts/controllers_unittests.js
@@ -65,7 +65,8 @@
"userscripts/another-test.html": {
"Mock Builder": {
"expected": "PASS",
- "actual": "TEXT"
+ "actual": "TEXT",
+ "is_unexpected": true,
}
}
};
diff --git a/Tools/GardeningServer/scripts/garden-o-matic.js b/Tools/GardeningServer/scripts/garden-o-matic.js
index d325f6c..4d16531 100644
--- a/Tools/GardeningServer/scripts/garden-o-matic.js
+++ b/Tools/GardeningServer/scripts/garden-o-matic.js
@@ -79,19 +79,19 @@
Object.keys(config.currentBuilders()).forEach(function(builderName) {
if (!model.state.resultsByBuilder[builderName])
- g_info.add(new ui.notifications.Info('Could not find test results for ' + builderName + ' in the last ' + config.kBuildNumberLimit + ' runs.'));
+ g_info.add(new ui.notifications.Info('Could not find test results for ' + builderName + ' in the last ' + config.kBuildNumberLimit + ' runs.'));
});
updating.dismiss();
g_revisionHint = new ui.notifications.Info('');
-
+
var latestRevisionSpan = document.createElement('span');
latestRevisionSpan.appendChild(document.createTextNode('Latest revision processed by every bot: '));
-
+
var latestRevision = model.latestRevisionWithNoBuildersInFlight();
latestRevisionSpan.appendChild(base.createLinkNode(trac.changesetURL(latestRevision), latestRevision));
-
+
var totRevision = model.latestRevision();
latestRevisionSpan.appendChild(document.createTextNode(', trunk is at '));
latestRevisionSpan.appendChild(base.createLinkNode(trac.changesetURL(totRevision), totRevision));
@@ -100,9 +100,21 @@
latestRevisionSpan.appendChild(document.createTextNode(', last roll is to '));
latestRevisionSpan.appendChild(base.createLinkNode(trac.changesetURL(totRevision), revision));
}, function() {});
-
+
+ rollbot.fetchCurrentRoll(function(roll) {
+ latestRevisionSpan.appendChild(document.createTextNode(', current autoroll '));
+ if (roll) {
+ var linkText = "" + roll.fromRevision + ":" + roll.toRevision;
+ latestRevisionSpan.appendChild(base.createLinkNode(roll.url, linkText));
+ if (roll.isStopped)
+ latestRevisionSpan.appendChild(document.createTextNode(' (STOPPED) '));
+ } else {
+ latestRevisionSpan.appendChild(document.createTextNode(' None'));
+ }
+ });
+
g_revisionHint.updateWithNode(latestRevisionSpan);
-
+
g_info.add(g_revisionHint);
});
});
diff --git a/Tools/GardeningServer/scripts/net_unittests.js b/Tools/GardeningServer/scripts/net_unittests.js
index 8fcc9cb..15bcffe 100644
--- a/Tools/GardeningServer/scripts/net_unittests.js
+++ b/Tools/GardeningServer/scripts/net_unittests.js
@@ -59,7 +59,7 @@
}
window.net = realNet;
- equal(window.net, realNet, "Failed to restore real base!");
+ equal(window.net, realNet);
};
(function () {
diff --git a/Tools/GardeningServer/scripts/results.js b/Tools/GardeningServer/scripts/results.js
index a9346b7..1800830 100644
--- a/Tools/GardeningServer/scripts/results.js
+++ b/Tools/GardeningServer/scripts/results.js
@@ -315,7 +315,7 @@
'builderName': builderName,
'failureTypeList': results.failureTypeList(resultsByTest[testName][builderName].actual),
};
-
+
return failureInfoForTest;
};
@@ -368,10 +368,7 @@
}
var resultNode = results.resultNodeForTest(resultsTree, testName);
var revision = parseInt(resultsTree['blink_revision'])
- // FIXME: full_results.json files before 150044 are busted.
- // Remove this check once all the bots have cycled enough that they
- // wouldn't try to load older revisions than 150044.
- if (isNaN(revision) || revision < 150044)
+ if (isNaN(revision))
revision = 0;
processResultNode(revision, resultNode);
});
diff --git a/Tools/GardeningServer/scripts/results_unittests.js b/Tools/GardeningServer/scripts/results_unittests.js
index a04cb19..09e4bb0 100644
--- a/Tools/GardeningServer/scripts/results_unittests.js
+++ b/Tools/GardeningServer/scripts/results_unittests.js
@@ -34,7 +34,7 @@
"scrollbars": {
"custom-scrollbar-with-incomplete-style.html": {
"expected": "IMAGE",
- "actual": "IMAGE"
+ "actual": "IMAGE",
},
"expected-wontfix": {
"expected": "WONTFIX",
@@ -42,28 +42,28 @@
},
"flaky-scrollbar.html": {
"expected": "PASS",
- "actual": "PASS TEXT"
+ "actual": "PASS TEXT",
"is_unexpected": true,
},
"unexpected-failing-flaky-scrollbar.html": {
"expected": "TEXT",
- "actual": "TIMEOUT TEXT"
+ "actual": "TIMEOUT TEXT",
"is_unexpected": true,
},
"unexpected-pass.html": {
"expected": "FAIL",
- "actual": "PASS"
+ "actual": "PASS",
"is_unexpected": true,
}
},
"userscripts": {
"user-script-video-document.html": {
"expected": "FAIL",
- "actual": "TEXT"
+ "actual": "TEXT",
},
"another-test.html": {
"expected": "PASS",
- "actual": "TEXT"
+ "actual": "TEXT",
"is_unexpected": true,
}
},
@@ -171,7 +171,8 @@
deepEqual(unexpectedFailures, {
"userscripts/another-test.html": {
"expected": "PASS",
- "actual": "TEXT"
+ "actual": "TEXT",
+ "is_unexpected": true,
}
});
});
@@ -184,7 +185,8 @@
"userscripts/another-test.html": {
"Mock Builder": {
"expected": "PASS",
- "actual": "TEXT"
+ "actual": "TEXT",
+ "is_unexpected": true,
}
}
});
@@ -235,14 +237,15 @@
test("resultNodeForTest", 4, function() {
deepEqual(results.resultNodeForTest(unittest.kExampleResultsJSON, "userscripts/another-test.html"), {
"expected": "PASS",
- "actual": "TEXT"
+ "actual": "TEXT",
+ "is_unexpected": true,
});
equals(results.resultNodeForTest(unittest.kExampleResultsJSON, "foo.html"), null);
equals(results.resultNodeForTest(unittest.kExampleResultsJSON, "userscripts/foo.html"), null);
equals(results.resultNodeForTest(unittest.kExampleResultsJSON, "userscripts/foo/bar.html"), null);
});
-test("walkHistory", 6, function() {
+test("walkHistory", 5, function() {
var simulator = new NetworkSimulator();
var keyMap = {
@@ -344,10 +347,6 @@
equals(oldestFailingRevision, 90426);
equals(newestPassingRevision, 90425);
});
-
- results.countFailureOccurences(["Mock Builder", "Another Builder"], "userscripts/another-test.html", function(failureCount) {
- equals(failureCount, 4);
- });
});
});
diff --git a/Tools/GardeningServer/scripts/rollbot.js b/Tools/GardeningServer/scripts/rollbot.js
new file mode 100644
index 0000000..bbcdbaf
--- /dev/null
+++ b/Tools/GardeningServer/scripts/rollbot.js
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var rollbot = rollbot || {};
+
+(function() {
+
+// FIXME: This will need to change once we have a real account for the rollbot.
+var rollBotAccount = "eseidel@chromium.org";
+var issueSearchURL = config.kRietveldURL + "/search?" + $.param({
+ "owner": rollBotAccount,
+ "closed": 3, // Only open issues.
+ "with_messages": "true",
+ "format": "json",
+});
+
+var rollSubjectRegexp = /Blink roll (\d+):(\d+)/;
+
+function findRollIssue(results) {
+ var results = results['results'];
+ for (var i = 0; i < results.length; i++) {
+ var result = results[i];
+ if (result['subject'].match(rollSubjectRegexp))
+ return result;
+ }
+ return null;
+}
+
+function isRollbotStopped(issue) {
+ return issue['messages'].some(function(message) { message['text'].match(/STOP/); })
+}
+
+rollbot.fetchCurrentRoll = function(callback) {
+ net.get(issueSearchURL, function(searchJSON) {
+ var issue = findRollIssue(searchJSON);
+ if (!issue) {
+ callback(null);
+ return;
+ }
+
+ var issueNumber = issue['issue'];
+ var subjectMatch = issue['subject'].match(rollSubjectRegexp);
+ callback({
+ 'issue': issueNumber,
+ 'url': config.kRietveldURL + "/" + issueNumber,
+ 'isStopped': isRollbotStopped(issue),
+ 'fromRevision': subjectMatch[1],
+ 'toRevision': subjectMatch[2],
+ });
+ });
+};
+
+})();
diff --git a/Tools/GardeningServer/scripts/rollbot_unittests.js b/Tools/GardeningServer/scripts/rollbot_unittests.js
new file mode 100644
index 0000000..059ab63
--- /dev/null
+++ b/Tools/GardeningServer/scripts/rollbot_unittests.js
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+(function () {
+
+module("rollbot");
+
+var kSearchResults = {
+ "cursor": "long_string_we_call_cursor",
+ "results": [
+ {
+ "description": "Blink roll 151668:151677\n\nhttp:\/\/build.chromium.org\/f\/chromium\/perf\/dashboard\/ui\/changelog_blink.html?url=\/trunk&range=151669:151677&mode=html\nTBR=\nBUG=",
+ "cc": [
+ "chromium-reviews@chromium.org",
+ ],
+ "reviewers": [
+ ],
+ "messages": [
+ {
+ "sender": "eseidel@chromium.org",
+ "recipients": [
+ "eseidel@chromium.org",
+ "chromium-reviews@chromium.org",
+ ],
+ "text": "This roll was automatically created by the Blink AutoRollBot (crbug.com\/242461).\n",
+ "disapproval": false,
+ "date": "2013-06-03 18:14:34.033780",
+ "approval": false
+ },
+ ],
+ "owner_email": "eseidel@chromium.org",
+ "private": false,
+ "base_url": "https:\/\/chromium.googlesource.com\/chromium\/src.git@master",
+ "owner": "eseidel",
+ "subject": "Blink roll 151668:151677",
+ "created": "2013-06-03 18:14:28.926040",
+ "patchsets": [
+ 1
+ ],
+ "modified": "2013-06-03 18:14:46.869990",
+ "closed": false,
+ "commit": true,
+ "issue": 16337011
+ },
+ {
+ "description": "Add --json-output option to layout_test_wrapper.py\n\nBUG=238381",
+ "cc": [
+ "chromium-reviews@chromium.org",
+ ],
+ "reviewers": [
+ "iannucci@chromium.org"
+ ],
+ "messages": [
+ {
+ "sender": "eseidel@chromium.org",
+ "recipients": [
+ "eseidel@chromium.org",
+ "chromium-reviews@chromium.org",
+ ],
+ "text": "I'm not quite sure how to test this code.\n\nI'm also ",
+ "disapproval": false,
+ "date": "2013-05-30 23:42:39.309160",
+ "approval": false
+ },
+ ]
+ }
+ ]
+};
+
+test("fetchCurrentRoll", 6, function() {
+ var simulator = new NetworkSimulator();
+ simulator.get = function(url, callback)
+ {
+ simulator.scheduleCallback(function() {
+ callback(kSearchResults);
+ });
+ };
+
+ simulator.runTest(function() {
+ rollbot.fetchCurrentRoll(function(roll) {
+ equals(roll.issue, 16337011);
+ equals(roll.url, "https://codereview.chromium.org/16337011");
+ equals(roll.isStopped, false);
+ equals(roll.fromRevision, "151668");
+ equals(roll.toRevision, "151677");
+ });
+ });
+});
+
+})();
diff --git a/Tools/GardeningServer/scripts/ui.js b/Tools/GardeningServer/scripts/ui.js
index 5cde93f..9690728 100644
--- a/Tools/GardeningServer/scripts/ui.js
+++ b/Tools/GardeningServer/scripts/ui.js
@@ -47,12 +47,12 @@
ui.urlForFlakinessDashboard = function(opt_testNameList)
{
var testsParameter = opt_testNameList ? opt_testNameList.join(',') : '';
- return 'http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=' + encodeURIComponent(testsParameter);
+ return 'http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=' + encodeURIComponent(testsParameter) + '&group=' + encodeURIComponent('@ToT - chromium.org');
}
ui.urlForEmbeddedFlakinessDashboard = function(opt_testNameList)
{
- return ui.urlForFlakinessDashboard(opt_testNameList) + '&showChrome=false';
+ return ui.urlForFlakinessDashboard(opt_testNameList) + '&showChrome=false&group=' + encodeURIComponent('@ToT - chromium.org');
}
ui.rolloutReasonForTestNameList = function(testNameList)
diff --git a/Tools/GardeningServer/scripts/ui/notifications_unittests.js b/Tools/GardeningServer/scripts/ui/notifications_unittests.js
index 18934cc..9c5c2e7 100644
--- a/Tools/GardeningServer/scripts/ui/notifications_unittests.js
+++ b/Tools/GardeningServer/scripts/ui/notifications_unittests.js
@@ -79,7 +79,7 @@
test('FailingTestGroup', 2, function() {
var failingTest = new ui.notifications.FailingTestGroup('test', ['test.html']);
equal(failingTest.tagName, 'LI');
- equal(failingTest.innerHTML, '<a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test.html" target="_blank">test</a>');
+ equal(failingTest.innerHTML, '<a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test.html&group=%40ToT%20-%20chromium.org" target="_blank">test</a>');
});
test('SuspiciousCommit', 2, function() {
@@ -130,7 +130,7 @@
'<div class="what">' +
'<div class="problem">' +
'<ul class="effects">' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test" target="_blank">test</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test&group=%40ToT%20-%20chromium.org" target="_blank">test</a></li>' +
'</ul>' +
'<ul class="actions">' +
'<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
@@ -153,7 +153,7 @@
'<div class="what">' +
'<div class="problem">' +
'<ul class="effects">' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test" target="_blank">test</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test&group=%40ToT%20-%20chromium.org" target="_blank">test</a></li>' +
'</ul>' +
'<ul class="actions">' +
'<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
@@ -178,7 +178,7 @@
'<div class="what">' +
'<div class="problem">' +
'<ul class="effects">' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test" target="_blank">test</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test&group=%40ToT%20-%20chromium.org" target="_blank">test</a></li>' +
'</ul>' +
'<ul class="actions">' +
'<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
@@ -218,8 +218,8 @@
'<div class="what">' +
'<div class="problem">' +
'<ul class="effects">' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=foo" target="_blank">foo</a></li>' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test" target="_blank">test</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=foo&group=%40ToT%20-%20chromium.org" target="_blank">foo</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test&group=%40ToT%20-%20chromium.org" target="_blank">test</a></li>' +
'</ul>' +
'<ul class="actions">' +
'<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
@@ -263,8 +263,8 @@
'<div class="what">' +
'<div class="problem">' +
'<ul class="effects">' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=foo" target="_blank">foo</a></li>' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test" target="_blank">test</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=foo&group=%40ToT%20-%20chromium.org" target="_blank">foo</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=test&group=%40ToT%20-%20chromium.org" target="_blank">test</a></li>' +
'</ul>' +
'<ul class="actions">' +
'<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
@@ -304,8 +304,8 @@
'<div class="what">' +
'<div class="problem">' +
'<ul class="effects">' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=path%2Fto%2Ftest1.html%2Cpath%2Fto%2Ftest2.html%2Cpath%2Fto%2Ftest3.html%2Cpath%2Fto%2Ftest4.html" target="_blank">path/to (4 tests)</a></li>' +
- '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=path%2Fanother%2Ftest.html" target="_blank">path/another/test.html</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=path%2Fto%2Ftest1.html%2Cpath%2Fto%2Ftest2.html%2Cpath%2Fto%2Ftest3.html%2Cpath%2Fto%2Ftest4.html&group=%40ToT%20-%20chromium.org" target="_blank">path/to (4 tests)</a></li>' +
+ '<li><a href="http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=path%2Fanother%2Ftest.html&group=%40ToT%20-%20chromium.org" target="_blank">path/another/test.html</a></li>' +
'</ul>' +
'<ul class="actions">' +
'<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
diff --git a/Tools/Scripts/print-json-test-results b/Tools/Scripts/print-json-test-results
index f252884..b0f2c4c 100755
--- a/Tools/Scripts/print-json-test-results
+++ b/Tools/Scripts/print-json-test-results
@@ -15,6 +15,8 @@
help='include expected results along with unexpected')
parser.add_option('--passes', action='store_true',
help='show passing tests')
+ parser.add_option('--ignored-failures-path', action='store',
+ help='ignore failures seen in a previous run')
options, args = parser.parse_args(argv)
if args and args[0] != '-':
@@ -42,6 +44,25 @@
tests_to_print += flakes.keys()
print "\n".join(sorted(tests_to_print))
+ if options.ignored_failures_path:
+ with open(options.ignored_failures_path, 'r') as fp:
+ txt = fp.read()
+ if txt.startswith('ADD_RESULTS(') and txt.endswith(');'):
+ txt = txt[12:-2] # ignore optional JSONP wrapper
+ results = json.loads(txt)
+ _, ignored_failures, _ = decode_results(results, options.expected)
+ new_failures = set(failures.keys()) - set(ignored_failures.keys())
+ if new_failures:
+ print "New failures:"
+ print "\n".join(sorted(new_failures))
+ print
+ if ignored_failures:
+ print "Ignored failures:"
+ print "\n".join(sorted(ignored_failures.keys()))
+ if new_failures:
+ return 1
+ return 0
+
def decode_results(results, include_expected=False):
tests = convert_trie_to_flat_paths(results['tests'])
@@ -78,4 +99,4 @@
if __name__ == '__main__':
- main(sys.argv[1:])
+ sys.exit(main(sys.argv[1:]))
diff --git a/Tools/Scripts/print-layout-test-times b/Tools/Scripts/print-layout-test-times
new file mode 100755
index 0000000..47400d9
--- /dev/null
+++ b/Tools/Scripts/print-layout-test-times
@@ -0,0 +1,73 @@
+#!/usr/bin/python
+import json
+import optparse
+import os
+import sys
+
+from webkitpy.common.host import Host
+
+def main(argv):
+ parser = optparse.OptionParser(usage='%prog [times_ms.json]')
+ parser.add_option('-f', '--forward', action='store', type='int',
+ help='group times by first N directories of test')
+ parser.add_option('-b', '--backward', action='store', type='int',
+ help='group times by last N directories of test')
+
+ epilog = """
+ You can print out aggregate times per directory using the -f and -b
+ flags. The value passed to each flag indicates the "depth" of the flag,
+ similar to positive and negative arguments to python arrays.
+
+ For example, given fast/forms/week/week-input-type.html, -f 1
+ truncates to 'fast', -f 2 and -b 2 truncates to 'fast/forms', and -b 1
+ truncates to fast/forms/week . -f 0 truncates to '', which can be used
+ to produce a single total time for the run."""
+ parser.epilog = '\n'.join(s.lstrip() for s in epilog.splitlines())
+
+ options, args = parser.parse_args(argv)
+ host = Host()
+ if args and args[0]:
+ times_ms_path = args[0]
+ else:
+ times_ms_path = host.filesystem.join(host.port_factory.get().results_directory(), 'times_ms.json')
+
+ with open(times_ms_path, 'r') as fp:
+ times_trie = json.load(fp)
+
+ times = convert_trie_to_flat_paths(times_trie)
+
+ def key_for(path):
+ if options.forward is not None:
+ return os.sep.join(path.split(os.sep)[:-1][:options.forward])
+ if options.backward is not None:
+ return os.sep.join(path.split(os.sep)[:-options.backward])
+ return path
+
+ times_by_key = {}
+ for test_name in times:
+ key = key_for(test_name)
+ if key in times_by_key:
+ times_by_key[key] += times[test_name]
+ else:
+ times_by_key[key] = times[test_name]
+
+ for key in sorted(times_by_key):
+ print "%s %d" % (key, times_by_key[key])
+
+def convert_trie_to_flat_paths(trie, prefix=None):
+ # Cloned from webkitpy.layout_tests.layout_package.json_results_generator
+ # so that this code can stand alone.
+ result = {}
+ for name, data in trie.iteritems():
+ if prefix:
+ name = prefix + "/" + name
+ if isinstance(data, int):
+ result[name] = data
+ else:
+ result.update(convert_trie_to_flat_paths(data, name))
+
+ return result
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
diff --git a/Tools/Scripts/run-leaks b/Tools/Scripts/run-leaks
deleted file mode 100755
index 4642637..0000000
--- a/Tools/Scripts/run-leaks
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright (C) 2007 Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
-# its contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Script to run the Mac OS X leaks tool with more expressive '-exclude' lists.
-
-use strict;
-use warnings;
-
-use File::Basename;
-use Getopt::Long;
-
-sub runLeaks($);
-sub parseLeaksOutput(\@);
-sub removeMatchingRecords(\@$\@);
-sub reportError($);
-
-sub main()
-{
- # Read options.
- my $usage =
- "Usage: " . basename($0) . " [options] pid | executable name\n" .
- " --exclude-callstack regexp Exclude leaks whose call stacks match the regular expression 'regexp'.\n" .
- " --exclude-type regexp Exclude leaks whose data types match the regular expression 'regexp'.\n" .
- " --help Show this help message.\n";
-
- my @callStacksToExclude = ();
- my @typesToExclude = ();
- my $help = 0;
-
- my $getOptionsResult = GetOptions(
- 'exclude-callstack:s' => \@callStacksToExclude,
- 'exclude-type:s' => \@typesToExclude,
- 'help' => \$help
- );
- my $pidOrExecutableName = $ARGV[0];
-
- if (!$getOptionsResult || $help) {
- print STDERR $usage;
- return 1;
- }
-
- if (!$pidOrExecutableName) {
- reportError("Missing argument: pid | executable.");
- print STDERR $usage;
- return 1;
- }
-
- # Run leaks tool.
- my $leaksOutput = runLeaks($pidOrExecutableName);
- if (!$leaksOutput) {
- return 1;
- }
-
- my $leakList = parseLeaksOutput(@$leaksOutput);
- if (!$leakList) {
- return 1;
- }
-
- # Filter output.
- my $leakCount = @$leakList;
- removeMatchingRecords(@$leakList, "callStack", @callStacksToExclude);
- removeMatchingRecords(@$leakList, "type", @typesToExclude);
- my $excludeCount = $leakCount - @$leakList;
-
- # Dump results.
- print $leaksOutput->[0];
- print $leaksOutput->[1];
- foreach my $leak (@$leakList) {
- print $leak->{"leaksOutput"};
- }
-
- if ($excludeCount) {
- print "$excludeCount leaks excluded (not printed)\n";
- }
-
- return 0;
-}
-
-exit(main());
-
-# Returns the output of the leaks tool in list form.
-sub runLeaks($)
-{
- my ($pidOrExecutableName) = @_;
-
- my @leaksOutput = `leaks $pidOrExecutableName`;
- if (!@leaksOutput) {
- reportError("Error running leaks tool.");
- return;
- }
-
- return \@leaksOutput;
-}
-
-# Returns a list of hash references with the keys { address, size, type, callStack, leaksOutput }
-sub parseLeaksOutput(\@)
-{
- my ($leaksOutput) = @_;
-
- # Format:
- # Process 00000: 1234 nodes malloced for 1234 KB
- # Process 00000: XX leaks for XXX total leaked bytes.
- # Leak: 0x00000000 size=1234 [instance of 'blah']
- # 0x00000000 0x00000000 0x00000000 0x00000000 a..d.e.e
- # ...
- # Call stack: leak_caller() | leak() | malloc
- #
- # We treat every line except for Process 00000: and Leak: as optional
-
- # Skip header section until the first two "Process " lines.
- # FIXME: In the future we may wish to propagate the header section through to our output.
- until ($leaksOutput->[0] =~ /^Process /) {
- shift @$leaksOutput;
- }
-
- my ($leakCount) = ($leaksOutput->[1] =~ /[[:blank:]]+([0-9]+)[[:blank:]]+leaks?/);
- if (!defined($leakCount)) {
- reportError("Could not parse leak count reported by leaks tool.");
- return;
- }
-
- my @leakList = ();
- for my $line (@$leaksOutput) {
- next if $line =~ /^Process/;
- next if $line =~ /^node buffer added/;
-
- if ($line =~ /^Leak: /) {
- my ($address) = ($line =~ /Leak: ([[:xdigit:]x]+)/);
- if (!defined($address)) {
- reportError("Could not parse Leak address.");
- return;
- }
-
- my ($size) = ($line =~ /size=([[:digit:]]+)/);
- if (!defined($size)) {
- reportError("Could not parse Leak size.");
- return;
- }
-
- my ($type) = ($line =~ /'([^']+)'/); #'
- if (!defined($type)) {
- $type = ""; # The leaks tool sometimes omits the type.
- }
-
- my %leak = (
- "address" => $address,
- "size" => $size,
- "type" => $type,
- "callStack" => "", # The leaks tool sometimes omits the call stack.
- "leaksOutput" => $line
- );
- push(@leakList, \%leak);
- } else {
- $leakList[$#leakList]->{"leaksOutput"} .= $line;
- if ($line =~ /Call stack:/) {
- $leakList[$#leakList]->{"callStack"} = $line;
- }
- }
- }
-
- if (@leakList != $leakCount) {
- my $parsedLeakCount = @leakList;
- reportError("Parsed leak count($parsedLeakCount) does not match leak count reported by leaks tool($leakCount).");
- return;
- }
-
- return \@leakList;
-}
-
-sub removeMatchingRecords(\@$\@)
-{
- my ($recordList, $key, $regexpList) = @_;
-
- RECORD: for (my $i = 0; $i < @$recordList;) {
- my $record = $recordList->[$i];
-
- foreach my $regexp (@$regexpList) {
- if ($record->{$key} =~ $regexp) {
- splice(@$recordList, $i, 1);
- next RECORD;
- }
- }
-
- $i++;
- }
-}
-
-sub reportError($)
-{
- my ($errorMessage) = @_;
-
- print STDERR basename($0) . ": $errorMessage\n";
-}
diff --git a/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl b/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl
deleted file mode 100644
index 3f315c3..0000000
--- a/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (C) 2011 Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# tests run-leaks using original leaks report version 1.0
-
-use strict;
-use warnings;
-
-use File::Spec;
-use FindBin;
-use lib File::Spec->catdir($FindBin::Bin, "..");
-use Test::More;
-use LoadAsModule qw(RunLeaks run-leaks);
-
-my @input = split(/\n/, <<EOF);
-Process 1602: 86671 nodes malloced for 13261 KB
-Process 1602: 8 leaks for 160 total leaked bytes.
-Leak: 0x114d54708 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x18571798 0x00000001 0x00000000 0x00000000 ..W.............
-Leak: 0x1184b92b8 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x184b9048 0x00000001 0x00000000 0x00000000 H.K.............
-Leak: 0x1184c84c8 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x1854e3d8 0x00000001 0x00000000 0x00000000 ..T.............
-Leak: 0x11854e3d8 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x1854e360 0x00000001 0x00000000 0x00000000 `.T.............
-Leak: 0x118571798 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x184c84c8 0x00000001 0x00000000 0x00000000 ..L.............
-Leak: 0x11858b498 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x1858b4e0 0x00000001 0x00000000 0x00000000 ..X.............
-Leak: 0x118572530 size=8 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
-Leak: 0x118572538 size=8 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
-EOF
-
-my $expectedOutput =
-[
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x114d54708 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x18571798 0x00000001 0x00000000 0x00000000 ..W.............
-EOF
- 'callStack' => '',
- 'address' => '0x114d54708',
- 'size' => '24',
- 'type' => '',
- },
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x1184b92b8 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x184b9048 0x00000001 0x00000000 0x00000000 H.K.............
-EOF
- 'callStack' => '',
- 'address' => '0x1184b92b8',
- 'size' => '24',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x1184c84c8 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x1854e3d8 0x00000001 0x00000000 0x00000000 ..T.............
-EOF
- 'callStack' => '',
- 'address' => '0x1184c84c8',
- 'size' => '24',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x11854e3d8 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x1854e360 0x00000001 0x00000000 0x00000000 `.T.............
-EOF
- 'callStack' => '',
- 'address' => '0x11854e3d8',
- 'size' => '24',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x118571798 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x184c84c8 0x00000001 0x00000000 0x00000000 ..L.............
-EOF
- 'callStack' => '',
- 'address' => '0x118571798',
- 'size' => '24',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x11858b498 size=24 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
- 0x1858b4e0 0x00000001 0x00000000 0x00000000 ..X.............
-EOF
- 'callStack' => '',
- 'address' => '0x11858b498',
- 'size' => '24',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x118572530 size=8 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
-EOF
- 'callStack' => '',
- 'address' => '0x118572530',
- 'size' => '8',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x118572538 size=8 zone: JavaScriptCore FastMalloc_0x7fff70a09d20
-
-EOF
- 'callStack' => '',
- 'address' => '0x118572538',
- 'size' => '8',
- 'type' => '',
- },
-];
-
-my $actualOutput = RunLeaks::parseLeaksOutput(@input);
-
-plan(tests => 1);
-is_deeply($actualOutput, $expectedOutput, "leaks Report Version 1.0 - no call stack");
diff --git a/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl b/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl
deleted file mode 100644
index c4b6b2c..0000000
--- a/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (C) 2011 Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# tests run-leaks using "new" leaks report version 2.0
-# - The "new" 2.0 format has "leaks Report Version: 2.0" after the two header sections.
-
-use strict;
-use warnings;
-
-use File::Spec;
-use FindBin;
-use lib File::Spec->catdir($FindBin::Bin, "..");
-use Test::More;
-use LoadAsModule qw(RunLeaks run-leaks);
-
-my @input = split(/\n/, <<EOF);
-Process: DumpRenderTree [29903]
-Path: /Volumes/Data/Build/Debug/DumpRenderTree
-Load Address: 0x102116000
-Identifier: DumpRenderTree
-Version: ??? (???)
-Code Type: X86-64 (Native)
-Parent Process: Python [29892]
-
-Date/Time: 2011-11-14 11:12:45.706 -0800
-OS Version: Mac OS X 10.7.2 (11C74)
-Report Version: 7
-
-leaks Report Version: 2.0
-leaks(12871,0xacdfa2c0) malloc: process 89617 no longer exists, stack logs deleted from /tmp/stack-logs.89617.DumpRenderTree.A2giy6.index
-Process 29903: 60015 nodes malloced for 7290 KB
-Process 29903: 2 leaks for 1008 total leaked bytes.
-Leak: 0x7f9a3a612810 size=576 zone: DefaultMallocZone_0x10227b000 URLConnectionLoader::LoaderConnectionEventQueue C++ CFNetwork
- 0x7f3af460 0x00007fff 0x7edf2f40 0x00007fff `.:.....@/.~....
- 0x7f3af488 0x00007fff 0xdab071b1 0x0000f068 ..:......q..h...
- 0x0100000a 0x00000000 0x7edf3f50 0x00007fff ........P?.~....
- 0x00000000 0x00000000 0xdab071cc 0x0000f068 .........q..h...
- 0x01000010 0x00000000 0x3a616210 0x00007f9a .........ba:....
- 0x00000000 0x00000000 0xdab071e5 0x0000f068 .........q..h...
- 0x00000000 0x00000000 0x00000000 0x00000000 ................
- 0x00000000 0x00000000 0xdab07245 0x0000f068 ........Er..h...
- ...
- Call stack: [thread 0x7fff7e3b4960]: | start | main DumpRenderTree.mm:835 | dumpRenderTree(int, char const**) DumpRenderTree.mm:794 | _ZL20runTestingServerLoopv DumpRenderTree.mm:744 | _ZL7runTestRKSs DumpRenderTree.mm:1273 | -[NSRunLoop(NSRunLoop) runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ | MultiplexerSource::perform() | URLConnectionClient::processEvents() | URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) | URLConnectionClient::_clientWillSendRequest(_CFURLRequest const*, _CFURLResponse*, URLConnectionClient::ClientConnectionEventQueue*) | URLConnectionClient::getRequestForTransmission(unsigned char, _CFURLResponse*, _CFURLRequest const*, __CFError**) | URLConnectionLoader::pushLoaderEvent(XConnectionEventInfo<XLoaderEvent, XLoaderEventParams>*) | CFAllocatedObject::operator new(unsigned long, __CFAllocator const*) | malloc_zone_malloc
-Leak: 0x7f9a3a618090 size=432 zone: DefaultMallocZone_0x10227b000 URLConnectionInstanceData CFType CFNetwork
- 0x7edcab28 0x00007fff 0x00012b80 0x00000001 (..~.....+......
- 0x7f3af310 0x00007fff 0x7f3af3f8 0x00007fff ..:.......:.....
- 0x4d555458 0x00000000 0x00000000 0x00002068 XTUM........h ..
- 0x00000000 0x00000000 0x00000c00 0x00000c00 ................
- 0x00000000 0x00000000 0x3a6180c8 0x00007f9a ..........a:....
- 0x3a6180cc 0x00007f9a 0x00000000 0x00000000 ..a:............
- 0x7f3af418 0x00007fff 0x3a618060 0x00007f9a ..:.....`.a:....
- 0x7f3af440 0x00007fff 0x00005813 0x00000001 @.:......X......
- ...
- Call stack: [thread 0x7fff7e3b4960]: | start | main DumpRenderTree.mm:835 | dumpRenderTree(int, char const**) DumpRenderTree.mm:794 | _ZL20runTestingServerLoopv DumpRenderTree.mm:744 | _ZL7runTestRKSs DumpRenderTree.mm:1273 | -[NSRunLoop(NSRunLoop) runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoTimer | __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ | _ZN7WebCoreL10timerFiredEP16__CFRunLoopTimerPv SharedTimerMac.mm:167 | WebCore::ThreadTimers::sharedTimerFired() ThreadTimers.cpp:94 | WebCore::ThreadTimers::sharedTimerFiredInternal() ThreadTimers.cpp:118 | WebCore::Timer<WebCore::DocumentLoader>::fired() Timer.h:100 | WebCore::DocumentLoader::substituteResourceDeliveryTimerFired(WebCore::Timer<WebCore::DocumentLoader>*) DocumentLoader.cpp:600 | WebCore::SubresourceLoader::didFinishLoading(double) SubresourceLoader.cpp:191 | WebCore::CachedResourceRequest::didFinishLoading(WebCore::SubresourceLoader*, double) CachedResourceRequest.cpp:196 | WebCore::CachedRawResource::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) CachedRawResource.cpp:67 | WebCore::CachedResource::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) CachedResource.cpp:166 | WebCore::CachedResource::checkNotify() CachedResource.cpp:156 | non-virtual thunk to WebCore::DocumentThreadableLoader::notifyFinished(WebCore::CachedResource*) | WebCore::DocumentThreadableLoader::notifyFinished(WebCore::CachedResource*) DocumentThreadableLoader.cpp:262 | WebCore::DocumentThreadableLoader::didFinishLoading(unsigned long, double) DocumentThreadableLoader.cpp:277 | non-virtual thunk to WebCore::XMLHttpRequest::didFinishLoading(unsigned long, double) | WebCore::XMLHttpRequest::didFinishLoading(unsigned long, double) XMLHttpRequest.cpp:1008 | WebCore::XMLHttpRequest::changeState(WebCore::XMLHttpRequest::State) XMLHttpRequest.cpp:329 | WebCore::XMLHttpRequest::callReadyStateChangeListener() XMLHttpRequest.cpp:345 | WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent(WTF::PassRefPtr<WebCore::Event>, WebCore::ProgressEventAction) XMLHttpRequestProgressEventThrottle.cpp:81 | WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr<WebCore::Event>) EventTarget.cpp:176 | WebCore::EventTarget::fireEventListeners(WebCore::Event*) EventTarget.cpp:199 | WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul>&) EventTarget.cpp:214 | WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) JSEventListener.cpp:128 | WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) JSMainThreadExecState.h:52 | JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) CallData.cpp:39 | JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) Interpreter.cpp:986 | JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*) JITCode.h:115 | 0x2298f4c011f8 | WebCore::jsXMLHttpRequestPrototypeFunctionSend(JSC::ExecState*) JSXMLHttpRequest.cpp:604 | WebCore::JSXMLHttpRequest::send(JSC::ExecState*) JSXMLHttpRequestCustom.cpp:132 | WebCore::XMLHttpRequest::send(WTF::String const&, int&) XMLHttpRequest.cpp:544 | WebCore::XMLHttpRequest::createRequest(int&) XMLHttpRequest.cpp:665 | WebCore::ThreadableLoader::create(WebCore::ScriptExecutionContext*, WebCore::ThreadableLoaderClient*, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) ThreadableLoader.cpp:54 | WebCore::DocumentThreadableLoader::create(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:65 | WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:111 | WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:88 | WebCore::DocumentThreadableLoader::loadRequest(WebCore::ResourceRequest const&, WebCore::SecurityCheckPolicy) DocumentThreadableLoader.cpp:337 | WebCore::CachedResourceLoader::requestRawResource(WebCore::ResourceRequest&, WebCore::ResourceLoaderOptions const&) CachedResourceLoader.cpp:225 | WebCore::CachedResourceLoader::requestResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&, WTF::String const&, WebCore::ResourceLoaderOptions const&, WebCore::ResourceLoadPriority, bool) CachedResourceLoader.cpp:400 | WebCore::CachedResourceLoader::loadResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&, WTF::String const&, WebCore::ResourceLoadPriority, WebCore::ResourceLoaderOptions const&) CachedResourceLoader.cpp:469 | WebCore::CachedResource::load(WebCore::CachedResourceLoader*, WebCore::ResourceLoaderOptions const&) CachedResource.cpp:142 | WebCore::CachedResourceRequest::load(WebCore::CachedResourceLoader*, WebCore::CachedResource*, WebCore::ResourceLoaderOptions const&) CachedResourceRequest.cpp:135 | WebCore::ResourceLoadScheduler::scheduleSubresourceLoad(WebCore::Frame*, WebCore::SubresourceLoaderClient*, WebCore::ResourceRequest const&, WebCore::ResourceLoadPriority, WebCore::ResourceLoaderOptions const&) ResourceLoadScheduler.cpp:92 | WebCore::ResourceLoadScheduler::scheduleLoad(WebCore::ResourceLoader*, WebCore::ResourceLoadPriority) ResourceLoadScheduler.cpp:132 | WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadScheduler::HostInformation*, WebCore::ResourceLoadPriority) ResourceLoadScheduler.cpp:210 | WebCore::ResourceLoader::start() ResourceLoader.cpp:162 | WebCore::ResourceHandle::create(WebCore::NetworkingContext*, WebCore::ResourceRequest const&, WebCore::ResourceHandleClient*, bool, bool) ResourceHandle.cpp:71 | WebCore::ResourceHandle::start(WebCore::NetworkingContext*) ResourceHandleMac.mm:278 | WebCore::ResourceHandle::createNSURLConnection(objc_object*, bool, bool) ResourceHandleMac.mm:238 | -[NSURLConnection(NSURLConnectionPrivate) _initWithRequest:delegate:usesCache:maxContentLength:startImmediately:connectionProperties:] | CFURLConnectionCreateWithProperties | URLConnection::initialize(_CFURLRequest const*, CFURLConnectionClient_V1*, __CFDictionary const*) | CFObject::Allocate(unsigned long, CFClass const&, __CFAllocator const*) | _CFRuntimeCreateInstance | malloc_zone_malloc
-EOF
-
-my $expectedOutput =
-[
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x7f9a3a612810 size=576 zone: DefaultMallocZone_0x10227b000 URLConnectionLoader::LoaderConnectionEventQueue C++ CFNetwork
- 0x7f3af460 0x00007fff 0x7edf2f40 0x00007fff `.:.....@/.~....
- 0x7f3af488 0x00007fff 0xdab071b1 0x0000f068 ..:......q..h...
- 0x0100000a 0x00000000 0x7edf3f50 0x00007fff ........P?.~....
- 0x00000000 0x00000000 0xdab071cc 0x0000f068 .........q..h...
- 0x01000010 0x00000000 0x3a616210 0x00007f9a .........ba:....
- 0x00000000 0x00000000 0xdab071e5 0x0000f068 .........q..h...
- 0x00000000 0x00000000 0x00000000 0x00000000 ................
- 0x00000000 0x00000000 0xdab07245 0x0000f068 ........Er..h...
- ...
- Call stack: [thread 0x7fff7e3b4960]: | start | main DumpRenderTree.mm:835 | dumpRenderTree(int, char const**) DumpRenderTree.mm:794 | _ZL20runTestingServerLoopv DumpRenderTree.mm:744 | _ZL7runTestRKSs DumpRenderTree.mm:1273 | -[NSRunLoop(NSRunLoop) runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ | MultiplexerSource::perform() | URLConnectionClient::processEvents() | URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) | URLConnectionClient::_clientWillSendRequest(_CFURLRequest const*, _CFURLResponse*, URLConnectionClient::ClientConnectionEventQueue*) | URLConnectionClient::getRequestForTransmission(unsigned char, _CFURLResponse*, _CFURLRequest const*, __CFError**) | URLConnectionLoader::pushLoaderEvent(XConnectionEventInfo<XLoaderEvent, XLoaderEventParams>*) | CFAllocatedObject::operator new(unsigned long, __CFAllocator const*) | malloc_zone_malloc
-EOF
- 'callStack' =>
-' Call stack: [thread 0x7fff7e3b4960]: | start | main DumpRenderTree.mm:835 | dumpRenderTree(int, char const**) DumpRenderTree.mm:794 | _ZL20runTestingServerLoopv DumpRenderTree.mm:744 | _ZL7runTestRKSs DumpRenderTree.mm:1273 | -[NSRunLoop(NSRunLoop) runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ | MultiplexerSource::perform() | URLConnectionClient::processEvents() | URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) | URLConnectionClient::_clientWillSendRequest(_CFURLRequest const*, _CFURLResponse*, URLConnectionClient::ClientConnectionEventQueue*) | URLConnectionClient::getRequestForTransmission(unsigned char, _CFURLResponse*, _CFURLRequest const*, __CFError**) | URLConnectionLoader::pushLoaderEvent(XConnectionEventInfo<XLoaderEvent, XLoaderEventParams>*) | CFAllocatedObject::operator new(unsigned long, __CFAllocator const*) | malloc_zone_malloc ',
- 'address' => '0x7f9a3a612810',
- 'size' => '576',
- 'type' => '',
- },
-
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x7f9a3a618090 size=432 zone: DefaultMallocZone_0x10227b000 URLConnectionInstanceData CFType CFNetwork
- 0x7edcab28 0x00007fff 0x00012b80 0x00000001 (..~.....+......
- 0x7f3af310 0x00007fff 0x7f3af3f8 0x00007fff ..:.......:.....
- 0x4d555458 0x00000000 0x00000000 0x00002068 XTUM........h ..
- 0x00000000 0x00000000 0x00000c00 0x00000c00 ................
- 0x00000000 0x00000000 0x3a6180c8 0x00007f9a ..........a:....
- 0x3a6180cc 0x00007f9a 0x00000000 0x00000000 ..a:............
- 0x7f3af418 0x00007fff 0x3a618060 0x00007f9a ..:.....`.a:....
- 0x7f3af440 0x00007fff 0x00005813 0x00000001 @.:......X......
- ...
- Call stack: [thread 0x7fff7e3b4960]: | start | main DumpRenderTree.mm:835 | dumpRenderTree(int, char const**) DumpRenderTree.mm:794 | _ZL20runTestingServerLoopv DumpRenderTree.mm:744 | _ZL7runTestRKSs DumpRenderTree.mm:1273 | -[NSRunLoop(NSRunLoop) runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoTimer | __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ | _ZN7WebCoreL10timerFiredEP16__CFRunLoopTimerPv SharedTimerMac.mm:167 | WebCore::ThreadTimers::sharedTimerFired() ThreadTimers.cpp:94 | WebCore::ThreadTimers::sharedTimerFiredInternal() ThreadTimers.cpp:118 | WebCore::Timer<WebCore::DocumentLoader>::fired() Timer.h:100 | WebCore::DocumentLoader::substituteResourceDeliveryTimerFired(WebCore::Timer<WebCore::DocumentLoader>*) DocumentLoader.cpp:600 | WebCore::SubresourceLoader::didFinishLoading(double) SubresourceLoader.cpp:191 | WebCore::CachedResourceRequest::didFinishLoading(WebCore::SubresourceLoader*, double) CachedResourceRequest.cpp:196 | WebCore::CachedRawResource::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) CachedRawResource.cpp:67 | WebCore::CachedResource::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) CachedResource.cpp:166 | WebCore::CachedResource::checkNotify() CachedResource.cpp:156 | non-virtual thunk to WebCore::DocumentThreadableLoader::notifyFinished(WebCore::CachedResource*) | WebCore::DocumentThreadableLoader::notifyFinished(WebCore::CachedResource*) DocumentThreadableLoader.cpp:262 | WebCore::DocumentThreadableLoader::didFinishLoading(unsigned long, double) DocumentThreadableLoader.cpp:277 | non-virtual thunk to WebCore::XMLHttpRequest::didFinishLoading(unsigned long, double) | WebCore::XMLHttpRequest::didFinishLoading(unsigned long, double) XMLHttpRequest.cpp:1008 | WebCore::XMLHttpRequest::changeState(WebCore::XMLHttpRequest::State) XMLHttpRequest.cpp:329 | WebCore::XMLHttpRequest::callReadyStateChangeListener() XMLHttpRequest.cpp:345 | WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent(WTF::PassRefPtr<WebCore::Event>, WebCore::ProgressEventAction) XMLHttpRequestProgressEventThrottle.cpp:81 | WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr<WebCore::Event>) EventTarget.cpp:176 | WebCore::EventTarget::fireEventListeners(WebCore::Event*) EventTarget.cpp:199 | WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul>&) EventTarget.cpp:214 | WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) JSEventListener.cpp:128 | WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) JSMainThreadExecState.h:52 | JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) CallData.cpp:39 | JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) Interpreter.cpp:986 | JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*) JITCode.h:115 | 0x2298f4c011f8 | WebCore::jsXMLHttpRequestPrototypeFunctionSend(JSC::ExecState*) JSXMLHttpRequest.cpp:604 | WebCore::JSXMLHttpRequest::send(JSC::ExecState*) JSXMLHttpRequestCustom.cpp:132 | WebCore::XMLHttpRequest::send(WTF::String const&, int&) XMLHttpRequest.cpp:544 | WebCore::XMLHttpRequest::createRequest(int&) XMLHttpRequest.cpp:665 | WebCore::ThreadableLoader::create(WebCore::ScriptExecutionContext*, WebCore::ThreadableLoaderClient*, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) ThreadableLoader.cpp:54 | WebCore::DocumentThreadableLoader::create(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:65 | WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:111 | WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:88 | WebCore::DocumentThreadableLoader::loadRequest(WebCore::ResourceRequest const&, WebCore::SecurityCheckPolicy) DocumentThreadableLoader.cpp:337 | WebCore::CachedResourceLoader::requestRawResource(WebCore::ResourceRequest&, WebCore::ResourceLoaderOptions const&) CachedResourceLoader.cpp:225 | WebCore::CachedResourceLoader::requestResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&, WTF::String const&, WebCore::ResourceLoaderOptions const&, WebCore::ResourceLoadPriority, bool) CachedResourceLoader.cpp:400 | WebCore::CachedResourceLoader::loadResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&, WTF::String const&, WebCore::ResourceLoadPriority, WebCore::ResourceLoaderOptions const&) CachedResourceLoader.cpp:469 | WebCore::CachedResource::load(WebCore::CachedResourceLoader*, WebCore::ResourceLoaderOptions const&) CachedResource.cpp:142 | WebCore::CachedResourceRequest::load(WebCore::CachedResourceLoader*, WebCore::CachedResource*, WebCore::ResourceLoaderOptions const&) CachedResourceRequest.cpp:135 | WebCore::ResourceLoadScheduler::scheduleSubresourceLoad(WebCore::Frame*, WebCore::SubresourceLoaderClient*, WebCore::ResourceRequest const&, WebCore::ResourceLoadPriority, WebCore::ResourceLoaderOptions const&) ResourceLoadScheduler.cpp:92 | WebCore::ResourceLoadScheduler::scheduleLoad(WebCore::ResourceLoader*, WebCore::ResourceLoadPriority) ResourceLoadScheduler.cpp:132 | WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadScheduler::HostInformation*, WebCore::ResourceLoadPriority) ResourceLoadScheduler.cpp:210 | WebCore::ResourceLoader::start() ResourceLoader.cpp:162 | WebCore::ResourceHandle::create(WebCore::NetworkingContext*, WebCore::ResourceRequest const&, WebCore::ResourceHandleClient*, bool, bool) ResourceHandle.cpp:71 | WebCore::ResourceHandle::start(WebCore::NetworkingContext*) ResourceHandleMac.mm:278 | WebCore::ResourceHandle::createNSURLConnection(objc_object*, bool, bool) ResourceHandleMac.mm:238 | -[NSURLConnection(NSURLConnectionPrivate) _initWithRequest:delegate:usesCache:maxContentLength:startImmediately:connectionProperties:] | CFURLConnectionCreateWithProperties | URLConnection::initialize(_CFURLRequest const*, CFURLConnectionClient_V1*, __CFDictionary const*) | CFObject::Allocate(unsigned long, CFClass const&, __CFAllocator const*) | _CFRuntimeCreateInstance | malloc_zone_malloc
-EOF
- 'callStack' =>
-' Call stack: [thread 0x7fff7e3b4960]: | start | main DumpRenderTree.mm:835 | dumpRenderTree(int, char const**) DumpRenderTree.mm:794 | _ZL20runTestingServerLoopv DumpRenderTree.mm:744 | _ZL7runTestRKSs DumpRenderTree.mm:1273 | -[NSRunLoop(NSRunLoop) runMode:beforeDate:] | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoTimer | __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ | _ZN7WebCoreL10timerFiredEP16__CFRunLoopTimerPv SharedTimerMac.mm:167 | WebCore::ThreadTimers::sharedTimerFired() ThreadTimers.cpp:94 | WebCore::ThreadTimers::sharedTimerFiredInternal() ThreadTimers.cpp:118 | WebCore::Timer<WebCore::DocumentLoader>::fired() Timer.h:100 | WebCore::DocumentLoader::substituteResourceDeliveryTimerFired(WebCore::Timer<WebCore::DocumentLoader>*) DocumentLoader.cpp:600 | WebCore::SubresourceLoader::didFinishLoading(double) SubresourceLoader.cpp:191 | WebCore::CachedResourceRequest::didFinishLoading(WebCore::SubresourceLoader*, double) CachedResourceRequest.cpp:196 | WebCore::CachedRawResource::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) CachedRawResource.cpp:67 | WebCore::CachedResource::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) CachedResource.cpp:166 | WebCore::CachedResource::checkNotify() CachedResource.cpp:156 | non-virtual thunk to WebCore::DocumentThreadableLoader::notifyFinished(WebCore::CachedResource*) | WebCore::DocumentThreadableLoader::notifyFinished(WebCore::CachedResource*) DocumentThreadableLoader.cpp:262 | WebCore::DocumentThreadableLoader::didFinishLoading(unsigned long, double) DocumentThreadableLoader.cpp:277 | non-virtual thunk to WebCore::XMLHttpRequest::didFinishLoading(unsigned long, double) | WebCore::XMLHttpRequest::didFinishLoading(unsigned long, double) XMLHttpRequest.cpp:1008 | WebCore::XMLHttpRequest::changeState(WebCore::XMLHttpRequest::State) XMLHttpRequest.cpp:329 | WebCore::XMLHttpRequest::callReadyStateChangeListener() XMLHttpRequest.cpp:345 | WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent(WTF::PassRefPtr<WebCore::Event>, WebCore::ProgressEventAction) XMLHttpRequestProgressEventThrottle.cpp:81 | WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr<WebCore::Event>) EventTarget.cpp:176 | WebCore::EventTarget::fireEventListeners(WebCore::Event*) EventTarget.cpp:199 | WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul>&) EventTarget.cpp:214 | WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) JSEventListener.cpp:128 | WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) JSMainThreadExecState.h:52 | JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) CallData.cpp:39 | JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) Interpreter.cpp:986 | JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*) JITCode.h:115 | 0x2298f4c011f8 | WebCore::jsXMLHttpRequestPrototypeFunctionSend(JSC::ExecState*) JSXMLHttpRequest.cpp:604 | WebCore::JSXMLHttpRequest::send(JSC::ExecState*) JSXMLHttpRequestCustom.cpp:132 | WebCore::XMLHttpRequest::send(WTF::String const&, int&) XMLHttpRequest.cpp:544 | WebCore::XMLHttpRequest::createRequest(int&) XMLHttpRequest.cpp:665 | WebCore::ThreadableLoader::create(WebCore::ScriptExecutionContext*, WebCore::ThreadableLoaderClient*, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) ThreadableLoader.cpp:54 | WebCore::DocumentThreadableLoader::create(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:65 | WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:111 | WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&, WebCore::ThreadableLoaderOptions const&) DocumentThreadableLoader.cpp:88 | WebCore::DocumentThreadableLoader::loadRequest(WebCore::ResourceRequest const&, WebCore::SecurityCheckPolicy) DocumentThreadableLoader.cpp:337 | WebCore::CachedResourceLoader::requestRawResource(WebCore::ResourceRequest&, WebCore::ResourceLoaderOptions const&) CachedResourceLoader.cpp:225 | WebCore::CachedResourceLoader::requestResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&, WTF::String const&, WebCore::ResourceLoaderOptions const&, WebCore::ResourceLoadPriority, bool) CachedResourceLoader.cpp:400 | WebCore::CachedResourceLoader::loadResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&, WTF::String const&, WebCore::ResourceLoadPriority, WebCore::ResourceLoaderOptions const&) CachedResourceLoader.cpp:469 | WebCore::CachedResource::load(WebCore::CachedResourceLoader*, WebCore::ResourceLoaderOptions const&) CachedResource.cpp:142 | WebCore::CachedResourceRequest::load(WebCore::CachedResourceLoader*, WebCore::CachedResource*, WebCore::ResourceLoaderOptions const&) CachedResourceRequest.cpp:135 | WebCore::ResourceLoadScheduler::scheduleSubresourceLoad(WebCore::Frame*, WebCore::SubresourceLoaderClient*, WebCore::ResourceRequest const&, WebCore::ResourceLoadPriority, WebCore::ResourceLoaderOptions const&) ResourceLoadScheduler.cpp:92 | WebCore::ResourceLoadScheduler::scheduleLoad(WebCore::ResourceLoader*, WebCore::ResourceLoadPriority) ResourceLoadScheduler.cpp:132 | WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadScheduler::HostInformation*, WebCore::ResourceLoadPriority) ResourceLoadScheduler.cpp:210 | WebCore::ResourceLoader::start() ResourceLoader.cpp:162 | WebCore::ResourceHandle::create(WebCore::NetworkingContext*, WebCore::ResourceRequest const&, WebCore::ResourceHandleClient*, bool, bool) ResourceHandle.cpp:71 | WebCore::ResourceHandle::start(WebCore::NetworkingContext*) ResourceHandleMac.mm:278 | WebCore::ResourceHandle::createNSURLConnection(objc_object*, bool, bool) ResourceHandleMac.mm:238 | -[NSURLConnection(NSURLConnectionPrivate) _initWithRequest:delegate:usesCache:maxContentLength:startImmediately:connectionProperties:] | CFURLConnectionCreateWithProperties | URLConnection::initialize(_CFURLRequest const*, CFURLConnectionClient_V1*, __CFDictionary const*) | CFObject::Allocate(unsigned long, CFClass const&, __CFAllocator const*) | _CFRuntimeCreateInstance | malloc_zone_malloc ',
- 'address' => '0x7f9a3a618090',
- 'size' => '432',
- 'type' => '',
- },
-];
-
-my $actualOutput = RunLeaks::parseLeaksOutput(@input);
-
-plan(tests => 1);
-is_deeply($actualOutput, $expectedOutput, "leaks Report Version 2.0 (new)");
diff --git a/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl b/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl
deleted file mode 100644
index 8e89220..0000000
--- a/Tools/Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (C) 2011 Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# tests run-leaks using "old" leaks report version 2.0
-# - The "old" 2.0 format has "leaks Report Version: 2.0" at the top of the report.
-
-use strict;
-use warnings;
-
-use File::Spec;
-use FindBin;
-use lib File::Spec->catdir($FindBin::Bin, "..");
-use Test::More;
-use LoadAsModule qw(RunLeaks run-leaks);
-
-my @input = split(/\n/, <<EOF);
-leaks Report Version: 2.0
-Process: Safari [53606]
-Path: /Applications/Safari.app/Contents/MacOS/Safari
-Load Address: 0x100000000
-Identifier: com.apple.Safari
-Version: 5.0 (6533.9)
-Build Info: WebBrowser-75330900~1
-Code Type: X86-64 (Native)
-Parent Process: perl5.10.0 [53599]
-
-Date/Time: 2010-05-27 11:42:27.356 -0700
-OS Version: Mac OS X 10.6.3 (10D571)
-Report Version: 6
-
-Process 53606: 112295 nodes malloced for 22367 KB
-Process 53606: 1 leak for 32 total leaked bytes.
-Leak: 0x1118c0e60 size=32 zone: DefaultMallocZone_0x105a92000 string 'com.apple.quarantine'
- Call stack: [thread 0x7fff70126be0]: | 0x100001e84 | NSApplicationMain | +[NSBundle(NSNibLoading) loadNibNamed:owner:] | +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] | loadNib | -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] | -[NSSet makeObjectsPerformSelector:] | 0x100003494 | 0x1001013ff | 0x10014dbb9 | 0x10014d923 | 0x10014d7d7 | 0x10014ccd9 | 0x100149c8e | 0x100149bd8 | xar_open | xar_file_unserialize | xar_prop_unserialize | xar_prop_unserialize | strdup | malloc | malloc_zone_malloc
-EOF
-
-my $expectedOutput =
-[
- {
- 'leaksOutput' => join('', split(/\n/, <<EOF)),
-Leak: 0x1118c0e60 size=32 zone: DefaultMallocZone_0x105a92000 string 'com.apple.quarantine'
- Call stack: [thread 0x7fff70126be0]: | 0x100001e84 | NSApplicationMain | +[NSBundle(NSNibLoading) loadNibNamed:owner:] | +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] | loadNib | -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] | -[NSSet makeObjectsPerformSelector:] | 0x100003494 | 0x1001013ff | 0x10014dbb9 | 0x10014d923 | 0x10014d7d7 | 0x10014ccd9 | 0x100149c8e | 0x100149bd8 | xar_open | xar_file_unserialize | xar_prop_unserialize | xar_prop_unserialize | strdup | malloc | malloc_zone_malloc
-EOF
- 'callStack' =>
-' Call stack: [thread 0x7fff70126be0]: | 0x100001e84 | NSApplicationMain | +[NSBundle(NSNibLoading) loadNibNamed:owner:] | +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] | loadNib | -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] | -[NSSet makeObjectsPerformSelector:] | 0x100003494 | 0x1001013ff | 0x10014dbb9 | 0x10014d923 | 0x10014d7d7 | 0x10014ccd9 | 0x100149c8e | 0x100149bd8 | xar_open | xar_file_unserialize | xar_prop_unserialize | xar_prop_unserialize | strdup | malloc | malloc_zone_malloc ',
- 'address' => '0x1118c0e60',
- 'size' => '32',
- 'type' => 'com.apple.quarantine',
- },
-];
-
-my $actualOutput = RunLeaks::parseLeaksOutput(@input);
-
-plan(tests => 1);
-is_deeply($actualOutput, $expectedOutput, "leaks Report Version 2.0 (old)");
diff --git a/Tools/Scripts/webkitpy/bindings/main.py b/Tools/Scripts/webkitpy/bindings/main.py
index 48536c2..bb76f5b 100644
--- a/Tools/Scripts/webkitpy/bindings/main.py
+++ b/Tools/Scripts/webkitpy/bindings/main.py
@@ -60,7 +60,7 @@
exit_code = e.exit_code
return exit_code
- def generate_supplemental_dependency(self, input_directory, supplemental_dependency_file, window_constructors_file):
+ def generate_supplemental_dependency(self, input_directory, supplemental_dependency_file, window_constructors_file, workercontext_constructors_file):
idl_files_list = tempfile.mkstemp()
for input_file in os.listdir(input_directory):
(name, extension) = os.path.splitext(input_file)
@@ -74,6 +74,7 @@
'--idl-files-list', idl_files_list[1],
'--supplemental-dependency-file', supplemental_dependency_file,
'--window-constructors-file', window_constructors_file,
+ '--workercontext-constructors-file', workercontext_constructors_file,
'--write-file-only-if-changed', '0']
exit_code = 0
@@ -149,7 +150,8 @@
input_directory = os.path.join('bindings', 'tests', 'idls')
supplemental_dependency_file = tempfile.mkstemp()[1]
window_constructors_file = tempfile.mkstemp()[1]
- if self.generate_supplemental_dependency(input_directory, supplemental_dependency_file, window_constructors_file):
+ workercontext_constructors_file = tempfile.mkstemp()[1]
+ if self.generate_supplemental_dependency(input_directory, supplemental_dependency_file, window_constructors_file, workercontext_constructors_file):
print 'Failed to generate a supplemental dependency file.'
os.remove(supplemental_dependency_file)
return -1
diff --git a/Tools/Scripts/webkitpy/common/config/irc.py b/Tools/Scripts/webkitpy/common/config/irc.py
index df5543a..6dd299d 100755
--- a/Tools/Scripts/webkitpy/common/config/irc.py
+++ b/Tools/Scripts/webkitpy/common/config/irc.py
@@ -26,7 +26,7 @@
server = "irc.freenode.net"
port = 6667
channel = "#blink"
-nickname = "blinkybot"
+nickname = "commit-bot"
update_wait_seconds = 10
retry_attempts = 8
diff --git a/Tools/Scripts/webkitpy/common/system/filesystem_mock_unittest.py b/Tools/Scripts/webkitpy/common/system/filesystem_mock_unittest.py
index a598332..e825856 100644
--- a/Tools/Scripts/webkitpy/common/system/filesystem_mock_unittest.py
+++ b/Tools/Scripts/webkitpy/common/system/filesystem_mock_unittest.py
@@ -82,3 +82,6 @@
'foo/../bar',
'foo/../bar/baz',
'../foo')
+
+ def test_relpath_win32(self):
+ pass
diff --git a/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py b/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py
index db984d5..efdfbd5 100644
--- a/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py
+++ b/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py
@@ -37,11 +37,12 @@
import tempfile
import unittest2 as unittest
-from filesystem import FileSystem
+from webkitpy.common.system.filesystem import FileSystem
class GenericFileSystemTests(object):
"""Tests that should pass on either a real or mock filesystem."""
+ # pylint gets confused about this being a mixin: pylint: disable=E1101
def setup_generic_test_dir(self):
fs = self.fs
self.generic_test_dir = str(self.fs.mkdtemp())
@@ -74,7 +75,9 @@
self.fs.chdir(self.generic_test_dir)
self.assertEqual(set(self.fs.glob('foo.*')), set(['foo.txt']))
- def test_relpath(self):
+ def test_relpath_unix(self):
+ if sys.platform == 'win32':
+ return
self.assertEqual(self.fs.relpath('aaa/bbb'), 'aaa/bbb')
self.assertEqual(self.fs.relpath('aaa/bbb/'), 'aaa/bbb')
self.assertEqual(self.fs.relpath('aaa/bbb/.'), 'aaa/bbb')
@@ -89,6 +92,23 @@
self.assertEqual(self.fs.relpath('aaa/bbb', 'aaa/b'), '../bbb')
self.assertEqual(self.fs.relpath('aaa/bbb', 'a/bbb'), '../../aaa/bbb')
+ def test_relpath_win32(self):
+ if sys.platform != 'win32':
+ return
+ self.assertEqual(self.fs.relpath('aaa\\bbb'), 'aaa\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\bbb\\'), 'aaa\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\bbb\\.'), 'aaa\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\.\\bbb'), 'aaa\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\..\\bbb\\'), 'bbb')
+ self.assertEqual(self.fs.relpath('aaa\\bbb', 'aaa\\bbb'), '.')
+ self.assertEqual(self.fs.relpath('aaa\\bbb\\ccc', 'aaa\\bbb'), 'ccc')
+ self.assertEqual(self.fs.relpath('aaa\\.\\ccc', 'aaa\\bbb'), '..\\ccc')
+ self.assertEqual(self.fs.relpath('aaa\\..\\ccc', 'aaa\\bbb'), '..\\..\\ccc')
+ self.assertEqual(self.fs.relpath('aaa\\bbb', 'aaa\\ccc'), '..\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\bbb', 'ccc\\ddd'), '..\\..\\aaa\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\bbb', 'aaa\\b'), '..\\bbb')
+ self.assertEqual(self.fs.relpath('aaa\\bbb', 'a\\bbb'), '..\\..\\aaa\\bbb')
+
def test_rmtree(self):
self.fs.chdir(self.generic_test_dir)
self.fs.rmtree('foo')
diff --git a/Tools/Scripts/webkitpy/common/webkit_finder.py b/Tools/Scripts/webkitpy/common/webkit_finder.py
index 7b9c014..3a29a22 100644
--- a/Tools/Scripts/webkitpy/common/webkit_finder.py
+++ b/Tools/Scripts/webkitpy/common/webkit_finder.py
@@ -43,7 +43,7 @@
# Tools/Scripts. This code will also work if there is no SCM system at all.
if not self._webkit_base:
self._webkit_base = self._webkit_base
- module_path = self._filesystem.path_to_module(self.__module__)
+ module_path = self._filesystem.abspath(self._filesystem.path_to_module(self.__module__))
tools_index = module_path.rfind('Tools')
assert tools_index != -1, "could not find location of this checkout from %s" % module_path
self._webkit_base = self._filesystem.normpath(module_path[0:tools_index - 1])
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/bot_test_expectations.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/bot_test_expectations.py
index fc7ed5b..ca978af 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/bot_test_expectations.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/bot_test_expectations.py
@@ -46,7 +46,6 @@
# {
# 'version': 4,
# 'builder name' : {
-# 'fixableCounts': {},
# 'blinkRevision': [],
# 'tests': {
# 'directory' { # Each path component is a dictionary.
@@ -60,8 +59,6 @@
# }
# 'buildNumbers': [],
# 'secondsSinceEpoch': [],
-# 'fixableCount': [],
-# 'allFixableCount': [],
# 'chromeRevision': [],
# 'failure_map': { } # Map from letter code to expectation name.
# },
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_tests_mover.py b/Tools/Scripts/webkitpy/layout_tests/layout_tests_mover.py
index 6f29e3e..d589925 100755
--- a/Tools/Scripts/webkitpy/layout_tests/layout_tests_mover.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_tests_mover.py
@@ -42,9 +42,9 @@
them with existing entries. This should be be done manually and with lint-test-expectations.
"""
-import argparse
import copy
import logging
+import optparse
import os
import re
import urlparse
@@ -314,10 +314,10 @@
self._commit_changes()
def main(argv):
- parser = argparse.ArgumentParser(description=__doc__)
- parser.add_argument('origin',
- help=('The directory of tests to move, as a relative path from the LayoutTests directory.'))
- parser.add_argument('destination',
- help=('The new path for the directory of tests, as a relative path from the LayoutTests directory.'))
- args = parser.parse_args()
- LayoutTestsMover().move(args.origin, args.destination)
+ parser = optparse.OptionParser(description=__doc__)
+ parser.add_option('--origin',
+ help=('The directory of tests to move, as a relative path from the LayoutTests directory.'))
+ parser.add_option('--destination',
+ help=('The new path for the directory of tests, as a relative path from the LayoutTests directory.'))
+ options, _ = parser.parse_args()
+ LayoutTestsMover().move(options.origin, options.destination)
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/base.py b/Tools/Scripts/webkitpy/layout_tests/port/base.py
index a8805a5..bdb446c 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/base.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/base.py
@@ -146,7 +146,6 @@
self._test_configuration = None
self._reftest_list = {}
self._results_directory = None
- self._root_was_set = hasattr(options, 'root') and options.root
def buildbot_archives_baselines(self):
return True
@@ -183,7 +182,7 @@
return self._pretty_patch_available
def should_retry_crashes(self):
- return False
+ return self.get_option('retry_crashes', False)
def default_child_processes(self):
"""Return the number of DumpRenderTree instances to use for this port."""
@@ -237,8 +236,7 @@
def check_build(self, needs_http):
"""This routine is used to ensure that the build is up to date
and all the needed binaries are present."""
- # If we're using a pre-built copy of WebKit (--root), we assume it also includes a build of DRT.
- if not self._root_was_set and self.get_option('build'):
+ if self.get_option('build'):
return False
if not self._check_driver():
return False
@@ -860,6 +858,9 @@
# Chromium:
'CHROME_DEVEL_SANDBOX',
+ 'CHROME_IPC_LOGGING',
+ 'ASAN_OPTIONS',
+
]
for variable in variables_to_copy:
self._copy_value_from_environ_if_set(clean_env, variable)
@@ -1204,18 +1205,11 @@
return self._filesystem.join(self.layout_tests_dir(), 'http', 'conf', config_file_name)
def _build_path(self, *comps):
- root_directory = self.get_option('root')
- if not root_directory:
- build_directory = self.get_option('build_directory')
- if build_directory:
- root_directory = self._filesystem.join(build_directory, self.get_option('configuration'))
- else:
- root_directory = self._config.build_directory(self.get_option('configuration'))
- # Set --root so that we can pass this to subprocesses and avoid making the
- # slow call to config.build_directory() N times in each worker.
- # FIXME: This is like @memoized, but more annoying and fragile; there should be another
- # way to propagate values without mutating the options list.
- self.set_option_default('root', root_directory)
+ build_directory = self.get_option('build_directory')
+ if build_directory:
+ root_directory = self._filesystem.join(build_directory, self.get_option('configuration'))
+ else:
+ root_directory = self._config.build_directory(self.get_option('configuration'))
return self._filesystem.join(self._filesystem.abspath(root_directory), *comps)
def _path_to_driver(self, configuration=None):
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
index 497cf29..3b6eed2 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
@@ -421,6 +421,12 @@
VirtualTestSuite('virtual/gpu/compositedscrolling/scrollbars',
'scrollbars',
['--enable-accelerated-overflow-scroll']),
+ VirtualTestSuite('virtual/threaded/animations',
+ 'animations',
+ ['--enable-threaded-compositing']),
+ VirtualTestSuite('virtual/threaded/transitions',
+ 'transitions',
+ ['--enable-threaded-compositing']),
]
#
@@ -434,7 +440,7 @@
return self._build_path_with_configuration(None, *comps)
def _build_path_with_configuration(self, configuration, *comps):
- # Note that we don't implement --root or do the option caching that the
+ # Note that we don't do the option caching that the
# base class does, because finding the right directory is relatively
# fast.
configuration = configuration or self.get_option('configuration')
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/driver.py b/Tools/Scripts/webkitpy/layout_tests/port/driver.py
index 4fa4488..6fe5c39 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/driver.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/driver.py
@@ -332,12 +332,6 @@
def cmd_line(self, pixel_tests, per_test_args):
cmd = self._command_wrapper(self._port.get_option('wrapper'))
cmd.append(self._port._path_to_driver())
- if self._port.get_option('gc_between_tests'):
- cmd.append('--gc-between-tests')
- if self._port.get_option('complex_text'):
- cmd.append('--complex-text')
- if self._port.get_option('threaded'):
- cmd.append('--threaded')
if self._no_timeout:
cmd.append('--no-timeout')
# FIXME: We need to pass --timeout=SECONDS to WebKitTestRunner for WebKit2.
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/factory.py b/Tools/Scripts/webkitpy/layout_tests/port/factory.py
index e83cdd3..e23f6e8 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/factory.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/factory.py
@@ -39,9 +39,12 @@
return [
optparse.make_option('--platform', action='store',
help=('Glob-style list of platform/ports to use (e.g., "mac*")' if use_globs else 'Platform to use (e.g., "mac-lion")')),
+
+ # FIXME: Update run_webkit_tests.sh, any other callers to no longer pass --chromium, then remove this flag.
optparse.make_option('--chromium', action='store_const', dest='platform',
const=('chromium*' if use_globs else 'chromium'),
help=('Alias for --platform=chromium*' if use_globs else 'Alias for --platform=chromium')),
+
optparse.make_option('--chromium-android', action='store_const', dest='platform',
const=('chromium-android*' if use_globs else 'chromium-android'),
help=('Alias for --platform=chromium-android*' if use_globs else 'Alias for --platform=chromium')),
@@ -50,14 +53,12 @@
def configuration_options():
return [
- optparse.make_option("-t", "--target", dest="configuration", help="(DEPRECATED)"),
- # FIXME: --help should display which configuration is default.
+ optparse.make_option("-t", "--target", dest="configuration",
+ help="specify the target configuration to use (Debug/Release)"),
optparse.make_option('--debug', action='store_const', const='Debug', dest="configuration",
help='Set the configuration to Debug'),
optparse.make_option('--release', action='store_const', const='Release', dest="configuration",
help='Set the configuration to Release'),
- optparse.make_option('--32-bit', action='store_const', const='x86', default=None, dest="architecture",
- help='use 32-bit binaries by default (x86 instead of x86_64)'),
]
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py b/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py
index 52d3e64..24ff966 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py
@@ -472,11 +472,6 @@
options=MockOptions(additional_platform_directory=["internal-testwebkitport"]))
self.assertEqual(platform_dirs(port), ['LayoutTests', 'testwebkitport', 'testwebkitport-version', 'internal-testwebkitport'])
- def test_root_option(self):
- port = TestWebKitPort()
- port._options = MockOptions(root='/foo')
- self.assertEqual(port._path_to_driver(), "/foo/content_shell")
-
def test_test_expectations(self):
# Check that we read the expectations file
host = MockSystemHost()
diff --git a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index 86fc2f6..00f6d26 100644
--- a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -109,22 +109,6 @@
help="Run Android layout tests on these devices."),
]))
- option_group_definitions.append(("WebKit Options", [
- optparse.make_option("--gc-between-tests", action="store_true", default=False,
- help="Force garbage collection between each test"),
- optparse.make_option("--complex-text", action="store_true", default=False,
- help="Use the complex text code path for all text (Mac OS X and Windows only)"),
- optparse.make_option("-l", "--leaks", action="store_true", default=False,
- help="Enable leaks checking (Mac OS X only)"),
- optparse.make_option("-g", "--guard-malloc", action="store_true", default=False,
- help="Enable Guard Malloc (Mac OS X only)"),
- optparse.make_option("--threaded", action="store_true", default=False,
- help="Run a concurrent JavaScript thread with each test"),
- # FIXME: We should merge this w/ --build-directory and only have one flag.
- optparse.make_option("--root", action="store",
- help="Path to a directory containing the executables needed to run tests."),
- ]))
-
option_group_definitions.append(("Results Options", [
optparse.make_option("-p", "--pixel", "--pixel-tests", action="store_true",
dest="pixel_tests", help="Enable pixel-to-pixel PNG comparisons"),
@@ -268,6 +252,9 @@
optparse.make_option("--no-retry-failures", action="store_false",
dest="retry_failures",
help="Don't re-try any tests that produce unexpected results."),
+ optparse.make_option("--retry-crashes", action="store_true",
+ default=False,
+ help="Do also retry crashes if retry-failures is enabled."),
optparse.make_option("--max-locked-shards", type="int", default=0,
help="Set the maximum number of locked shards"),
optparse.make_option("--additional-env-var", type="string", action="append", default=[],
diff --git a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py
index 98bc911..b6affa5 100644
--- a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py
@@ -346,15 +346,6 @@
tests_run = get_tests_run(['--order=none'] + tests_to_run)
self.assertEqual(tests_run, ['http/tests/ssl/text.html', 'perf/foo/test.html', 'http/tests/passes/image.html', 'http/tests/passes/text.html'])
- def test_gc_between_tests(self):
- self.assertTrue(passing_run(['--gc-between-tests']))
-
- def test_complex_text(self):
- self.assertTrue(passing_run(['--complex-text']))
-
- def test_threaded(self):
- self.assertTrue(passing_run(['--threaded']))
-
def test_repeat_each(self):
tests_to_run = ['passes/image.html', 'passes/text.html']
tests_run = get_tests_run(['--repeat-each', '2'] + tests_to_run)
@@ -547,29 +538,6 @@
_, regular_output, _ = logging_run(['failures/unexpected/checksum-with-matching-image.html'], tests_included=True, host=host)
self.assertTrue(host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json').find('"num_regressions":0') != -1)
- def test_crash_log(self):
- # FIXME: Need to rewrite these tests to not be mac-specific, or move them elsewhere.
- # Currently CrashLog uploading only works on Darwin.
- if not self._platform.is_mac():
- return
- mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 12345)
- host = MockHost()
- host.filesystem.write_text_file('/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150719_quadzen.crash', mock_crash_report)
- _, regular_output, _ = logging_run(['failures/unexpected/crash-with-stderr.html'], tests_included=True, host=host)
- expected_crash_log = mock_crash_report
- self.assertEqual(host.filesystem.read_text_file('/tmp/layout-test-results/failures/unexpected/crash-with-stderr-crash-log.txt'), expected_crash_log)
-
- def test_web_process_crash_log(self):
- # FIXME: Need to rewrite these tests to not be mac-specific, or move them elsewhere.
- # Currently CrashLog uploading only works on Darwin.
- if not self._platform.is_mac():
- return
- mock_crash_report = make_mock_crash_report_darwin('WebProcess', 12345)
- host = MockHost()
- host.filesystem.write_text_file('/Users/mock/Library/Logs/DiagnosticReports/WebProcess_2011-06-13-150719_quadzen.crash', mock_crash_report)
- logging_run(['failures/unexpected/web-process-crash-with-stderr.html'], tests_included=True, host=host)
- self.assertEqual(host.filesystem.read_text_file('/tmp/layout-test-results/failures/unexpected/web-process-crash-with-stderr-crash-log.txt'), mock_crash_report)
-
def test_exit_after_n_failures_upload(self):
host = MockHost()
details, regular_output, user = logging_run(
@@ -684,6 +652,21 @@
self.assertTrue(host.filesystem.exists('/tmp/layout-test-results/failures/flaky/text-actual.txt'))
self.assertFalse(host.filesystem.exists('retries'))
+ def test_retrying_chrashed_tests(self):
+ host = MockHost()
+ details, err, _ = logging_run(['--retry-failures', '--retry-crashes', 'failures/unexpected/crash.html'], tests_included=True, host=host)
+ self.assertEqual(details.exit_code, 1)
+ self.assertTrue('Retrying' in err.getvalue())
+
+ # Now we test that --clobber-old-results does remove the old entries and the old retries,
+ # and that we don't retry again.
+ host = MockHost()
+ details, err, _ = logging_run(['--no-retry-failures', '--clobber-old-results', 'failures/unexpected/crash.html'], tests_included=True, host=host)
+ self.assertEqual(details.exit_code, 1)
+ self.assertTrue('Clobbering old results' in err.getvalue())
+ self.assertTrue('unexpected/crash.html' in err.getvalue())
+ self.assertFalse(host.filesystem.exists('retries'))
+
def test_retrying_force_pixel_tests(self):
host = MockHost()
details, err, _ = logging_run(['--no-pixel-tests', '--retry-failures', 'failures/unexpected/text-image-checksum.html'], tests_included=True, host=host)
diff --git a/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py b/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py
index 2cb5d6f..46c2e70 100644
--- a/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py
+++ b/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py
@@ -49,7 +49,7 @@
def print_results(self, run_details):
if self.debug_logging:
self.print_run_results(run_details.initial_results)
- self.print_unexpected_results(run_details.summarized_failing_results, run_details.enabled_pixel_tests_in_retry)
+ self.print_unexpected_results(run_details.summarized_full_results, run_details.enabled_pixel_tests_in_retry)
def _print(self, msg):
self.stream.write(msg + '\n')
diff --git a/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py b/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py
index 5b7a7a6..33fa519 100644
--- a/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py
@@ -99,4 +99,4 @@
failing_summary = test_run_results_unittest.summarized_results(port, expected=False, passing=True, flaky=False, only_include_failing=True)
details = test_run_results.RunDetails(failing_summary['num_regressions'], full_summary, failing_summary, initial_results, None)
printer.print_results(details)
- self.assertNotEmpty(out)
+ self.assertTrue(out.getvalue().find('but passed') != -1)
diff --git a/Tools/Scripts/webkitpy/layout_tests/views/printing.py b/Tools/Scripts/webkitpy/layout_tests/views/printing.py
index a42b7ed..981205d 100644
--- a/Tools/Scripts/webkitpy/layout_tests/views/printing.py
+++ b/Tools/Scripts/webkitpy/layout_tests/views/printing.py
@@ -44,6 +44,8 @@
return [
optparse.make_option('-q', '--quiet', action='store_true', default=False,
help='run quietly (errors, warnings, and progress only)'),
+ optparse.make_option('--timing', action='store_true', default=False,
+ help='display per-test execution time (implies --verbose)'),
optparse.make_option('-v', '--verbose', action='store_true', default=False,
help='print a summarized result for every test (one line per test)'),
optparse.make_option('--details', action='store_true', default=False,
@@ -61,6 +63,8 @@
self.num_tests = 0
self._port = port
self._options = options
+ if self._options.timing or self._options.debug_rwt_logging:
+ self._options.verbose = True
self._meter = MeteredStream(regular_output, options.debug_rwt_logging, logger=logger,
number_of_columns=self._port.host.platform.terminal_width())
self._running_tests = []
@@ -269,7 +273,7 @@
self._print_default("")
incomplete_str = " (%d didn't run)" % incomplete
- if self._options.verbose or self._options.debug_rwt_logging or unexpected:
+ if self._options.verbose or unexpected:
self.writeln("")
summary = ''
@@ -319,7 +323,8 @@
self.num_completed += 1
test_name = result.test_name
- result_message = self._result_message(result.type, result.failures, expected, self._options.verbose)
+ result_message = self._result_message(result.type, result.failures, expected, self._options.verbose,
+ self._options.timing, result.test_run_time)
if self._options.details:
self._print_test_trace(result, exp_str, got_str)
@@ -338,13 +343,13 @@
self._completed_tests = []
self._running_tests.remove(test_name)
- def _result_message(self, result_type, failures, expected, verbose):
+ def _result_message(self, result_type, failures, expected, verbose, timing, test_run_time):
exp_string = ' unexpectedly' if not expected else ''
+ timing_string = ' %.4fs' % test_run_time if timing else ''
if result_type == test_expectations.PASS:
- return ' passed%s' % exp_string
+ return ' passed%s%s' % (exp_string, timing_string)
else:
- return ' failed%s (%s)' % (exp_string, ', '.join(failure.message() for failure in failures))
-
+ return ' failed%s (%s)%s' % (exp_string, ', '.join(failure.message() for failure in failures), timing_string)
def _print_test_trace(self, result, exp_str, got_str):
test_name = result.test_name
diff --git a/Tools/Scripts/webkitpy/style/checkers/cpp.py b/Tools/Scripts/webkitpy/style/checkers/cpp.py
index 5810e9c..cd3522f 100644
--- a/Tools/Scripts/webkitpy/style/checkers/cpp.py
+++ b/Tools/Scripts/webkitpy/style/checkers/cpp.py
@@ -193,6 +193,29 @@
s = s[:start_match_index] + char_replacement * match_length + s[end_match_index:]
+def _find_in_lines(regex, lines, start_position, not_found_position):
+ """Does a find starting at start position and going forward until
+ a match is found.
+
+ Returns the position where the regex started.
+ """
+ current_row = start_position.row
+
+ # Start with the given row and trim off everything before what should be matched.
+ current_line = lines[start_position.row][start_position.column:]
+ starting_offset = start_position.column
+ while True:
+ found_match = search(regex, current_line)
+ if found_match:
+ return Position(current_row, starting_offset + found_match.start())
+
+ # A match was not found so continue forward.
+ current_row += 1
+ starting_offset = 0
+ if current_row >= len(lines):
+ return not_found_position
+ current_line = lines[current_row]
+
def _rfind_in_lines(regex, lines, start_position, not_found_position):
"""Does a reverse find starting at start position and going backwards until
a match is found.
@@ -2361,16 +2384,6 @@
error(line_number, 'whitespace/braces', 4,
'Place brace on its own line for function definitions.')
- if (match(r'\s*}\s*(else\s*({\s*)?)?$', line) and line_number > 1):
- # We check if a closed brace has started a line to see if a
- # one line control statement was previous.
- previous_line = clean_lines.elided[line_number - 2]
- last_open_brace = previous_line.rfind('{')
- if (last_open_brace != -1 and previous_line.find('}', last_open_brace) == -1
- and search(r'\b(if|for|foreach|while|else)\b', previous_line)):
- error(line_number, 'whitespace/braces', 4,
- 'One line control clauses should not use braces.')
-
# An else clause should be on the same line as the preceding closing brace.
if match(r'\s*else\s*', line):
previous_line = get_previous_non_blank_line(clean_lines, line_number)[0]
@@ -2631,6 +2644,128 @@
return len(line)
+def check_conditional_and_loop_bodies_for_brace_violations(clean_lines, line_number, error):
+ """Scans the bodies of conditionals and loops, and in particular
+ all the arms of conditionals, for violations in the use of braces.
+
+ Specifically:
+
+ (1) If an arm omits braces, then the following statement must be on one
+ physical line.
+ (2) If any arm uses braces, all arms must use them.
+
+ These checks are only done here if we find the start of an
+ 'if/for/foreach/while' statement, because this function fails fast
+ if it encounters constructs it doesn't understand. Checks
+ elsewhere validate other constraints, such as requiring '}' and
+ 'else' to be on the same line.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ line_number: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+
+ # We work with the elided lines. Comments have been removed, but line
+ # numbers are preserved, so we can still find situations where
+ # single-expression control clauses span multiple lines, or when a
+ # comment preceded the expression.
+ lines = clean_lines.elided
+ line = lines[line_number]
+
+ # Match control structures.
+ control_match = match(r'\s*(if|foreach|for|while)\s*\(', line)
+ if not control_match:
+ return
+
+ # Found the start of a conditional or loop.
+
+ # The following loop handles all potential arms of the control clause.
+ # The initial conditions are the following:
+ # - We start on the opening paren '(' of the condition, *unless* we are
+ # handling an 'else' block, in which case there is no condition.
+ # - In the latter case, we start at the position just beyond the 'else'
+ # token.
+ expect_conditional_expression = True
+ know_whether_using_braces = False
+ using_braces = False
+ search_for_else_clause = control_match.group(1) == "if"
+ current_pos = Position(line_number, control_match.end() - 1)
+
+ while True:
+ if expect_conditional_expression:
+ # Try to find the end of the conditional expression,
+ # potentially spanning multiple lines.
+ open_paren_pos = current_pos
+ close_paren_pos = close_expression(lines, open_paren_pos)
+ if close_paren_pos.column < 0:
+ return
+ current_pos = close_paren_pos
+
+ end_line_of_conditional = current_pos.row
+
+ # Find the start of the body.
+ current_pos = _find_in_lines(r'\S', lines, current_pos, None)
+ if not current_pos:
+ return
+
+ current_arm_uses_brace = False
+ if lines[current_pos.row][current_pos.column] == '{':
+ current_arm_uses_brace = True
+ if know_whether_using_braces:
+ if using_braces != current_arm_uses_brace:
+ error(current_pos.row, 'whitespace/braces', 4,
+ 'If one part of an if-else statement uses curly braces, the other part must too.')
+ return
+ know_whether_using_braces = True
+ using_braces = current_arm_uses_brace
+
+ if using_braces:
+ # Skip over the entire arm.
+ current_pos = close_expression(lines, current_pos)
+ if current_pos.column < 0:
+ return
+ else:
+ # Skip over the current expression.
+ current_line_number = current_pos.row
+ current_pos = _find_in_lines(r';', lines, current_pos, None)
+ if not current_pos:
+ return
+ # If the end of the expression is beyond the line just after
+ # the close parenthesis or control clause, we've found a
+ # single-expression arm that spans multiple lines. (We don't
+ # fire this error for expressions ending on the same line; that
+ # is a different error, handled elsewhere.)
+ if current_pos.row > 1 + end_line_of_conditional:
+ error(current_pos.row, 'whitespace/braces', 4,
+ 'A conditional or loop body must use braces if the statement is more than one line long.')
+ return
+ current_pos = Position(current_pos.row, 1 + current_pos.column)
+
+ # At this point current_pos points just past the end of the last
+ # arm. If we just handled the last control clause, we're done.
+ if not search_for_else_clause:
+ return
+
+ # Scan forward for the next non-whitespace character, and see
+ # whether we are continuing a conditional (with an 'else' or
+ # 'else if'), or are done.
+ current_pos = _find_in_lines(r'\S', lines, current_pos, None)
+ if not current_pos:
+ return
+ next_nonspace_string = lines[current_pos.row][current_pos.column:]
+ next_conditional = match(r'(else\s*if|else)', next_nonspace_string)
+ if not next_conditional:
+ # Done processing this 'if' and all arms.
+ return
+ if next_conditional.group(1) == "else if":
+ current_pos = _find_in_lines(r'\(', lines, current_pos, None)
+ else:
+ current_pos.column += 4 # skip 'else'
+ expect_conditional_expression = False
+ search_for_else_clause = False
+ # End while loop
+
def check_style(clean_lines, line_number, file_extension, class_state, file_state, enum_state, error):
"""Checks rules from the 'C++ style rules' section of cppguide.html.
@@ -3614,7 +3749,7 @@
check_for_non_standard_constructs(clean_lines, line, class_state, error)
check_posix_threading(clean_lines, line, error)
check_invalid_increment(clean_lines, line, error)
-
+ check_conditional_and_loop_bodies_for_brace_violations(clean_lines, line, error)
def _process_lines(filename, file_extension, lines, error, min_confidence):
"""Performs lint checks and reports any errors to the given error function.
diff --git a/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py b/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
index c0f2da3..1b72906 100644
--- a/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
+++ b/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
@@ -2066,6 +2066,20 @@
' };\n'
'};',
'')
+ self.assert_multi_line_lint(
+ 'if (true) {\n'
+ ' myFunction(reallyLongParam1, reallyLongParam2,\n'
+ ' reallyLongParam3);\n'
+ '}\n',
+ 'Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3]')
+
+ self.assert_multi_line_lint(
+ 'if (true) {\n'
+ ' myFunction(reallyLongParam1, reallyLongParam2,\n'
+ ' reallyLongParam3);\n'
+ '}\n',
+ 'When wrapping a line, only indent 4 spaces. [whitespace/indent] [3]')
+
def test_not_alabel(self):
self.assert_lint('MyVeryLongNamespace::MyVeryLongClassName::', '')
@@ -4007,9 +4021,9 @@
' doSomethingElse();\n',
'')
self.assert_multi_line_lint(
- 'if (condition)\n'
+ 'if (condition) {\n'
' doSomething();\n'
- 'else {\n'
+ '} else {\n'
' doSomethingElse();\n'
' doSomethingElseAgain();\n'
'}\n',
@@ -4047,22 +4061,7 @@
' doSomethingElse();\n'
'}\n',
['More than one command on the same line in if [whitespace/parens] [4]',
- 'One line control clauses should not use braces. [whitespace/braces] [4]'])
- self.assert_multi_line_lint(
- 'if (condition)\n'
- ' doSomething();\n'
- 'else {\n'
- ' doSomethingElse();\n'
- '}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
- self.assert_multi_line_lint(
- 'if (condition) {\n'
- ' doSomething1();\n'
- ' doSomething2();\n'
- '} else {\n'
- ' doSomethingElse();\n'
- '}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]'])
self.assert_multi_line_lint(
'void func()\n'
'{\n'
@@ -4084,8 +4083,9 @@
'if (motivated) {\n'
' if (liquid)\n'
' return money;\n'
- '} else if (tired)\n'
- ' break;\n',
+ '} else if (tired) {\n'
+ ' break;\n'
+ '}',
'')
self.assert_multi_line_lint(
'if (condition)\n'
@@ -4138,9 +4138,10 @@
' goto infiniteLoop;\n'
' } else if (evil)\n'
' goto hell;\n',
- 'An else if statement should be written as an if statement when the '
- 'prior "if" concludes with a return, break, continue or goto statement.'
- ' [readability/control_flow] [4]')
+ ['If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]',
+ 'An else if statement should be written as an if statement when the '
+ 'prior "if" concludes with a return, break, continue or goto statement.'
+ ' [readability/control_flow] [4]'])
self.assert_multi_line_lint(
'if (liquid)\n'
'{\n'
@@ -4149,11 +4150,12 @@
'}\n'
'else if (greedy)\n'
' keep();\n',
- ['This { should be at the end of the previous line [whitespace/braces] [4]',
- 'An else should appear on the same line as the preceding } [whitespace/newline] [4]',
- 'An else if statement should be written as an if statement when the '
- 'prior "if" concludes with a return, break, continue or goto statement.'
- ' [readability/control_flow] [4]'])
+ ['If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]',
+ 'This { should be at the end of the previous line [whitespace/braces] [4]',
+ 'An else should appear on the same line as the preceding } [whitespace/newline] [4]',
+ 'An else if statement should be written as an if statement when the '
+ 'prior "if" concludes with a return, break, continue or goto statement.'
+ ' [readability/control_flow] [4]'])
self.assert_multi_line_lint(
'if (gone)\n'
' return;\n'
@@ -4188,9 +4190,10 @@
' prepare();\n'
' continue;\n'
'}\n',
- 'An else statement can be removed when the prior "if" concludes '
- 'with a return, break, continue or goto statement.'
- ' [readability/control_flow] [4]')
+ ['If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]',
+ 'An else statement can be removed when the prior "if" concludes '
+ 'with a return, break, continue or goto statement.'
+ ' [readability/control_flow] [4]'])
def test_braces(self):
# 1. Function definitions: place each brace on its own line.
@@ -4290,70 +4293,241 @@
'}\n',
'This { should be at the end of the previous line [whitespace/braces] [4]')
- # 3. One-line control clauses should not use braces unless
- # comments are included or a single statement spans multiple
- # lines.
+ # 3. Curly braces are not required for single-line conditionals and
+ # loop bodies, but are required for single-statement bodies that
+ # span multiple lines.
+
+ #
+ # Positive tests
+ #
self.assert_multi_line_lint(
- 'if (true) {\n'
- ' int foo;\n'
- '}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
+ 'if (condition1)\n'
+ ' statement1();\n'
+ 'else\n'
+ ' statement2();\n',
+ '')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' statement1();\n'
+ 'else if (condition2)\n'
+ ' statement2();\n',
+ '')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' statement1();\n'
+ 'else if (condition2)\n'
+ ' statement2();\n'
+ 'else\n'
+ ' statement3();\n',
+ '')
+
+ self.assert_multi_line_lint(
+ 'for (; foo; bar)\n'
+ ' int foo;\n',
+ '')
self.assert_multi_line_lint(
'for (; foo; bar) {\n'
' int foo;\n'
'}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
+ '')
self.assert_multi_line_lint(
'foreach (foo, foos) {\n'
' int bar;\n'
'}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
+ '')
+
+ self.assert_multi_line_lint(
+ 'foreach (foo, foos)\n'
+ ' int bar;\n',
+ '')
self.assert_multi_line_lint(
'while (true) {\n'
' int foo;\n'
'}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
+ '')
self.assert_multi_line_lint(
- 'if (true)\n'
- ' int foo;\n'
- 'else {\n'
- ' int foo;\n'
- '}\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
-
- self.assert_multi_line_lint(
- 'if (true) {\n'
- ' int foo;\n'
- '} else\n'
+ 'while (true)\n'
' int foo;\n',
- 'One line control clauses should not use braces. [whitespace/braces] [4]')
+ '')
self.assert_multi_line_lint(
- 'if (true) {\n'
- ' // Some comment\n'
- ' int foo;\n'
+ 'if (condition1) {\n'
+ ' statement1();\n'
+ '} else {\n'
+ ' statement2();\n'
'}\n',
'')
self.assert_multi_line_lint(
- 'if (true) {\n'
- ' myFunction(reallyLongParam1, reallyLongParam2,\n'
- ' reallyLongParam3);\n'
+ 'if (condition1) {\n'
+ ' statement1();\n'
+ '} else if (condition2) {\n'
+ ' statement2();\n'
'}\n',
- 'Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3]')
+ '')
self.assert_multi_line_lint(
- 'if (true) {\n'
- ' myFunction(reallyLongParam1, reallyLongParam2,\n'
- ' reallyLongParam3);\n'
+ 'if (condition1) {\n'
+ ' statement1();\n'
+ '} else if (condition2) {\n'
+ ' statement2();\n'
+ '} else {\n'
+ ' statement3();\n'
'}\n',
- 'When wrapping a line, only indent 4 spaces. [whitespace/indent] [3]')
+ '')
- # 4. Control clauses without a body should use empty braces.
+ self.assert_multi_line_lint(
+ 'if (condition1) {\n'
+ ' statement1();\n'
+ ' statement1_2();\n'
+ '} else if (condition2) {\n'
+ ' statement2();\n'
+ ' statement2_2();\n'
+ '}\n',
+ '')
+
+ self.assert_multi_line_lint(
+ 'if (condition1) {\n'
+ ' statement1();\n'
+ ' statement1_2();\n'
+ '} else if (condition2) {\n'
+ ' statement2();\n'
+ ' statement2_2();\n'
+ '} else {\n'
+ ' statement3();\n'
+ ' statement3_2();\n'
+ '}\n',
+ '')
+
+ #
+ # Negative tests
+ #
+
+ self.assert_multi_line_lint(
+ 'if (condition)\n'
+ ' doSomething(\n'
+ ' spanningMultipleLines);\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition)\n'
+ ' // Single-line comment\n'
+ ' doSomething();\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' statement1();\n'
+ 'else if (condition2)\n'
+ ' // Single-line comment\n'
+ ' statement2();\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' statement1();\n'
+ 'else if (condition2)\n'
+ ' statement2();\n'
+ 'else\n'
+ ' // Single-line comment\n'
+ ' statement3();\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'for (; foo; bar)\n'
+ ' // Single-line comment\n'
+ ' int foo;\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'foreach (foo, foos)\n'
+ ' // Single-line comment\n'
+ ' int bar;\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'while (true)\n'
+ ' // Single-line comment\n'
+ ' int foo;\n'
+ '\n',
+ 'A conditional or loop body must use braces if the statement is more than one line long. [whitespace/braces] [4]')
+
+ # 4. If one part of an if-else statement uses curly braces, the
+ # other part must too.
+
+ self.assert_multi_line_lint(
+ 'if (condition1) {\n'
+ ' doSomething1();\n'
+ ' doSomething1_2();\n'
+ '} else if (condition2)\n'
+ ' doSomething2();\n'
+ 'else\n'
+ ' doSomething3();\n',
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' doSomething1();\n'
+ 'else if (condition2) {\n'
+ ' doSomething2();\n'
+ ' doSomething2_2();\n'
+ '} else\n'
+ ' doSomething3();\n',
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1) {\n'
+ ' doSomething1();\n'
+ '} else if (condition2) {\n'
+ ' doSomething2();\n'
+ ' doSomething2_2();\n'
+ '} else\n'
+ ' doSomething3();\n',
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' doSomething1();\n'
+ 'else if (condition2)\n'
+ ' doSomething2();\n'
+ 'else {\n'
+ ' doSomething3();\n'
+ ' doSomething3_2();\n'
+ '}\n',
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1) {\n'
+ ' doSomething1();\n'
+ ' doSomething1_2();\n'
+ '} else if (condition2)\n'
+ ' doSomething2();\n'
+ 'else {\n'
+ ' doSomething3();\n'
+ ' doSomething3_2();\n'
+ '}\n',
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]')
+
+ self.assert_multi_line_lint(
+ 'if (condition1)\n'
+ ' doSomething1();\n'
+ 'else if (condition2) {\n'
+ ' doSomething2();\n'
+ ' doSomething2_2();\n'
+ '} else {\n'
+ ' doSomething3();\n'
+ ' doSomething3_2();\n'
+ '}\n',
+ 'If one part of an if-else statement uses curly braces, the other part must too. [whitespace/braces] [4]')
+
+
+ # 5. Control clauses without a body should use empty braces.
self.assert_multi_line_lint(
'for ( ; current; current = current->next) { }\n',
'')
diff --git a/Tools/Scripts/webkitpy/test/main.py b/Tools/Scripts/webkitpy/test/main.py
index 4270ace..c7b97c0 100644
--- a/Tools/Scripts/webkitpy/test/main.py
+++ b/Tools/Scripts/webkitpy/test/main.py
@@ -51,7 +51,7 @@
tester.skip(('webkitpy.common.checkout.scm.scm_unittest',), 'are really, really, slow', 31818)
if sys.platform == 'win32':
- tester.skip(('webkitpy.common.checkout', 'webkitpy.common.config', 'webkitpy.tool'), 'fail horribly on win32', 54526)
+ tester.skip(('webkitpy.common.checkout', 'webkitpy.common.config', 'webkitpy.tool', 'webkitpy.w3c', 'webkitpy.layout_tests.layout_package.bot_test_expectations'), 'fail horribly on win32', 54526)
# This only needs to run on Unix, so don't worry about win32 for now.
appengine_sdk_path = '/usr/local/google_appengine'
diff --git a/Tools/Scripts/webkitpy/tool/bot/commitannouncer.py b/Tools/Scripts/webkitpy/tool/bot/commitannouncer.py
index 6dd5e1e..456e248 100644
--- a/Tools/Scripts/webkitpy/tool/bot/commitannouncer.py
+++ b/Tools/Scripts/webkitpy/tool/bot/commitannouncer.py
@@ -67,6 +67,7 @@
commit_detail = self._commit_detail(commit)
if commit_detail:
_log.info('%s Posting commit %s' % (self._time(), commit))
+ _log.info('%s Posted message: %s' % (self._time(), repr(commit_detail)))
self._post(commit_detail)
else:
_log.error('Malformed commit log for %s' % commit)
@@ -150,8 +151,10 @@
commit, email, subject, body = commit_detail.split('\n', 3)
review_string = 'Review URL: '
svn_string = 'git-svn-id: svn://svn.chromium.org/blink/trunk@'
+ red_flag_strings = ['NOTRY=true', 'TBR=']
review_url = ''
svn_url = ''
+ red_flags = []
for line in body.split('\n'):
if line.startswith(review_string):
@@ -164,6 +167,9 @@
if not revision.isdigit():
continue
svn_url = 'https://src.chromium.org/viewvc/blink?view=revision&revision=%s' % revision
+ for red_flag_string in red_flag_strings:
+ if line.lower().startswith(red_flag_string.lower()):
+ red_flags.append(line.strip())
if review_url:
match = re.search(r'(?P<review_id>\d+)', review_url)
@@ -171,7 +177,9 @@
review_url = 'http://crrev.com/%s' % match.group('review_id')
first_url = review_url if review_url else 'https://chromium.googlesource.com/chromium/blink/+/%s' % commit[:8]
- return '%s committed "%s" %s %s' % (email, subject, first_url, svn_url)
+ red_flag_message = ' \x037%s\x03' % (' '.join(red_flags)) if red_flags else ''
+
+ return '%s committed "%s" %s %s%s' % (email, subject, first_url, svn_url, red_flag_message)
def _post(self, message):
self.connection.execute_delayed(0, lambda: self.connection.privmsg(channel, message))
diff --git a/Tools/Scripts/webkitpy/tool/bot/commitannouncer_unittest.py b/Tools/Scripts/webkitpy/tool/bot/commitannouncer_unittest.py
index 6af9824..1194595 100644
--- a/Tools/Scripts/webkitpy/tool/bot/commitannouncer_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/bot/commitannouncer_unittest.py
@@ -34,7 +34,8 @@
tool = MockTool()
bot = CommitAnnouncer(tool, "test_password")
self.assertEqual(
- 'authorABC@chromium.org committed "Commit test subject line" http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789',
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789',
bot._format_commit_detail("""\
1234commit1234
authorABC@chromium.org
@@ -45,7 +46,6 @@
description.
BUG=654321
-TBR=reviewerDEF@chromium.org
Review URL: https://codereview.chromium.org/123456
@@ -53,7 +53,9 @@
"""))
self.assertEqual(
- 'authorABC@chromium.org committed "Commit test subject line" https://chromium.googlesource.com/chromium/blink/+/1234comm https://src.chromium.org/viewvc/blink?view=revision&revision=456789',
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'https://chromium.googlesource.com/chromium/blink/+/1234comm '
+ 'https://src.chromium.org/viewvc/blink?view=revision&revision=456789',
bot._format_commit_detail("""\
1234commit1234
authorABC@chromium.org
@@ -64,13 +66,13 @@
description.
BUG=654321
-TBR=reviewerDEF@chromium.org
git-svn-id: svn://svn.chromium.org/blink/trunk@456789 bbb929c8-8fbe-4397-9dbb-9b2b20218538
"""))
self.assertEqual(
- 'authorABC@chromium.org committed "Commit test subject line" http://crrev.com/123456 ',
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 ',
bot._format_commit_detail("""\
1234commit1234
authorABC@chromium.org
@@ -81,13 +83,13 @@
description.
BUG=654321
-TBR=reviewerDEF@chromium.org
Review URL: https://codereview.chromium.org/123456
"""))
self.assertEqual(
- 'authorABC@chromium.org committed "Commit test subject line" https://chromium.googlesource.com/chromium/blink/+/1234comm ',
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'https://chromium.googlesource.com/chromium/blink/+/1234comm ',
bot._format_commit_detail("""\
1234commit1234
authorABC@chromium.org
@@ -99,7 +101,8 @@
"""))
self.assertEqual(
- 'authorABC@chromium.org committed "Commit test subject line" http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789',
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789',
bot._format_commit_detail("""\
1234commit1234
authorABC@chromium.org
@@ -112,9 +115,94 @@
git-svn-id: svn://svn.chromium.org/blink/trunk@000000 Fake-SVN-number
BUG=654321
+
+Review URL: https://codereview.chromium.org/123456
+
+git-svn-id: svn://svn.chromium.org/blink/trunk@456789 bbb929c8-8fbe-4397-9dbb-9b2b20218538
+"""))
+
+ self.assertEqual(
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789 '
+ '\x037TBR=reviewerDEF@chromium.org\x03',
+ bot._format_commit_detail("""\
+1234commit1234
+authorABC@chromium.org
+Commit test subject line
+Multiple
+lines
+of
+description.
+
+BUG=654321
TBR=reviewerDEF@chromium.org
Review URL: https://codereview.chromium.org/123456
git-svn-id: svn://svn.chromium.org/blink/trunk@456789 bbb929c8-8fbe-4397-9dbb-9b2b20218538
"""))
+
+ self.assertEqual(
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789 '
+ '\x037NOTRY=true\x03',
+ bot._format_commit_detail("""\
+1234commit1234
+authorABC@chromium.org
+Commit test subject line
+Multiple
+lines
+of
+description.
+
+BUG=654321
+NOTRY=true
+
+Review URL: https://codereview.chromium.org/123456
+
+git-svn-id: svn://svn.chromium.org/blink/trunk@456789 bbb929c8-8fbe-4397-9dbb-9b2b20218538
+"""))
+
+ self.assertEqual(
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789 '
+ '\x037NOTRY=true TBR=reviewerDEF@chromium.org\x03',
+ bot._format_commit_detail("""\
+1234commit1234
+authorABC@chromium.org
+Commit test subject line
+Multiple
+lines
+of
+description.
+
+NOTRY=true
+BUG=654321
+TBR=reviewerDEF@chromium.org
+
+Review URL: https://codereview.chromium.org/123456
+
+git-svn-id: svn://svn.chromium.org/blink/trunk@456789 bbb929c8-8fbe-4397-9dbb-9b2b20218538
+"""))
+
+ self.assertEqual(
+ 'authorABC@chromium.org committed "Commit test subject line" '
+ 'http://crrev.com/123456 https://src.chromium.org/viewvc/blink?view=revision&revision=456789 '
+ '\x037tbr=reviewerDEF@chromium.org, reviewerGHI@chromium.org, reviewerJKL@chromium.org notry=TRUE\x03',
+ bot._format_commit_detail("""\
+1234commit1234
+authorABC@chromium.org
+Commit test subject line
+Multiple
+lines
+of
+description.
+
+BUG=654321
+tbr=reviewerDEF@chromium.org, reviewerGHI@chromium.org, reviewerJKL@chromium.org
+notry=TRUE
+
+Review URL: https://codereview.chromium.org/123456
+
+git-svn-id: svn://svn.chromium.org/blink/trunk@456789 bbb929c8-8fbe-4397-9dbb-9b2b20218538
+"""))
diff --git a/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py b/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py
index 3ea9a28..97a6fc0 100644
--- a/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py
@@ -71,6 +71,9 @@
def serve_xml(self, data):
self._serve_xml(data)
+ def log_message(self, _format, *_args):
+ pass
+
class ReflectionHandlerTest(unittest.TestCase):
def assert_handler_response(self, requests, expected_static_files, expected_errors, expected_functions):
diff --git a/Tools/Scripts/webkitpy/w3c/test_importer.py b/Tools/Scripts/webkitpy/w3c/test_importer.py
index b4ba374..119bd7d 100644
--- a/Tools/Scripts/webkitpy/w3c/test_importer.py
+++ b/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -97,6 +97,7 @@
import sys
from webkitpy.common.host import Host
+from webkitpy.common.webkit_finder import WebKitFinder
from webkitpy.common.system.executive import ScriptError
from webkitpy.w3c.test_parser import TestParser
from webkitpy.w3c.test_converter import W3CTestConverter
@@ -172,20 +173,18 @@
self.filesystem = self.host.filesystem
- self._webkit_root = __file__.split(self.filesystem.sep + 'Tools')[0]
+ webkit_finder = WebKitFinder(self.filesystem)
+ self._webkit_root = webkit_finder.webkit_base()
self.repo_dir = repo_dir
subdirs = os.path.dirname(os.path.relpath(source_directory, repo_dir))
- self.destination_directory = os.path.join(self.path_from_webkit_root("LayoutTests"), 'w3c', subdirs)
+ self.destination_directory = webkit_finder.path_from_webkit_base("LayoutTests", 'w3c', *subdirs)
self.changeset = CHANGESET_NOT_AVAILABLE
self.test_status = TEST_STATUS_UNKNOWN
self.import_list = []
- def path_from_webkit_root(self, *comps):
- return self.filesystem.abspath(self.filesystem.join(self._webkit_root, *comps))
-
def do_import(self):
self.find_importable_tests(self.source_directory)
self.load_changeset()
diff --git a/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py b/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
index 526f1d2..9103623 100644
--- a/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
+++ b/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
@@ -32,25 +32,29 @@
import tempfile
import unittest2 as unittest
-from webkitpy.common.host import Host
+from webkitpy.common.host_mock import MockHost
+from webkitpy.common.system.filesystem_mock import MockFileSystem
from webkitpy.common.system.executive_mock import MockExecutive2, ScriptError
from webkitpy.common.system.outputcapture import OutputCapture
from webkitpy.w3c.test_importer import TestImporter
-DUMMY_SOURCE_DIR = '/w3c'
-DUMMY_REPO_DIR = '/blink/LayoutTests'
+FAKE_SOURCE_DIR = '/blink/w3c'
+FAKE_REPO_DIR = '/blink'
+
+FAKE_FILES = {
+ '/blink/w3c/empty_dir/README.txt': '',
+ '/mock-checkout/LayoutTests/w3c/README.txt': '',
+}
class TestImporterTest(unittest.TestCase):
def test_import_dir_with_no_tests_and_no_hg(self):
- # FIXME: Use MockHosts instead.
- host = Host()
+ host = MockHost()
host.executive = MockExecutive2(exception=OSError())
+ host.filesystem = MockFileSystem(files=FAKE_FILES)
- importer = TestImporter(host, DUMMY_SOURCE_DIR, DUMMY_REPO_DIR, optparse.Values({"overwrite": False}))
- importer.source_directory = importer.path_from_webkit_root("Tools", "Scripts", "webkitpy", "w3c")
- importer.destination_directory = tempfile.mkdtemp(prefix='csswg')
+ importer = TestImporter(host, FAKE_SOURCE_DIR, FAKE_REPO_DIR, optparse.Values({"overwrite": False}))
oc = OutputCapture()
oc.capture_output()
@@ -58,23 +62,18 @@
importer.do_import()
finally:
oc.restore_output()
- shutil.rmtree(importer.destination_directory, ignore_errors=True)
def test_import_dir_with_no_tests(self):
- # FIXME: Use MockHosts instead.
- host = Host()
+ host = MockHost()
host.executive = MockExecutive2(exception=ScriptError("abort: no repository found in '/Volumes/Source/src/wk/Tools/Scripts/webkitpy/w3c' (.hg not found)!"))
+ host.filesystem = MockFileSystem(files=FAKE_FILES)
- importer = TestImporter(host, '/w3c', '/blink', optparse.Values({"overwrite": False}))
- importer.source_directory = importer.path_from_webkit_root("Tools", "Scripts", "webkitpy", "w3c")
- importer.destination_directory = tempfile.mkdtemp(prefix='csswg')
-
+ importer = TestImporter(host, FAKE_SOURCE_DIR, FAKE_REPO_DIR, optparse.Values({"overwrite": False}))
oc = OutputCapture()
oc.capture_output()
try:
importer.do_import()
finally:
oc.restore_output()
- shutil.rmtree(importer.destination_directory, ignore_errors=True)
- # FIXME: Need more tests, but need to add a mock filesystem w/ sample data.
+ # FIXME: Needs more tests.
diff --git a/Tools/TestResultServer/app.yaml b/Tools/TestResultServer/app.yaml
index e5a2b31..cac2232 100644
--- a/Tools/TestResultServer/app.yaml
+++ b/Tools/TestResultServer/app.yaml
@@ -1,9 +1,14 @@
-application: test-results
+application: test-results-hrd
version: 1
-runtime: python
+runtime: python27
api_version: 1
+threadsafe: true
handlers:
+- url: /robots.txt
+ static_files: robots.txt
+ upload: robots.txt
+
- url: /stylesheets
static_dir: stylesheets
@@ -11,8 +16,8 @@
static_dir: static-dashboards
- url: /testfile/delete
- script: main.py
+ script: main.app
login: admin
- url: /.*
- script: main.py
+ script: main.app
diff --git a/Tools/TestResultServer/generate_builders_json.py b/Tools/TestResultServer/generate_builders_json.py
index fb5342a..0b666f8 100644
--- a/Tools/TestResultServer/generate_builders_json.py
+++ b/Tools/TestResultServer/generate_builders_json.py
@@ -65,28 +65,31 @@
cached_builds = build_data['cachedBuilds']
current_builds = build_data['currentBuilds']
+ if len(cached_builds) == 0:
+ print 'warning: empty list of cached builds for', builder
+ continue
+
latest_cached_build = cached_builds.pop()
while latest_cached_build in current_builds and len(cached_builds):
latest_cached_build = cached_builds.pop()
for step in fetch_json(cached_build_json_url(master_url, builder, latest_cached_build))['steps']:
step_name = step['name']
-
- # The chromium bots call this step webkit-tests, the webkit.org bots call it layout-test. :(
- # The files stored at test-results.appspot.com use layout-tests as the test suite name, so normalize to that.
- if step_name in ['layout-test', 'webkit_tests']:
- step_name = 'layout-tests'
-
- is_test = step_name == 'layout-tests' if master['name'] == 'webkit.org' else 'test' in step_name and 'archive' not in step_name
- if not is_test:
+ is_test_step = 'test' in step_name and 'archive' not in step_name
+ if not is_test_step:
continue
+ # The chromium bots call this step webkit-tests, but the files stored at
+ # test-results.appspot.com use layout-tests as the test suite name, so normalize to that.
+ if step_name == 'webkit_tests':
+ step_name = 'layout-tests'
+
if step_name not in tests_object:
tests_object[step_name] = {'builders': []}
tests_object[step_name]['builders'].append(builder)
- for step_name in tests_object:
- tests_object[step_name]['builders'].sort()
+ for step_name in tests_object:
+ tests_object[step_name]['builders'].sort()
def main():
@@ -97,16 +100,15 @@
logging.getLogger().setLevel(logging.DEBUG if options.verbose else logging.INFO)
masters = [
- {'name': 'ChromiumWin', 'url': 'http://build.chromium.org/p/chromium.win'},
- {'name': 'ChromiumMac', 'url': 'http://build.chromium.org/p/chromium.mac'},
- {'name': 'ChromiumLinux', 'url': 'http://build.chromium.org/p/chromium.linux'},
- {'name': 'ChromiumChromiumOS', 'url': 'http://build.chromium.org/p/chromium.chromiumos'},
- {'name': 'ChromiumGPU', 'url': 'http://build.chromium.org/p/chromium.gpu'},
- {'name': 'ChromiumGPUFYI', 'url': 'http://build.chromium.org/p/chromium.gpu.fyi'},
- {'name': 'ChromiumPerfAv', 'url': 'http://build.chromium.org/p/chromium.perf_av'},
- {'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/chromium.webkit'},
- {'name': 'ChromiumFYI', 'url': 'http://build.chromium.org/p/chromium.fyi'},
- {'name': 'webkit.org', 'url': 'http://build.webkit.org'},
+ {'name': 'ChromiumWin', 'url': 'http://build.chromium.org/p/chromium.win', 'groups': ['@ToT Chromium']},
+ {'name': 'ChromiumMac', 'url': 'http://build.chromium.org/p/chromium.mac', 'groups': ['@ToT Chromium']},
+ {'name': 'ChromiumLinux', 'url': 'http://build.chromium.org/p/chromium.linux', 'groups': ['@ToT Chromium']},
+ {'name': 'ChromiumChromiumOS', 'url': 'http://build.chromium.org/p/chromium.chromiumos', 'groups': ['@ToT ChromeOS']},
+ {'name': 'ChromiumGPU', 'url': 'http://build.chromium.org/p/chromium.gpu', 'groups': ['@ToT Chromium']},
+ {'name': 'ChromiumGPUFYI', 'url': 'http://build.chromium.org/p/chromium.gpu.fyi', 'groups': ['@ToT Chromium FYI']},
+ {'name': 'ChromiumPerfAv', 'url': 'http://build.chromium.org/p/chromium.perf_av', 'groups': ['@ToT Chromium']},
+ {'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/chromium.webkit', 'groups': ['@ToT Chromium', '@ToT Blink']},
+ {'name': 'ChromiumFYI', 'url': 'http://build.chromium.org/p/chromium.fyi', 'groups': ['@ToT Chromium FYI']},
]
insert_builder_and_test_data(masters)
@@ -116,8 +118,10 @@
'LOAD_BUILDBOT_DATA(')
json_file_suffix = ');\n';
+ output_data = {'masters': masters}
+
json_file = open(os.path.join('static-dashboards', 'builders.jsonp'), 'w')
- json_file.write(json_file_prefix + json.dumps(masters, separators=(', ', ': '), indent=4, sort_keys=True) + json_file_suffix)
+ json_file.write(json_file_prefix + json.dumps(output_data, separators=(', ', ': '), indent=4, sort_keys=True) + json_file_suffix)
if __name__ == "__main__":
diff --git a/Tools/TestResultServer/generate_builders_json_unittest.py b/Tools/TestResultServer/generate_builders_json_unittest.py
index 588c939..e9c8345 100644
--- a/Tools/TestResultServer/generate_builders_json_unittest.py
+++ b/Tools/TestResultServer/generate_builders_json_unittest.py
@@ -56,8 +56,6 @@
if url == 'http://build.chromium.org/p/chromium.webkit/json/builders':
return {'WebKit Win': None, 'WebKit Linux': None, 'WebKit Mac': None}
- if url == 'http://build.webkit.org/json/builders':
- return {'Apple Mac SnowLeopard Tests': None, 'Chromium Mac Builder': None, 'GTK': None}
if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Linux':
return {'cachedBuilds': [1, 2], 'currentBuilds': []}
@@ -65,12 +63,6 @@
return {'cachedBuilds': [1, 2], 'currentBuilds': []}
if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac':
return {'cachedBuilds': [1, 2], 'currentBuilds': []}
- if url == 'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests':
- return {'cachedBuilds': [1, 2], 'currentBuilds': []}
- if url == 'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder':
- return {'cachedBuilds': [1, 2, 3], 'currentBuilds': [3]}
- if url == 'http://build.webkit.org/json/builders/GTK':
- return {'cachedBuilds': [2], 'currentBuilds': []}
if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Linux/builds/2':
return {'steps': [{'name': 'webkit_tests'}, {'name': 'browser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
@@ -78,12 +70,6 @@
return {'steps': [{'name': 'webkit_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac/builds/2':
return {'steps': [{'name': 'browser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
- if url == 'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests/builds/2':
- return {'steps': [{'name': 'layout-test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
- if url == 'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder/builds/2':
- return {'steps': [{'name': 'compile'}]}
- if url == 'http://build.webkit.org/json/builders/GTK/builds/2':
- return {'steps': [{'name': 'layout-test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
logging.error('Cannot fetch fake url: %s' % url)
@@ -91,7 +77,6 @@
masters = [
{'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/chromium.webkit'},
- {'name': 'webkit.org', 'url': 'http://build.webkit.org'},
]
generate_builders_json.insert_builder_and_test_data(masters)
@@ -104,13 +89,7 @@
'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac/builds/2',
'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Win',
'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Win/builds/2',
- 'http://build.webkit.org/json/builders',
- 'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests',
- 'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests/builds/2',
- 'http://build.webkit.org/json/builders/GTK',
- 'http://build.webkit.org/json/builders/GTK/builds/2',
- 'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder',
- 'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder/builds/2']
+ ]
self.assertEqual(fetched_urls, expected_fetched_urls)
expected_masters = [
@@ -120,12 +99,8 @@
'browser_tests': {'builders': ['WebKit Linux', 'WebKit Mac']},
'mini_installer_test': {'builders': ['WebKit Linux', 'WebKit Mac', 'WebKit Win']},
'layout-tests': {'builders': ['WebKit Linux', 'WebKit Win']}},
- 'name': 'ChromiumWebkit'},
- {
- 'url': 'http://build.webkit.org',
- 'tests': {
- 'layout-tests': {'builders': ['Apple Mac SnowLeopard Tests', 'GTK']}},
- 'name': 'webkit.org'}]
+ 'name': 'ChromiumWebkit'}
+ ]
self.assertEqual(masters, expected_masters)
finally:
diff --git a/Tools/TestResultServer/handlers/menu.py b/Tools/TestResultServer/handlers/menu.py
index f15e53c..7b5403a 100644
--- a/Tools/TestResultServer/handlers/menu.py
+++ b/Tools/TestResultServer/handlers/menu.py
@@ -26,8 +26,9 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import webapp2
+
from google.appengine.api import users
-from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
dashboards = [
@@ -44,7 +45,7 @@
]
-class Menu(webapp.RequestHandler):
+class Menu(webapp2.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
diff --git a/Tools/TestResultServer/handlers/testfilehandler.py b/Tools/TestResultServer/handlers/testfilehandler.py
index 0f18abb..0d8b37e 100644
--- a/Tools/TestResultServer/handlers/testfilehandler.py
+++ b/Tools/TestResultServer/handlers/testfilehandler.py
@@ -30,9 +30,9 @@
import logging
import re
import urllib
+import webapp2
from google.appengine.api import users
-from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext import db
@@ -44,6 +44,8 @@
PARAM_DIR = "dir"
PARAM_FILE = "file"
PARAM_NAME = "name"
+PARAM_BEFORE = "before"
+PARAM_NUM_FILES = "numfiles"
PARAM_KEY = "key"
PARAM_TEST_TYPE = "testtype"
PARAM_TEST_LIST_JSON = "testlistjson"
@@ -59,7 +61,7 @@
return json
-class DeleteFile(webapp.RequestHandler):
+class DeleteFile(webapp2.RequestHandler):
"""Delete test file for a given builder and name from datastore."""
def get(self):
@@ -68,22 +70,24 @@
builder = self.request.get(PARAM_BUILDER)
test_type = self.request.get(PARAM_TEST_TYPE)
name = self.request.get(PARAM_NAME)
+ num_files = self.request.get(PARAM_NUM_FILES)
+ before = self.request.get(PARAM_BEFORE)
logging.debug(
- "Deleting File, master: %s, builder: %s, test_type: %s, name: %s, key: %s.",
- master, builder, test_type, name, key)
+ "Deleting File, master: %s, builder: %s, test_type: %s, name: %s, before: %s, key: %s.",
+ master, builder, test_type, name, before, key)
- TestFile.delete_file(key, master, builder, test_type, name, 100)
+ limit = int(num_files) if num_files else 1
+ num_deleted = TestFile.delete_file(key, master, builder, test_type, name, before, limit)
- # Display file list after deleting the file.
- self.redirect("/testfile?master=%s&builder=%s&testtype=%s&name=%s"
- % (master, builder, test_type, name))
+ self.response.set_status(200)
+ self.response.out.write("Deleted %d files." % num_deleted)
-class GetFile(webapp.RequestHandler):
+class GetFile(webapp2.RequestHandler):
"""Get file content or list of files for given builder and name."""
- def _get_file_list(self, master, builder, test_type, name, callback_name=None):
+ def _get_file_list(self, master, builder, test_type, name, before, limit, callback_name=None):
"""Get and display a list of files that matches builder and file name.
Args:
@@ -93,7 +97,7 @@
"""
files = TestFile.get_files(
- master, builder, test_type, name, load_data=False, limit=100)
+ master, builder, test_type, name, before, load_data=False, limit=limit)
if not files:
logging.info("File not found, master: %s, builder: %s, test_type: %s, name: %s.",
master, builder, test_type, name)
@@ -181,25 +185,23 @@
builder = self.request.get(PARAM_BUILDER)
test_type = self.request.get(PARAM_TEST_TYPE)
name = self.request.get(PARAM_NAME)
- dir = self.request.get(PARAM_DIR)
+ before = self.request.get(PARAM_BEFORE)
+ num_files = self.request.get(PARAM_NUM_FILES)
test_list_json = self.request.get(PARAM_TEST_LIST_JSON)
callback_name = self.request.get(PARAM_CALLBACK)
logging.debug(
- "Getting files, master %s, builder: %s, test_type: %s, name: %s.",
- master, builder, test_type, name)
-
- if not key:
- # If parameter "dir" is specified or there is no builder or filename
- # specified in the request, return list of files, otherwise, return
- # file content.
- if dir or not builder or not name:
- return self._get_file_list(master, builder, test_type, name, callback_name)
+ "Getting files, master %s, builder: %s, test_type: %s, name: %s, before: %s.",
+ master, builder, test_type, name, before)
if key:
json, date = self._get_file_content_from_key(key)
- elif name == "results.json" and test_list_json:
+ elif test_list_json:
json, date = self._get_test_list_json(master, builder, test_type)
+ elif num_files or not master or not builder or not test_type or not name:
+ limit = int(num_files) if num_files else 100
+ self._get_file_list(master, builder, test_type, name, before, limit, callback_name)
+ return
else:
json, date = self._get_file_content(master, builder, test_type, name)
@@ -209,7 +211,7 @@
self._serve_json(json, date)
-class Upload(webapp.RequestHandler):
+class Upload(webapp2.RequestHandler):
"""Upload test results file to datastore."""
def post(self):
@@ -241,36 +243,37 @@
files.extend(item)
errors = []
+ final_status_code = 200
for file in files:
if file.filename == "incremental_results.json":
- # FIXME: Remove this check once we stop uploading incremental_results.json files for layout tests.
- if test_type == "layout-tests":
- update_succeeded = True
- else:
- update_succeeded = JsonResults.update(master, builder, test_type, file.value, is_full_results_format=False)
+ status_string, status_code = JsonResults.update(master, builder, test_type, file.value, is_full_results_format=False)
+ elif file.filename == "times_ms.json":
+ # We never look at historical times_ms.json files, so we can overwrite the existing one if it exists.
+ status_string, status_code = TestFile.overwrite_or_add_file(master, builder, test_type, file.filename, file.value)
else:
- update_succeeded = bool(TestFile.add_file(master, builder, test_type, file.filename, file.value))
+ status_string, status_code = TestFile.add_file(master, builder, test_type, file.filename, file.value)
# FIXME: Upload full_results.json files for non-layout tests as well and stop supporting the
# incremental_results.json file format.
- if file.filename == "full_results.json" and test_type == "layout-tests":
- update_succeeded |= JsonResults.update(master, builder, test_type, file.value, is_full_results_format=True)
+ if status_code == 200 and file.filename == "full_results.json":
+ status_string, status_code = JsonResults.update(master, builder, test_type, file.value, is_full_results_format=True)
- if not update_succeeded:
- errors.append(
- "Upload failed, master: %s, builder: %s, test_type: %s, name: %s." %
- (master, builder, test_type, file.filename))
+ if status_code == 200:
+ logging.info(status_string)
+ else:
+ logging.error(status_string)
+ errors.append(status_string)
+ final_status_code = status_code
if errors:
messages = "FAIL: " + "; ".join(errors)
- logging.warning(messages)
- self.response.set_status(500, messages)
- self.response.out.write("FAIL")
+ self.response.set_status(final_status_code, messages)
+ self.response.out.write(messages)
else:
self.response.set_status(200)
self.response.out.write("OK")
-class UploadForm(webapp.RequestHandler):
+class UploadForm(webapp2.RequestHandler):
"""Show a form so user can upload a file."""
def get(self):
diff --git a/Tools/TestResultServer/main.py b/Tools/TestResultServer/main.py
index a9b00cf..c8b6852 100644
--- a/Tools/TestResultServer/main.py
+++ b/Tools/TestResultServer/main.py
@@ -26,12 +26,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-# Request a modern Django
-from google.appengine.dist import use_library
-use_library('django', '1.3')
-
-from google.appengine.ext import webapp
-from google.appengine.ext.webapp.util import run_wsgi_app
+import webapp2
from handlers import menu
from handlers import testfilehandler
@@ -41,14 +36,7 @@
('/testfile/upload', testfilehandler.Upload),
('/testfile/uploadform', testfilehandler.UploadForm),
('/testfile/?', testfilehandler.GetFile),
- ('/*|/menu', menu.Menu),
+ ('/', menu.Menu),
]
-application = webapp.WSGIApplication(routes, debug=True)
-
-
-def main():
- run_wsgi_app(application)
-
-if __name__ == "__main__":
- main()
+app = webapp2.WSGIApplication(routes, debug=True)
diff --git a/Tools/TestResultServer/model/datastorefile.py b/Tools/TestResultServer/model/datastorefile.py
index 84642b8..d3f89ef 100755
--- a/Tools/TestResultServer/model/datastorefile.py
+++ b/Tools/TestResultServer/model/datastorefile.py
@@ -26,7 +26,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-from datetime import datetime
import logging
from google.appengine.ext import blobstore
diff --git a/Tools/TestResultServer/model/jsonresults.py b/Tools/TestResultServer/model/jsonresults.py
index 4b3ad73..aa8cc6f 100755
--- a/Tools/TestResultServer/model/jsonresults.py
+++ b/Tools/TestResultServer/model/jsonresults.py
@@ -26,17 +26,12 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-from datetime import datetime
+import json
import logging
+import re
import sys
import traceback
-# FIXME: Once we're on python 2.7, just use json directly.
-try:
- from django.utils import simplejson
-except:
- import json as simplejson
-
from model.testfile import TestFile
JSON_RESULTS_FILE = "results.json"
@@ -52,6 +47,7 @@
BUG_KEY = "bugs"
BUILD_NUMBERS_KEY = "buildNumbers"
EXPECTED_KEY = "expected"
+ACTUAL_KEY = "actual"
FAILURE_MAP_KEY = "failure_map"
FAILURES_BY_TYPE_KEY = "num_failures_by_type"
FIXABLE_COUNTS_KEY = "fixableCounts"
@@ -118,8 +114,8 @@
return data
@classmethod
- def _generate_file_data(cls, json, sort_keys=False):
- return simplejson.dumps(json, separators=(',', ':'), sort_keys=sort_keys)
+ def _generate_file_data(cls, jsonObject, sort_keys=False):
+ return json.dumps(jsonObject, separators=(',', ':'), sort_keys=sort_keys)
@classmethod
def _load_json(cls, file_data):
@@ -129,7 +125,7 @@
return None
try:
- return simplejson.loads(json_results_str)
+ return json.loads(json_results_str)
except:
logging.debug(json_results_str)
logging.error("Failed to load json results: %s", traceback.print_exception(*sys.exc_info()))
@@ -240,11 +236,11 @@
aggregated_item.insert(0, item)
@classmethod
- def _normalize_results(cls, aggregated_json, num_runs):
+ def _normalize_results(cls, aggregated_json, num_runs, run_time_pruning_threshold):
names_to_delete = []
for test_name in aggregated_json:
if _is_directory(aggregated_json[test_name]):
- cls._normalize_results(aggregated_json[test_name], num_runs)
+ cls._normalize_results(aggregated_json[test_name], num_runs, run_time_pruning_threshold)
# If normalizing deletes all the children of this directory, also delete the directory.
if not aggregated_json[test_name]:
names_to_delete.append(test_name)
@@ -252,14 +248,14 @@
leaf = aggregated_json[test_name]
leaf[RESULTS_KEY] = cls._remove_items_over_max_number_of_builds(leaf[RESULTS_KEY], num_runs)
leaf[TIMES_KEY] = cls._remove_items_over_max_number_of_builds(leaf[TIMES_KEY], num_runs)
- if cls._should_delete_leaf(leaf):
+ if cls._should_delete_leaf(leaf, run_time_pruning_threshold):
names_to_delete.append(test_name)
for test_name in names_to_delete:
del aggregated_json[test_name]
@classmethod
- def _should_delete_leaf(cls, leaf):
+ def _should_delete_leaf(cls, leaf, run_time_pruning_threshold):
if leaf.get(EXPECTED_KEY, PASS_STRING) != PASS_STRING:
return False
@@ -272,7 +268,7 @@
return False
for time in leaf[TIMES_KEY]:
- if time[1] >= JSON_RESULTS_MIN_TIME:
+ if time[1] >= run_time_pruning_threshold:
return False
return True
@@ -293,6 +289,7 @@
def _convert_gtest_json_to_aggregate_results_format(cls, json):
# FIXME: Change gtests over to uploading the full results format like layout-tests
# so we don't have to do this normalizing.
+ # http://crbug.com/247192.
if FAILURES_BY_TYPE_KEY in json:
# This is already in the right format.
@@ -311,20 +308,31 @@
def _check_json(cls, builder, json):
version = json[VERSIONS_KEY]
if version > JSON_RESULTS_HIERARCHICAL_VERSION:
- logging.error("Results JSON version '%s' is not supported.", version)
- return False
+ return "Results JSON version '%s' is not supported." % version
if not builder in json:
- logging.error("Builder '%s' is not in json results.", builder)
- return False
+ return "Builder '%s' is not in json results." % builder
results_for_builder = json[builder]
if not BUILD_NUMBERS_KEY in results_for_builder:
- logging.error("Missing build number in json results.")
- return False
+ return "Missing build number in json results."
cls._convert_gtest_json_to_aggregate_results_format(json[builder])
- return True
+
+ # FIXME: Remove this once all the bots have cycled with this code.
+ # The failure map was moved from the top-level to being below the builder
+ # like everything else.
+ if FAILURE_MAP_KEY in json:
+ del json[FAILURE_MAP_KEY]
+
+ # FIXME: Remove this code once the gtests switch over to uploading the full_results.json format.
+ # Once the bots have cycled with this code, we can move this loop into _convert_gtest_json_to_aggregate_results_format.
+ KEYS_TO_DELETE = ["fixableCount", "fixableCounts", "allFixableCount"]
+ for key in KEYS_TO_DELETE:
+ if key in json[builder]:
+ del json[builder][key]
+
+ return ""
@classmethod
def _populate_tests_from_full_results(cls, full_results, new_results):
@@ -335,7 +343,7 @@
time = int(round(full_results[TIME_KEY])) if TIME_KEY in full_results else 0
new_results[TIMES_KEY] = [[1, time]]
- actual_failures = full_results['actual']
+ actual_failures = full_results[ACTUAL_KEY]
# Treat unexpected skips like NOTRUNs to avoid exploding the results JSON files
# when a bot exits early (e.g. due to too many crashes/timeouts).
if expected != SKIP_STRING and actual_failures == SKIP_STRING:
@@ -382,12 +390,9 @@
# FIXME: Use dict comprehensions once we update the server to python 2.7.
FAILURES_BY_TYPE_KEY: dict((key, [value]) for key, value in failures_by_type.items()),
TESTS_KEY: tests,
- # FIXME: Have the consumers of these use num_failures_by_type directly and stop include these counts.
- 'allFixableCount': [num_total_tests],
- 'fixableCount': [num_failing_tests],
- FIXABLE_COUNTS_KEY: [fixableCounts],
# FIXME: Have all the consumers of this switch over to the full_results_format keys
- # so we don't have to do this silly conversion.
+ # so we don't have to do this silly conversion. Or switch the full_results_format keys
+ # to be camel-case.
BUILD_NUMBERS_KEY: [full_results_format['build_number']],
'chromeRevision': [full_results_format['chromium_revision']],
'blinkRevision': [full_results_format['blink_revision']],
@@ -399,57 +404,62 @@
@classmethod
def _get_incremental_json(cls, builder, incremental_string, is_full_results_format):
if not incremental_string:
- logging.warning("Nothing to merge.")
- return None
+ return "No incremental JSON data to merge.", 403
logging.info("Loading incremental json.")
incremental_json = cls._load_json(incremental_string)
if not incremental_json:
- return None
+ return "Incremental JSON data is not valid JSON.", 403
if is_full_results_format:
logging.info("Converting full results format to aggregate.")
incremental_json = cls._convert_full_results_format_to_aggregate(incremental_json)
logging.info("Checking incremental json.")
- if not cls._check_json(builder, incremental_json):
- return None
- return incremental_json
+ check_json_error_string = cls._check_json(builder, incremental_json)
+ if check_json_error_string:
+ return check_json_error_string, 403
+ return incremental_json, 200
@classmethod
def _get_aggregated_json(cls, builder, aggregated_string):
logging.info("Loading existing aggregated json.")
aggregated_json = cls._load_json(aggregated_string)
if not aggregated_json:
- return None
+ return None, 200
logging.info("Checking existing aggregated json.")
- if not cls._check_json(builder, aggregated_json):
- return None
+ check_json_error_string = cls._check_json(builder, aggregated_json)
+ if check_json_error_string:
+ return check_json_error_string, 500
- return aggregated_json
+ return aggregated_json, 200
@classmethod
def merge(cls, builder, aggregated_string, incremental_json, num_runs, sort_keys=False):
- aggregated_json = cls._get_aggregated_json(builder, aggregated_string)
+ aggregated_json, status_code = cls._get_aggregated_json(builder, aggregated_string)
if not aggregated_json:
aggregated_json = incremental_json
+ elif status_code != 200:
+ return aggregated_json, status_code
else:
if aggregated_json[builder][BUILD_NUMBERS_KEY][0] == incremental_json[builder][BUILD_NUMBERS_KEY][0]:
- logging.error("Incremental JSON's build number is the latest build number in the aggregated JSON: %d." % aggregated_json[builder][BUILD_NUMBERS_KEY][0])
- return None
+ status_string = "Incremental JSON's build number %s is the latest build number in the aggregated JSON." % str(aggregated_json[builder][BUILD_NUMBERS_KEY][0])
+ return status_string, 409
logging.info("Merging json results.")
try:
cls._merge_json(aggregated_json[builder], incremental_json[builder], num_runs)
except:
- logging.error("Failed to merge json results: %s", traceback.print_exception(*sys.exc_info()))
- return None
+ return "Failed to merge json results: %s", traceback.print_exception(*sys.exc_info()), 500
aggregated_json[VERSIONS_KEY] = JSON_RESULTS_HIERARCHICAL_VERSION
aggregated_json[builder][FAILURE_MAP_KEY] = CHAR_TO_FAILURE
- cls._normalize_results(aggregated_json[builder][TESTS_KEY], num_runs)
- return cls._generate_file_data(aggregated_json, sort_keys)
+
+ is_debug_builder = re.search(r"(Debug|Dbg)", builder, re.I)
+ run_time_pruning_threshold = 2 * JSON_RESULTS_MIN_TIME if is_debug_builder else JSON_RESULTS_MIN_TIME
+ cls._normalize_results(aggregated_json[builder][TESTS_KEY], num_runs, run_time_pruning_threshold)
+ return cls._generate_file_data(aggregated_json, sort_keys), 200
@classmethod
def _get_file(cls, master, builder, test_type, filename):
@@ -474,24 +484,22 @@
@classmethod
def update_files(cls, builder, incremental_string, small_file, large_file, is_full_results_format):
- incremental_json = cls._get_incremental_json(builder, incremental_string, is_full_results_format)
- if not incremental_json:
- return False
+ incremental_json, status_code = cls._get_incremental_json(builder, incremental_string, is_full_results_format)
+ if status_code != 200:
+ return incremental_json, status_code
- small_file_updated = cls.update_file(builder, small_file, incremental_json, JSON_RESULTS_MAX_BUILDS_SMALL)
- if not small_file_updated:
- logging.info("Update for %s failed." % JSON_RESULTS_FILE_SMALL)
+ status_string, status_code = cls.update_file(builder, small_file, incremental_json, JSON_RESULTS_MAX_BUILDS_SMALL)
+ if status_code != 200:
+ return status_string, status_code
- large_file_updated = cls.update_file(builder, large_file, incremental_json, JSON_RESULTS_MAX_BUILDS)
- if not large_file_updated:
- logging.info("Update for %s failed." % JSON_RESULTS_FILE)
-
- return small_file_updated and large_file_updated
+ return cls.update_file(builder, large_file, incremental_json, JSON_RESULTS_MAX_BUILDS)
@classmethod
def update_file(cls, builder, file, incremental_json, num_runs):
- new_results = cls.merge(builder, file.data, incremental_json, num_runs)
- return new_results and file.save(new_results)
+ new_results, status_code = cls.merge(builder, file.data, incremental_json, num_runs)
+ if status_code != 200:
+ return new_results, status_code
+ return TestFile.save_file(file, new_results)
@classmethod
def _delete_results_and_times(cls, tests):
@@ -509,7 +517,9 @@
return None
logging.debug("Checking test results json...")
- if not cls._check_json(builder, json):
+
+ check_json_error_string = cls._check_json(builder, json)
+ if check_json_error_string:
return None
test_list_json = {}
diff --git a/Tools/TestResultServer/model/jsonresults_unittest.py b/Tools/TestResultServer/model/jsonresults_unittest.py
index d0e35c9..c9b167d 100755
--- a/Tools/TestResultServer/model/jsonresults_unittest.py
+++ b/Tools/TestResultServer/model/jsonresults_unittest.py
@@ -33,12 +33,7 @@
print "ERROR: Add the TestResultServer, google_appengine and yaml/lib directories to your PYTHONPATH"
raise
-# FIXME: Once we're on python 2.7, just use json directly.
-try:
- from django.utils import simplejson
-except:
- import json as simplejson
-
+import json
import unittest
FULL_RESULT_EXAMPLE = """ADD_RESULTS({
@@ -143,25 +138,22 @@
'"tests":{[TESTDATA_TESTS]}'
'},'
'"version":[VERSION]'
- '}') % simplejson.dumps(CHAR_TO_FAILURE)
+ '}') % json.dumps(CHAR_TO_FAILURE)
JSON_RESULTS_COUNTS = '{"' + '":[[TESTDATA_COUNT]],"'.join([char for char in CHAR_TO_FAILURE.values()]) + '":[[TESTDATA_COUNT]]}'
JSON_RESULTS_TEMPLATE = (
'{"[BUILDER_NAME]":{'
- '"allFixableCount":[[TESTDATA_COUNT]],'
'"blinkRevision":[[TESTDATA_WEBKITREVISION]],'
'"buildNumbers":[[TESTDATA_BUILDNUMBERS]],'
'"chromeRevision":[[TESTDATA_CHROMEREVISION]],'
'"failure_map": %s,'
- '"fixableCount":[[TESTDATA_COUNT]],'
- '"fixableCounts":[[TESTDATA_COUNTS]],'
'"num_failures_by_type":%s,'
'"secondsSinceEpoch":[[TESTDATA_TIMES]],'
'"tests":{[TESTDATA_TESTS]}'
'},'
'"version":[VERSION]'
- '}') % (simplejson.dumps(CHAR_TO_FAILURE), JSON_RESULTS_COUNTS)
+ '}') % (json.dumps(CHAR_TO_FAILURE), JSON_RESULTS_COUNTS)
JSON_RESULTS_COUNTS_TEMPLATE = '{"' + '":[TESTDATA],"'.join([char for char in CHAR_TO_FAILURE]) + '":[TESTDATA]}'
@@ -188,8 +180,8 @@
# Use this to get better error messages than just string compare gives.
def assert_json_equal(self, a, b):
self.maxDiff = None
- a = simplejson.loads(a) if isinstance(a, str) else a
- b = simplejson.loads(b) if isinstance(b, str) else b
+ a = json.loads(a) if isinstance(a, str) else a
+ b = json.loads(b) if isinstance(b, str) else b
self.assertEqual(a, b)
def test_strip_prefix_suffix(self):
@@ -228,23 +220,24 @@
version = str(test_data["version"]) if "version" in test_data else "4"
json_string = json_string.replace("[VERSION]", version)
- json_string = json_string.replace("{[TESTDATA_TESTS]}", simplejson.dumps(tests, separators=(',', ':'), sort_keys=True))
+ json_string = json_string.replace("{[TESTDATA_TESTS]}", json.dumps(tests, separators=(',', ':'), sort_keys=True))
return json_string
def _test_merge(self, aggregated_data, incremental_data, expected_data, max_builds=jsonresults.JSON_RESULTS_MAX_BUILDS):
- aggregated_results = self._make_test_json(aggregated_data)
- incremental_json = JsonResults._get_incremental_json(self._builder, self._make_test_json(incremental_data), is_full_results_format=False)
- merged_results = JsonResults.merge(self._builder, aggregated_results, incremental_json, num_runs=max_builds, sort_keys=True)
+ aggregated_results = self._make_test_json(aggregated_data, builder_name=self._builder)
+ incremental_json, _ = JsonResults._get_incremental_json(self._builder, self._make_test_json(incremental_data, builder_name=self._builder), is_full_results_format=False)
+ merged_results, status_code = JsonResults.merge(self._builder, aggregated_results, incremental_json, num_runs=max_builds, sort_keys=True)
if expected_data:
- expected_results = self._make_test_json(expected_data)
+ expected_results = self._make_test_json(expected_data, builder_name=self._builder)
self.assert_json_equal(merged_results, expected_results)
+ self.assertEqual(status_code, 200)
else:
- self.assertFalse(merged_results)
+ self.assertTrue(status_code != 200)
def _test_get_test_list(self, input_data, expected_data):
input_results = self._make_test_json(input_data)
- expected_results = JSON_RESULTS_TEST_LIST_TEMPLATE.replace("{[TESTDATA_TESTS]}", simplejson.dumps(expected_data, separators=(',', ':')))
+ expected_results = JSON_RESULTS_TEST_LIST_TEMPLATE.replace("{[TESTDATA_TESTS]}", json.dumps(expected_data, separators=(',', ':')))
actual_results = JsonResults.get_test_list(self._builder, input_results)
self.assert_json_equal(actual_results, expected_results)
@@ -286,7 +279,8 @@
incremental_string = ""
- self.assertFalse(JsonResults.update_files(small_file.builder, incremental_string, small_file, large_file, is_full_results_format=False))
+ self.assertEqual(JsonResults.update_files(small_file.builder, incremental_string, small_file, large_file, is_full_results_format=False),
+ ('No incremental JSON data to merge.', 403))
self.assert_json_equal(small_file.data, aggregated_string)
self.assert_json_equal(large_file.data, aggregated_string)
@@ -313,7 +307,8 @@
}
incremental_string = self._make_test_json(incremental_data, builder_name=small_file.builder)
- self.assertFalse(JsonResults.update_files(small_file.builder, incremental_string, small_file, large_file, is_full_results_format=False))
+ self.assertEqual(JsonResults.update_files(small_file.builder, incremental_string, small_file, large_file, is_full_results_format=False),
+ ('No incremental JSON data to merge.', 403))
self.assert_json_equal(small_file.data, aggregated_string)
self.assert_json_equal(large_file.data, aggregated_string)
@@ -327,9 +322,9 @@
}
}
}
- incremental_results = JsonResults._get_incremental_json(self._builder, self._make_test_json(incremental_data), is_full_results_format=False)
+ incremental_results, _ = JsonResults._get_incremental_json(self._builder, self._make_test_json(incremental_data), is_full_results_format=False)
aggregated_results = ""
- merged_results = JsonResults.merge(self._builder, aggregated_results, incremental_results, num_runs=jsonresults.JSON_RESULTS_MAX_BUILDS, sort_keys=True)
+ merged_results, _ = JsonResults.merge(self._builder, aggregated_results, incremental_results, num_runs=jsonresults.JSON_RESULTS_MAX_BUILDS, sort_keys=True)
self.assert_json_equal(merged_results, incremental_results)
def test_failures_by_type_added(self):
@@ -351,8 +346,8 @@
}
}
}, json_string=JSON_RESULTS_OLD_TEMPLATE)
- incremental_json = JsonResults._get_incremental_json(self._builder, incremental_results, is_full_results_format=False)
- merged_results = JsonResults.merge(self._builder, aggregated_results, incremental_json, num_runs=200, sort_keys=True)
+ incremental_json, _ = JsonResults._get_incremental_json(self._builder, incremental_results, is_full_results_format=False)
+ merged_results, _ = JsonResults.merge(self._builder, aggregated_results, incremental_json, num_runs=200, sort_keys=True)
self.assert_json_equal(merged_results, self._make_test_json({
"builds": ["3", "2", "1"],
"tests": {
@@ -366,13 +361,10 @@
def test_merge_full_results_format(self):
expected_incremental_results = {
"Webkit": {
- "allFixableCount": [35],
"blinkRevision": ["1234"],
"buildNumbers": ["3"],
"chromeRevision": ["5678"],
"failure_map": CHAR_TO_FAILURE,
- "fixableCount": [25],
- "fixableCounts": [{AUDIO: 0, CRASH: 3, TEXT: 3, IMAGE: 1, MISSING: 0, PASS: 10, TIMEOUT: 16, SKIP: 2, IMAGE_PLUS_TEXT: 0}],
"num_failures_by_type": {"AUDIO": [0], "CRASH": [3], "IMAGE": [1], "IMAGE+TEXT": [0], "MISSING": [0], "PASS": [10], "SKIP": [2], "TEXT": [3], "TIMEOUT": [16]},
"secondsSinceEpoch": [1368146629],
"tests": {
@@ -417,8 +409,8 @@
}
aggregated_results = ""
- incremental_json = JsonResults._get_incremental_json(self._builder, FULL_RESULT_EXAMPLE, is_full_results_format=True)
- merged_results = JsonResults.merge("Webkit", aggregated_results, incremental_json, num_runs=jsonresults.JSON_RESULTS_MAX_BUILDS, sort_keys=True)
+ incremental_json, _ = JsonResults._get_incremental_json(self._builder, FULL_RESULT_EXAMPLE, is_full_results_format=True)
+ merged_results, _ = JsonResults.merge("Webkit", aggregated_results, incremental_json, num_runs=jsonresults.JSON_RESULTS_MAX_BUILDS, sort_keys=True)
self.assert_json_equal(merged_results, expected_incremental_results)
def test_merge_empty_aggregated_results(self):
@@ -819,7 +811,6 @@
def test_merge_keep_test_with_all_pass_but_slow_time(self):
- # Do not remove test where all run pass but max running time >= 5 seconds
self._test_merge(
# Aggregated results
{"builds": ["2", "1"],
@@ -846,6 +837,37 @@
"results": [[1, PASS], [10, TEXT]],
"times": [[11, 0]]}}})
+ def test_merge_pruning_slow_tests_for_debug_builders(self):
+ self._builder = "MockBuilder(dbg)"
+ self._test_merge(
+ # Aggregated results
+ {"builds": ["2", "1"],
+ "tests": {"001.html": {
+ "results": [[200, PASS]],
+ "times": [[200, 2 * jsonresults.JSON_RESULTS_MIN_TIME]]},
+ "002.html": {
+ "results": [[10, TEXT]],
+ "times": [[10, 0]]}}},
+ # Incremental results
+ {"builds": ["3"],
+ "tests": {"001.html": {
+ "results": [[1, PASS]],
+ "times": [[1, 1]]},
+ "002.html": {
+ "results": [[1, PASS]],
+ "times": [[1, 0]]},
+ "003.html": {
+ "results": [[1, PASS]],
+ "times": [[1, jsonresults.JSON_RESULTS_MIN_TIME]]}}},
+ # Expected results
+ {"builds": ["3", "2", "1"],
+ "tests": {"001.html": {
+ "results": [[201, PASS]],
+ "times": [[1, 1], [200, 2 * jsonresults.JSON_RESULTS_MIN_TIME]]},
+ "002.html": {
+ "results": [[1, PASS], [10, TEXT]],
+ "times": [[11, 0]]}}})
+
def test_merge_prune_extra_results(self):
# Remove items from test results and times that exceed the max number
# of builds to track.
diff --git a/Tools/TestResultServer/model/testfile.py b/Tools/TestResultServer/model/testfile.py
index 9ab4227..bada12f 100644
--- a/Tools/TestResultServer/model/testfile.py
+++ b/Tools/TestResultServer/model/testfile.py
@@ -40,29 +40,30 @@
test_type = db.StringProperty()
@classmethod
- def delete_file(cls, key, master, builder, test_type, name, limit):
+ def delete_file(cls, key, master, builder, test_type, name, before, limit):
if key:
file = db.get(key)
if not file:
logging.warning("File not found, key: %s.", key)
- return False
+ return 0
file._delete_all()
- else:
- files = cls.get_files(master, builder, test_type, name, limit)
- if not files:
- logging.warning(
- "File not found, master: %s, builder: %s, test_type:%s, name: %s.",
- builder, test_type, name)
- return False
+ return 1
- for file in files:
- file._delete_all()
+ files = cls.get_files(master, builder, test_type, name, before, load_data=False, limit=limit)
+ if not files:
+ logging.warning(
+ "File not found, master: %s, builder: %s, test_type:%s, name: %s, before: %s.",
+ master, builder, test_type, name, before)
+ return 0
- return True
+ for file in files:
+ file._delete_all()
+
+ return len(files)
@classmethod
- def get_files(cls, master, builder, test_type, name, load_data=True, limit=1):
+ def get_files(cls, master, builder, test_type, name, before=None, load_data=True, limit=1):
query = TestFile.all()
if master:
query = query.filter("master =", master)
@@ -72,6 +73,9 @@
query = query.filter("test_type =", test_type)
if name:
query = query.filter("name =", name)
+ if before:
+ date = datetime.strptime(before, "%Y-%m-%dT%H:%M:%SZ")
+ query = query.filter("date <", date)
files = query.order("-date").fetch(limit)
if load_data:
@@ -81,21 +85,31 @@
return files
@classmethod
+ def save_file(cls, file, data):
+ file_information = "master: %s, builder: %s, test_type: %s, name: %s." % (file.master, file.builder, file.test_type, file.name)
+ if file.save(data):
+ status_string = "Saved file. %s" % file_information
+ status_code = 200
+ else:
+ status_string = "Couldn't save file. %s" % file_information
+ status_code = 500
+ return status_string, status_code
+
+ @classmethod
+ def overwrite_or_add_file(cls, master, builder, test_type, name, data):
+ files = TestFile.get_files(master, builder, test_type, name)
+ if not files:
+ return cls.add_file(master, builder, test_type, name, data)
+ return cls.save_file(files[0], data)
+
+ @classmethod
def add_file(cls, master, builder, test_type, name, data):
file = TestFile()
file.master = master
file.builder = builder
file.test_type = test_type
file.name = name
-
- if not file.save(data):
- return None
-
- logging.info(
- "File saved, master: %s, builder: %s, test_type: %s, name: %s, key: %s.",
- master, builder, test_type, file.name, str(file.data_keys))
-
- return file
+ return cls.save_file(file, data)
def save(self, data):
if not self.save_data(data):
diff --git a/Tools/TestResultServer/robots.txt b/Tools/TestResultServer/robots.txt
new file mode 100644
index 0000000..09e50a7
--- /dev/null
+++ b/Tools/TestResultServer/robots.txt
@@ -0,0 +1,4 @@
+# There's nothing useful to index here. No need to pay the server costs for getting it crawled.
+User-agent: *
+Disallow: /testfile
+
diff --git a/Tools/TestResultServer/static-dashboards/aggregate_results.html b/Tools/TestResultServer/static-dashboards/aggregate_results.html
index a949633..e24a40d 100644
--- a/Tools/TestResultServer/static-dashboards/aggregate_results.html
+++ b/Tools/TestResultServer/static-dashboards/aggregate_results.html
@@ -66,9 +66,12 @@
background-color: #e0eaf1;
}
</style>
-<script src="builders.js"></script>
-<script src="loader.js"></script>
+<script src="base.js"></script>
<script src="string.js"></script>
+<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
+<script src="results.js"></script>
+<script src="loader.js"></script>
<script src="history.js"></script>
<script src="dashboard_base.js"></script>
<script src="ui.js"></script>
diff --git a/Tools/TestResultServer/static-dashboards/aggregate_results.js b/Tools/TestResultServer/static-dashboards/aggregate_results.js
index dd2535c..d5caac2 100644
--- a/Tools/TestResultServer/static-dashboards/aggregate_results.js
+++ b/Tools/TestResultServer/static-dashboards/aggregate_results.js
@@ -79,7 +79,7 @@
function totalFailureCountFor(builder)
{
if (!g_totalFailureCounts[builder])
- g_totalFailureCounts[builder] = getTotalTestCounts(g_resultsByBuilder[builder][FAILURES_BY_TYPE_KEY]);
+ g_totalFailureCounts[builder] = results.testCounts(g_resultsByBuilder[builder][results.NUM_FAILURES_BY_TYPE]);
return g_totalFailureCounts[builder];
}
@@ -99,21 +99,31 @@
function chartHTML(builder)
{
- var results = g_resultsByBuilder[builder];
+ var resultsForBuilder = g_resultsByBuilder[builder];
var totalFailingTests = totalFailureCountFor(builder).totalFailingTests;
- var shouldShowBlinkRevisions = isTipOfTreeWebKitBuilder();
- var revisionKey = shouldShowBlinkRevisions ? BLINK_REVISIONS_KEY : CHROME_REVISIONS_KEY;
- var startRevision = results[revisionKey][totalFailingTests.length - 1];
- var endRevision = results[revisionKey][0];
- var revisionLabel = shouldShowBlinkRevisions ? "Blink Revision" : "Chromium Revision";
- var html = chart("Total failing", {"": totalFailingTests}, revisionLabel, startRevision, endRevision);
+ // Some bots don't properly record revision numbers. Handle that gracefully.
+ var label, values;
+ if (currentBuilderGroup().isToTBlink && resultsForBuilder[results.BLINK_REVISIONS]) {
+ label = 'Blink Revision';
+ values = resultsForBuilder[results.BLINK_REVISIONS]
+ } else if (resultsForBuilder[results.CHROME_REVISIONS]) {
+ label = 'Chrome Revision';
+ values = resultsForBuilder[results.CHROME_REVISIONS];
+ } else {
+ label = 'Build Number';
+ values = resultsForBuilder[results.BUILD_NUMBERS];
+ }
- var values = results[FAILURES_BY_TYPE_KEY];
+ var start = values[totalFailingTests.length - 1];
+ var end = values[0];
+ var html = chart("Total failing", {"": totalFailingTests}, label, start, end);
+
+ var values = resultsForBuilder[results.NUM_FAILURES_BY_TYPE];
// Don't care about number of passes for the charts.
- delete(values[PASS]);
+ delete(values[results.PASS]);
- return html + chart("Detailed breakdown", values, revisionLabel, startRevision, endRevision);
+ return html + chart("Detailed breakdown", values, label, start, end);
}
var LABEL_COLORS = ['FF0000', '00FF00', '0000FF', '000000', 'FF6EB4', 'FFA812', '9B30FF', '00FFCC'];
@@ -180,10 +190,14 @@
return '<img src="' + url + '">';
}
-function htmlForRevisionRows(results, numColumns)
+function htmlForRevisionRows(resultsForBuilder, numColumns)
{
- return htmlForTableRow('Blink Revision', results[BLINK_REVISIONS_KEY].slice(0, numColumns)) +
- htmlForTableRow('Chrome Revision', results[CHROME_REVISIONS_KEY].slice(0, numColumns));
+ var html = '';
+ if (resultsForBuilder[results.BLINK_REVISIONS])
+ html += htmlForTableRow('Blink Revision', resultsForBuilder[results.BLINK_REVISIONS].slice(0, numColumns));
+ if (resultsForBuilder[results.CHROME_REVISIONS])
+ html += htmlForTableRow('Chrome Revision', resultsForBuilder[results.CHROME_REVISIONS].slice(0, numColumns));
+ return html;
}
function htmlForTestType(builder)
@@ -199,14 +213,14 @@
percent.push(Math.round(percentage * 10) / 10 + '%');
}
- var results = g_resultsByBuilder[builder];
+ var resultsForBuilder = g_resultsByBuilder[builder];
html = '<table><tbody>' +
- htmlForRevisionRows(results, totalTests.length) +
+ htmlForRevisionRows(resultsForBuilder, totalTests.length) +
htmlForTableRow('Percent passed', percent) +
htmlForTableRow('Failures', totalFailing) +
htmlForTableRow('Total Tests', totalTests);
- var values = results[FAILURES_BY_TYPE_KEY];
+ var values = resultsForBuilder[results.NUM_FAILURES_BY_TYPE];
for (var expectation in values)
html += htmlForTableRow(expectation, values[expectation]);
diff --git a/Tools/TestResultServer/static-dashboards/aggregate_results_unittest.js b/Tools/TestResultServer/static-dashboards/aggregate_results_unittest.js
index 39d8bfe..ec3eabb 100644
--- a/Tools/TestResultServer/static-dashboards/aggregate_results_unittest.js
+++ b/Tools/TestResultServer/static-dashboards/aggregate_results_unittest.js
@@ -28,7 +28,7 @@
module('aggregate_results');
-function setupAggregateResultsData()
+function setupAggregateResultsData(includeRevisonNumbers)
{
var historyInstance = new history.History(flakinessConfig);
// FIXME(jparent): Remove this once global isn't used.
@@ -37,15 +37,21 @@
historyInstance.crossDashboardState[key] = history.DEFAULT_CROSS_DASHBOARD_STATE_VALUES[key];
var builderName = 'Blink Linux';
- LOAD_BUILDBOT_DATA([{
- name: 'ChromiumWebkit',
- url: 'dummyurl',
- tests: {'layout-tests': {'builders': [builderName]}}
- }]);
- for (var group in LAYOUT_TESTS_BUILDER_GROUPS)
- LAYOUT_TESTS_BUILDER_GROUPS[group] = null;
-
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
+ LOAD_BUILDBOT_DATA({
+ "masters": [
+ {
+ "groups": [ "@ToT Blink" ],
+ "name": "ChromiumWebkit",
+ "tests": {
+ "layout-tests": {
+ "builders": [builderName]
+ }
+ },
+ "url": "http://build.chromium.org/p/chromium.win"
+ }
+ ]
+ });
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
g_resultsByBuilder[builderName] = {
"num_failures_by_type": {
@@ -59,14 +65,20 @@
"PASS": [ 28104, 28586 ],
"AUDIO": [ 0, 0 ]
},
- blinkRevision: [1234, 1233],
- chromeRevision: [4567, 4566]
+ "buildNumbers": [5, 3]
}
+
+ if (includeRevisonNumbers) {
+ g_resultsByBuilder[builderName][results.BLINK_REVISIONS] = [1234, 1233];
+ g_resultsByBuilder[builderName][results.CHROME_REVISIONS] = [4567, 4566];
+ }
+
g_totalFailureCounts = {};
}
test('htmlForBuilder', 1, function() {
- setupAggregateResultsData();
+ var includeRevisonNumbers = true;
+ setupAggregateResultsData(includeRevisonNumbers);
g_history.dashboardSpecificState.rawValues = false;
var expectedHtml = '<div class=container>' +
@@ -79,8 +91,24 @@
equal(expectedHtml, htmlForBuilder('Blink Linux'));
});
+test('htmlForBuilder', 1, function() {
+ var includeRevisonNumbers = false;
+ setupAggregateResultsData(includeRevisonNumbers);
+ g_history.dashboardSpecificState.rawValues = false;
+
+ var expectedHtml = '<div class=container>' +
+ '<h2>Blink Linux</h2>' +
+ '<a href="timeline_explorer.html#useTestData=true&builder=Blink Linux">' +
+ '<img src="http://chart.apis.google.com/chart?cht=lc&chs=600x400&chd=e:qe..&chg=15,15,1,3&chxt=x,x,y&chxl=1:||Build Number|&chxr=0,3,5|2,0,1445&chtt=Total failing">' +
+ '<img src="http://chart.apis.google.com/chart?cht=lc&chs=600x400&chd=e:AjAt,AcAV,A7A7,DuEc,pB..,DSE4,CoD8,AAAA&chg=15,15,1,3&chxt=x,x,y&chxl=1:||Build Number|&chxr=0,3,5|2,0,1167&chtt=Detailed breakdown&chdl=CRASH|MISSING|IMAGE+TEXT|IMAGE|SKIP|TEXT|TIMEOUT|AUDIO&chco=FF0000,00FF00,0000FF,000000,FF6EB4,FFA812,9B30FF,00FFCC">' +
+ '</a>' +
+ '</div>';
+ equal(expectedHtml, htmlForBuilder('Blink Linux'));
+});
+
test('htmlForBuilderRawResults', 1, function() {
- setupAggregateResultsData();
+ var includeRevisonNumbers = true;
+ setupAggregateResultsData(includeRevisonNumbers);
g_history.dashboardSpecificState.rawValues = true;
var expectedHtml = '<div class=container>' +
@@ -106,3 +134,30 @@
'</div>';
equal(expectedHtml, htmlForBuilder('Blink Linux'));
});
+
+test('htmlForBuilderRawResults', 1, function() {
+ var includeRevisonNumbers = false;
+ setupAggregateResultsData(includeRevisonNumbers);
+ g_history.dashboardSpecificState.rawValues = true;
+
+ var expectedHtml = '<div class=container>' +
+ '<h2>Blink Linux</h2>' +
+ '<table>' +
+ '<tbody>' +
+ '<tr><td>Percent passed</td><td>95.1%</td><td>96.8%</td></tr>' +
+ '<tr><td>Failures</td><td>1445</td><td>959</td></tr>' +
+ '<tr><td>Total Tests</td><td>29549</td><td>29545</td></tr>' +
+ '<tr><td>CRASH</td><td>13</td><td>10</td></tr>' +
+ '<tr><td>MISSING</td><td>6</td><td>8</td></tr>' +
+ '<tr><td>IMAGE+TEXT</td><td>17</td><td>17</td></tr>' +
+ '<tr><td>IMAGE</td><td>81</td><td>68</td></tr>' +
+ '<tr><td>SKIP</td><td>1167</td><td>748</td></tr>' +
+ '<tr><td>TEXT</td><td>89</td><td>60</td></tr>' +
+ '<tr><td>TIMEOUT</td><td>72</td><td>48</td></tr>' +
+ '<tr><td>PASS</td><td>28104</td><td>28586</td></tr>' +
+ '<tr><td>AUDIO</td><td>0</td><td>0</td></tr>' +
+ '</tbody>' +
+ '</table>' +
+ '</div>';
+ equal(expectedHtml, htmlForBuilder('Blink Linux'));
+});
diff --git a/Tools/TestResultServer/static-dashboards/base.js b/Tools/TestResultServer/static-dashboards/base.js
new file mode 100644
index 0000000..31a2832
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/base.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2013 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// FIXME: add array handling methods here under the array namespace (e.g. array.contains).
+
+function $(id)
+{
+ return document.getElementById(id);
+}
+
+// Create a new function with some of its arguments pre-filled.
+// Taken from goog.partial in the Closure library.
+function partial(fn, var_args)
+{
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ // Prepend the bound arguments to the current arguments.
+ var newArgs = Array.prototype.slice.call(arguments);
+ newArgs.unshift.apply(newArgs, args);
+ return fn.apply(this, newArgs);
+ };
+};
diff --git a/Tools/TestResultServer/static-dashboards/base_unittests.js b/Tools/TestResultServer/static-dashboards/base_unittests.js
new file mode 100644
index 0000000..a1ad225
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/base_unittests.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+module('base');
+
+test('partial', 1, function() {
+ var sum = function(a, b) { return a + b; };
+ equal(partial(sum, 1)(2), sum(1, 2));
+});
diff --git a/Tools/TestResultServer/static-dashboards/builders.js b/Tools/TestResultServer/static-dashboards/builders.js
index ec4377a..cb334df 100644
--- a/Tools/TestResultServer/static-dashboards/builders.js
+++ b/Tools/TestResultServer/static-dashboards/builders.js
@@ -26,46 +26,143 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// @fileoverview File that lists builders, their masters, and logical groupings
-// of them.
-
function LOAD_BUILDBOT_DATA(builderData)
{
builders.masters = {};
- builderData.forEach(function(master) {
- builders.masters[master.name] = new builders.BuilderMaster(master.name, master.url, master.tests);
- })
+ var groups = {};
+ var testTypes = {};
+ builderData['masters'].forEach(function(master) {
+ builders.masters[master.name] = new builders.BuilderMaster(master.name, master.url, master.tests, master.groups);
+
+ master.groups.forEach(function(group) { groups[group] = true; });
+
+ Object.keys(master.tests).forEach(function(testType) {
+ if (builders.testTypeUploadsToFlakinessDashboardServer(testType))
+ testTypes[testType] = true;
+ });
+ });
+ builders.groups = Object.keys(groups);
+ builders.groups.sort();
+ builders.testTypes = Object.keys(testTypes);
+ builders.testTypes.sort();
}
var builders = builders || {};
(function() {
-// FIXME: Move some of this loading logic into loader.js.
-
-builders._loadScript = function(url, success, error)
+builders.testTypeUploadsToFlakinessDashboardServer = function(testType)
{
- var script = document.createElement('script');
- script.src = url;
- script.onload = success;
- script.onerror = error;
- document.head.appendChild(script);
+ // FIXME: Encode whether the test uploads to the server in the buildbot json so
+ // we can include that data in buildbot.jsonp and not need to do ugly heuristics
+ // based off the name of the test suite. This code both has some false positives
+ // and some false negatives.
+ return !testType.match(/_only|_ignore|_perf$/) && !testType.match(/^memory test:|install_/) && testType != 'Run tests';
}
-builders._requestBuilders = function()
+var currentBuilderGroup = {};
+var testTypesThatRunToTBlinkBots = ['layout-tests', 'test_shell_tests', 'webkit_unit_tests'];
+
+builders.getBuilderGroup = function(groupName, testType)
{
- var buildersUrl = 'builders.jsonp';
- builders._loadScript(buildersUrl, function() {}, function() {
- console.error('Could not load ' + buildersUrl);
+ if (!builders in currentBuilderGroup) {
+ currentBuilderGroup = builders.loadBuildersList(groupName, testType);
+ }
+ return currentBuilderGroup;
+}
+
+function isChromiumWebkitTipOfTreeTestRunner(builder)
+{
+ // FIXME: Remove the Android check once the android tests bot is actually uploading results.
+ return builder.indexOf('ASAN') == -1 &&
+ builder.indexOf('Android') == -1 &&
+ !isChromiumWebkitDepsTestRunner(builder);
+}
+
+function isChromiumWebkitDepsTestRunner(builder)
+{
+ return builder.indexOf('(deps)') != -1;
+}
+
+builders._builderFilter = function(groupName, testType)
+{
+ if (testTypesThatRunToTBlinkBots.indexOf(testType) == -1)
+ return null;
+
+ if (groupName == '@ToT Blink')
+ return isChromiumWebkitTipOfTreeTestRunner;
+
+ if (groupName == '@ToT Chromium')
+ return isChromiumWebkitDepsTestRunner;
+
+ return null;
+}
+
+var builderToMaster = {};
+
+builders.master = function(builderName)
+{
+ return builderToMaster[builderName];
+}
+
+function populateBuilderToMaster()
+{
+ var allMasterNames = Object.keys(builders.masters);
+
+ allMasterNames.forEach(function(masterName) {
+ var master = builders.masters[masterName];
+ var testTypes = Object.keys(master.tests);
+ testTypes.forEach(function (testType) {
+ var builderList = master.tests[testType].builders;
+ builderList.forEach(function (builderName) {
+ builderToMaster[builderName] = master;
+ });
+ });
});
}
+builders.loadBuildersList = function(groupName, testType)
+{
+ if (!groupName || !testType) {
+ console.warn("Group name and/or test type were empty.");
+ return new builders.BuilderGroup(false);
+ }
+ var builderGroup = new builders.BuilderGroup(groupName == '@ToT Blink');
-builders.BuilderMaster = function(name, basePath, tests)
+ for (masterName in builders.masters) {
+ if (!builders.masters[masterName])
+ continue;
+
+ var master = builders.masters[masterName];
+ var hasTest = testType in master.tests;
+ var isInGroup = master.groups.indexOf(groupName) != -1;
+
+ if (hasTest && isInGroup) {
+ var builderList = master.tests[testType].builders;
+ var builderFilter = builders._builderFilter(groupName, testType);
+ if (builderFilter)
+ builderList = builderList.filter(builderFilter);
+ builderGroup.append(builderList);
+ }
+ }
+
+ populateBuilderToMaster();
+
+ currentBuilderGroup = builderGroup;
+ return currentBuilderGroup;
+}
+
+builders.getAllGroupNames = function()
+{
+ return builders.groups;
+}
+
+builders.BuilderMaster = function(name, basePath, tests, groups)
{
this.name = name;
this.basePath = basePath;
this.tests = tests;
+ this.groups = groups;
}
builders.BuilderMaster.prototype = {
@@ -79,242 +176,55 @@
},
}
-builders._requestBuilders();
-
-})();
-
-// FIXME: Move everything below into the anonymous namespace above.
-
-CHROMIUM_WIN_BUILDER_MASTER = 'ChromiumWin';
-CHROMIUM_MAC_BUILDER_MASTER = 'ChromiumMac';
-CHROMIUM_LINUX_BUILDER_MASTER = 'ChromiumLinux';
-CHROMIUMOS_BUILDER_MASTER = 'ChromiumChromiumOS';
-CHROMIUM_GPU_BUILDER_MASTER = 'ChromiumGPU';
-CHROMIUM_GPU_FYI_BUILDER_MASTER = 'ChromiumGPUFYI';
-CHROMIUM_FYI_BUILDER_MASTER = 'ChromiumFYI';
-CHROMIUM_PERF_AV_BUILDER_MASTER = 'ChromiumPerfAv';
-CHROMIUM_WEBKIT_BUILDER_MASTER = 'ChromiumWebkit';
-
-var LEGACY_BUILDER_MASTERS_TO_GROUPS = {
- 'Chromium': '@DEPS - chromium.org',
- 'ChromiumWin': '@DEPS - chromium.org',
- 'ChromiumMac': '@DEPS - chromium.org',
- 'ChromiumLinux': '@DEPS - chromium.org',
- 'ChromiumChromiumOS': '@DEPS CrOS - chromium.org',
- 'ChromiumGPU': '@DEPS - chromium.org',
- 'ChromiumGPUFYI': '@DEPS FYI - chromium.org',
- 'ChromiumPerfAv': '@DEPS - chromium.org',
- 'ChromiumWebkit': '@ToT - chromium.org'
-};
-
-function BuilderGroup(isToTWebKit)
+builders.BuilderGroup = function(isToTBlink)
{
- this.isToTWebKit = isToTWebKit;
+ this.isToTBlink = isToTBlink;
// Map of builderName (the name shown in the waterfall) to builderPath (the
// path used in the builder's URL)
this.builders = {};
}
-BuilderGroup.prototype.append = function(builders) {
- builders.forEach(function(builderName) {
- this.builders[builderName] = builderName.replace(/[ .()]/g, '_');
- }, this);
-};
-
-BuilderGroup.prototype.defaultBuilder = function()
-{
- for (var builder in this.builders)
- return builder;
- console.error('There are no builders in this builder group.');
+builders.BuilderGroup.prototype = {
+ append: function(builders) {
+ builders.forEach(function(builderName) {
+ this.builders[builderName] = builderName.replace(/[ .()]/g, '_');
+ }, this);
+ },
+ defaultBuilder: function()
+ {
+ for (var builder in this.builders)
+ return builder;
+ console.error('There are no builders in this builder group.');
+ },
+ master: function()
+ {
+ return builders.master(this.defaultBuilder());
+ },
}
-BuilderGroup.prototype.master = function()
+builders.groupNamesForTestType = function(testType)
{
- return builderMaster(this.defaultBuilder());
-}
-
-BuilderGroup.TOT_WEBKIT = true;
-BuilderGroup.DEPS_WEBKIT = false;
-
-var BUILDER_TO_MASTER = {};
-
-function builderMaster(builderName)
-{
- return BUILDER_TO_MASTER[builderName];
-}
-
-function requestBuilderList(builderGroups, masterName, groupName, builderGroup, testType, opt_builderFilter)
-{
- if (!builderGroups[groupName])
- builderGroups[groupName] = builderGroup;
- var master = builders.masters[masterName];
- var builderList = master.tests[testType].builders;
- if (opt_builderFilter)
- builderList = builderList.filter(opt_builderFilter);
- builderList.forEach(function(builderName) {
- BUILDER_TO_MASTER[builderName] = master;
- });
- builderGroups[groupName].append(builderList);
-}
-
-function isChromiumContentShellTestRunner(builder)
-{
- return builder.indexOf('(Content Shell)') != -1;
-}
-
-function isChromiumWebkitTipOfTreeTestRunner(builder)
-{
- // FIXME: Remove the Android check once the android tests bot is actually uploading results.
- return builder.indexOf('ASAN') == -1 && !isChromiumContentShellTestRunner(builder) && builder.indexOf('Android') == -1 && !isChromiumWebkitDepsTestRunner(builder);
-}
-
-function isChromiumWebkitDepsTestRunner(builder)
-{
- return builder.indexOf('(deps)') != -1;
-}
-
-// FIXME: Look into whether we can move the grouping logic into builders.jsonp and get rid of this code.
-function loadBuildersList(groupName, testType) {
- switch (testType) {
- case 'gl_tests':
- case 'gpu_tests':
- switch(groupName) {
- case '@DEPS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, CHROMIUM_GPU_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
-
- case '@DEPS FYI - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, CHROMIUM_GPU_FYI_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
-
- case '@ToT - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
+ var groupNames = [];
+ for (masterName in builders.masters) {
+ var master = builders.masters[masterName];
+ if (testType in master.tests) {
+ groupNames = groupNames.concat(master.groups);
}
- break;
-
- case 'layout-tests':
- switch(groupName) {
- case 'Content Shell @ToT - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType, isChromiumContentShellTestRunner);
- break;
-
- case '@ToT - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType, isChromiumWebkitTipOfTreeTestRunner);
- break;
-
- case '@DEPS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType, isChromiumWebkitDepsTestRunner);
- requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, CHROMIUM_PERF_AV_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
- }
- break;
-
- case 'test_shell_tests':
- case 'webkit_unit_tests':
- switch(groupName) {
- case '@ToT - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType, isChromiumWebkitTipOfTreeTestRunner);
- break;
-
- case '@DEPS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType, isChromiumWebkitDepsTestRunner);
- break;
- }
- break;
-
- case 'androidwebview_instrumentation_tests':
- case 'chromiumtestshell_instrumentation_tests':
- case 'contentshell_instrumentation_tests':
- switch(groupName) {
- case '@DEPS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CHROMIUM_INSTRUMENTATION_TESTS_BUILDER_GROUPS, CHROMIUM_LINUX_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
-
- case '@DEPS FYI - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CHROMIUM_INSTRUMENTATION_TESTS_BUILDER_GROUPS, CHROMIUM_FYI_BUILDER_MASTER , groupName, builderGroup, testType);
- break;
- }
- break;
-
- case 'cc_unittests':
- switch(groupName) {
- case '@DEPS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CC_UNITTEST_BUILDER_GROUPS, CHROMIUM_WIN_BUILDER_MASTER, groupName, builderGroup, testType);
- requestBuilderList(CC_UNITTEST_BUILDER_GROUPS, CHROMIUM_MAC_BUILDER_MASTER, groupName, builderGroup, testType);
- requestBuilderList(CC_UNITTEST_BUILDER_GROUPS, CHROMIUM_LINUX_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
-
- case '@ToT - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- requestBuilderList(CC_UNITTEST_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
- }
- break;
-
- default:
- switch(groupName) {
- case '@DEPS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, CHROMIUM_WIN_BUILDER_MASTER, groupName, builderGroup, testType);
- requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, CHROMIUM_MAC_BUILDER_MASTER, groupName, builderGroup, testType);
- requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, CHROMIUM_LINUX_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
-
- case '@DEPS CrOS - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
- requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, CHROMIUMOS_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
-
- case '@ToT - chromium.org':
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
- break;
- }
- break;
}
+
+ if (groupNames.length == 0) {
+ console.error("The current test type wasn't present in any groups:", testType);
+ return groupNames;
+ }
+
+ var groupNames = groupNames.reduce(function(prev, curr) {
+ if (prev.indexOf(curr) == -1) {
+ prev.push(curr);
+ }
+ return prev;
+ }, []);
+
+ return groupNames;
}
-var TEST_SHELL_TESTS_BUILDER_GROUPS = {
- '@ToT - chromium.org': null,
- '@DEPS - chromium.org': null,
-};
-
-var LAYOUT_TESTS_BUILDER_GROUPS = {
- '@ToT - chromium.org': null,
- '@DEPS - chromium.org': null,
- 'Content Shell @ToT - chromium.org': null,
-};
-
-var CHROMIUM_GPU_TESTS_BUILDER_GROUPS = {
- '@DEPS - chromium.org': null,
- '@DEPS FYI - chromium.org': null,
- '@ToT - chromium.org': null,
-};
-
-var CHROMIUM_GTESTS_BUILDER_GROUPS = {
- '@DEPS - chromium.org': null,
- '@DEPS CrOS - chromium.org': null,
- '@ToT - chromium.org': null,
-};
-
-var CHROMIUM_INSTRUMENTATION_TESTS_BUILDER_GROUPS = {
- '@DEPS - chromium.org': null,
- '@DEPS FYI - chromium.org': null,
-};
-
-var CC_UNITTEST_BUILDER_GROUPS = {
- '@ToT - chromium.org': null,
- '@DEPS - chromium.org': null,
-};
\ No newline at end of file
+})();
\ No newline at end of file
diff --git a/Tools/TestResultServer/static-dashboards/builders.jsonp b/Tools/TestResultServer/static-dashboards/builders.jsonp
index 0e6a713..37c4e0d 100644
--- a/Tools/TestResultServer/static-dashboards/builders.jsonp
+++ b/Tools/TestResultServer/static-dashboards/builders.jsonp
@@ -1,2931 +1,2930 @@
// This file is auto-generated by Tools/TestResultServer/generate_builders_json.py. It should not be manually modified.
// It uses jsonp instead of proper json because we want to be able to load it from a file URL in Chrome for local testing.
-LOAD_BUILDBOT_DATA([
- {
- "name": "ChromiumWin",
- "tests": {
- "ash_unittests": {
- "builders": [
- "Win8 Aura",
- "Win Aura Tests (1)"
- ]
+LOAD_BUILDBOT_DATA({
+ "masters": [
+ {
+ "groups": [
+ "@ToT Chromium"
+ ],
+ "name": "ChromiumWin",
+ "tests": {
+ "ash_unittests": {
+ "builders": [
+ "Win Aura Tests (1)",
+ "Win8 Aura"
+ ]
+ },
+ "aura_unittests": {
+ "builders": [
+ "Win Aura Tests (1)",
+ "Win8 Aura"
+ ]
+ },
+ "base_unittests": {
+ "builders": [
+ "Vista Tests (2)",
+ "Win 7 Tests x64 (2)",
+ "Win7 Tests (2)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (2)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "browser_tests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Vista Tests (2)",
+ "Vista Tests (3)",
+ "Win Aura Tests (1)",
+ "Win Aura Tests (2)",
+ "Win Aura Tests (3)",
+ "Win7 Tests (1)",
+ "Win7 Tests (2)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(2)",
+ "Win7 Tests (dbg)(3)",
+ "Win7 Tests (dbg)(4)",
+ "Win7 Tests (dbg)(5)",
+ "Win7 Tests (dbg)(6)",
+ "XP Tests (1)",
+ "XP Tests (2)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(2)",
+ "XP Tests (dbg)(3)",
+ "XP Tests (dbg)(4)",
+ "XP Tests (dbg)(5)",
+ "XP Tests (dbg)(6)"
+ ]
+ },
+ "cacheinvalidation_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "cc_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "chrome_frame_net_tests": {
+ "builders": [
+ "Chrome Frame Tests (ie6)",
+ "Chrome Frame Tests (ie7)",
+ "Chrome Frame Tests (ie8)",
+ "Chrome Frame Tests (ie9)"
+ ]
+ },
+ "chrome_frame_tests": {
+ "builders": [
+ "Chrome Frame Tests (ie6)",
+ "Chrome Frame Tests (ie7)",
+ "Chrome Frame Tests (ie8)",
+ "Chrome Frame Tests (ie9)"
+ ]
+ },
+ "chrome_frame_unittests": {
+ "builders": [
+ "Chrome Frame Tests (ie6)",
+ "Chrome Frame Tests (ie7)",
+ "Chrome Frame Tests (ie8)",
+ "Chrome Frame Tests (ie9)"
+ ]
+ },
+ "chromedriver2_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "components_unittests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "compositor_unittests": {
+ "builders": [
+ "Win Aura Tests (2)",
+ "Win8 Aura"
+ ]
+ },
+ "content_browsertests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win Aura Tests (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(2)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(2)"
+ ]
+ },
+ "content_unittests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win Aura Tests (2)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "courgette_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "crypto_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "gpu_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "installer_util_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "interactive_ui_tests": {
+ "builders": [
+ "Interactive Tests (dbg)",
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win Aura Tests (3)",
+ "Win7 Tests (1)",
+ "XP Tests (1)"
+ ]
+ },
+ "ipc_tests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "jingle_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "mini_installer_test": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win7 Tests (1)",
+ "XP Tests (1)"
+ ]
+ },
+ "net_unittests": {
+ "builders": [
+ "Vista Tests (2)",
+ "Win 7 Tests x64 (2)",
+ "Win7 Tests (2)",
+ "Win7 Tests (dbg)(2)",
+ "XP Tests (2)",
+ "XP Tests (dbg)(2)"
+ ]
+ },
+ "ppapi_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "printing_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "remoting_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "sbox_integration_tests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(3)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(3)"
+ ]
+ },
+ "sbox_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(3)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(3)"
+ ]
+ },
+ "sbox_validation_tests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(3)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(3)"
+ ]
+ },
+ "sbox_validation_tests_buildrunner_ignore": {
+ "builders": [
+ "Win 7 Tests x64 (1)"
+ ]
+ },
+ "sql_unittests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "sync_integration_tests": {
+ "builders": [
+ "Win7 Sync",
+ "Win7 Sync x64"
+ ]
+ },
+ "sync_unit_tests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "ui_unittests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "unit_tests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win Aura Tests (2)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "url_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "views_unittests": {
+ "builders": [
+ "Vista Tests (3)",
+ "Win 7 Tests x64 (3)",
+ "Win Aura Tests (2)",
+ "Win7 Tests (3)",
+ "Win7 Tests (dbg)(1)",
+ "Win8 Aura",
+ "XP Tests (3)",
+ "XP Tests (dbg)(1)"
+ ]
+ },
+ "webkit_compositor_bindings_unittests": {
+ "builders": [
+ "Vista Tests (1)",
+ "Win 7 Tests x64 (1)",
+ "Win7 Tests (1)",
+ "Win7 Tests (dbg)(1)",
+ "XP Tests (1)",
+ "XP Tests (dbg)(1)"
+ ]
+ }
},
- "aura_unittests": {
- "builders": [
- "Win8 Aura",
- "Win Aura Tests (1)"
- ]
- },
- "base_unittests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "XP Tests (2)",
- "Win7 Tests (2)",
- "Vista Tests (2)",
- "Win 7 Tests x64 (2)",
- "XP Tests (dbg)(1)"
- ]
- },
- "browser_tests": {
- "builders": [
- "XP Tests (dbg)(5)",
- "XP Tests (1)",
- "Win7 Tests (dbg)(3)",
- "Win7 Tests (dbg)(5)",
- "XP Tests (3)",
- "XP Tests (dbg)(4)",
- "Vista Tests (1)",
- "Win Aura Tests (2)",
- "Vista Tests (3)",
- "XP Tests (2)",
- "XP Tests (dbg)(2)",
- "Win7 Tests (dbg)(6)",
- "XP Tests (dbg)(6)",
- "Win7 Tests (2)",
- "Win7 Tests (dbg)(4)",
- "Win7 Tests (3)",
- "Win7 Tests (dbg)(2)",
- "Vista Tests (2)",
- "Win7 Tests (1)",
- "Win Aura Tests (3)",
- "Win Aura Tests (1)",
- "XP Tests (dbg)(3)"
- ]
- },
- "cacheinvalidation_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "cc_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "chrome_frame_net_tests": {
- "builders": [
- "Chrome Frame Tests (ie8)",
- "Chrome Frame Tests (ie6)",
- "Chrome Frame Tests (ie7)",
- "Chrome Frame Tests (ie9)"
- ]
- },
- "chrome_frame_tests": {
- "builders": [
- "Chrome Frame Tests (ie8)",
- "Chrome Frame Tests (ie6)",
- "Chrome Frame Tests (ie7)",
- "Chrome Frame Tests (ie9)"
- ]
- },
- "chrome_frame_unittests": {
- "builders": [
- "Chrome Frame Tests (ie8)",
- "Chrome Frame Tests (ie6)",
- "Chrome Frame Tests (ie7)",
- "Chrome Frame Tests (ie9)"
- ]
- },
- "chromedriver2_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "components_unittests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "compositor_unittests": {
- "builders": [
- "Win Aura Tests (2)",
- "Win8 Aura"
- ]
- },
- "content_browsertests": {
- "builders": [
- "XP Tests (1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "XP Tests (dbg)(2)",
- "Win7 Tests (dbg)(2)",
- "Win7 Tests (1)",
- "Win Aura Tests (1)"
- ]
- },
- "content_unittests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Win Aura Tests (2)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "courgette_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "crypto_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "googleurl_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "gpu_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "installer_util_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "interactive_ui_tests": {
- "builders": [
- "XP Tests (1)",
- "Interactive Tests (dbg)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "Win Aura Tests (3)"
- ]
- },
- "ipc_tests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "jingle_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "media_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "mini_installer_test": {
- "builders": [
- "XP Tests (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)"
- ]
- },
- "net_unittests": {
- "builders": [
- "XP Tests (2)",
- "XP Tests (dbg)(2)",
- "Win7 Tests (2)",
- "Win7 Tests (dbg)(2)",
- "Vista Tests (2)",
- "Win 7 Tests x64 (2)"
- ]
- },
- "ppapi_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "printing_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "remoting_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- },
- "sbox_integration_tests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(3)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(3)"
- ]
- },
- "sbox_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(3)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(3)"
- ]
- },
- "sbox_validation_tests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(3)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(3)"
- ]
- },
- "sbox_validation_tests_buildrunner_ignore": {
- "builders": [
- "Win 7 Tests x64 (1)"
- ]
- },
- "sql_unittests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "sync_integration_tests": {
- "builders": [
- "Win7 Sync",
- "Win7 Sync x64"
- ]
- },
- "sync_unit_tests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "ui_unittests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "unit_tests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Win Aura Tests (2)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "XP Tests (dbg)(1)"
- ]
- },
- "views_unittests": {
- "builders": [
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (3)",
- "XP Tests (3)",
- "Win Aura Tests (2)",
- "Vista Tests (3)",
- "Win7 Tests (3)",
- "Win8 Aura",
- "XP Tests (dbg)(1)"
- ]
- },
- "webkit_compositor_bindings_unittests": {
- "builders": [
- "XP Tests (1)",
- "Win7 Tests (dbg)(1)",
- "Win 7 Tests x64 (1)",
- "Vista Tests (1)",
- "Win7 Tests (1)",
- "XP Tests (dbg)(1)"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.win"
},
- "url": "http://build.chromium.org/p/chromium.win"
- },
- {
- "name": "ChromiumMac",
- "tests": {
- "base_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "iOS Simulator (dbg)",
- "Mac 10.7 Tests (dbg)(3)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(3)"
- ]
+ {
+ "groups": [
+ "@ToT Chromium"
+ ],
+ "name": "ChromiumMac",
+ "tests": {
+ "base_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(3)",
+ "Mac 10.7 Tests (dbg)(3)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "browser_tests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.6 Tests (dbg)(2)",
+ "Mac 10.6 Tests (dbg)(3)",
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(2)",
+ "Mac 10.7 Tests (dbg)(3)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (1)",
+ "Mac10.6 Tests (2)",
+ "Mac10.6 Tests (3)",
+ "Mac10.7 Tests (1)",
+ "Mac10.7 Tests (2)",
+ "Mac10.7 Tests (3)"
+ ]
+ },
+ "cacheinvalidation_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "cc_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "chromedriver2_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "components_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)"
+ ]
+ },
+ "content_browsertests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "content_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "crypto_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "gpu_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "interactive_ui_tests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(3)",
+ "Mac 10.7 Tests (dbg)(3)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "ipc_tests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)"
+ ]
+ },
+ "jingle_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(2)",
+ "Mac 10.7 Tests (dbg)(2)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "message_center_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (3)",
+ "Mac10.7 Tests (3)"
+ ]
+ },
+ "net_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(2)",
+ "Mac 10.7 Tests (dbg)(2)",
+ "Mac10.6 Tests (3)",
+ "Mac10.7 Tests (3)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "ppapi_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "printing_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "remoting_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ },
+ "sql_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "sync_integration_tests": {
+ "builders": [
+ "Mac10.6 Sync"
+ ]
+ },
+ "sync_unit_tests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "ui_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "unit_tests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(4)",
+ "Mac 10.7 Tests (dbg)(4)",
+ "Mac10.6 Tests (2)",
+ "Mac10.7 Tests (2)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "url_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)",
+ "iOS Simulator (dbg)"
+ ]
+ },
+ "webkit_compositor_bindings_unittests": {
+ "builders": [
+ "Mac 10.6 Tests (dbg)(1)",
+ "Mac 10.7 Tests (dbg)(1)",
+ "Mac10.6 Tests (1)",
+ "Mac10.7 Tests (1)"
+ ]
+ }
},
- "browser_tests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (3)",
- "Mac 10.7 Tests (dbg)(3)",
- "Mac 10.7 Tests (dbg)(2)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)",
- "Mac 10.6 Tests (dbg)(2)",
- "Mac 10.6 Tests (dbg)(3)",
- "Mac10.7 Tests (3)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "cacheinvalidation_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "cc_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "chromedriver2_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "components_unittests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "content_browsertests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "content_unittests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "iOS Simulator (dbg)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "crypto_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "iOS Simulator (dbg)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "googleurl_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "iOS Simulator (dbg)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "gpu_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "interactive_ui_tests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(3)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(3)"
- ]
- },
- "ipc_tests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "jingle_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "media_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "iOS Simulator (dbg)",
- "Mac 10.7 Tests (dbg)(2)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(2)"
- ]
- },
- "net_unittests": {
- "builders": [
- "Mac10.6 Tests (3)",
- "iOS Simulator (dbg)",
- "Mac 10.7 Tests (dbg)(2)",
- "Mac 10.6 Tests (dbg)(2)",
- "Mac10.7 Tests (3)"
- ]
- },
- "ppapi_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "printing_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "remoting_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- },
- "sql_unittests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "iOS Simulator (dbg)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "sync_integration_tests": {
- "builders": [
- "Mac10.6 Sync"
- ]
- },
- "sync_unit_tests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "iOS Simulator (dbg)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "ui_unittests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "iOS Simulator (dbg)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "unit_tests": {
- "builders": [
- "Mac10.6 Tests (2)",
- "iOS Simulator (dbg)",
- "Mac 10.6 Tests (dbg)(4)",
- "Mac10.7 Tests (2)",
- "Mac 10.7 Tests (dbg)(4)"
- ]
- },
- "webkit_compositor_bindings_unittests": {
- "builders": [
- "Mac10.7 Tests (1)",
- "Mac 10.7 Tests (dbg)(1)",
- "Mac10.6 Tests (1)",
- "Mac 10.6 Tests (dbg)(1)"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.mac"
},
- "url": "http://build.chromium.org/p/chromium.mac"
- },
- {
- "name": "ChromiumLinux",
- "tests": {
- "Run tests": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
+ {
+ "groups": [
+ "@ToT Chromium"
+ ],
+ "name": "ChromiumLinux",
+ "tests": {
+ "Run tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "android_webview_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "androidwebview_instrumentation_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "aura_unittests": {
+ "builders": [
+ "Linux Aura"
+ ]
+ },
+ "base_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "breakpad_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "browser_tests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(1)",
+ "Linux Tests (dbg)(1)(32)"
+ ]
+ },
+ "cacheinvalidation_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "cc_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "chromedriver2_unittests": {
+ "builders": [
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "chromiumtestshell_instrumentation_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "components_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "compositor_unittests": {
+ "builders": [
+ "Linux Aura"
+ ]
+ },
+ "content_browsertests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(1)",
+ "Linux Tests (dbg)(1)(32)"
+ ]
+ },
+ "content_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "contentshell_instrumentation_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "crypto_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "dbus_unittests": {
+ "builders": [
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "device_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "gpu_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "interactive_ui_tests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "ipc_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "jingle_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "net_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(1)",
+ "Linux Tests (dbg)(1)(32)"
+ ]
+ },
+ "ppapi_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "printing_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "remoting_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "sandbox_linux_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "sql_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "sync_integration_tests": {
+ "builders": [
+ "Linux Sync"
+ ]
+ },
+ "sync_unit_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "test_report": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ },
+ "ui_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "unit_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Clang (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "url_unittests": {
+ "builders": [
+ "Linux Aura",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "views_unittests": {
+ "builders": [
+ "Linux Aura"
+ ]
+ },
+ "webkit_compositor_bindings_unittests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)",
+ "Linux Tests",
+ "Linux Tests (dbg)(2)",
+ "Linux Tests (dbg)(2)(32)"
+ ]
+ },
+ "webkit_unit_tests": {
+ "builders": [
+ "Android Tests",
+ "Android Tests (dbg)"
+ ]
+ }
},
- "android_webview_unittests": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
- },
- "androidwebview_instrumentation_tests": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
- },
- "aura_unittests": {
- "builders": [
- "Linux Aura"
- ]
- },
- "base_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "browser_tests": {
- "builders": [
- "Linux Tests (dbg)(1)(32)",
- "Linux Tests (dbg)(1)",
- "Linux Tests",
- "Linux Aura"
- ]
- },
- "cacheinvalidation_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "cc_unittests": {
- "builders": [
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Tests (dbg)(2)"
- ]
- },
- "chromedriver2_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Tests (dbg)(2)"
- ]
- },
- "chromiumtestshell_instrumentation_tests": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
- },
- "components_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Tests (dbg)(2)"
- ]
- },
- "compositor_unittests": {
- "builders": [
- "Linux Aura"
- ]
- },
- "content_browsertests": {
- "builders": [
- "Linux Tests (dbg)(1)(32)",
- "Linux Tests (dbg)(1)",
- "Linux Tests",
- "Linux Aura"
- ]
- },
- "content_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "contentshell_instrumentation_tests": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
- },
- "crypto_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "dbus_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Tests (dbg)(2)"
- ]
- },
- "device_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "googleurl_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "gpu_unittests": {
- "builders": [
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "interactive_ui_tests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "ipc_tests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "jingle_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "media_unittests": {
- "builders": [
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "net_unittests": {
- "builders": [
- "Linux Tests (dbg)(1)(32)",
- "Linux Tests (dbg)(1)",
- "Linux Tests",
- "Android Tests",
- "Android Tests (dbg)",
- "Linux Aura"
- ]
- },
- "ppapi_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "printing_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "remoting_unittests": {
- "builders": [
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "sandbox_linux_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Linux Tests (dbg)(2)(32)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "sql_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "sync_integration_tests": {
- "builders": [
- "Linux Sync"
- ]
- },
- "sync_unit_tests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "test_report": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
- },
- "ui_unittests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "unit_tests": {
- "builders": [
- "Linux Clang (dbg)",
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Aura",
- "Linux Tests (dbg)(2)"
- ]
- },
- "views_unittests": {
- "builders": [
- "Linux Aura"
- ]
- },
- "webkit_compositor_bindings_unittests": {
- "builders": [
- "Linux Tests",
- "Android Tests",
- "Linux Tests (dbg)(2)(32)",
- "Android Tests (dbg)",
- "Linux Tests (dbg)(2)"
- ]
- },
- "webkit_unit_tests": {
- "builders": [
- "Android Tests",
- "Android Tests (dbg)"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.linux"
},
- "url": "http://build.chromium.org/p/chromium.linux"
- },
- {
- "name": "ChromiumChromiumOS",
- "tests": {
- "app_list_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
+ {
+ "groups": [
+ "@ToT ChromeOS"
+ ],
+ "name": "ChromiumChromiumOS",
+ "tests": {
+ "app_list_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "ash_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "aura_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "base_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "browser_tests": {
+ "builders": [
+ "Linux ChromiumOS Tests (2)",
+ "Linux ChromiumOS Tests (dbg)(2)"
+ ]
+ },
+ "cacheinvalidation_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "chromeos_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "components_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "compositor_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "content_browsertests": {
+ "builders": [
+ "Linux ChromiumOS Tests (2)",
+ "Linux ChromiumOS Tests (dbg)(2)"
+ ]
+ },
+ "content_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "crypto_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "dbus_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "device_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "gpu_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "interactive_ui_tests": {
+ "builders": [
+ "Linux ChromiumOS Tests (2)",
+ "Linux ChromiumOS Tests (dbg)(3)"
+ ]
+ },
+ "ipc_tests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "jingle_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "message_center_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "net_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "ppapi_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "printing_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "remoting_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "sandbox_linux_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "sql_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "sync_unit_tests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "ui_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "unit_tests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "url_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ },
+ "views_unittests": {
+ "builders": [
+ "Linux ChromiumOS Tests (1)",
+ "Linux ChromiumOS Tests (dbg)(1)"
+ ]
+ }
},
- "ash_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "aura_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "base_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "browser_tests": {
- "builders": [
- "Linux ChromiumOS Tests (2)",
- "Linux ChromiumOS Tests (2)(Precise)",
- "Linux ChromiumOS Tests (dbg)(2)(Precise)",
- "Linux ChromiumOS Tests (dbg)(2)"
- ]
- },
- "cacheinvalidation_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "chromeos_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "components_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "compositor_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "content_browsertests": {
- "builders": [
- "Linux ChromiumOS Tests (2)",
- "Linux ChromiumOS Tests (2)(Precise)",
- "Linux ChromiumOS Tests (dbg)(2)(Precise)",
- "Linux ChromiumOS Tests (dbg)(2)"
- ]
- },
- "content_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "crypto_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "dbus_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "device_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "googleurl_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "gpu_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "interactive_ui_tests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(3)",
- "Linux ChromiumOS Tests (2)",
- "Linux ChromiumOS Tests (dbg)(3)(Precise)",
- "Linux ChromiumOS Tests (2)(Precise)"
- ]
- },
- "ipc_tests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "jingle_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "media_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "message_center_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "net_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "ppapi_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "printing_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "remoting_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "sandbox_linux_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "sql_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "sync_unit_tests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "ui_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "unit_tests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- },
- "views_unittests": {
- "builders": [
- "Linux ChromiumOS Tests (dbg)(1)",
- "Linux ChromiumOS Tests (1)",
- "Linux ChromiumOS Tests (1)(Precise)",
- "Linux ChromiumOS Tests (dbg)(1)(Precise)"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.chromiumos"
},
- "url": "http://build.chromium.org/p/chromium.chromiumos"
- },
- {
- "name": "ChromiumGPU",
- "tests": {
- "content_browsertests": {
- "builders": [
- "Mac 10.8 Debug (Intel)",
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Win7 Debug (NVIDIA)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac Debug (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Linux Debug (NVIDIA)",
- "Win7 Release (ATI)",
- "Mac Retina Debug",
- "Linux Release (NVIDIA)"
- ]
+ {
+ "groups": [
+ "@ToT Chromium"
+ ],
+ "name": "ChromiumGPU",
+ "tests": {
+ "content_browsertests": {
+ "builders": [
+ "Linux Debug (NVIDIA)",
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Debug (Intel)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Debug (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Debug",
+ "Mac Retina Release",
+ "Win7 Debug (NVIDIA)",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ },
+ "gl_tests": {
+ "builders": [
+ "Linux Debug (NVIDIA)",
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Debug (Intel)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Debug (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Debug",
+ "Mac Retina Release",
+ "Win7 Debug (NVIDIA)",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ },
+ "gles2_conform_test": {
+ "builders": [
+ "Linux Debug (NVIDIA)",
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Debug (Intel)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Debug (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Debug",
+ "Mac Retina Release",
+ "Win7 Debug (NVIDIA)",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ },
+ "gpu_frame_rate_test": {
+ "builders": [
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Release",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ },
+ "gpu_latency_tests": {
+ "builders": [
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Release",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ },
+ "gpu_tests": {
+ "builders": [
+ "Linux Debug (NVIDIA)",
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Debug (Intel)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Debug (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Debug",
+ "Mac Retina Release",
+ "Win7 Debug (NVIDIA)",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ },
+ "gpu_throughput_tests": {
+ "builders": [
+ "Linux Release (ATI)",
+ "Linux Release (NVIDIA)",
+ "Mac 10.8 Release (ATI)",
+ "Mac 10.8 Release (Intel)",
+ "Mac Release (ATI)",
+ "Mac Release (Intel)",
+ "Mac Retina Release",
+ "Win7 Release (ATI)",
+ "Win7 Release (Intel)",
+ "Win7 Release (NVIDIA)"
+ ]
+ }
},
- "gl_tests": {
- "builders": [
- "Mac 10.8 Debug (Intel)",
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Win7 Debug (NVIDIA)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac Debug (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Linux Debug (NVIDIA)",
- "Win7 Release (ATI)",
- "Mac Retina Debug",
- "Linux Release (NVIDIA)"
- ]
- },
- "gles2_conform_test": {
- "builders": [
- "Mac 10.8 Debug (Intel)",
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Win7 Debug (NVIDIA)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac Debug (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Linux Debug (NVIDIA)",
- "Win7 Release (ATI)",
- "Mac Retina Debug",
- "Linux Release (NVIDIA)"
- ]
- },
- "gpu_frame_rate_test": {
- "builders": [
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Win7 Release (ATI)",
- "Linux Release (NVIDIA)"
- ]
- },
- "gpu_latency_tests": {
- "builders": [
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Win7 Release (ATI)",
- "Linux Release (NVIDIA)"
- ]
- },
- "gpu_tests": {
- "builders": [
- "Mac 10.8 Debug (Intel)",
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Win7 Debug (NVIDIA)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac Debug (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Linux Debug (NVIDIA)",
- "Win7 Release (ATI)",
- "Mac Retina Debug",
- "Linux Release (NVIDIA)"
- ]
- },
- "gpu_throughput_tests": {
- "builders": [
- "Mac Release (ATI)",
- "Win7 Release (Intel)",
- "Linux Release (ATI)",
- "Mac Release (Intel)",
- "Mac 10.8 Release (ATI)",
- "Mac Retina Release",
- "Mac 10.8 Release (Intel)",
- "Win7 Release (NVIDIA)",
- "Win7 Release (ATI)",
- "Linux Release (NVIDIA)"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.gpu"
},
- "url": "http://build.chromium.org/p/chromium.gpu"
- },
- {
- "name": "ChromiumGPUFYI",
- "tests": {
- "content_unittests": {
- "builders": [
- "Win7 Audio",
- "Linux Audio"
- ]
+ {
+ "groups": [
+ "@ToT Chromium FYI"
+ ],
+ "name": "ChromiumGPUFYI",
+ "tests": {
+ "content_unittests": {
+ "builders": [
+ "Linux Audio",
+ "Win7 Audio"
+ ]
+ },
+ "gl_tests": {
+ "builders": [
+ "Linux Release (Intel)",
+ "WinXP Debug (NVIDIA)",
+ "WinXP Release (NVIDIA)"
+ ]
+ },
+ "gles2_conform_test": {
+ "builders": [
+ "Linux Release (Intel)",
+ "WinXP Debug (NVIDIA)",
+ "WinXP Release (NVIDIA)"
+ ]
+ },
+ "gpu_frame_rate_test": {
+ "builders": [
+ "Linux Release (Intel)",
+ "WinXP Release (NVIDIA)"
+ ]
+ },
+ "gpu_latency_tests": {
+ "builders": [
+ "Linux Release (Intel)",
+ "WinXP Release (NVIDIA)"
+ ]
+ },
+ "gpu_tests": {
+ "builders": [
+ "Linux Release (Intel)",
+ "WinXP Debug (NVIDIA)",
+ "WinXP Release (NVIDIA)"
+ ]
+ },
+ "gpu_throughput_tests": {
+ "builders": [
+ "Linux Release (Intel)",
+ "WinXP Release (NVIDIA)"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Linux Audio",
+ "Win7 Audio"
+ ]
+ }
},
- "gl_tests": {
- "builders": [
- "Linux Release (Intel)",
- "WinXP Debug (NVIDIA)",
- "WinXP Release (NVIDIA)"
- ]
- },
- "gles2_conform_test": {
- "builders": [
- "Linux Release (Intel)",
- "WinXP Debug (NVIDIA)",
- "WinXP Release (NVIDIA)"
- ]
- },
- "gpu_frame_rate_test": {
- "builders": [
- "Linux Release (Intel)",
- "WinXP Release (NVIDIA)"
- ]
- },
- "gpu_latency_tests": {
- "builders": [
- "Linux Release (Intel)",
- "WinXP Release (NVIDIA)"
- ]
- },
- "gpu_tests": {
- "builders": [
- "Linux Release (Intel)",
- "WinXP Debug (NVIDIA)",
- "WinXP Release (NVIDIA)"
- ]
- },
- "gpu_throughput_tests": {
- "builders": [
- "Linux Release (Intel)",
- "WinXP Release (NVIDIA)"
- ]
- },
- "media_unittests": {
- "builders": [
- "Win7 Audio",
- "Linux Audio"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.gpu.fyi"
},
- "url": "http://build.chromium.org/p/chromium.gpu.fyi"
- },
- {
- "name": "ChromiumPerfAv",
- "tests": {
- "layout-tests": {
- "builders": [
- "AV Win7",
- "AV Linux"
- ]
+ {
+ "groups": [
+ "@ToT Chromium"
+ ],
+ "name": "ChromiumPerfAv",
+ "tests": {
+ "layout-tests": {
+ "builders": [
+ "AV Linux",
+ "AV Win7"
+ ]
+ },
+ "media_tests_av_perf": {
+ "builders": [
+ "AV Linux",
+ "AV Win7"
+ ]
+ }
},
- "media_tests_av_perf": {
- "builders": [
- "AV Win7",
- "AV Linux"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.perf_av"
},
- "url": "http://build.chromium.org/p/chromium.perf_av"
- },
- {
- "name": "ChromiumWebkit",
- "tests": {
- "Run tests": {
- "builders": [
- "WebKit Android (GalaxyNexus)",
- "WebKit (Content Shell) Android",
- "Android Tests (dbg)"
- ]
+ {
+ "groups": [
+ "@ToT Chromium",
+ "@ToT Blink"
+ ],
+ "name": "ChromiumWebkit",
+ "tests": {
+ "Run tests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "WebKit (Content Shell) Android",
+ "WebKit Android (GalaxyNexus)"
+ ]
+ },
+ "android_webview_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "androidwebview_instrumentation_tests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "aura_unittests": {
+ "builders": [
+ "Linux Aura"
+ ]
+ },
+ "base_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "breakpad_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "browser_tests": {
+ "builders": [
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "cc_unittests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Tests",
+ "Mac10.6 Tests"
+ ]
+ },
+ "chrome_frame_net_tests": {
+ "builders": [
+ "Chrome Frame Tests"
+ ]
+ },
+ "chrome_frame_tests": {
+ "builders": [
+ "Chrome Frame Tests"
+ ]
+ },
+ "chrome_frame_unittests": {
+ "builders": [
+ "Chrome Frame Tests"
+ ]
+ },
+ "chromiumtestshell_instrumentation_tests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "components_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "content_browsertests": {
+ "builders": [
+ "GPU Linux (NVIDIA)",
+ "GPU Linux (dbg) (NVIDIA)",
+ "GPU Mac10.7",
+ "GPU Mac10.7 (dbg)",
+ "GPU Win7 (NVIDIA)",
+ "GPU Win7 (dbg) (NVIDIA)",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "content_unittests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "contentshell_instrumentation_tests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "gl_tests": {
+ "builders": [
+ "GPU Linux (NVIDIA)",
+ "GPU Linux (dbg) (NVIDIA)",
+ "GPU Mac10.7",
+ "GPU Mac10.7 (dbg)",
+ "GPU Win7 (NVIDIA)",
+ "GPU Win7 (dbg) (NVIDIA)"
+ ]
+ },
+ "gpu_frame_rate_test": {
+ "builders": [
+ "GPU Linux (NVIDIA)",
+ "GPU Mac10.7",
+ "GPU Win7 (NVIDIA)"
+ ]
+ },
+ "gpu_latency_tests": {
+ "builders": [
+ "GPU Linux (NVIDIA)",
+ "GPU Mac10.7",
+ "GPU Win7 (NVIDIA)"
+ ]
+ },
+ "gpu_tests": {
+ "builders": [
+ "GPU Linux (NVIDIA)",
+ "GPU Linux (dbg) (NVIDIA)",
+ "GPU Mac10.7",
+ "GPU Mac10.7 (dbg)",
+ "GPU Win7 (NVIDIA)",
+ "GPU Win7 (dbg) (NVIDIA)"
+ ]
+ },
+ "gpu_throughput_tests": {
+ "builders": [
+ "GPU Linux (NVIDIA)",
+ "GPU Mac10.7",
+ "GPU Win7 (NVIDIA)"
+ ]
+ },
+ "gpu_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "installer_util_unittests": {
+ "builders": [
+ "Vista Tests"
+ ]
+ },
+ "interactive_ui_tests": {
+ "builders": [
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "ipc_tests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "layout-tests": {
+ "builders": [
+ "WebKit (Content Shell) Android",
+ "WebKit Linux",
+ "WebKit Linux (dbg)",
+ "WebKit Linux (deps)",
+ "WebKit Linux 32",
+ "WebKit Linux ASAN",
+ "WebKit Mac10.6",
+ "WebKit Mac10.6 (dbg)",
+ "WebKit Mac10.6 (deps)",
+ "WebKit Mac10.7",
+ "WebKit Mac10.7 (dbg)",
+ "WebKit Mac10.8",
+ "WebKit Win7",
+ "WebKit Win7 (dbg)(1)",
+ "WebKit Win7 (dbg)(2)",
+ "WebKit XP",
+ "WebKit XP (deps)"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "memory_test": {
+ "builders": [
+ "Mac10.6 Perf"
+ ]
+ },
+ "mini_installer_test": {
+ "builders": [
+ "Vista Tests"
+ ]
+ },
+ "net_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "new_tab_ui_cold_test": {
+ "builders": [
+ "Linux Perf",
+ "Mac10.6 Perf",
+ "Win7 Perf"
+ ]
+ },
+ "new_tab_ui_warm_test": {
+ "builders": [
+ "Linux Perf",
+ "Mac10.6 Perf",
+ "Win7 Perf"
+ ]
+ },
+ "sandbox_linux_unittests": {
+ "builders": [
+ "Android Tests (dbg)"
+ ]
+ },
+ "sql_unittests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "startup_test": {
+ "builders": [
+ "Linux Perf",
+ "Mac10.6 Perf",
+ "Win7 Perf"
+ ]
+ },
+ "sync_unit_tests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "tab_switching_test": {
+ "builders": [
+ "Mac10.6 Perf"
+ ]
+ },
+ "test_report": {
+ "builders": [
+ "Android Tests (dbg)",
+ "WebKit (Content Shell) Android"
+ ]
+ },
+ "ui_unittests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "unit_tests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Aura",
+ "Linux Tests",
+ "Mac10.6 Tests",
+ "Mac10.8 Tests",
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "views_unittests": {
+ "builders": [
+ "Vista Tests",
+ "Win7 (dbg)"
+ ]
+ },
+ "webkit_compositor_bindings_unittests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "Linux Tests",
+ "Mac10.6 Tests"
+ ]
+ },
+ "webkit_unit_tests": {
+ "builders": [
+ "Android Tests (dbg)",
+ "WebKit Linux",
+ "WebKit Linux (dbg)",
+ "WebKit Linux (deps)",
+ "WebKit Linux 32",
+ "WebKit Mac10.6",
+ "WebKit Mac10.6 (dbg)",
+ "WebKit Mac10.6 (deps)",
+ "WebKit Mac10.7",
+ "WebKit Mac10.7 (dbg)",
+ "WebKit Mac10.8",
+ "WebKit Win7",
+ "WebKit Win7 (dbg)(1)",
+ "WebKit XP",
+ "WebKit XP (deps)"
+ ]
+ },
+ "wtf_unittests": {
+ "builders": [
+ "WebKit Linux",
+ "WebKit Linux (dbg)",
+ "WebKit Linux (deps)",
+ "WebKit Linux 32",
+ "WebKit Mac10.6",
+ "WebKit Mac10.6 (dbg)",
+ "WebKit Mac10.6 (deps)",
+ "WebKit Mac10.7",
+ "WebKit Mac10.7 (dbg)",
+ "WebKit Mac10.8",
+ "WebKit Win7",
+ "WebKit Win7 (dbg)(1)",
+ "WebKit XP",
+ "WebKit XP (deps)"
+ ]
+ }
},
- "android_webview_unittests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "androidwebview_instrumentation_tests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "aura_unittests": {
- "builders": [
- "Linux Aura"
- ]
- },
- "base_unittests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "browser_tests": {
- "builders": [
- "Win7 (dbg)",
- "Linux Tests",
- "Mac10.6 Tests",
- "Mac10.8 Tests"
- ]
- },
- "cc_unittests": {
- "builders": [
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)"
- ]
- },
- "chrome_frame_net_tests": {
- "builders": [
- "Chrome Frame Tests"
- ]
- },
- "chrome_frame_tests": {
- "builders": [
- "Chrome Frame Tests"
- ]
- },
- "chrome_frame_unittests": {
- "builders": [
- "Chrome Frame Tests"
- ]
- },
- "chromiumtestshell_instrumentation_tests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "components_unittests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "content_browsertests": {
- "builders": [
- "GPU Win7 (NVIDIA)",
- "Win7 (dbg)",
- "GPU Linux (NVIDIA)",
- "Linux Tests",
- "Mac10.6 Tests",
- "GPU Mac10.7",
- "GPU Win7 (dbg) (NVIDIA)",
- "GPU Mac10.7 (dbg)",
- "GPU Linux (dbg) (NVIDIA)",
- "Mac10.8 Tests"
- ]
- },
- "content_unittests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests",
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)",
- "Linux Aura",
- "Mac10.8 Tests"
- ]
- },
- "contentshell_instrumentation_tests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "gl_tests": {
- "builders": [
- "GPU Win7 (NVIDIA)",
- "GPU Linux (NVIDIA)",
- "GPU Mac10.7",
- "GPU Win7 (dbg) (NVIDIA)",
- "GPU Mac10.7 (dbg)",
- "GPU Linux (dbg) (NVIDIA)"
- ]
- },
- "gpu_frame_rate_test": {
- "builders": [
- "GPU Win7 (NVIDIA)",
- "GPU Linux (NVIDIA)",
- "GPU Mac10.7"
- ]
- },
- "gpu_latency_tests": {
- "builders": [
- "GPU Win7 (NVIDIA)",
- "GPU Linux (NVIDIA)",
- "GPU Mac10.7"
- ]
- },
- "gpu_tests": {
- "builders": [
- "GPU Win7 (NVIDIA)",
- "GPU Linux (NVIDIA)",
- "GPU Mac10.7",
- "GPU Win7 (dbg) (NVIDIA)",
- "GPU Mac10.7 (dbg)",
- "GPU Linux (dbg) (NVIDIA)"
- ]
- },
- "gpu_throughput_tests": {
- "builders": [
- "GPU Win7 (NVIDIA)",
- "GPU Linux (NVIDIA)",
- "GPU Mac10.7"
- ]
- },
- "gpu_unittests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "installer_util_unittests": {
- "builders": [
- "Vista Tests"
- ]
- },
- "interactive_ui_tests": {
- "builders": [
- "Win7 (dbg)",
- "Linux Tests",
- "Mac10.6 Tests",
- "Mac10.8 Tests"
- ]
- },
- "ipc_tests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests",
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)",
- "Linux Aura",
- "Mac10.8 Tests"
- ]
- },
- "layout-tests": {
- "builders": [
- "WebKit Linux 32",
- "WebKit Win7",
- "WebKit Linux ASAN",
- "WebKit Win7 (dbg)(2)",
- "WebKit (Content Shell) Linux",
- "WebKit (Content Shell) Win",
- "WebKit Android (GalaxyNexus)",
- "WebKit (Content Shell) Android",
- "WebKit Mac10.6 (dbg)",
- "WebKit Mac10.7 (dbg)",
- "WebKit Linux",
- "WebKit Linux (dbg)",
- "WebKit Mac10.6",
- "WebKit Mac10.7",
- "WebKit Linux (deps)",
- "WebKit Mac10.8",
- "WebKit Mac10.6 (deps)",
- "WebKit (Content Shell) Mac10.6",
- "WebKit Win7 (dbg)(1)",
- "WebKit XP (deps)",
- "WebKit XP"
- ]
- },
- "media_unittests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "memory test: test_shell": {
- "builders": [
- "Linux Valgrind"
- ]
- },
- "memory_test": {
- "builders": [
- "Mac10.6 Perf"
- ]
- },
- "mini_installer_test": {
- "builders": [
- "Vista Tests"
- ]
- },
- "net_unittests": {
- "builders": [
- "Android Tests (dbg)"
- ]
- },
- "new_tab_ui_cold_test": {
- "builders": [
- "Win7 Perf",
- "Mac10.6 Perf",
- "Linux Perf"
- ]
- },
- "new_tab_ui_warm_test": {
- "builders": [
- "Win7 Perf",
- "Mac10.6 Perf",
- "Linux Perf"
- ]
- },
- "sql_unittests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests",
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)",
- "Linux Aura",
- "Mac10.8 Tests"
- ]
- },
- "startup_test": {
- "builders": [
- "Win7 Perf",
- "Mac10.6 Perf",
- "Linux Perf"
- ]
- },
- "sync_unit_tests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests",
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)",
- "Linux Aura",
- "Mac10.8 Tests"
- ]
- },
- "tab_switching_test": {
- "builders": [
- "Mac10.6 Perf"
- ]
- },
- "test_report": {
- "builders": [
- "WebKit Android (GalaxyNexus)",
- "WebKit (Content Shell) Android",
- "Android Tests (dbg)"
- ]
- },
- "test_shell_tests": {
- "builders": [
- "WebKit Linux 32",
- "WebKit Win7",
- "WebKit Mac10.6 (dbg)",
- "WebKit Mac10.7 (dbg)",
- "WebKit Linux",
- "WebKit Linux (dbg)",
- "WebKit Mac10.6",
- "WebKit Mac10.7",
- "WebKit Linux (deps)",
- "WebKit Mac10.8",
- "WebKit Mac10.6 (deps)",
- "WebKit Win7 (dbg)(1)",
- "WebKit XP (deps)",
- "WebKit XP"
- ]
- },
- "ui_unittests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests",
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)",
- "Linux Aura",
- "Mac10.8 Tests"
- ]
- },
- "unit_tests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests",
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)",
- "Linux Aura",
- "Mac10.8 Tests"
- ]
- },
- "views_unittests": {
- "builders": [
- "Win7 (dbg)",
- "Vista Tests"
- ]
- },
- "webkit_compositor_bindings_unittests": {
- "builders": [
- "Linux Tests",
- "Mac10.6 Tests",
- "Android Tests (dbg)"
- ]
- },
- "webkit_unit_tests": {
- "builders": [
- "WebKit Linux 32",
- "WebKit Win7",
- "WebKit Android (GalaxyNexus)",
- "WebKit Mac10.6 (dbg)",
- "Android Tests (dbg)",
- "WebKit Mac10.7 (dbg)",
- "WebKit Linux",
- "WebKit Linux (dbg)",
- "WebKit Mac10.6",
- "WebKit Mac10.7",
- "WebKit Linux (deps)",
- "WebKit Mac10.8",
- "WebKit Mac10.6 (deps)",
- "WebKit Win7 (dbg)(1)",
- "WebKit XP (deps)",
- "WebKit XP"
- ]
- }
+ "url": "http://build.chromium.org/p/chromium.webkit"
},
- "url": "http://build.chromium.org/p/chromium.webkit"
- },
- {
- "name": "ChromiumFYI",
- "tests": {
- "Run tests": {
- "builders": [
- "Android ChromeDriver Tests (dbg)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "android_webview_unittests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "androidwebview_instrumentation_tests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "base_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Win ASAN Tests (1)",
- "Chromium Mac 10.8 Buildrunner",
- "Android Asan Tests (dbg)"
- ]
- },
- "base_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "breakpad_unittests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)"
- ]
- },
- "browser_tests": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Win (aura)",
- "Vista Tests (dbg)(2)",
- "Chromium Linux TSan v2",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Chromium Linux Buildrunner",
- "Chromium Win (ash)",
- "Win8 Tests (2)",
- "Chromium Win x64 Clobber",
- "Win ASAN Tests (1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "browser_tests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "buildrunner_tests": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "cacheinvalidation_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Linux ARM Tests (Panda)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Win ASAN Tests (1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "cacheinvalidation_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "cc_unittests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Win x64 Clobber",
- "Android Asan Tests (dbg)"
- ]
- },
- "chrome_frame_net_tests": {
- "builders": [
- "Chrome Frame Tests (ie6)(peruser)",
- "Chrome Frame Tests (ie8)(peruser)",
- "Chrome Frame Tests (ie8)(dbg)",
- "Chrome Frame Tests (ie7)(peruser)"
- ]
- },
- "chrome_frame_tests": {
- "builders": [
- "Chrome Frame Tests (ie6)(peruser)",
- "Chrome Frame Tests (ie8)(peruser)",
- "Chrome Frame Tests (ie8)(dbg)",
- "Chrome Frame Tests (ie7)(peruser)"
- ]
- },
- "chrome_frame_unittests": {
- "builders": [
- "Chrome Frame Tests (ie6)(peruser)",
- "Chrome Frame Tests (ie8)(peruser)",
- "Chrome Frame Tests (ie8)(dbg)",
- "Chrome Frame Tests (ie7)(peruser)"
- ]
- },
- "chromedriver2_python_tests": {
- "builders": [
- "Android ChromeDriver Tests (dbg)"
- ]
- },
- "chromedriver2_unittests": {
- "builders": [
- "Linux ARM Tests (Panda)",
- "Chromium Win x64 Clobber"
- ]
- },
- "chromiumtestshell_instrumentation_tests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "components_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Android Asan Tests (dbg)"
- ]
- },
- "content_browsertests": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Win (aura)",
- "Vista Tests (dbg)(2)",
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Buildrunner",
- "Chromium Win (ash)",
- "Win8 Tests (2)",
- "Chromium Win x64 Clobber",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "content_browsertests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "content_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Win ASAN Tests (1)",
- "Android Asan Tests (dbg)"
- ]
- },
- "content_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "contentshell_instrumentation_tests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "courgette_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)"
- ]
- },
- "courgette_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Windows Buildrunner"
- ]
- },
- "crypto_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Linux ARM Tests (Panda)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Win ASAN Tests (1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "crypto_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "dbus_unittests": {
- "builders": [
- "Linux ARM Tests (Panda)",
- "Chromium Linux Buildrunner"
- ]
- },
- "dbus_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "device_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Linux ARM Tests (Panda)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Vista Tests (dbg)(1)"
- ]
- },
- "googleurl_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "googleurl_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "gpu_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Win ASAN Tests (1)",
- "Chromium Mac 10.8 Buildrunner",
- "Android Asan Tests (dbg)"
- ]
- },
- "gpu_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "installer_util_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium Windows Buildrunner"
- ]
- },
- "interactive_ui_tests": {
- "builders": [
- "Linux ARM Tests (Panda)",
- "Chromium Win x64 Clobber"
- ]
- },
- "ipc_tests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Android Asan Tests (dbg)"
- ]
- },
- "ipc_tests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "jingle_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Linux ARM Tests (Panda)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Win ASAN Tests (1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "jingle_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "media_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Chromium Mac 10.8 Buildrunner",
- "Android Asan Tests (dbg)"
- ]
- },
- "media_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "memory test: base_unittests": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: browser_tests": {
- "builders": [
- "Windows Browser (DrMemory) (1)",
- "Windows Browser (DrMemory) (6)",
- "Chromium Linux Browser (valgrind) (1)",
- "Windows Browser (DrMemory) (5)",
- "Chromium Linux Browser (valgrind) (2)",
- "Windows Browser (DrMemory) (4)",
- "Chromium Linux Browser (valgrind) (3)",
- "Windows Browser (DrMemory) (3)",
- "Chromium Linux Browser (valgrind) (4)",
- "Windows Browser (DrMemory) (2)"
- ]
- },
- "memory test: browser_tests_1": {
- "builders": [
- "Chromium Linux Browser (valgrind) (1)",
- "Chromium Linux Browser (valgrind) (2)",
- "Chromium Linux Browser (valgrind) (3)",
- "Chromium Linux Browser (valgrind) (4)"
- ]
- },
- "memory test: content": {
- "builders": [
- "Chromium Mac 10.6 (tsan)"
- ]
- },
- "memory test: content_browsertests": {
- "builders": [
- "Chromium Linux Browser (valgrind) (1)",
- "Chromium Linux Browser (valgrind) (2)",
- "Chromium Linux Browser (valgrind) (3)",
- "Chromium Linux Browser (valgrind) (4)"
- ]
- },
- "memory test: crypto": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: device_unittests": {
- "builders": [
- "Linux Tests (tsan RV)"
- ]
- },
- "memory test: googleurl": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: interactive_ui_tests": {
- "builders": [
- "Chromium Linux Reliability (valgrind)"
- ]
- },
- "memory test: interactive_ui_tests_1": {
- "builders": [
- "Chromium Linux Reliability (valgrind)"
- ]
- },
- "memory test: ipc_tests": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: media": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: net": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: printing": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: remoting": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: sql": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Windows Tests (TSan Win 7)",
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: sync": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Linux Tests (tsan RV)"
- ]
- },
- "memory test: ui_unittests": {
- "builders": [
- "Chromium Mac 10.6 (tsan)",
- "Linux Tests (tsan RV)"
- ]
- },
- "memory test: unit": {
- "builders": [
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)",
- "Windows Tests (DrMemory pattern)"
- ]
- },
- "memory test: unit_1": {
- "builders": [
- "Linux Tests (tsan RV)",
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)"
- ]
- },
- "memory test: unit_2": {
- "builders": [
- "Windows Tests (DrMemory XP)",
- "Windows Tests (DrMemory full)"
- ]
- },
- "memory test: unit_3": {
- "builders": [
- "Windows Tests (DrMemory full)"
- ]
- },
- "memory test: unit_4": {
- "builders": [
- "Windows Tests (DrMemory full)"
- ]
- },
- "memory test: unit_5": {
- "builders": [
- "Windows Tests (DrMemory full)"
- ]
- },
- "memory_test": {
- "builders": [
- "Chromium Linux Memory",
- "Chromium Vista Memory",
- "Chromium Mac Memory"
- ]
- },
- "mini_installer_test": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win (ash)",
- "Win8 Tests (1)"
- ]
- },
- "mini_installer_test_buildrunner_ignore": {
- "builders": [
- "Chromium Windows Buildrunner"
- ]
- },
- "net_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Win ASAN Tests (1)",
- "Android Asan Tests (dbg)"
- ]
- },
- "net_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "ppapi_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "ppapi_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "printing_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "printing_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "remoting_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Mac Buildrunner",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Linux TSan v2",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium Mac 10.8 Buildrunner"
- ]
- },
- "remoting_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Mac Buildrunner",
- "Chromium Linux Buildrunner",
- "Chromium Mac 10.8 Buildrunner",
- "Chromium Windows Buildrunner"
- ]
- },
- "run_browser_tests_only": {
- "builders": [
- "Linux Coverage (dbg)"
- ]
- },
- "run_unittests_only": {
- "builders": [
- "Linux Coverage (dbg)"
- ]
- },
- "sandbox_linux_unittests": {
- "builders": [
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)"
- ]
- },
- "sbox_integration_tests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)"
- ]
- },
- "sbox_integration_tests_buildrunner_ignore": {
- "builders": [
- "Chromium Windows Buildrunner"
- ]
- },
- "sbox_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)"
- ]
- },
- "sbox_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Windows Buildrunner"
- ]
- },
- "sbox_validation_tests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)"
- ]
- },
- "sbox_validation_tests_buildrunner_ignore": {
- "builders": [
- "Chromium Windows Buildrunner"
- ]
- },
- "sql_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Win ASAN Tests (1)",
- "Android Asan Tests (dbg)"
- ]
- },
- "sql_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "sync_integration_tests": {
- "builders": [
- "ChromiumOS Linux Tests",
- "Chromium Win x64 Clobber"
- ]
- },
- "sync_unit_tests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "sync_unit_tests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "telemetry_perf_unittests": {
- "builders": [
- "Chromium Mac Perf Annotator",
- "Chromium Windows Perf Annotator",
- "Chromium Linux Perf Annotator"
- ]
- },
- "telemetry_unittests": {
- "builders": [
- "Chromium Mac Perf Annotator",
- "Chromium Windows Perf Annotator",
- "Chromium Linux Perf Annotator"
- ]
- },
- "test_report": {
- "builders": [
- "Android ChromeDriver Tests (dbg)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "ui_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Win ASAN Tests (1)",
- "Android Asan Tests (dbg)"
- ]
- },
- "ui_unittests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "unit_tests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Linux TSan v2",
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Win ASAN Tests (2)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Linux Redux",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Linux Buildrunner",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)",
- "Chromium iOS Simulator (dbg)",
- "Android Asan Tests (dbg)"
- ]
- },
- "unit_tests_buildrunner_ignore": {
- "builders": [
- "Chromium Linux Buildrunner"
- ]
- },
- "views_unittests": {
- "builders": [
- "Chromium Win7 Ninja Goma (shared)",
- "Chromium Win VS2012 Goma",
- "Chromium Win VS2012",
- "Chromium Win (aura)",
- "Chromium Win7 Ninja Goma",
- "Chromium Win Ninja Goma (shared)",
- "Chromium Win Ninja Goma",
- "Chromium Win VS2012 Goma (dbg)",
- "Chromium Win (ash)",
- "Win8 Tests (1)",
- "Chromium Win VS2012 (dbg)",
- "Chromium Win x64 Clobber",
- "Vista Tests (dbg)(1)"
- ]
- },
- "webkit_compositor_bindings_unittests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Linux ARM Tests (Panda)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Chromium Win x64 Clobber",
- "Android Asan Tests (dbg)"
- ]
+ {
+ "groups": [
+ "@ToT Chromium FYI"
+ ],
+ "name": "ChromiumFYI",
+ "tests": {
+ "Run tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android ChromeDriver Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "android_webview_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "androidwebview_instrumentation_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "base_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "base_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "breakpad_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "browser_tests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win x64 Clobber",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(2)",
+ "Win ASAN Tests (1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (2)"
+ ]
+ },
+ "browser_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "buildrunner_tests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner",
+ "Chromium Windows Instant Extended"
+ ]
+ },
+ "cacheinvalidation_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "cacheinvalidation_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "cc_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win x64 Clobber",
+ "Linux ARM Tests (Panda)"
+ ]
+ },
+ "chrome_frame_net_tests": {
+ "builders": [
+ "Chrome Frame Tests (ie6)(peruser)",
+ "Chrome Frame Tests (ie7)(peruser)",
+ "Chrome Frame Tests (ie8)(dbg)",
+ "Chrome Frame Tests (ie8)(peruser)"
+ ]
+ },
+ "chrome_frame_tests": {
+ "builders": [
+ "Chrome Frame Tests (ie6)(peruser)",
+ "Chrome Frame Tests (ie7)(peruser)",
+ "Chrome Frame Tests (ie8)(dbg)",
+ "Chrome Frame Tests (ie8)(peruser)"
+ ]
+ },
+ "chrome_frame_unittests": {
+ "builders": [
+ "Chrome Frame Tests (ie6)(peruser)",
+ "Chrome Frame Tests (ie7)(peruser)",
+ "Chrome Frame Tests (ie8)(dbg)",
+ "Chrome Frame Tests (ie8)(peruser)"
+ ]
+ },
+ "chromedriver2_unittests": {
+ "builders": [
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win x64 Clobber",
+ "Linux ARM Tests (Panda)"
+ ]
+ },
+ "chromiumtestshell_instrumentation_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "components_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "content_browsertests": {
+ "builders": [
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win x64 Clobber",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(2)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (2)"
+ ]
+ },
+ "content_browsertests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "content_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "content_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "contentshell_instrumentation_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "courgette_unittests": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "courgette_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "crypto_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "crypto_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "dbus_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Linux ARM Tests (Panda)"
+ ]
+ },
+ "dbus_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "device_unittests": {
+ "builders": [
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "gpu_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "gpu_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "install_chromiumtestshell": {
+ "builders": [
+ "Android ChromeDriver Tests (dbg)"
+ ]
+ },
+ "installer_util_unittests": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium Windows Buildrunner",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "interactive_ui_tests": {
+ "builders": [
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win x64 Clobber",
+ "Chromium Windows Instant Extended",
+ "Linux ARM Tests (Panda)"
+ ]
+ },
+ "interactive_ui_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Windows Instant Extended"
+ ]
+ },
+ "ipc_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "ipc_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "java_tests": {
+ "builders": [
+ "Android ChromeDriver Tests (dbg)"
+ ]
+ },
+ "jingle_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "jingle_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "media_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "media_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "memory test: base_unittests": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: browser_tests": {
+ "builders": [
+ "Chromium Linux Browser (valgrind) (1)",
+ "Chromium Linux Browser (valgrind) (2)",
+ "Chromium Linux Browser (valgrind) (3)",
+ "Chromium Linux Browser (valgrind) (4)",
+ "Windows Browser (DrMemory) (1)",
+ "Windows Browser (DrMemory) (2)",
+ "Windows Browser (DrMemory) (3)",
+ "Windows Browser (DrMemory) (4)",
+ "Windows Browser (DrMemory) (5)",
+ "Windows Browser (DrMemory) (6)"
+ ]
+ },
+ "memory test: browser_tests_1": {
+ "builders": [
+ "Chromium Linux Browser (valgrind) (1)",
+ "Chromium Linux Browser (valgrind) (2)",
+ "Chromium Linux Browser (valgrind) (3)",
+ "Chromium Linux Browser (valgrind) (4)"
+ ]
+ },
+ "memory test: content": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)"
+ ]
+ },
+ "memory test: content_browsertests": {
+ "builders": [
+ "Chromium Linux Browser (valgrind) (1)",
+ "Chromium Linux Browser (valgrind) (2)",
+ "Chromium Linux Browser (valgrind) (3)",
+ "Chromium Linux Browser (valgrind) (4)"
+ ]
+ },
+ "memory test: crypto": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: device_unittests": {
+ "builders": [
+ "Linux Tests (tsan RV)"
+ ]
+ },
+ "memory test: googleurl": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: interactive_ui_tests": {
+ "builders": [
+ "Chromium Linux Reliability (valgrind)"
+ ]
+ },
+ "memory test: interactive_ui_tests_1": {
+ "builders": [
+ "Chromium Linux Reliability (valgrind)"
+ ]
+ },
+ "memory test: ipc_tests": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: media": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: net": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: printing": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: remoting": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: sql": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)",
+ "Windows Tests (TSan Win 7)"
+ ]
+ },
+ "memory test: sync": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)"
+ ]
+ },
+ "memory test: ui_unittests": {
+ "builders": [
+ "Chromium Mac 10.6 (tsan)",
+ "Linux Tests (tsan RV)"
+ ]
+ },
+ "memory test: unit": {
+ "builders": [
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)",
+ "Windows Tests (DrMemory pattern)"
+ ]
+ },
+ "memory test: unit_1": {
+ "builders": [
+ "Linux Tests (tsan RV)",
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)"
+ ]
+ },
+ "memory test: unit_2": {
+ "builders": [
+ "Windows Tests (DrMemory XP)",
+ "Windows Tests (DrMemory full)"
+ ]
+ },
+ "memory test: unit_3": {
+ "builders": [
+ "Windows Tests (DrMemory full)"
+ ]
+ },
+ "memory test: unit_4": {
+ "builders": [
+ "Windows Tests (DrMemory full)"
+ ]
+ },
+ "memory test: unit_5": {
+ "builders": [
+ "Windows Tests (DrMemory full)"
+ ]
+ },
+ "memory_test": {
+ "builders": [
+ "Chromium Linux Memory",
+ "Chromium Mac Memory",
+ "Chromium Vista Memory"
+ ]
+ },
+ "message_center_unittests": {
+ "builders": [
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner"
+ ]
+ },
+ "message_center_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner"
+ ]
+ },
+ "mini_installer_test": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "mini_installer_test_buildrunner_ignore": {
+ "builders": [
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "net_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "net_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "ppapi_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "ppapi_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "printing_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "printing_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "python_tests": {
+ "builders": [
+ "Android ChromeDriver Tests (dbg)"
+ ]
+ },
+ "remoting_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "remoting_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "run_browser_tests_only": {
+ "builders": [
+ "Linux Coverage (dbg)"
+ ]
+ },
+ "run_unittests_only": {
+ "builders": [
+ "Linux Coverage (dbg)"
+ ]
+ },
+ "sandbox_linux_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux TSan v2",
+ "Linux ARM Tests (Panda)"
+ ]
+ },
+ "sbox_integration_tests": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "sbox_integration_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "sbox_unittests": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "sbox_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "sbox_validation_tests": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Vista Tests (dbg)(1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "sbox_validation_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "sql_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "sql_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "sync_integration_tests": {
+ "builders": [
+ "Chromium Win x64 Clobber",
+ "ChromiumOS Linux Tests"
+ ]
+ },
+ "sync_unit_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "sync_unit_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "telemetry_unittests": {
+ "builders": [
+ "Chromium Linux Perf Annotator",
+ "Chromium Mac Perf Annotator",
+ "Chromium Windows Perf Annotator"
+ ]
+ },
+ "test_report": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android ChromeDriver Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ },
+ "ui_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "ui_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "unit_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Linux Buildrunner",
+ "Chromium Linux Redux",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "unit_tests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner"
+ ]
+ },
+ "url_unittests": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Linux TSan v2",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Mac Buildrunner",
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Chromium iOS Simulator (dbg)",
+ "Linux ARM Tests (Panda)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (2)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "url_unittests_buildrunner_ignore": {
+ "builders": [
+ "Chromium Linux Buildrunner",
+ "Chromium Mac 10.8 Buildrunner",
+ "Chromium Mac Buildrunner",
+ "Chromium Windows Buildrunner"
+ ]
+ },
+ "views_unittests": {
+ "builders": [
+ "Chromium Win (ash)",
+ "Chromium Win (aura)",
+ "Chromium Win Ninja Goma",
+ "Chromium Win Ninja Goma (shared)",
+ "Chromium Win VS2012",
+ "Chromium Win VS2012 (dbg)",
+ "Chromium Win VS2012 Goma",
+ "Chromium Win VS2012 Goma (dbg)",
+ "Chromium Win x64 Clobber",
+ "Chromium Win7 Ninja Goma",
+ "Chromium Win7 Ninja Goma (shared)",
+ "Vista Tests (dbg)(1)",
+ "Win ASAN Tests (1)",
+ "Win8 Tests (1)"
+ ]
+ },
+ "webkit_compositor_bindings_unittests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)",
+ "Chromium Mac 10.8 x64 tester (experimental)",
+ "Chromium Win x64 Clobber",
+ "Linux ARM Tests (Panda)"
+ ]
+ },
+ "webkit_unit_tests": {
+ "builders": [
+ "Android Asan Builder Tests (dbg)",
+ "Android Tests (ICS GalaxyNexus)(dbg)",
+ "Android Tests (JB GalaxyNexus)(dbg)",
+ "Android Tests (JB Nexus7)(dbg)"
+ ]
+ }
},
- "webkit_unit_tests": {
- "builders": [
- "Android Tests (JB Nexus7)(dbg)",
- "Android Tests (ICS GalaxyNexus)(dbg)",
- "Android Tests (JB GalaxyNexus)(dbg)",
- "Android Asan Tests (dbg)"
- ]
- }
- },
- "url": "http://build.chromium.org/p/chromium.fyi"
- },
- {
- "name": "webkit.org",
- "tests": {
- "layout-tests": {
- "builders": [
- "Apple Lion (Leaks)",
- "Apple Lion Debug WK1 (Tests)",
- "Apple Lion Debug WK2 (Tests)",
- "Apple Lion Release WK1 (Tests)",
- "Apple Lion Release WK2 (Tests)",
- "Apple MountainLion (Leaks)",
- "Apple MountainLion Debug WK1 (Tests)",
- "Apple MountainLion Debug WK2 (Tests)",
- "Apple MountainLion Release WK1 (Tests)",
- "Apple MountainLion Release WK2 (Tests)",
- "Apple Win 7 Debug (Tests)",
- "Apple Win 7 Release (Tests)",
- "Chromium Android Release (Tests)",
- "Chromium Linux Release (Tests)",
- "Chromium Mac Release (Tests)",
- "Chromium Win Release (Tests)",
- "EFL Linux 64-bit Debug WK2",
- "EFL Linux 64-bit Release",
- "EFL Linux 64-bit Release WK2",
- "GTK Linux 32-bit Release",
- "GTK Linux 64-bit Debug WK1",
- "GTK Linux 64-bit Release",
- "GTK Linux 64-bit Release WK2 (Tests)",
- "Qt Linux Release",
- "WinCairo Release"
- ]
- }
- },
- "url": "http://build.webkit.org"
- }
-]);
+ "url": "http://build.chromium.org/p/chromium.fyi"
+ }
+ ]
+});
diff --git a/Tools/TestResultServer/static-dashboards/builders_unittests.js b/Tools/TestResultServer/static-dashboards/builders_unittests.js
index 0b2518c..f23e4b9 100644
--- a/Tools/TestResultServer/static-dashboards/builders_unittests.js
+++ b/Tools/TestResultServer/static-dashboards/builders_unittests.js
@@ -40,4 +40,49 @@
equal(master.builderJsonPath(), baseUrl + '/json/builders');
equal(master.tests, tests);
equal(master.name, name);
-})
+});
+
+test('builders._builderFilter', 5, function() {
+ var filter = builders._builderFilter('@ToT Blink', 'layout-tests');
+ equal(filter('WebKit (Content Shell) Linux'), true, 'show content shell builder');
+ equal(filter('WebKit Linux'), true, 'show generic webkit builder');
+ equal(filter('Android Tests (dbg) '), false, 'don\'t show android tests');
+
+ var filter = builders._builderFilter('@ToT Chromium', 'webkit_unit_tests');
+ equal(filter('WebKit Win7 (deps)'), true, 'show DEPS builder');
+ equal(filter('WebKit Win7'), false, 'don\'t show non-deps builder');
+});
+
+test('builders.groupNamesForTestType', 4, function() {
+ var names = builders.groupNamesForTestType('layout-tests');
+ equal(names.indexOf('@ToT Blink') != -1, true, 'include layout-tests in ToT');
+ equal(names.indexOf('@ToT Chromium') != -1, true, 'include layout-tests in DEPS');
+
+ names = builders.groupNamesForTestType('ash_unittests');
+ equal(names.indexOf('@ToT Blink') != -1, false, 'don\'t include interactive_ui_tests in ToT');
+ equal(names.indexOf('@ToT Chromium') != -1, true, 'include interactive_ui_tests in DEPS');
+});
+
+test('BuilderGroup.isToTBlink', 2, function() {
+ var builderGroup = builders.loadBuildersList('@ToT Blink', 'layout-tests');
+ equal(builderGroup.isToTBlink, true);
+ builderGroup = builders.loadBuildersList('@ToT Chromium', 'layout-tests');
+ equal(builderGroup.isToTBlink, false);
+});
+
+test('builders.loadBuildersList', 4, function() {
+ resetGlobals();
+
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
+ var expectedBuilder = 'WebKit Win';
+ equal(expectedBuilder in builders.getBuilderGroup().builders, true, expectedBuilder + ' should be among current builders');
+
+ builders.loadBuildersList('@ToT Chromium', 'layout-tests');
+ expectedBuilder = 'WebKit Linux (deps)'
+ equal(expectedBuilder in builders.getBuilderGroup().builders, true, expectedBuilder + ' should be among current builders');
+ expectedBuilder = 'XP Tests (1)'
+ equal(expectedBuilder in builders.getBuilderGroup().builders, false, expectedBuilder + ' should not be among current builders');
+
+ builders.loadBuildersList('@ToT Chromium', 'interactive_ui_tests');
+ equal(expectedBuilder in builders.getBuilderGroup().builders, true, expectedBuilder + ' should be among current builders');
+});
diff --git a/Tools/TestResultServer/static-dashboards/dashboard_base.js b/Tools/TestResultServer/static-dashboards/dashboard_base.js
index cc2fa1b..694429e 100644
--- a/Tools/TestResultServer/static-dashboards/dashboard_base.js
+++ b/Tools/TestResultServer/static-dashboards/dashboard_base.js
@@ -26,116 +26,17 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Keys in the JSON files.
-var FAILURES_BY_TYPE_KEY = 'num_failures_by_type';
-var FAILURE_MAP_KEY = 'failure_map';
-var CHROME_REVISIONS_KEY = 'chromeRevision';
-var BLINK_REVISIONS_KEY = 'blinkRevision';
-var TIMESTAMPS_KEY = 'secondsSinceEpoch';
-var BUILD_NUMBERS_KEY = 'buildNumbers';
-var TESTS_KEY = 'tests';
-
-// Failure types.
-var PASS = 'PASS';
-var NO_DATA = 'NO DATA';
-var SKIP = 'SKIP';
-var NOTRUN = 'NOTRUN';
-
-var ONE_DAY_SECONDS = 60 * 60 * 24;
-var ONE_WEEK_SECONDS = ONE_DAY_SECONDS * 7;
-
-// These should match the testtype uploaded to test-results.appspot.com.
-// See http://test-results.appspot.com/testfile.
-var TEST_TYPES = [
- 'base_unittests',
- 'browser_tests',
- 'cacheinvalidation_unittests',
- 'compositor_unittests',
- 'content_browsertests',
- 'content_unittests',
- 'courgette_unittests',
- 'crypto_unittests',
- 'googleurl_unittests',
- 'gfx_unittests',
- 'gl_tests',
- 'gpu_tests',
- 'gpu_unittests',
- 'installer_util_unittests',
- 'interactive_ui_tests',
- 'ipc_tests',
- 'jingle_unittests',
- 'layout-tests',
- 'media_unittests',
- 'mini_installer_test',
- 'net_unittests',
- 'printing_unittests',
- 'remoting_unittests',
- 'safe_browsing_tests',
- 'sql_unittests',
- 'sync_unit_tests',
- 'sync_integration_tests',
- 'test_shell_tests',
- 'ui_unittests',
- 'unit_tests',
- 'views_unittests',
- 'webkit_unit_tests',
- 'androidwebview_instrumentation_tests',
- 'chromiumtestshell_instrumentation_tests',
- 'contentshell_instrumentation_tests',
- 'cc_unittests'
-];
-
-
-// Enum for indexing into the run-length encoded results in the JSON files.
-// 0 is where the count is length is stored. 1 is the value.
-var RLE = {
- LENGTH: 0,
- VALUE: 1
-}
-
-var _NON_FAILURE_TYPES = [PASS, NO_DATA, SKIP, NOTRUN];
-
-function isFailingResult(failureMap, failureType)
-{
- return _NON_FAILURE_TYPES.indexOf(failureMap[failureType]) == -1;
-}
-
-// Generic utility functions.
-function $(id)
-{
- return document.getElementById(id);
-}
-
-function currentBuilderGroupCategory()
-{
- switch (g_history.crossDashboardState.testType) {
- case 'gl_tests':
- case 'gpu_tests':
- return CHROMIUM_GPU_TESTS_BUILDER_GROUPS;
- case 'layout-tests':
- return LAYOUT_TESTS_BUILDER_GROUPS;
- case 'test_shell_tests':
- case 'webkit_unit_tests':
- return TEST_SHELL_TESTS_BUILDER_GROUPS;
- case 'androidwebview_instrumentation_tests':
- case 'chromiumtestshell_instrumentation_tests':
- case 'contentshell_instrumentation_tests':
- return CHROMIUM_INSTRUMENTATION_TESTS_BUILDER_GROUPS;
- case 'cc_unittests':
- return CC_UNITTEST_BUILDER_GROUPS;
- default:
- return CHROMIUM_GTESTS_BUILDER_GROUPS;
- }
-}
+// FIXME: Find somewhere better for these functions to live or restructure such that we don't need them.
function currentBuilderGroupName()
{
- return g_history.crossDashboardState.group || Object.keys(currentBuilderGroupCategory())[0];
+ return g_history.crossDashboardState.group ||
+ builders.groupNamesForTestType(g_history.crossDashboardState.testType)[0];
}
function currentBuilderGroup()
{
- return currentBuilderGroupCategory()[currentBuilderGroupName()];
+ return builders.getBuilderGroup(currentBuilderGroupName(), g_history.crossDashboardState.testType);
}
function currentBuilders()
@@ -143,49 +44,9 @@
return currentBuilderGroup().builders;
}
-function isTipOfTreeWebKitBuilder()
-{
- return currentBuilderGroup().isToTWebKit;
-}
-
+// FIXME: Index by group name, then test type, then builder so we can get rid of the hacks
+// in overview.js.
+// FIXME: Have results.js fire off the loader and then the calling code passing in a callback
+// for once everything is loaded and doesn't know about Loader at all. The calling code just
+// calls fetchResults(groupName, testType, builder, callback) or whatever.
var g_resultsByBuilder = {};
-
-// Create a new function with some of its arguements
-// pre-filled.
-// Taken from goog.partial in the Closure library.
-// @param {Function} fn A function to partially apply.
-// @param {...*} var_args Additional arguments that are partially
-// applied to fn.
-// @return {!Function} A partially-applied form of the function bind() was
-// invoked as a method of.
-function partial(fn, var_args)
-{
- var args = Array.prototype.slice.call(arguments, 1);
- return function() {
- // Prepend the bound arguments to the current arguments.
- var newArgs = Array.prototype.slice.call(arguments);
- newArgs.unshift.apply(newArgs, args);
- return fn.apply(this, newArgs);
- };
-};
-
-function getTotalTestCounts(failuresByType)
-{
- var countData;
- for (var failureType in failuresByType) {
- var failures = failuresByType[failureType];
- if (countData) {
- failures.forEach(function(count, index) {
- countData.totalTests[index] += count;
- if (failureType != PASS)
- countData.totalFailingTests[index] += count;
- });
- } else {
- countData = {
- totalTests: failures.slice(),
- totalFailingTests: failures.slice(),
- };
- }
- }
- return countData;
-}
diff --git a/Tools/TestResultServer/static-dashboards/flakiness_dashboard.html b/Tools/TestResultServer/static-dashboards/flakiness_dashboard.html
index 725bcc8..7ba6eef 100644
--- a/Tools/TestResultServer/static-dashboards/flakiness_dashboard.html
+++ b/Tools/TestResultServer/static-dashboards/flakiness_dashboard.html
@@ -30,9 +30,12 @@
<title>Chromium/WebKit Test History</title>
<link rel="stylesheet" href="flakiness_dashboard.css"></link>
<link rel="stylesheet" href="flakiness_dashboard_tests.css"></link>
-<script src="builders.js"></script>
-<script src="loader.js"></script>
+<script src="base.js"></script>
<script src="string.js"></script>
+<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
+<script src="results.js"></script>
+<script src="loader.js"></script>
<script src="history.js"></script>
<script src="dashboard_base.js"></script>
<script src="ui.js"></script>
diff --git a/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js b/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
index 1cc98e7..082ddf2 100644
--- a/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
+++ b/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
@@ -43,11 +43,27 @@
var CHUNK_SIZE = 25;
// FIXME: Figure out how to make this not be hard-coded.
+// Probably just include in the results.json files and get it from there.
var VIRTUAL_SUITES = {
'virtual/gpu/fast/canvas': 'fast/canvas',
- 'virtual/gpu/canvas/philip': 'canvas/philip'
+ 'virtual/gpu/canvas/philip': 'canvas/philip',
+ 'virtual/threaded/compositing/visibility': 'compositing/visibility',
+ 'virtual/threaded/compositing/webgl': 'compositing/webgl',
+ 'virtual/gpu/fast/hidpi': 'fast/hidpi',
+ 'virtual/softwarecompositing': 'compositing',
+ 'virtual/deferred/fast/images': 'fast/images',
+ 'virtual/gpu/compositedscrolling/overflow': 'compositing/overflow',
+ 'virtual/gpu/compositedscrolling/scrollbars': 'scrollbars',
};
+var ACTUAL_RESULT_SUFFIXES = ['expected.txt', 'expected.png', 'actual.txt', 'actual.png', 'diff.txt', 'diff.png', 'wdiff.html', 'crash-log.txt'];
+
+var EXPECTATIONS_ORDER = ACTUAL_RESULT_SUFFIXES.filter(function(suffix) {
+ return !string.endsWith(suffix, 'png');
+}).map(function(suffix) {
+ return suffix.split('.')[0]
+});
+
var resourceLoader;
function generatePage(historyInstance)
@@ -227,6 +243,10 @@
this._trie = {};
for (var builder in builders) {
+ if (!resultsByBuilder[builder]) {
+ console.warn("No results for builder: ", builder)
+ continue;
+ }
var testsForBuilder = resultsByBuilder[builder].tests;
for (var test in testsForBuilder)
this._addTest(test.split('/'), this._trie);
@@ -388,7 +408,7 @@
g_perBuilderFailures[builderName] = [];
return;
}
-
+
var failures = [];
var allTestsForThisBuilder = g_resultsByBuilder[builderName].tests;
@@ -406,27 +426,33 @@
if (rawTest.bugs)
resultsForTest.bugs = rawTest.bugs;
+ var failureMap = g_resultsByBuilder[builderName][results.FAILURE_MAP];
// FIXME: Switch to resultsByBuild
var times = resultsForTest.rawTimes;
var numTimesSeen = 0;
var numResultsSeen = 0;
var resultsIndex = 0;
- var currentResult;
- for (var i = 0; i < times.length; i++) {
- numTimesSeen += times[i][RLE.LENGTH];
+ var resultsMap = {}
- while (rawResults[resultsIndex] && numTimesSeen > (numResultsSeen + rawResults[resultsIndex][RLE.LENGTH])) {
- numResultsSeen += rawResults[resultsIndex][RLE.LENGTH];
+ for (var i = 0; i < times.length; i++) {
+ numTimesSeen += times[i][results.RLE.LENGTH];
+
+ while (rawResults[resultsIndex] && numTimesSeen > (numResultsSeen + rawResults[resultsIndex][results.RLE.LENGTH])) {
+ numResultsSeen += rawResults[resultsIndex][results.RLE.LENGTH];
resultsIndex++;
}
- if (rawResults && rawResults[resultsIndex])
- currentResult = rawResults[resultsIndex][RLE.VALUE];
+ if (rawResults && rawResults[resultsIndex]) {
+ var result = rawResults[resultsIndex][results.RLE.VALUE];
+ resultsMap[failureMap[result]] = true;
+ }
- resultsForTest.slowestTime = Math.max(resultsForTest.slowestTime, times[i][RLE.VALUE]);
+ resultsForTest.slowestTime = Math.max(resultsForTest.slowestTime, times[i][results.RLE.VALUE]);
}
- determineFlakiness(g_resultsByBuilder[builderName][FAILURE_MAP_KEY], resultsForTest);
+ resultsForTest.actualResults = Object.keys(resultsMap);
+
+ results.determineFlakiness(failureMap, rawResults, resultsForTest);
failures.push(resultsForTest);
if (!g_testToResultsMap[test])
@@ -437,55 +463,6 @@
g_perBuilderFailures[builderName] = failures;
}
-function determineFlakiness(failureMap, resultsForTest)
-{
- // Heuristic for determining whether expectations apply to a given test:
- // -If a test result happens < MIN_RUNS_FOR_FLAKE, then consider it a flaky
- // result and include it in the list of expected results.
- // -Otherwise, grab the first contiguous set of runs with the same result
- // for >= MIN_RUNS_FOR_FLAKE and ignore all following runs >=
- // MIN_RUNS_FOR_FLAKE.
- // This lets us rule out common cases of a test changing expectations for
- // a few runs, then being fixed or otherwise modified in a non-flaky way.
- var rawResults = resultsForTest.rawResults;
-
- // Only consider flake if it doesn't happen twice in a row.
- var MIN_RUNS_FOR_FLAKE = 2;
- var resultsMap = {}
- var numResultsSeen = 0;
- var haveSeenNonFlakeResult = false;
- var numRealResults = 0;
-
- var seenResults = {};
- for (var i = 0; i < rawResults.length; i++) {
- var numResults = rawResults[i][RLE.LENGTH];
- numResultsSeen += numResults;
-
- var result = rawResults[i][RLE.VALUE];
-
- var hasMinRuns = numResults >= MIN_RUNS_FOR_FLAKE;
- if (haveSeenNonFlakeResult && hasMinRuns)
- continue;
- else if (hasMinRuns)
- haveSeenNonFlakeResult = true;
- else if (!seenResults[result]) {
- // Only consider a short-lived result if we've seen it more than once.
- // Otherwise, we include lots of false-positives due to tests that fail
- // for a couple runs and then start passing.
- seenResults[result] = true;
- continue;
- }
-
- var expectation = failureMap[result];
- resultsMap[expectation] = true;
- numRealResults++;
- }
-
- resultsForTest.actualResults = Object.keys(resultsMap);
- resultsForTest.flips = i - 1;
- resultsForTest.isFlaky = numRealResults > 1;
-}
-
function linkHTMLToOpenWindow(url, text)
{
return '<a href="' + url + '" target="_blank">' + text + '</a>';
@@ -497,11 +474,11 @@
{
var currentIndex = 0;
var rawResults = g_resultsByBuilder[builder].tests[testName].results;
- var failureMap = g_resultsByBuilder[builder][FAILURE_MAP_KEY];
+ var failureMap = g_resultsByBuilder[builder][results.FAILURE_MAP];
for (var i = 0; i < rawResults.length; i++) {
- currentIndex += rawResults[i][RLE.LENGTH];
+ currentIndex += rawResults[i][results.RLE.LENGTH];
if (currentIndex > index)
- return isFailingResult(failureMap, rawResults[i][RLE.VALUE]);
+ return results.isFailingResult(failureMap, rawResults[i][results.RLE.VALUE]);
}
console.error('Index exceeds number of results: ' + index);
}
@@ -511,12 +488,12 @@
{
var rawResults = g_resultsByBuilder[builder].tests[testName].results;
var buildNumbers = g_resultsByBuilder[builder].buildNumbers;
- var failureMap = g_resultsByBuilder[builder][FAILURE_MAP_KEY];
+ var failureMap = g_resultsByBuilder[builder][results.FAILURE_MAP];
var index = 0;
var failures = [];
for (var i = 0; i < rawResults.length; i++) {
- var numResults = rawResults[i][RLE.LENGTH];
- if (isFailingResult(failureMap, rawResults[i][RLE.VALUE])) {
+ var numResults = rawResults[i][results.RLE.LENGTH];
+ if (results.isFailingResult(failureMap, rawResults[i][results.RLE.VALUE])) {
for (var j = 0; j < numResults; j++)
failures.push(index + j);
}
@@ -542,12 +519,12 @@
}
var buildNumber = g_resultsByBuilder[builder].buildNumbers[index];
- var master = builderMaster(builder);
+ var master = builders.master(builder);
var buildBasePath = master.logPath(builder, buildNumber);
html += '<ul><li>' + linkHTMLToOpenWindow(buildBasePath, 'Build log');
- if (g_resultsByBuilder[builder][BLINK_REVISIONS_KEY])
+ if (g_resultsByBuilder[builder][results.BLINK_REVISIONS])
html += '</li><li>Blink: ' + ui.html.blinkRevisionLink(g_resultsByBuilder[builder], index) + '</li>';
html += '</li><li>Chromium: ' + ui.html.chromiumRevisionLink(g_resultsByBuilder[builder], index) + '</li>';
@@ -573,10 +550,10 @@
function htmlForTestResults(test)
{
var html = '';
- var results = test.rawResults.concat();
+ var testResults = test.rawResults.concat();
var times = test.rawTimes.concat();
var builder = test.builder;
- var master = builderMaster(builder);
+ var master = builders.master(builder);
var buildNumbers = g_resultsByBuilder[builder].buildNumbers;
var indexToReplaceCurrentResult = -1;
@@ -585,12 +562,12 @@
var currentResultArray, currentTimeArray, innerHTML, resultString;
if (i > indexToReplaceCurrentResult) {
- currentResultArray = results.shift();
+ currentResultArray = testResults.shift();
if (currentResultArray) {
- resultString = g_resultsByBuilder[builder][FAILURE_MAP_KEY][currentResultArray[RLE.VALUE]];
- indexToReplaceCurrentResult += currentResultArray[RLE.LENGTH];
+ resultString = g_resultsByBuilder[builder][results.FAILURE_MAP][currentResultArray[results.RLE.VALUE]];
+ indexToReplaceCurrentResult += currentResultArray[results.RLE.LENGTH];
} else {
- resultString = NO_DATA;
+ resultString = results.NO_DATA;
indexToReplaceCurrentResult += buildNumbers.length;
}
}
@@ -599,8 +576,8 @@
currentTimeArray = times.shift();
var currentTime = 0;
if (currentResultArray) {
- currentTime = currentTimeArray[RLE.VALUE];
- indexToReplaceCurrentTime += currentTimeArray[RLE.LENGTH];
+ currentTime = currentTimeArray[results.RLE.VALUE];
+ indexToReplaceCurrentTime += currentTimeArray[results.RLE.LENGTH];
} else
indexToReplaceCurrentTime += buildNumbers.length;
@@ -621,7 +598,7 @@
if (testResult.expectations == 'WONTFIX')
return g_history.dashboardSpecificState.showWontFix;
- if (testResult.expectations == 'SKIP')
+ if (testResult.expectations == results.SKIP)
return g_history.dashboardSpecificState.showSkip;
if (testResult.isFlaky)
@@ -637,7 +614,7 @@
var description = encodeURIComponent('The following layout test is ' + symptom + ' on ' +
'[insert platform]\n\n' + test.test + '\n\nProbable cause:\n\n' +
'[insert probable cause]');
-
+
url = 'https://code.google.com/p/chromium/issues/entry?template=Layout%20Test%20Failure&summary=' + title + '&comment=' + description;
return '<a href="' + url + '">File new bug</a>';
}
@@ -821,8 +798,8 @@
var testResults = g_testToResultsMap[test];
if (!testResults)
- return '<div class="not-found">Test not found. Either it does not exist, is skipped or passes on all platforms.</div>';
-
+ return '<div class="not-found">Test not found. Either it does not exist, is skipped or passes on all recorded runs.</div>';
+
var html = '';
var shownBuilders = [];
for (var j = 0; j < testResults.length; j++) {
@@ -838,7 +815,7 @@
var skippedBuildersHtml = '';
if (skippedBuilders.length) {
- skippedBuildersHtml = '<div>The following builders either don\'t run this test (e.g. it\'s skipped) or all runs passed:</div>' +
+ skippedBuildersHtml = '<div>The following builders either don\'t run this test (e.g. it\'s skipped) or all recorded runs passed:</div>' +
'<div class=skipped-builder-list><div class=skipped-builder>' + skippedBuilders.join('</div><div class=skipped-builder>') + '</div></div>';
}
@@ -869,24 +846,6 @@
return html;
}
-function getExpectationsContainer(expectationsContainers, parentContainer, expectationsType)
-{
- if (!expectationsContainers[expectationsType]) {
- var container = document.createElement('div');
- container.className = 'expectations-container';
- parentContainer.appendChild(container);
- expectationsContainers[expectationsType] = container;
- }
- return expectationsContainers[expectationsType];
-}
-
-function ensureTrailingSlash(path)
-{
- if (path.match(/\/$/))
- return path;
- return path + '/';
-}
-
function maybeAddPngChecksum(expectationDiv, pngUrl)
{
// pngUrl gets served from the browser cache since we just loaded it in an
@@ -914,220 +873,134 @@
true);
}
-// Adds a specific expectation. If it's an image, it's only added on the
-// image's onload handler. If it's a text file, then a script tag is appended
-// as a hack to see if the file 404s (necessary since it's cross-domain).
-// Once all the expectations for a specific type have loaded or errored
-// (e.g. all the text results), then we go through and identify which platform
-// uses which expectation.
-//
-// @param {Object} expectationsContainers Map from expectations type to
-// container DIV.
-// @param {Element} parentContainer Container element for
-// expectationsContainer divs.
-// @param {string} platform Platform string. Empty string for non-platform
-// specific expectations.
-// @param {string} path Relative path to the expectation.
-// @param {string} base Base path for the expectation URL.
-// @param {string} opt_builder Builder whose actual results this expectation
-// points to.
-// @param {string} opt_suite "virtual suite" that the test belongs to, if any.
-function addExpectationItem(expectationsContainers, parentContainer, platform, path, base, opt_builder, opt_suite)
+function getOrCreate(className, parent)
{
- var parts = path.split('.')
- var fileExtension = parts[parts.length - 1];
- if (fileExtension == 'html')
- fileExtension = 'txt';
-
- var container = getExpectationsContainer(expectationsContainers, parentContainer, fileExtension);
- var isImage = path.match(/\.png$/);
+ var element = parent.querySelector('.' + className);
+ if (!element) {
+ element = document.createElement('div');
+ element.className = className;
+ parent.appendChild(element);
+ }
+ return element;
+}
- // FIXME: Stop using script tags once all the places we pull from support CORS.
- var platformPart = platform ? ensureTrailingSlash(platform) : '';
- var suitePart = opt_suite ? ensureTrailingSlash(opt_suite) : '';
+function handleExpectationsItemLoad(title, item, itemType, parent)
+{
+ item.className = 'expectation';
+ if (g_history.dashboardSpecificState.showLargeExpectations)
+ item.className += ' large';
- var childContainer = document.createElement('span');
- childContainer.className = 'unloaded';
+ var titleContainer = document.createElement('h3');
+ titleContainer.className = 'expectations-title';
+ titleContainer.textContent = title;
+
+ var itemContainer = document.createElement('span');
+ itemContainer.appendChild(titleContainer);
+ itemContainer.className = 'expectations-item ' + title;
+ itemContainer.appendChild(item);
+
+ // Separate text and image results into separate divs..
+ var typeContainer = getOrCreate(itemType, parent);
+
+ // Insert results in a consistent order.
+ var index = EXPECTATIONS_ORDER.indexOf(title);
+ while (index < EXPECTATIONS_ORDER.length) {
+ index++;
+ var elementAfter = typeContainer.querySelector('.' + EXPECTATIONS_ORDER[index]);
+ if (elementAfter) {
+ typeContainer.insertBefore(itemContainer, elementAfter);
+ break;
+ }
+ }
+ if (!itemContainer.parentNode)
+ typeContainer.appendChild(itemContainer);
+
+ handleFinishedLoadingExpectations(parent);
+}
+
+function addExpectationItem(expectationsContainers, parentContainer, url, opt_builder)
+{
+ // Group expectations by builder, putting test and reference files first.
+ var builder = opt_builder || "Test and reference files";
+ var container = expectationsContainers[builder];
+
+ if (!container) {
+ container = document.createElement('div');
+ container.className = 'expectations-container';
+ container.setAttribute('data-builder', builder);
+ parentContainer.appendChild(container);
+ expectationsContainers[builder] = container;
+ }
+
+ var numUnloaded = container.getAttribute('data-unloaded') || 0;
+ container.setAttribute('data-unloaded', ++numUnloaded);
+
+ var isImage = url.match(/\.png$/);
var appendExpectationsItem = function(item) {
- childContainer.appendChild(expectationsTitle(platformPart + suitePart, path, opt_builder));
- childContainer.className = 'expectations-item';
- item.className = 'expectation ' + fileExtension;
- if (g_history.dashboardSpecificState.showLargeExpectations)
- item.className += ' large';
- childContainer.appendChild(item);
+ var itemType = isImage ? 'image' : 'text';
+ handleExpectationsItemLoad(expectationsTitle(url), item, itemType, container);
+ };
+
+ var handleLoadError = function() {
handleFinishedLoadingExpectations(container);
};
- var url = base + platformPart + path;
if (isImage) {
- var dummyNode = document.createElement(isImage ? 'img' : 'script');
- dummyNode.src = url;
+ var dummyNode = document.createElement('img');
dummyNode.onload = function() {
- var item;
- if (isImage) {
- item = dummyNode;
- maybeAddPngChecksum(item, url);
- } else {
- item = document.createElement('iframe');
- item.src = url;
- }
+ var item = dummyNode;
+ maybeAddPngChecksum(item, url);
appendExpectationsItem(item);
}
- dummyNode.onerror = function() {
- childContainer.parentNode.removeChild(childContainer);
- handleFinishedLoadingExpectations(container);
- }
-
- // Append script elements now so that they load. Images load without being
- // appended to the DOM.
- if (!isImage)
- childContainer.appendChild(dummyNode);
+ dummyNode.onerror = handleLoadError;
+ dummyNode.src = url;
} else {
loader.request(url,
function(xhr) {
var item = document.createElement('pre');
- item.innerText = xhr.responseText;
+ if (string.endsWith(url, '-wdiff.html'))
+ item.innerHTML = xhr.responseText;
+ else
+ item.textContent = xhr.responseText;
appendExpectationsItem(item);
},
- function(xhr) {/* Do nothing on errors since they're expected */});
+ handleLoadError);
}
-
- container.appendChild(childContainer);
}
-
-// Identifies which expectations are used on which platform once all the
-// expectations of a given type have loaded (e.g. the container for png
-// expectations for this test had no child elements with the class
-// "unloaded").
-//
-// @param {string} container Element containing the expectations for a given
-// test and a given type (e.g. png).
function handleFinishedLoadingExpectations(container)
{
- if (container.getElementsByClassName('unloaded').length)
+ var numUnloaded = container.getAttribute('data-unloaded') - 1;
+ container.setAttribute('data-unloaded', numUnloaded);
+ if (numUnloaded)
return;
- var titles = container.getElementsByClassName('expectations-title');
- for (var platform in g_fallbacksMap) {
- var fallbacks = g_fallbacksMap[platform];
- var winner = null;
- var winningIndex = -1;
- for (var i = 0; i < titles.length; i++) {
- var title = titles[i];
-
- if (!winner && title.platform == "") {
- winner = title;
- continue;
- }
-
- var rawPlatform = title.platform && title.platform.replace('platform/', '');
- for (var j = 0; j < fallbacks.length; j++) {
- if ((winningIndex == -1 || winningIndex > j) && rawPlatform == fallbacks[j]) {
- winningIndex = j;
- winner = title;
- break;
- }
- }
- }
- if (winner)
- winner.getElementsByClassName('platforms')[0].innerHTML += '<div class=used-platform>' + platform + '</div>';
- else {
- console.log('No expectations identified for this test. This means ' +
- 'there is a logic bug in the dashboard for which expectations a ' +
- 'platform uses or src.chromium.org is giving 5XXs.');
- }
+ if (!container.firstChild) {
+ container.remove();
+ return;
}
- consolidateUsedPlatforms(container);
+ var builder = container.getAttribute('data-builder');
+ if (!builder)
+ return;
+
+ var header = document.createElement('h2');
+ header.textContent = builder;
+ container.insertBefore(header, container.firstChild);
}
-// Consolidate platforms when all sub-platforms for a given platform are represented.
-// e.g., if all of the WIN- platforms are there, replace them with just WIN.
-function consolidateUsedPlatforms(container)
+function expectationsTitle(url)
{
- var allPlatforms = Object.keys(g_fallbacksMap);
+ var matchingSuffixes = ACTUAL_RESULT_SUFFIXES.filter(function(suffix) {
+ return string.endsWith(url, suffix);
+ });
- var platformElements = container.getElementsByClassName('platforms');
- for (var i = 0, platformsLength = platformElements.length; i < platformsLength; i++) {
- var usedPlatforms = platformElements[i].getElementsByClassName('used-platform');
- if (!usedPlatforms.length)
- continue;
+ if (matchingSuffixes.length)
+ return matchingSuffixes[0].split('.')[0];
- var platforms = {};
- platforms['MAC'] = {};
- platforms['WIN'] = {};
- platforms['LINUX'] = {};
- allPlatforms.forEach(function(platform) {
- if (string.startsWith(platform, 'MAC'))
- platforms['MAC'][platform] = 1;
- else if (string.startsWith(platform, 'WIN'))
- platforms['WIN'][platform] = 1;
- else if (string.startsWith(platform, 'LINUX'))
- platforms['LINUX'][platform] = 1;
- });
-
- for (var j = 0, usedPlatformsLength = usedPlatforms.length; j < usedPlatformsLength; j++) {
- for (var platform in platforms)
- delete platforms[platform][usedPlatforms[j].textContent];
- }
-
- for (var platform in platforms) {
- if (!Object.keys(platforms[platform]).length) {
- var nodesToRemove = [];
- for (var j = 0, usedPlatformsLength = usedPlatforms.length; j < usedPlatformsLength; j++) {
- var usedPlatform = usedPlatforms[j];
- if (string.startsWith(usedPlatform.textContent, platform))
- nodesToRemove.push(usedPlatform);
- }
-
- nodesToRemove.forEach(function(element) { element.parentNode.removeChild(element); });
- platformElements[i].insertAdjacentHTML('afterBegin', '<div class=used-platform>' + platform + '</div>');
- }
- }
- }
-}
-
-function addExpectations(expectationsContainers, container, base,
- platform, text, png, reftest_html_file, reftest_mismatch_html_file, suite)
-{
- var builder = '';
- addExpectationItem(expectationsContainers, container, platform, text, base, builder, suite);
- addExpectationItem(expectationsContainers, container, platform, png, base, builder, suite);
- addExpectationItem(expectationsContainers, container, platform, reftest_html_file, base, builder, suite);
- addExpectationItem(expectationsContainers, container, platform, reftest_mismatch_html_file, base, builder, suite);
-}
-
-function expectationsTitle(platform, path, builder)
-{
- var header = document.createElement('h3');
- header.className = 'expectations-title';
-
- var innerHTML;
- if (builder) {
- var resultsType;
- if (string.endsWith(path, '-crash-log.txt'))
- resultsType = 'STACKTRACE';
- else if (string.endsWith(path, '-actual.txt') || string.endsWith(path, '-actual.png'))
- resultsType = 'ACTUAL RESULTS';
- else if (string.endsWith(path, '-wdiff.html'))
- resultsType = 'WDIFF';
- else
- resultsType = 'DIFF';
-
- innerHTML = resultsType + ': ' + builder;
- } else if (platform === "") {
- var parts = path.split('/');
- innerHTML = parts[parts.length - 1];
- } else
- innerHTML = platform || path;
-
- header.innerHTML = '<div class=title>' + innerHTML +
- '</div><div style="float:left"> </div>' +
- '<div class=platforms style="float:right"></div>';
- header.platform = platform;
- return header;
+ var parts = url.split('/');
+ return parts[parts.length - 1];
}
function loadExpectations(expectationsContainer)
@@ -1136,12 +1009,12 @@
if (g_history.isLayoutTestResults())
loadExpectationsLayoutTests(test, expectationsContainer);
else {
- var results = g_testToResultsMap[test];
- for (var i = 0; i < results.length; i++)
+ var testResults = g_testToResultsMap[test];
+ for (var i = 0; i < testResults.length; i++)
if (g_history.isGPUTestResults())
- loadGPUResultsForBuilder(results[i].builder, test, expectationsContainer);
+ loadGPUResultsForBuilder(testResults[i].builder, test, expectationsContainer);
else
- loadNonWebKitResultsForBuilder(results[i].builder, test, expectationsContainer);
+ loadNonWebKitResultsForBuilder(testResults[i].builder, test, expectationsContainer);
}
}
@@ -1160,7 +1033,7 @@
var failureIndex = indexesForFailures(builder, test)[0];
var buildNumber = g_resultsByBuilder[builder].buildNumbers[failureIndex];
- var pathToLog = builderMaster(builder).logPath(builder, buildNumber) + pathToFailureLog(test);
+ var pathToLog = builders.master(builder).logPath(builder, buildNumber) + pathToFailureLog(test);
var chromeRevision = g_resultsByBuilder[builder].chromeRevision[failureIndex];
var resultsUrl = GPU_RESULTS_BASE_PATH + gpuResultsPath(chromeRevision, builder);
@@ -1182,7 +1055,7 @@
// FIXME: This doesn't seem to work anymore. Did the paths change?
// Once that's resolved, see if we need to try each GTEST_MODIFIERS prefix as well.
var buildNumber = g_resultsByBuilder[builder].buildNumbers[failureIndexes[i]];
- var pathToLog = builderMaster(builder).logPath(builder, buildNumber) + pathToFailureLog(test);
+ var pathToLog = builders.master(builder).logPath(builder, buildNumber) + pathToFailureLog(test);
appendNonWebKitResults(container, pathToLog, 'non-webkit-results');
}
}
@@ -1231,51 +1104,35 @@
return base ? test.replace(suite, base) : test;
}
-function loadBaselinesForTest(expectationsContainers, expectationsContainer, test) {
+function loadTestAndReferenceFiles(expectationsContainers, expectationsContainer, test) {
var testWithoutSuffix = test.substring(0, test.lastIndexOf('.'));
- var text = testWithoutSuffix + "-expected.txt";
- var png = testWithoutSuffix + "-expected.png";
var reftest_html_file = testWithoutSuffix + "-expected.html";
var reftest_mismatch_html_file = testWithoutSuffix + "-expected-mismatch.html";
+
var suite = lookupVirtualTestSuite(test);
-
- if (!suite)
- addExpectationItem(expectationsContainers, expectationsContainer, null, test, TEST_URL_BASE_PATH_FOR_XHR);
-
- addExpectations(expectationsContainers, expectationsContainer,
- TEST_URL_BASE_PATH_FOR_XHR, '', text, png, reftest_html_file, reftest_mismatch_html_file, suite);
-
- var fallbacks = allFallbacks();
- for (var i = 0; i < fallbacks.length; i++) {
- var fallback = 'platform/' + fallbacks[i];
- addExpectations(expectationsContainers, expectationsContainer, TEST_URL_BASE_PATH_FOR_XHR, fallback, text, png,
- reftest_html_file, reftest_mismatch_html_file, suite);
+ if (suite) {
+ loadTestAndReferenceFiles(expectationsContainers, expectationsContainer, baseTest(test, suite));
+ return;
}
- if (suite)
- loadBaselinesForTest(expectationsContainers, expectationsContainer, baseTest(test, suite));
+ addExpectationItem(expectationsContainers, expectationsContainer, TEST_URL_BASE_PATH_FOR_XHR + test);
+ addExpectationItem(expectationsContainers, expectationsContainer, TEST_URL_BASE_PATH_FOR_XHR + reftest_html_file);
+ addExpectationItem(expectationsContainers, expectationsContainer, TEST_URL_BASE_PATH_FOR_XHR + reftest_mismatch_html_file);
}
function loadExpectationsLayoutTests(test, expectationsContainer)
{
// Map from file extension to container div for expectations of that type.
var expectationsContainers = {};
+ loadTestAndReferenceFiles(expectationsContainers, expectationsContainer, test);
- var revisionContainer = document.createElement('div');
- revisionContainer.textContent = "Showing results for: "
- expectationsContainer.appendChild(revisionContainer);
- loadBaselinesForTest(expectationsContainers, expectationsContainer, test);
-
var testWithoutSuffix = test.substring(0, test.lastIndexOf('.'));
- var actualResultSuffixes = ['-actual.txt', '-actual.png', '-crash-log.txt', '-diff.txt', '-wdiff.html', '-diff.png'];
for (var builder in currentBuilders()) {
var actualResultsBase = TEST_RESULTS_BASE_PATH + currentBuilders()[builder] + '/results/layout-test-results/';
-
- for (var i = 0; i < actualResultSuffixes.length; i++) {
- addExpectationItem(expectationsContainers, expectationsContainer, null,
- testWithoutSuffix + actualResultSuffixes[i], actualResultsBase, builder);
- }
+ ACTUAL_RESULT_SUFFIXES.forEach(function(suffix) {{
+ addExpectationItem(expectationsContainers, expectationsContainer, actualResultsBase + testWithoutSuffix + '-' + suffix, builder);
+ }})
}
// Add a clearing element so floated elements don't bleed out of their
@@ -1285,33 +1142,6 @@
expectationsContainer.appendChild(br);
}
-var g_allFallbacks;
-
-// Returns the reverse sorted, deduped list of all platform fallback
-// directories.
-function allFallbacks()
-{
- if (!g_allFallbacks) {
- var holder = {};
- for (var platform in g_fallbacksMap) {
- var fallbacks = g_fallbacksMap[platform];
- for (var i = 0; i < fallbacks.length; i++)
- holder[fallbacks[i]] = 1;
- }
-
- g_allFallbacks = [];
- for (var fallback in holder)
- g_allFallbacks.push(fallback);
-
- g_allFallbacks.sort(function(a, b) {
- if (a == b)
- return 0;
- return a < b;
- });
- }
- return g_allFallbacks;
-}
-
function appendExpectations()
{
var expectations = g_history.dashboardSpecificState.showExpectations ? document.getElementsByClassName('expectations') : [];
@@ -1341,8 +1171,10 @@
performChunkedAction(tests, function(chunk) {
appendHTML(htmlForIndividualTests(chunk));
}, appendExpectations, 500);
- if (g_history.dashboardSpecificState.showChrome)
+ if (g_history.dashboardSpecificState.showChrome) {
$('tests-input').value = g_history.dashboardSpecificState.tests;
+ $('result-input').value = g_history.dashboardSpecificState.result;
+ }
}
function performChunkedAction(tests, handleChunk, onComplete, timeout, opt_index) {
@@ -1423,14 +1255,14 @@
{
processTestRunsForBuilder(builderName);
- var results = g_perBuilderFailures[builderName].filter(shouldShowTest);
- sortTests(results, g_history.dashboardSpecificState.sortColumn, g_history.dashboardSpecificState.sortOrder);
+ var filteredResults = g_perBuilderFailures[builderName].filter(shouldShowTest);
+ sortTests(filteredResults, g_history.dashboardSpecificState.sortColumn, g_history.dashboardSpecificState.sortOrder);
var testsHTML = '';
- if (results.length) {
+ if (filteredResults.length) {
var tableRowsHTML = '';
- for (var i = 0; i < results.length; i++)
- tableRowsHTML += htmlForSingleTestRow(results[i])
+ for (var i = 0; i < filteredResults.length; i++)
+ tableRowsHTML += htmlForSingleTestRow(filteredResults[i])
testsHTML = htmlForTestTable(tableRowsHTML);
} else {
if (g_history.isLayoutTestResults())
@@ -1478,19 +1310,6 @@
legend.parentNode.removeChild(legend);
}
-var g_fallbacksMap = {};
-g_fallbacksMap['WIN-XP'] = ['chromium-win-xp', 'chromium-win', 'chromium'];
-g_fallbacksMap['WIN-7'] = ['chromium-win', 'chromium'];
-g_fallbacksMap['MAC-SNOWLEOPARD'] = ['chromium-mac-snowleopard', 'chromium-mac', 'chromium'];
-g_fallbacksMap['MAC-LION'] = ['chromium-mac', 'chromium'];
-g_fallbacksMap['LINUX-32'] = ['chromium-linux-x86', 'chromium-linux', 'chromium-win', 'chromium'];
-g_fallbacksMap['LINUX-64'] = ['chromium-linux', 'chromium-win', 'chromium'];
-
-function htmlForFallbackHelp(fallbacks)
-{
- return '<ol class=fallback-list><li>' + fallbacks.join('</li><li>') + '</li></ol>';
-}
-
function showLegend()
{
var legend = $('legend');
@@ -1505,7 +1324,7 @@
// Just grab the first failureMap. Technically, different builders can have different maps if they
// haven't all cycled after the map was changed, but meh.
- var failureMap = g_resultsByBuilder[Object.keys(g_resultsByBuilder)[0]][FAILURE_MAP_KEY];
+ var failureMap = g_resultsByBuilder[Object.keys(g_resultsByBuilder)[0]][results.FAILURE_MAP];
for (var expectation in failureMap) {
var failureString = failureMap[expectation];
html += '<div class=' + classNameForFailureString(failureString) + '>' + failureString + '</div>';
@@ -1513,10 +1332,7 @@
if (g_history.isLayoutTestResults()) {
html += '</div><br style="clear:both">' +
- '</div><h3>Test expectations fallback order.</h3>';
-
- for (var platform in g_fallbacksMap)
- html += '<div class=fallback-header>' + platform + '</div>' + htmlForFallbackHelp(g_fallbacksMap[platform]);
+ '</div>';
html += '<div>RELEASE TIMEOUTS:</div>' +
htmlForSlowTimes(RELEASE_TIMEOUT) +
diff --git a/Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.css b/Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.css
index edabb5a..91097d2 100644
--- a/Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.css
+++ b/Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.css
@@ -180,7 +180,8 @@
padding-left: 20px;
}
.expectations-container {
- clear: both;
+ overflow: hidden;
+ margin-bottom: 10px;
}
.expectations-item {
float: left;
@@ -195,7 +196,6 @@
width: 400px;
height: 300px;
border: 0;
- border-top: 1px solid grey;
overflow: auto;
display: -webkit-box;
display: -moz-box;
@@ -223,13 +223,8 @@
margin: 0 5px;
}
.expectations-title {
- /* Hack to make a containing block for absolute positioned elements. */
- position: relative;
- clear: both;
-}
-.title {
- /* Position absolutely so the container does not grow to contain this. */
- position: absolute;
+ outline: 1px solid grey;
+ text-align: center;
}
.platforms {
position: absolute;
diff --git a/Tools/TestResultServer/static-dashboards/flakiness_dashboard_unittests.js b/Tools/TestResultServer/static-dashboards/flakiness_dashboard_unittests.js
index 1cef5fb..ac4d334 100644
--- a/Tools/TestResultServer/static-dashboards/flakiness_dashboard_unittests.js
+++ b/Tools/TestResultServer/static-dashboards/flakiness_dashboard_unittests.js
@@ -42,16 +42,21 @@
for (var key in history.DEFAULT_CROSS_DASHBOARD_STATE_VALUES)
historyInstance.crossDashboardState[key] = history.DEFAULT_CROSS_DASHBOARD_STATE_VALUES[key];
- LOAD_BUILDBOT_DATA([{
- name: 'ChromiumWebkit',
- url: 'dummyurl',
- tests: {'layout-tests': {'builders': ['WebKit Linux', 'WebKit Linux (dbg)', 'WebKit Mac10.7', 'WebKit Win', 'WebKit Win (dbg)']}}
- }]);
-
- for (var group in LAYOUT_TESTS_BUILDER_GROUPS)
- LAYOUT_TESTS_BUILDER_GROUPS[group] = null;
+ LOAD_BUILDBOT_DATA({
+ 'masters': [{
+ name: 'ChromiumWebkit',
+ url: 'dummyurl',
+ tests: {'layout-tests': {'builders': ['WebKit Linux', 'WebKit Linux (dbg)', 'WebKit Linux (deps)', 'WebKit Mac10.7', 'WebKit Win', 'WebKit Win (dbg)']}},
+ groups: ['@ToT Blink', '@ToT Chromium'],
+ },{
+ name :'ChromiumWin',
+ url: 'dummyurl2',
+ tests: {'interactive_ui_tests': {'builders': ['XP Tests (1)', 'Win7 Tests (1)']}},
+ groups: ['@ToT Chromium'],
+ }],
+ });
- return historyInstance;
+ return historyInstance;
}
var FAILURE_MAP = {"A": "AUDIO", "C": "CRASH", "F": "TEXT", "I": "IMAGE", "O": "MISSING",
@@ -77,17 +82,18 @@
});
test('htmlForTestTypeSwitcherGroup', 6, function() {
+ resetGlobals();
var historyInstance = new history.History(flakinessConfig);
// FIXME(jparent): Remove this once global isn't used.
g_history = historyInstance;
var container = document.createElement('div');
- historyInstance.crossDashboardState.testType = 'ui_tests';
+ historyInstance.crossDashboardState.testType = 'interactive_ui_tests';
container.innerHTML = ui.html.testTypeSwitcher(true);
var selects = container.querySelectorAll('select');
equal(selects.length, 2);
var group = selects[1];
equal(group.parentNode.textContent.indexOf('Group:'), 0);
- equal(group.children.length, 3);
+ equal(group.children.length, 1);
historyInstance.crossDashboardState.testType = 'layout-tests';
container.innerHTML = ui.html.testTypeSwitcher(true);
@@ -95,20 +101,20 @@
equal(selects.length, 2);
var group = selects[1];
equal(group.parentNode.textContent.indexOf('Group:'), 0);
- equal(group.children.length, 3);
+ equal(group.children.length, 2);
});
test('htmlForIndividualTestOnAllBuilders', 1, function() {
resetGlobals();
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
- equal(htmlForIndividualTestOnAllBuilders('foo/nonexistant.html'), '<div class="not-found">Test not found. Either it does not exist, is skipped or passes on all platforms.</div>');
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
+ equal(htmlForIndividualTestOnAllBuilders('foo/nonexistant.html'), '<div class="not-found">Test not found. Either it does not exist, is skipped or passes on all recorded runs.</div>');
});
test('htmlForIndividualTestOnAllBuildersWithResultsLinksNonexistant', 1, function() {
resetGlobals();
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
equal(htmlForIndividualTestOnAllBuildersWithResultsLinks('foo/nonexistant.html'),
- '<div class="not-found">Test not found. Either it does not exist, is skipped or passes on all platforms.</div>' +
+ '<div class="not-found">Test not found. Either it does not exist, is skipped or passes on all recorded runs.</div>' +
'<div class=expectations test=foo/nonexistant.html>' +
'<div>' +
'<span class=link onclick="g_history.setQueryParameter(\'showExpectations\', true)">Show results</span> | ' +
@@ -120,7 +126,7 @@
test('htmlForIndividualTestOnAllBuildersWithResultsLinks', 1, function() {
resetGlobals();
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
var builderName = 'WebKit Linux';
g_resultsByBuilder[builderName] = {buildNumbers: [2, 1], blinkRevision: [1234, 1233], failure_map: FAILURE_MAP};
@@ -149,7 +155,7 @@
'<td title="NO DATA. Click for more info." class="results NODATA" onclick=\'showPopupForBuild(event, "WebKit Linux",1,"dummytest.html")\'> ' +
'</tbody>' +
'</table>' +
- '<div>The following builders either don\'t run this test (e.g. it\'s skipped) or all runs passed:</div>' +
+ '<div>The following builders either don\'t run this test (e.g. it\'s skipped) or all recorded runs passed:</div>' +
'<div class=skipped-builder-list>' +
'<div class=skipped-builder>WebKit Linux (dbg)</div><div class=skipped-builder>WebKit Mac10.7</div><div class=skipped-builder>WebKit Win</div><div class=skipped-builder>WebKit Win (dbg)</div>' +
'</div>' +
@@ -162,7 +168,7 @@
test('htmlForIndividualTests', 4, function() {
var historyInstance = resetGlobals();
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
var test1 = 'foo/nonexistant.html';
var test2 = 'bar/nonexistant.html';
@@ -171,7 +177,7 @@
var tests = [test1, test2];
equal(htmlForIndividualTests(tests),
'<h2><a href="' + TEST_URL_BASE_PATH_FOR_BROWSING + 'foo/nonexistant.html" target="_blank">foo/nonexistant.html</a></h2>' +
- htmlForIndividualTestOnAllBuilders(test1) +
+ htmlForIndividualTestOnAllBuilders(test1) +
'<div class=expectations test=foo/nonexistant.html>' +
'<div><span class=link onclick=\"g_history.setQueryParameter(\'showExpectations\', true)\">Show results</span> | ' +
'<span class=link onclick=\"g_history.setQueryParameter(\'showLargeExpectations\', true)\">Show large thumbnails</span> | ' +
@@ -219,7 +225,6 @@
test('htmlForSingleTestRow', 1, function() {
var historyInstance = resetGlobals();
var builder = 'dummyBuilder';
- BUILDER_TO_MASTER[builder] = CHROMIUM_WEBKIT_BUILDER_MASTER;
var test = createResultsObjectForTest('foo/exists.html', builder);
historyInstance.dashboardSpecificState.showNonFlaky = true;
g_resultsByBuilder[builder] = {buildNumbers: [2, 1], blinkRevision: [1234, 1233], failure_map: FAILURE_MAP};
@@ -245,49 +250,6 @@
equal(baseTest('virtual/gpu/fast/canvas/foo.html', 'virtual/gpu/fast/canvas'), 'fast/canvas/foo.html');
});
-// FIXME: Create builders_tests.js and move this there.
-
-test('isChromiumWebkitTipOfTreeTestRunner', 1, function() {
- var builderList = ["WebKit Linux", "WebKit Linux (dbg)", "WebKit Linux 32", "WebKit Mac10.6", "WebKit Mac10.6 (dbg)",
- "WebKit Mac10.6 (deps)", "WebKit Mac10.7", "WebKit Win", "WebKit Win (dbg)(1)", "WebKit Win (dbg)(2)", "WebKit Win (deps)",
- "WebKit Win7", "Linux (Content Shell)"];
- var expectedBuilders = ["WebKit Linux", "WebKit Linux (dbg)", "WebKit Linux 32", "WebKit Mac10.6",
- "WebKit Mac10.6 (dbg)", "WebKit Mac10.7", "WebKit Win", "WebKit Win (dbg)(1)", "WebKit Win (dbg)(2)", "WebKit Win7"];
- deepEqual(builderList.filter(isChromiumWebkitTipOfTreeTestRunner), expectedBuilders);
-});
-
-test('isChromiumWebkitDepsTestRunner', 1, function() {
- var builderList = ["Chrome Frame Tests", "GPU Linux (NVIDIA)", "GPU Linux (dbg) (NVIDIA)", "GPU Mac", "GPU Mac (dbg)", "GPU Win7 (NVIDIA)", "GPU Win7 (dbg) (NVIDIA)", "Linux Perf", "Linux Tests",
- "Linux Valgrind", "Mac Builder (dbg)", "Mac10.6 Perf", "Mac10.6 Tests", "Vista Perf", "Vista Tests", "WebKit Linux", "WebKit Linux ASAN", "WebKit Linux (dbg)", "WebKit Linux (deps)", "WebKit Linux 32",
- "WebKit Mac10.6", "WebKit Mac10.6 (dbg)", "WebKit Mac10.6 (deps)", "WebKit Mac10.7", "WebKit Win", "WebKit Win (dbg)(1)", "WebKit Win (dbg)(2)", "WebKit Win (deps)",
- "WebKit Win7", "Win (dbg)", "Win Builder"];
- var expectedBuilders = ["WebKit Linux (deps)", "WebKit Mac10.6 (deps)", "WebKit Win (deps)"];
- deepEqual(builderList.filter(isChromiumWebkitDepsTestRunner), expectedBuilders);
-});
-
-test('builderGroupIsToTWebKitAttribute', 2, function() {
- var dummyMaster = new builders.BuilderMaster('Chromium', 'dummyurl', {'layout-tests': {'builders': ['WebKit Linux', 'WebKit Linux (dbg)', 'WebKit Mac10.7', 'WebKit Win']}});
- var testBuilderGroups = {
- '@ToT - dummy.org': new BuilderGroup(BuilderGroup.TOT_WEBKIT),
- '@DEPS - dummy.org': new BuilderGroup(BuilderGroup.DEPS_WEBKIT),
- }
-
- var testJSONData = "{ \"Dummy Builder 1\": null, \"Dummy Builder 2\": null }";
- requestBuilderList(testBuilderGroups, 'ChromiumWebkit', '@ToT - dummy.org', testBuilderGroups['@ToT - dummy.org'], 'layout-tests');
- equal(testBuilderGroups['@ToT - dummy.org'].isToTWebKit, true);
- requestBuilderList(testBuilderGroups, 'ChromiumWebkit', '@DEPS - dummy.org', testBuilderGroups['@DEPS - dummy.org'], 'layout-tests');
- equal(testBuilderGroups['@DEPS - dummy.org'].isToTWebKit, false);
-});
-
-test('requestBuilderListAddsBuilderGroupEntry', 1, function() {
- var testBuilderGroups = { '@ToT - dummy.org': null };
- var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
- var groupName = '@ToT - dummy.org';
- requestBuilderList(testBuilderGroups, 'ChromiumWebkit', groupName, builderGroup, 'layout-tests');
-
- equal(testBuilderGroups['@ToT - dummy.org'], builderGroup);
-})
-
test('sortTests', 4, function() {
var test1 = createResultsObjectForTest('foo/test1.html', 'dummyBuilder');
var test2 = createResultsObjectForTest('foo/test2.html', 'dummyBuilder');
@@ -392,14 +354,14 @@
test('changeTestTypeInvalidatesGroup', 1, function() {
var historyInstance = resetGlobals();
- var originalGroup = '@ToT - chromium.org';
+ var originalGroup = '@ToT Blink';
var originalTestType = 'layout-tests';
- loadBuildersList(originalGroup, originalTestType);
+ builders.loadBuildersList(originalGroup, originalTestType);
historyInstance.crossDashboardState.group = originalGroup;
historyInstance.crossDashboardState.testType = originalTestType;
historyInstance.invalidateQueryParameters({'testType': 'ui_tests'});
- notEqual(historyInstance.crossDashboardState.group, originalGroup, "group should have been invalidated");
+ notEqual(historyInstance.crossDashboardState.group, originalGroup, "group should have been invalidated");
});
test('shouldShowTest', 9, function() {
diff --git a/Tools/TestResultServer/static-dashboards/history.js b/Tools/TestResultServer/static-dashboards/history.js
index f4814a2..622b76d 100644
--- a/Tools/TestResultServer/static-dashboards/history.js
+++ b/Tools/TestResultServer/static-dashboards/history.js
@@ -36,14 +36,17 @@
showAllRuns: false,
testType: 'layout-tests',
useTestData: false,
-}
+}
history.validateParameter = function(state, key, value, validateFn)
{
- if (validateFn())
+ if (validateFn()) {
state[key] = value;
- else
+ return true;
+ } else {
console.log(key + ' value is not valid: ' + value);
+ return false;
+ }
}
history.isTreeMap = function()
@@ -71,13 +74,27 @@
// FIXME: remove support for mapping from the master parameter to the group
// one once the waterfall starts to pass in the builder name instead.
if (paramsMap.master) {
- paramsMap.group = LEGACY_BUILDER_MASTERS_TO_GROUPS[paramsMap.master];
- if (!paramsMap.group)
- console.log('ERROR: Unknown master name: ' + paramsMap.master);
- window.location.hash = window.location.hash.replace('master=' + paramsMap.master, 'group=' + paramsMap.group);
- delete paramsMap.master;
+ var errors = new ui.Errors();
+ if (paramsMap.master == 'TryServer')
+ errors.addError('ERROR: You got here from the trybot waterfall. The try bots do not record data in the flakiness dashboard. Showing results for the regular waterfall.');
+ else if (!builders.masters[paramsMap.master])
+ errors.addError('ERROR: Unknown master name: ' + paramsMap.master);
+
+ if (errors.hasErrors()) {
+ errors.show();
+ window.location.hash = window.location.hash.replace('master=' + paramsMap.master, '');
+ } else {
+ paramsMap.group = builders.masters[paramsMap.master].groups[0];
+ window.location.hash = window.location.hash.replace('master=' + paramsMap.master, 'group=' + encodeURIComponent(paramsMap.group));
+ delete paramsMap.master;
+ }
}
+ // FIXME: Find a better way to do this. For layout-tests, we want the default group to be
+ // the ToT blink group. For other test types, we want it to be the Deps group.
+ if (!paramsMap.group && (!paramsMap.testType || paramsMap.testType == 'layout-tests'))
+ paramsMap.group = builders.groupNamesForTestType('layout-tests')[1];
+
return paramsMap;
}
@@ -120,7 +137,7 @@
}
}
-var RELOAD_REQUIRING_PARAMETERS = ['showAllRuns', 'group', 'testType'];
+history.reloadRequiringParameters = ['showAllRuns', 'group', 'testType'];
var CROSS_DB_INVALIDATING_PARAMETERS = {
'testType': 'group'
@@ -163,11 +180,11 @@
var oldDashboardSpecificState = this.dashboardSpecificState;
this.parseCrossDashboardParameters();
-
+
// Some parameters require loading different JSON files when the value changes. Do a reload.
if (Object.keys(oldCrossDashboardState).length) {
for (var key in this.crossDashboardState) {
- if (oldCrossDashboardState[key] != this.crossDashboardState[key] && RELOAD_REQUIRING_PARAMETERS.indexOf(key) != -1) {
+ if (oldCrossDashboardState[key] != this.crossDashboardState[key] && history.reloadRequiringParameters.indexOf(key) != -1) {
window.location.reload();
return false;
}
@@ -210,16 +227,13 @@
switch(key) {
case 'testType':
history.validateParameter(this.crossDashboardState, key, value,
- function() { return TEST_TYPES.indexOf(value) != -1; });
+ function() { return builders.testTypes.indexOf(value) != -1; });
return true;
case 'group':
history.validateParameter(this.crossDashboardState, key, value,
function() {
- return value in LAYOUT_TESTS_BUILDER_GROUPS ||
- value in CHROMIUM_GPU_TESTS_BUILDER_GROUPS ||
- value in CHROMIUM_INSTRUMENTATION_TESTS_BUILDER_GROUPS ||
- value in CHROMIUM_GTESTS_BUILDER_GROUPS;
+ return builders.getAllGroupNames().indexOf(value) != -1;
});
return true;
@@ -235,7 +249,7 @@
queryParameterValue: function(parameter)
{
return this.dashboardSpecificState[parameter] || this.crossDashboardState[parameter];
- },
+ },
// Sets the page state. Takes varargs of key, value pairs.
setQueryParameter: function(var_args)
{
@@ -280,7 +294,7 @@
state.push(key + '=' + encodeURIComponent(value));
}
return state.join('&');
- },
+ },
_permaLinkURLHash: function(opt_state)
{
var state = opt_state || this._combinedDashboardState();
@@ -291,7 +305,7 @@
var combinedState = Object.create(this.dashboardSpecificState);
for (var key in this.crossDashboardState)
combinedState[key] = this.crossDashboardState[key];
- return combinedState;
+ return combinedState;
},
_defaultValue: function(key)
{
@@ -307,4 +321,4 @@
}
-})();
\ No newline at end of file
+})();
diff --git a/Tools/TestResultServer/static-dashboards/history_unittests.js b/Tools/TestResultServer/static-dashboards/history_unittests.js
index 4594a61..569841d 100644
--- a/Tools/TestResultServer/static-dashboards/history_unittests.js
+++ b/Tools/TestResultServer/static-dashboards/history_unittests.js
@@ -30,7 +30,7 @@
test('queryHashAsMap', 2, function() {
equal(window.location.hash, '#useTestData=true');
- deepEqual(history.queryHashAsMap(), {useTestData: 'true'});
+ deepEqual(history.queryHashAsMap(), {useTestData: 'true', "group": "@ToT Blink"});
});
test('diffStates', 5, function() {
@@ -61,6 +61,7 @@
var expectedParameters = {};
for (var key in history.DEFAULT_CROSS_DASHBOARD_STATE_VALUES)
expectedParameters[key] = history.DEFAULT_CROSS_DASHBOARD_STATE_VALUES[key];
+ expectedParameters.group = "@ToT Blink";
expectedParameters.useTestData = true;
deepEqual(historyInstance.crossDashboardState, expectedParameters);
diff --git a/Tools/TestResultServer/static-dashboards/loader.js b/Tools/TestResultServer/static-dashboards/loader.js
index 9fd00b8..198a2c0 100644
--- a/Tools/TestResultServer/static-dashboards/loader.js
+++ b/Tools/TestResultServer/static-dashboards/loader.js
@@ -35,7 +35,7 @@
function pathToBuilderResultsFile(builderName) {
return TEST_RESULTS_SERVER + 'testfile?builder=' + builderName +
- '&master=' + builderMaster(builderName).name +
+ '&master=' + builders.master(builderName).name +
'&testtype=' + g_history.crossDashboardState.testType + '&name=';
}
@@ -95,7 +95,7 @@
{
this._loadNext();
},
- showErrors: function()
+ showErrors: function()
{
this._errors.show();
},
@@ -111,13 +111,17 @@
},
_loadBuildersList: function()
{
- loadBuildersList(currentBuilderGroupName(), this._history.crossDashboardState.testType);
+ builders.loadBuildersList(currentBuilderGroupName(), this._history.crossDashboardState.testType);
this._loadNext();
},
_loadResultsFiles: function()
{
- for (var builderName in currentBuilders())
- this._loadResultsFileForBuilder(builderName);
+ var builderNames = Object.keys(currentBuilders());
+ if (builderNames.length)
+ builderNames.forEach(this._loadResultsFileForBuilder.bind(this));
+ else
+ this._loadNext();
+
},
_loadResultsFileForBuilder: function(builderName)
{
@@ -163,6 +167,12 @@
{
var builds = JSON.parse(fileData);
+ if (builderName == 'version' || builderName == 'failure_map')
+ return;
+
+ var ONE_DAY_SECONDS = 60 * 60 * 24;
+ var ONE_WEEK_SECONDS = ONE_DAY_SECONDS * 7;
+
// If a test suite stops being run on a given builder, we don't want to show it.
// Assume any builder without a run in two weeks for a given test suite isn't
// running that suite anymore.
@@ -174,7 +184,7 @@
if ((Date.now() / 1000) - lastRunSeconds > ONE_DAY_SECONDS)
this._staleBuilders.push(builderName);
- builds[builderName][TESTS_KEY] = loader.Loader._flattenTrie(builds[builderName][TESTS_KEY]);
+ builds[builderName][results.TESTS] = loader.Loader._flattenTrie(builds[builderName][results.TESTS]);
g_resultsByBuilder[builderName] = builds[builderName];
},
_handleResultsFileLoadError: function(builderName)
@@ -198,8 +208,8 @@
},
_haveResultsFilesLoaded: function()
{
- for (var builder in currentBuilders()) {
- if (!g_resultsByBuilder[builder])
+ for (var builderName in currentBuilders()) {
+ if (!g_resultsByBuilder[builderName] && this._buildersThatFailedToLoad.indexOf(builderName) < 0)
return false;
}
return true;
diff --git a/Tools/TestResultServer/static-dashboards/loader_unittests.js b/Tools/TestResultServer/static-dashboards/loader_unittests.js
index cfeccd6..fa7e8dc0 100644
--- a/Tools/TestResultServer/static-dashboards/loader_unittests.js
+++ b/Tools/TestResultServer/static-dashboards/loader_unittests.js
@@ -70,8 +70,8 @@
successCallback({responseText: '{"version":4,"' + builderName + '":{"failure_map":{"A":"AUDIO","C":"CRASH","F":"TEXT"},"secondsSinceEpoch":[' + Date.now() + '],"tests":{}}}'});
}
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
-
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
+
try {
resourceLoader._loadResultsFiles();
} finally {
@@ -81,8 +81,8 @@
test('results file failing to load', 2, function() {
resetGlobals();
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
-
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
+
var resourceLoader = new loader.Loader();
var resourceLoadCount = 0;
resourceLoader._handleResourceLoad = function() {
@@ -104,11 +104,11 @@
test('Default builder gets set.', 3, function() {
resetGlobals();
- loadBuildersList('@ToT - chromium.org', 'layout-tests');
-
+ builders.loadBuildersList('@ToT Blink', 'layout-tests');
+
var defaultBuilder = currentBuilderGroup().defaultBuilder();
ok(defaultBuilder, "Default builder should exist.");
-
+
// Simulate error loading the default builder data, then make sure
// a new defaultBuilder is set, and isn't the now invalid one.
var resourceLoader = new loader.Loader();
diff --git a/Tools/TestResultServer/static-dashboards/overview.html b/Tools/TestResultServer/static-dashboards/overview.html
new file mode 100644
index 0000000..0bf8d1e
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/overview.html
@@ -0,0 +1,69 @@
+<!-- Copyright (C) 2013 Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE HTML>
+<title>Chromium/WebKit Test History</title>
+<style>
+input[type=range] {
+ width: 400px;
+}
+.flaky-bar {
+ height: 10px;
+ background-color: salmon;
+}
+#flip-slider-container {
+ margin: 10px 0;
+}
+table {
+ border-collapse: collapse;
+}
+th, td {
+ padding: 5px;
+ border: 1px dotted;
+}
+tr:nth-child(even) {
+ background-color: lightgray;
+}
+td:last-child {
+ width: 500px;
+}
+</style>
+<script src="base.js"></script>
+<script src="string.js"></script>
+<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
+<script src="results.js"></script>
+<script src="loader.js"></script>
+<script src="history.js"></script>
+<script src="dashboard_base.js"></script>
+<script src="ui.js"></script>
+<script src="overview.js"></script>
+<body>
+ <div id="navbar"></div>
+ <div id="content"></div>
+</body>
\ No newline at end of file
diff --git a/Tools/TestResultServer/static-dashboards/overview.js b/Tools/TestResultServer/static-dashboards/overview.js
new file mode 100644
index 0000000..bdc9742
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/overview.js
@@ -0,0 +1,179 @@
+// Copyright (C) 2013 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var overview = overview || {};
+
+(function() {
+
+overview._resultsByTestType = {};
+overview._testTypeIndex = 0;
+
+// FIXME: This is a gross hack to make it so that changing the test type in loadNextTestType doesn't reload the page.
+history.reloadRequiringParameters = history.reloadRequiringParameters.filter(function(item) { return item != 'testType'; });
+
+overview.loadNextTestType = function(historyInstance)
+{
+ if (overview._testTypeIndex == builders.testTypes.length) {
+ overview._generatePage();
+ return;
+ }
+
+ historyInstance.crossDashboardState.testType = builders.testTypes[overview._testTypeIndex++];
+
+ $('content').innerHTML = (overview._testTypeIndex - 1) + '/' + builders.testTypes.length + ' loaded. Loading ' + historyInstance.crossDashboardState.testType + '...';
+
+ // FIXME: Gross hack to allow loading all the builders for different test types.
+ // Change loader.js to allow you to pass in the state that it fills instead of setting globals.
+ g_resultsByBuilder = {};
+ overview._resultsByTestType[historyInstance.crossDashboardState.testType] = g_resultsByBuilder;
+ new loader.Loader().load();
+}
+
+overview._getFlakyData = function(allTestTypes, resultsByTestType, flipCountThreshold)
+{
+ var flakyData = {};
+ allTestTypes.forEach(function(testType) {
+ flakyData[testType] = {
+ flakyBelowThreshold: {},
+ flaky: {},
+ testCount: 0
+ }
+
+ var resultsByBuilder = resultsByTestType[testType];
+ for (var builder in resultsByBuilder) {
+ var totalTestCount = results.testCounts(resultsByBuilder[builder][results.NUM_FAILURES_BY_TYPE]).totalTests[0];
+ flakyData[testType].testCount = Math.max(totalTestCount, flakyData[testType].testCount);
+
+ var allTestsForThisBuilder = resultsByBuilder[builder].tests;
+ for (var test in allTestsForThisBuilder) {
+ var resultsForTest = {};
+ var testData = resultsByBuilder[builder].tests[test].results;
+ var failureMap = resultsByBuilder[builder][results.FAILURE_MAP];
+ results.determineFlakiness(failureMap, testData, resultsForTest);
+
+ if (resultsForTest.isFlaky)
+ flakyData[testType].flaky[test] = true;
+
+ if (!resultsForTest.isFlaky || resultsForTest.flipCount <= flipCountThreshold)
+ continue;
+ flakyData[testType].flakyBelowThreshold[test] = true;
+ }
+ }
+ });
+ return flakyData;
+}
+
+overview._generatePage = function()
+{
+ var flipCountThreshold = Number(g_history.dashboardSpecificState.flipCount);
+ var flakyData = overview._getFlakyData(builders.testTypes, overview._resultsByTestType, flipCountThreshold);
+ $('content').innerHTML = overview._htmlForFlakyTests(flakyData, g_history.crossDashboardState.group) +
+ '<div>*Tests that fail due to a bad patch being committed are counted as flaky.</div>';
+}
+
+overview._htmlForFlakyTests = function(flakyData, group)
+{
+ var html = '<table><tr><th>Test type</th><th>flaky count / total count</th><th>percent</th><th></th></tr>';
+
+ Object.keys(flakyData).forEach(function(testType) {
+ var testCount = flakyData[testType].testCount;
+ if (!testCount)
+ return;
+
+ // We want the list of tests to stay stable as you drag the flakiness slider, so only
+ // exclude tests that never flake, even at the lowest flakiness threshold.
+ var flakeCountIgnoringThreshold = Object.keys(flakyData[testType].flaky).length;
+ if (!g_history.dashboardSpecificState.showNoFlakes && !flakeCountIgnoringThreshold)
+ return;
+
+ var tests = Object.keys(flakyData[testType].flakyBelowThreshold);
+ var flakyCount = tests.length;
+ var percentage = Math.round(100 * flakyCount / testCount);
+ html += '<tr>' +
+ '<td><a href="flakiness_dashboard.html#group=' + group + '&testType=' + testType + '&tests=' + tests.join(',') + '" target=_blank>' +
+ testType +
+ '</a></td>' +
+ '<td>' + flakyCount + ' / ' + testCount + '</td>' +
+ '<td>' + percentage + '%</td>' +
+ '<td><div class="flaky-bar" style="width:' + percentage * 5 + 'px"></div>'
+ '</tr>';
+ });
+
+ return html + '</table>';
+}
+
+overview.handleValidHashParameter = function(historyInstance, key, value) {
+ switch(key) {
+ case 'flipCount':
+ return history.validateParameter(historyInstance.dashboardSpecificState, key, value,
+ function() {
+ return !isNaN(Number(value));
+ });
+
+ case 'showNoFlakes':
+ historyInstance.dashboardSpecificState[key] = value == 'true';
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+overview._htmlForNavBar = function(flipCount, showNoFlakes)
+{
+ return ui.html.navbar(ui.html.select('Group', 'group', builders.getAllGroupNames())) +
+ '<div id=flip-slider-container>' +
+ ui.html.range('flipCount', 'Flakiness threshold (low-->high):', 1, 50, flipCount) +
+ ui.html.checkbox('showNoFlakes', 'Show test suites with no flakes', showNoFlakes) +
+ '</div>';
+}
+
+// FIXME: Once dashboard_base, loader and ui stop using the g_history global, we can stop setting it here.
+g_history = new history.History({
+ defaultStateValues: {
+ flipCount: 1,
+ showNoFlakes: false
+ },
+ generatePage: overview.loadNextTestType,
+ handleValidHashParameter: overview.handleValidHashParameter,
+});
+g_history.parseCrossDashboardParameters();
+
+window.addEventListener('load', function() {
+ // FIXME: Come up with a better way to do this. This early return is just to avoid
+ // executing this code when it's loaded in the unittests.
+ if (!$('navbar'))
+ return;
+
+ // Need to parseParameters so that flipCount has the correct value.
+ g_history.parseParameters();
+ $('navbar').innerHTML = overview._htmlForNavBar(g_history.dashboardSpecificState.flipCount);
+ overview.loadNextTestType(g_history);
+}, false);
+
+})();
diff --git a/Tools/TestResultServer/static-dashboards/overview_unittests.js b/Tools/TestResultServer/static-dashboards/overview_unittests.js
new file mode 100644
index 0000000..40950cb
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/overview_unittests.js
@@ -0,0 +1,151 @@
+// Copyright (C) 2013 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+module('overview');
+
+test('getFlakyData', 2, function() {
+ var testTypes = ['MockTestType'];
+
+ var failureMap = {
+ 'T': 'TIMEOUT',
+ 'C': 'CRASH',
+ 'P': 'PASS'
+ }
+
+ var resultsByTestType = {
+ 'MockTestType': {
+ 'MockBuilder1': {
+ 'tests': {
+ 'TestSuite.NotFlaky': {
+ 'results': [[1, 'T'], [1, 'C']]
+ },
+ 'TestSuite.Flaky': {
+ 'results': [[1, 'T'], [1, 'C'], [1, 'T']]
+ },
+ 'TestSuite.VeryFlaky': {
+ 'results': [[1, 'T'], [1, 'C'], [1, 'T'], [1, 'C'], [1, 'T'], [1, 'C'], [1, 'T']]
+ }
+ },
+ 'num_failures_by_type': {
+ 'PASS': [10, 12],
+ 'CRASH': [1, 0]
+ },
+ 'failure_map': failureMap
+ }
+ }
+ };
+
+ var flipCountThreshold = 1;
+ deepEqual(overview._getFlakyData(testTypes, resultsByTestType, flipCountThreshold), {
+ 'MockTestType': {
+ "flakyBelowThreshold": {
+ "TestSuite.Flaky": true,
+ "TestSuite.VeryFlaky": true
+ },
+ 'flaky': {
+ 'TestSuite.Flaky': true,
+ 'TestSuite.VeryFlaky': true
+ },
+ 'testCount': 11
+ }
+ })
+
+
+ flipCountThreshold = 5;
+ deepEqual(overview._getFlakyData(testTypes, resultsByTestType, flipCountThreshold), {
+ 'MockTestType': {
+ "flakyBelowThreshold": {
+ "TestSuite.VeryFlaky": true
+ },
+ 'flaky': {
+ "TestSuite.Flaky": true,
+ 'TestSuite.VeryFlaky': true
+ },
+ 'testCount': 11
+ }
+ })
+});
+
+test('htmlForFlakyTests', 6, function() {
+ var flakyData = {
+ 'browser_tests': {
+ 'testCount': 0,
+ "flakyBelowThreshold": {},
+ 'flaky': {}
+ },
+ 'layout-tests': {
+ 'testCount': 4,
+ "flakyBelowThreshold": {
+ 'css3/foo.html': true,
+ 'css3/bar.html': true
+ },
+ 'flaky': {
+ 'css3/foo.html': true,
+ 'css3/bar.html': true
+ }
+ }
+ }
+
+ var container = document.createElement('div');
+ container.innerHTML = overview._htmlForFlakyTests(flakyData, 'MockGroup');
+
+ // There should only be one row other than the header since browser_tests
+ // have testCount of 0.
+ ok(!container.querySelectorAll('tr')[2]);
+
+ var firstRow = container.querySelectorAll('tr')[1];
+ equal(firstRow.querySelector('td:nth-child(1)').textContent, 'layout-tests');
+ equal(firstRow.querySelector('td:nth-child(1) a').hash, '#group=MockGroup&testType=layout-tests&tests=css3/foo.html,css3/bar.html');
+ equal(firstRow.querySelector('td:nth-child(2)').textContent, '2 / 4');
+ equal(firstRow.querySelector('td:nth-child(3)').textContent, '50%');
+ equal(firstRow.querySelector('td:nth-child(4)').innerHTML, '<div class="flaky-bar" style="width:250px"></div>');
+});
+
+test('handleValidHashParameter', 5, function() {
+ var historyInstance = new history.History();
+
+ ok(overview.handleValidHashParameter(historyInstance, 'flipCount', "5"))
+ ok(overview.handleValidHashParameter(historyInstance, 'flipCount', 5))
+ ok(!overview.handleValidHashParameter(historyInstance, 'flipCount', "notanumber"))
+ ok(!overview.handleValidHashParameter(historyInstance, 'flipCount', "5notanumber"))
+ ok(!overview.handleValidHashParameter(historyInstance, 'randomKey', "5"))
+});
+
+test('navbar', 3, function() {
+ var flipCount = 5;
+ var container = document.createElement('div');
+ container.innerHTML = overview._htmlForNavBar(flipCount);
+
+ ok(container.querySelector('select'));
+
+ var sliderContainer = container.querySelector('#flip-slider-container');
+ ok(sliderContainer);
+
+ var range = sliderContainer.querySelector('input');
+ equal(range.value, "5");
+});
diff --git a/Tools/TestResultServer/static-dashboards/results.js b/Tools/TestResultServer/static-dashboards/results.js
new file mode 100644
index 0000000..cc486df
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/results.js
@@ -0,0 +1,112 @@
+// Copyright (C) 2013 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var results = results || {};
+
+(function() {
+
+// Keys in the JSON files.
+results.NUM_FAILURES_BY_TYPE = 'num_failures_by_type';
+results.FAILURE_MAP = 'failure_map';
+results.CHROME_REVISIONS = 'chromeRevision';
+results.BLINK_REVISIONS = 'blinkRevision';
+results.TIMESTAMPS = 'secondsSinceEpoch';
+results.BUILD_NUMBERS = 'buildNumbers';
+results.TESTS = 'tests';
+
+// Failure types.
+results.PASS = 'PASS';
+results.NO_DATA = 'NO DATA';
+results.SKIP = 'SKIP';
+results.NOTRUN = 'NOTRUN';
+
+// FIXME: Create a ResultsJson class or something similar that abstracts out the JSON
+// data format. Code outside this class shouldn't know about the guts of the JSON format.
+
+// Enum for indexing into the run-length encoded results in the JSON files.
+// 0 is where the count is length is stored. 1 is the value.
+results.RLE = {
+ LENGTH: 0,
+ VALUE: 1
+}
+
+var NON_FAILURE_TYPES = [results.PASS, results.NO_DATA, results.SKIP, results.NOTRUN];
+
+results.isFailingResult = function(failureMap, failureType)
+{
+ return NON_FAILURE_TYPES.indexOf(failureMap[failureType]) == -1;
+}
+
+results.testCounts = function(failuresByType)
+{
+ var countData = {
+ totalTests: [],
+ totalFailingTests: []
+ };
+
+ for (var failureType in failuresByType) {
+ var failures = failuresByType[failureType];
+ failures.forEach(function(count, index) {
+ if (!countData.totalTests[index]) {
+ countData.totalTests[index] = 0;
+ countData.totalFailingTests[index] = 0;
+ }
+
+ countData.totalTests[index] += count;
+ if (failureType != results.PASS)
+ countData.totalFailingTests[index] += count;
+ });
+ }
+ return countData;
+}
+
+results.determineFlakiness = function(failureMap, testResults, out)
+{
+ // FIXME: Ideally this heuristic would be a bit smarter and not consider
+ // all passes, followed by a few consecutive failures, followed by all passes
+ // to be flakiness since that's more likely the test actually failing for a
+ // few runs due to a commit.
+ var FAILURE_TYPES_TO_IGNORE = [results.NOTRUN, results.NO_DATA, results.SKIP];
+ var flipCount = 0;
+ var mostRecentNonIgnorableFailureType;
+
+ for (var i = 0; i < testResults.length; i++) {
+ var result = testResults[i][results.RLE.VALUE];
+ var failureType = failureMap[result];
+ if (failureType != mostRecentNonIgnorableFailureType && FAILURE_TYPES_TO_IGNORE.indexOf(failureType) == -1) {
+ if (mostRecentNonIgnorableFailureType)
+ flipCount++;
+ mostRecentNonIgnorableFailureType = failureType;
+ }
+ }
+
+ out.flipCount = flipCount;
+ out.isFlaky = flipCount > 1;
+}
+
+})();
diff --git a/Tools/TestResultServer/static-dashboards/results_unittests.js b/Tools/TestResultServer/static-dashboards/results_unittests.js
new file mode 100644
index 0000000..a3f9758
--- /dev/null
+++ b/Tools/TestResultServer/static-dashboards/results_unittests.js
@@ -0,0 +1,88 @@
+// Copyright (C) 2013 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+module('results');
+
+test('results.testCounts', 2, function() {
+ var failuresByType = {
+ 'PASS': [2, 3],
+ 'TIMEOUT': [4, 2],
+ 'CRASH': [1, 0]
+ }
+
+ deepEqual(results.testCounts(failuresByType), {
+ totalTests: [7, 5],
+ totalFailingTests: [5, 2]
+ });
+
+ failuresByType = {
+ 'PASS': [2, 3]
+ }
+ deepEqual(results.testCounts(failuresByType), {
+ totalTests: [2, 3],
+ totalFailingTests: [0, 0]
+ });
+});
+
+test('results.determineFlakiness', 10, function() {
+ var failureMap = {
+ 'C': 'CRASH',
+ 'P': 'PASS',
+ 'I': 'IMAGE',
+ 'T': 'TIMEOUT',
+ 'N':'NO DATA',
+ 'Y':'NOTRUN',
+ 'X':'SKIP'
+ };
+ var out = {};
+
+ var inputResults = [[1, 'P']];
+ results.determineFlakiness(failureMap, inputResults, out);
+ equal(out.isFlaky, false);
+ equal(out.flipCount, 0);
+
+ inputResults = [[1, 'P'], [1, 'C']];
+ results.determineFlakiness(failureMap, inputResults, out);
+ equal(out.isFlaky, false);
+ equal(out.flipCount, 1);
+
+ inputResults = [[1, 'P'], [1, 'C'], [1, 'P']];
+ results.determineFlakiness(failureMap, inputResults, out);
+ equal(out.isFlaky, true);
+ equal(out.flipCount, 2);
+
+ inputResults = [[1, 'P'], [1, 'C'], [1, 'P'], [1, 'C']];
+ results.determineFlakiness(failureMap, inputResults, out);
+ equal(out.isFlaky, true);
+ equal(out.flipCount, 3);
+
+ inputResults = [[1, 'P'], [1, 'Y'], [1, 'N'], [1, 'X'], [1, 'P'], [1, 'Y'], [1, 'N'], [1, 'X'], [1, 'C']];
+ results.determineFlakiness(failureMap, inputResults, out);
+ equal(out.isFlaky, false);
+ equal(out.flipCount, 1);
+});
diff --git a/Tools/TestResultServer/static-dashboards/run-embedded-unittests.html b/Tools/TestResultServer/static-dashboards/run-embedded-unittests.html
index 08c7b29..3dbd352 100644
--- a/Tools/TestResultServer/static-dashboards/run-embedded-unittests.html
+++ b/Tools/TestResultServer/static-dashboards/run-embedded-unittests.html
@@ -39,7 +39,11 @@
<link rel="stylesheet" href="flakiness_dashboard.css"></link>
<link rel="stylesheet" href="flakiness_dashboard_tests.css"></link>
+<script src="base.js"></script>
+<script src="base_unittests.js"></script>
+<script src="string.js"></script>
<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
<script src="builders_unittests.js"></script>
<script>
@@ -47,14 +51,15 @@
window.parent = null;
</script>
-<script src="string.js"></script>
+<script src="results.js"></script>
+<script src="results_unittests.js"></script>
+<script src="loader.js"></script>
+<script src="loader_unittests.js"></script>
<script src="history.js"></script>
<script src="history_unittests.js"></script>
<script src="dashboard_base.js"></script>
<script src="ui.js"></script>
<script src="ui_unittests.js"></script>
-<script src="loader.js"></script>
-<script src="loader_unittests.js"></script>
<script>
// Mock out loader.request so that we don't actually make xhrs for tests.
loader.request = function(url, successCallback, errorCallback) {};
diff --git a/Tools/TestResultServer/static-dashboards/run-unittests.html b/Tools/TestResultServer/static-dashboards/run-unittests.html
index fb42134..375e149 100644
--- a/Tools/TestResultServer/static-dashboards/run-unittests.html
+++ b/Tools/TestResultServer/static-dashboards/run-unittests.html
@@ -39,16 +39,21 @@
<link rel="stylesheet" href="flakiness_dashboard.css"></link>
<link rel="stylesheet" href="flakiness_dashboard_tests.css"></link>
-<script src="builders.js"></script>
-<script src="builders_unittests.js"></script>
+<script src="base.js"></script>
+<script src="base_unittests.js"></script>
<script src="string.js"></script>
+<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
+<script src="builders_unittests.js"></script>
+<script src="results.js"></script>
+<script src="results_unittests.js"></script>
+<script src="loader.js"></script>
+<script src="loader_unittests.js"></script>
<script src="history.js"></script>
<script src="history_unittests.js"></script>
<script src="dashboard_base.js"></script>
<script src="ui.js"></script>
<script src="ui_unittests.js"></script>
-<script src="loader.js"></script>
-<script src="loader_unittests.js"></script>
<script>
// Mock out loader.request so that we don't actually make xhrs for tests.
loader.request = function(url, successCallback, errorCallback) {};
@@ -64,5 +69,7 @@
<script src="aggregate_results.js"></script>
<script src="aggregate_results_unittest.js"></script>
+<script src="overview.js"></script>
+<script src="overview_unittests.js"></script>
</body>
</html>
diff --git a/Tools/TestResultServer/static-dashboards/timeline_explorer.html b/Tools/TestResultServer/static-dashboards/timeline_explorer.html
index 05d2b51..c1ee08e 100644
--- a/Tools/TestResultServer/static-dashboards/timeline_explorer.html
+++ b/Tools/TestResultServer/static-dashboards/timeline_explorer.html
@@ -96,9 +96,12 @@
}
</style>
<script src="dygraph-combined.js"></script>
-<script src="builders.js"></script>
-<script src="loader.js"></script>
+<script src="base.js"></script>
<script src="string.js"></script>
+<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
+<script src="results.js"></script>
+<script src="loader.js"></script>
<script src="history.js"></script>
<script src="dashboard_base.js"></script>
<script src="timeline_explorer.js"></script>
diff --git a/Tools/TestResultServer/static-dashboards/timeline_explorer.js b/Tools/TestResultServer/static-dashboards/timeline_explorer.js
index 2be0fcd..5756b89 100644
--- a/Tools/TestResultServer/static-dashboards/timeline_explorer.js
+++ b/Tools/TestResultServer/static-dashboards/timeline_explorer.js
@@ -45,13 +45,13 @@
function generatePage(historyInstance)
{
- var results = g_resultsByBuilder[historyInstance.dashboardSpecificState.builder || currentBuilderGroup().defaultBuilder()];
+ var resultsForBuilder = g_resultsByBuilder[historyInstance.dashboardSpecificState.builder || currentBuilderGroup().defaultBuilder()];
- g_totalFailureCount = getTotalTestCounts(results[FAILURES_BY_TYPE_KEY]).totalFailingTests;
+ g_totalFailureCount = results.testCounts(resultsForBuilder[results.NUM_FAILURES_BY_TYPE]).totalFailingTests;
g_buildIndicesByTimestamp = {};
for (var i = 0; i < g_totalFailureCount.length; i++) {
- var buildDate = new Date(results[TIMESTAMPS_KEY][i] * 1000);
+ var buildDate = new Date(resultsForBuilder[results.TIMESTAMPS][i] * 1000);
g_buildIndicesByTimestamp[buildDate.getTime()] = i;
}
@@ -113,20 +113,20 @@
function shouldShowBlinkRevisionsOnly()
{
- return isTipOfTreeWebKitBuilder();
+ return currentBuilderGroup().isToTBlink;
}
function updateTimelineForBuilder()
{
var builder = g_history.dashboardSpecificState.builder || currentBuilderGroup().defaultBuilder();
- var results = g_resultsByBuilder[builder];
+ var resultsForBuilder = g_resultsByBuilder[builder];
var graphData = [];
var annotations = [];
// Dygraph prefers to be handed data in chronological order.
for (var i = g_totalFailureCount.length - 1; i >= 0; i--) {
- var buildDate = new Date(results[TIMESTAMPS_KEY][i] * 1000);
+ var buildDate = new Date(resultsForBuilder[results.TIMESTAMPS][i] * 1000);
// FIXME: Find a better way to exclude outliers. This is just so we
// exclude runs where every test failed.
var failureCount = Math.min(g_totalFailureCount[i], 10000);
@@ -136,12 +136,12 @@
graphData.push([buildDate, failureCount]);
- if (!shouldShowBlinkRevisionsOnly() && (results[BLINK_REVISIONS_KEY][i] != results[BLINK_REVISIONS_KEY][i + 1])) {
+ if (!shouldShowBlinkRevisionsOnly() && (resultsForBuilder[results.BLINK_REVISIONS][i] != resultsForBuilder[results.BLINK_REVISIONS][i + 1])) {
annotations.push({
series: FAILING_TESTS_DATASET_NAME,
x: buildDate,
shortText: 'R',
- text: 'Blink roll: r' + results[BLINK_REVISIONS_KEY][i + 1] + ' to ' + results[BLINK_REVISIONS_KEY][i]
+ text: 'Blink roll: r' + resultsForBuilder[results.BLINK_REVISIONS][i + 1] + ' to ' + resultsForBuilder[results.BLINK_REVISIONS][i]
});
}
}
@@ -165,12 +165,12 @@
width: graphWidth,
height: graphHeight,
clickCallback: function(event, date) {
- selectBuild(results, builder, g_dygraph, g_buildIndicesByTimestamp[date]);
+ selectBuild(resultsForBuilder, builder, g_dygraph, g_buildIndicesByTimestamp[date]);
},
drawCallback: function(dygraph, isInitial) {
if (isInitial)
return;
- updateBuildIndicator(results, dygraph);
+ updateBuildIndicator(resultsForBuilder, dygraph);
},
// xValueParser is necessary for annotations to work, even though we
// already have Date instances
@@ -185,15 +185,15 @@
selectBuild(results, builder, g_dygraph, g_currentBuildIndex);
}
-function selectBuild(results, builder, dygraph, index)
+function selectBuild(resultsForBuilder, builder, dygraph, index)
{
g_currentBuildIndex = index;
updateBuildIndicator(results, dygraph);
updateBuildInspector(results, builder, dygraph, index);
- g_history.setQueryParameter('buildTimestamp', results[TIMESTAMPS_KEY][index] * 1000);
+ g_history.setQueryParameter('buildTimestamp', resultsForBuilder[results.TIMESTAMPS][index] * 1000);
}
-function updateBuildIndicator(results, dygraph)
+function updateBuildIndicator(resultsForBuilder, dygraph)
{
var indicatorNode = $('indicator');
@@ -209,13 +209,13 @@
indicatorNode.style.display = 'none';
else {
indicatorNode.style.display = 'block';
- var buildDate = new Date(results[TIMESTAMPS_KEY][g_currentBuildIndex] * 1000);
+ var buildDate = new Date(resultsForBuilder[results.TIMESTAMPS][g_currentBuildIndex] * 1000);
var domCoords = dygraph.toDomCoords(buildDate, 0);
indicatorNode.style.left = domCoords[0] + 'px';
}
}
-function updateBuildInspector(results, builder, dygraph, index)
+function updateBuildInspector(resultsForBuilder, builder, dygraph, index)
{
var html = '<table id="inspector-table"><caption>Details</caption>';
@@ -225,19 +225,19 @@
}
// Builder and results links
- var buildNumber = results[BUILD_NUMBERS_KEY][index];
+ var buildNumber = resultsForBuilder[results.BUILD_NUMBERS][index];
addRow('', '');
- var master = builderMaster(builder);
- var buildUrl = master.logPath(builder, results[BUILD_NUMBERS_KEY][index]);
+ var master = builders.master(builder);
+ var buildUrl = master.logPath(builder, resultsForBuilder[results.BUILD_NUMBERS][index]);
var resultsUrl = 'http://build.chromium.org/f/chromium/layout_test_results/' +
- currentBuilders()[builder] + '/' + results[CHROME_REVISIONS_KEY][index];
+ currentBuilders()[builder] + '/' + resultsForBuilder[results.CHROME_REVISIONS][index];
addRow('Build:', '<a href="' + buildUrl + '" target="_blank">' + buildNumber + '</a> (<a href="' + resultsUrl + '" target="_blank">results</a>)');
// Revision link(s)
if (!shouldShowBlinkRevisionsOnly())
- addRow('Chromium change:', ui.html.chromiumRevisionLink(results, index));
- addRow('Blink change:', ui.html.blinkRevisionLink(results, index));
+ addRow('Chromium change:', ui.html.chromiumRevisionLink(resultsForBuilder, index));
+ addRow('Blink change:', ui.html.blinkRevisionLink(resultsForBuilder, index));
// Test status/counts
addRow('', '');
@@ -255,7 +255,7 @@
}
var flakyDeltasByBuild = g_currentBuilderTestResults.flakyDeltasByBuild;
- var failures_by_type = results[FAILURES_BY_TYPE_KEY];
+ var failures_by_type = resultsForBuilder[results.NUM_FAILURES_BY_TYPE];
for (var failureType in failures_by_type) {
var failureCount = failures_by_type[failureType];
var currentCount = failureCount[index];
@@ -294,10 +294,10 @@
showResultsDelta(index, buildNumber, buildUrl, resultsUrl);
};
inspectorNode.getElementsByTagName('button')[1].onclick = function() {
- selectBuild(results, builder, dygraph, index + 1);
+ selectBuild(resultsForBuilder, builder, dygraph, index + 1);
};
inspectorNode.getElementsByTagName('button')[2].onclick = function() {
- selectBuild(results, builder, dygraph, index - 1);
+ selectBuild(resultsForBuilder, builder, dygraph, index - 1);
};
}
@@ -375,7 +375,7 @@
// - flakyDeltasByBuild: array of builds, for each build a count of flaky test results by expectation, as well as a total.
function _decompressResults(builderResults)
{
- var builderTestResults = builderResults[TESTS_KEY];
+ var builderTestResults = builderResults[results.TESTS];
var buildCount = g_totalFailureCount.length;
var resultsByBuild = new Array(buildCount);
var flakyDeltasByBuild = new Array(buildCount);
@@ -396,7 +396,7 @@
var testNames = new Array(testCount);
var flakyTests = new Array(testCount);
- var failureMap = builderResults[FAILURE_MAP_KEY];
+ var failureMap = builderResults[results.FAILURE_MAP];
// Decompress and "invert" test results (by build instead of by test) and
// determine which are flaky.
@@ -406,10 +406,10 @@
testNames[testIndex] = testName;
var testResults = builderTestResults[testName].results;
for (var i = 0, rleResult, currentBuildIndex = 0; (rleResult = testResults[i]) && currentBuildIndex < buildCount; i++) {
- var count = rleResult[RLE.LENGTH];
- var value = rleResult[RLE.VALUE];
+ var count = rleResult[results.RLE.LENGTH];
+ var value = rleResult[results.RLE.VALUE];
- if (count == 1 && isFailingResult(failureMap, value))
+ if (count == 1 && results.isFailingResult(failureMap, value))
oneBuildFailureCount++;
for (var j = 0; j < count; j++) {
@@ -434,8 +434,8 @@
var testResults = builderTestResults[testName].results;
for (var i = 0, rleResult, currentBuildIndex = 0; (rleResult = testResults[i]) && currentBuildIndex < buildCount; i++) {
- var count = rleResult[RLE.LENGTH];
- var value = rleResult[RLE.VALUE];
+ var count = rleResult[results.RLE.LENGTH];
+ var value = rleResult[results.RLE.VALUE];
for (var j = 0; j < count; j++) {
var buildTestResults = flakyDeltasByBuild[currentBuildIndex++];
@@ -446,7 +446,7 @@
buildTestResults[key]++;
}
addFlakyDelta(value);
- if (isFailingResult(failureMap, value))
+ if (results.isFailingResult(failureMap, value))
addFlakyDelta('total');
if (currentBuildIndex == buildCount)
break;
diff --git a/Tools/TestResultServer/static-dashboards/treemap.html b/Tools/TestResultServer/static-dashboards/treemap.html
index acf9af9..b9ab016 100644
--- a/Tools/TestResultServer/static-dashboards/treemap.html
+++ b/Tools/TestResultServer/static-dashboards/treemap.html
@@ -107,14 +107,17 @@
font-style: italic;
}
</style>
-<script src="builders.js"></script>
-<script src="loader.js"></script>
+<script src="base.js"></script>
<script src="string.js"></script>
+<script src="builders.js"></script>
+<script src="builders.jsonp"></script>
+<script src="results.js"></script>
+<script src="loader.js"></script>
<script src="history.js"></script>
<script src="dashboard_base.js"></script>
<script src="ui.js"></script>
-<script src="treemap.js"></script>
<script src="webtreemap.js"></script>
+<script src="treemap.js"></script>
<div id='header-container'></div>
<p>Click on a box to zoom in. Click on the outermost box to zoom out. <a href="" onclick="showAverages();return false;">Show averages</a></p>
diff --git a/Tools/TestResultServer/static-dashboards/treemap.js b/Tools/TestResultServer/static-dashboards/treemap.js
index f72b0bb..311d0fd 100644
--- a/Tools/TestResultServer/static-dashboards/treemap.js
+++ b/Tools/TestResultServer/static-dashboards/treemap.js
@@ -36,14 +36,17 @@
'group': 'builder'
};
+var g_haveEverGeneratedPage = false;
+
function generatePage(historyInstance)
{
+ g_haveEverGeneratedPage = true;
$('header-container').innerHTML = ui.html.testTypeSwitcher();
g_isGeneratingPage = true;
var rawTree = g_resultsByBuilder[historyInstance.dashboardSpecificState.builder || currentBuilderGroup().defaultBuilder()];
- g_webTree = convertToWebTreemapFormat('LayoutTests', rawTree);
+ g_webTree = convertToWebTreemapFormat('AllTests', rawTree);
appendTreemap($('map'), g_webTree);
if (historyInstance.dashboardSpecificState.treemapfocus)
@@ -63,9 +66,7 @@
case 'treemapfocus':
history.validateParameter(historyInstance.dashboardSpecificState, key, value,
function() {
- // FIXME: There's probably a simpler regexp here. Just trying to match ascii + forward-slash.
- // e.g. LayoutTests/foo/bar.html
- return (value.match(/^(\w+\/\w*)*$/));
+ return value.match(/^[\w./]+$/);
});
return true;
@@ -77,7 +78,11 @@
function handleQueryParameterChange(historyInstance, params)
{
for (var param in params) {
- if (param != 'treemapfocus') {
+ // When we're first loading the page, if there is a treemapfocus parameter,
+ // it will show up here. After we've generated the page, treemapfocus parameter
+ // changes should just be handled by the treemap code instead of calling through
+ // to generatePage.
+ if (!g_haveEverGeneratedPage || param != 'treemapfocus') {
$('map').innerHTML = 'Loading...';
return true;
}
diff --git a/Tools/TestResultServer/static-dashboards/ui.js b/Tools/TestResultServer/static-dashboards/ui.js
index abce48d..c90165d 100644
--- a/Tools/TestResultServer/static-dashboards/ui.js
+++ b/Tools/TestResultServer/static-dashboards/ui.js
@@ -70,8 +70,8 @@
ui.popup._handleMouseDown = function(e) {
// Clear the open popup, unless the click was inside the popup.
var popup = $('popup');
- if (popup && e.target != popup && !(popup.compareDocumentPosition(e.target) & 16))
- ui.popup.hide();
+ if (popup && e.target != popup && !(popup.compareDocumentPosition(e.target) & 16))
+ ui.popup.hide();
}
ui.html = {};
@@ -82,7 +82,15 @@
return '<label style="padding-left: 2em">' +
'<input type="checkbox" onchange="g_history.toggleQueryParameter(\'' + queryParameter + '\');' + js + '" ' +
(isChecked ? 'checked' : '') + '>' + label +
- '</label> ';
+ '</label>';
+}
+
+ui.html.range = function(queryParameter, label, min, max, initialValue)
+{
+ return '<label>' +
+ label +
+ '<input type=range onchange="g_history.setQueryParameter(\'' + queryParameter + '\', this.value)" min=' + min + ' max=' + max + ' value=' + initialValue + '>' +
+ '</label>';
}
ui.html.select = function(label, queryParameter, options)
@@ -100,18 +108,28 @@
return html;
}
-// Returns the HTML for the select element to switch to different testTypes.
-ui.html.testTypeSwitcher = function(opt_noBuilderMenu, opt_extraHtml, opt_includeNoneBuilder)
+ui.html.navbar = function(opt_extraHtml)
{
var html = '<div style="border-bottom:1px dashed">';
- html += '' +
+ html = ui.html._dashboardLink('Overview', 'overview.html') +
ui.html._dashboardLink('Stats', 'aggregate_results.html') +
ui.html._dashboardLink('Timeline', 'timeline_explorer.html') +
ui.html._dashboardLink('Results', 'flakiness_dashboard.html') +
ui.html._dashboardLink('Treemap', 'treemap.html');
- html += ui.html.select('Test type', 'testType', TEST_TYPES);
+ if (opt_extraHtml)
+ html += opt_extraHtml;
+ if (!history.isTreeMap())
+ html += ui.html.checkbox('showAllRuns', 'Use all recorded runs', g_history.crossDashboardState.showAllRuns);
+
+ return html + '</div>';
+}
+
+// Returns the HTML for the select element to switch to different testTypes.
+ui.html.testTypeSwitcher = function(opt_noBuilderMenu, opt_extraHtml, opt_includeNoneBuilder)
+{
+ var html = ui.html.select('Test type', 'testType', builders.testTypes);
if (!opt_noBuilderMenu) {
var buildersForMenu = Object.keys(currentBuilders());
if (opt_includeNoneBuilder)
@@ -119,15 +137,11 @@
html += ui.html.select('Builder', 'builder', buildersForMenu);
}
- html += ui.html.select('Group', 'group',
- Object.keys(currentBuilderGroupCategory()));
-
- if (!history.isTreeMap())
- html += ui.html.checkbox('showAllRuns', 'Show all runs', g_history.crossDashboardState.showAllRuns);
+ html += ui.html.select('Group', 'group', builders.groupNamesForTestType(g_history.crossDashboardState.testType));
if (opt_extraHtml)
html += opt_extraHtml;
- return html + '</div>';
+ return ui.html.navbar(html);
}
ui.html._loadDashboard = function(fileName)
@@ -153,12 +167,12 @@
return ui.html._topLink(html, onClick, isSelected);
}
-ui.html._revisionLink = function(resultsKey, results, index)
+ui.html._revisionLink = function(resultsKey, testResults, index)
{
- var currentRevision = parseInt(results[resultsKey][index], 10);
- var previousRevision = parseInt(results[resultsKey][index + 1], 10);
+ var currentRevision = parseInt(testResults[resultsKey][index], 10);
+ var previousRevision = parseInt(testResults[resultsKey][index + 1], 10);
- var isChrome = resultsKey == CHROME_REVISIONS_KEY;
+ var isChrome = resultsKey == results.CHROME_REVISIONS;
var singleUrl = 'http://src.chromium.org/viewvc/' + (isChrome ? 'chrome' : 'blink') + '?view=rev&revision=' + currentRevision;
if (currentRevision == previousRevision)
@@ -173,14 +187,14 @@
return '<a href="' + rangeUrl + '">r' + (previousRevision + 1) + ' to r' + currentRevision + '</a>';
}
-ui.html.chromiumRevisionLink = function(results, index)
+ui.html.chromiumRevisionLink = function(testResults, index)
{
- return ui.html._revisionLink(CHROME_REVISIONS_KEY, results, index);
+ return ui.html._revisionLink(results.CHROME_REVISIONS, testResults, index);
}
-ui.html.blinkRevisionLink = function(results, index)
+ui.html.blinkRevisionLink = function(testResults, index)
{
- return ui.html._revisionLink(BLINK_REVISIONS_KEY, results, index);
+ return ui.html._revisionLink(results.BLINK_REVISIONS, testResults, index);
}
@@ -197,7 +211,7 @@
this._containerElement = document.createElement('H2');
this._containerElement.style.color = 'red';
this._containerElement.id = 'errors';
- document.body.appendChild(this._containerElement);
+ document.documentElement.insertBefore(this._containerElement, document.body);
}
this._containerElement.innerHTML = this._messages;
@@ -206,7 +220,11 @@
addError: function(message)
{
this._messages += message + '<br>';
+ },
+ hasErrors: function()
+ {
+ return !!this._messages;
}
}
-})();
\ No newline at end of file
+})();
diff --git a/Tools/TestResultServer/static-dashboards/ui_unittests.js b/Tools/TestResultServer/static-dashboards/ui_unittests.js
index 3a3ff7d..d70fec8 100644
--- a/Tools/TestResultServer/static-dashboards/ui_unittests.js
+++ b/Tools/TestResultServer/static-dashboards/ui_unittests.js
@@ -28,44 +28,61 @@
module('ui');
+test('ui.html.range', 1, function() {
+ equal(ui.html.range('mockParameter', 'mockLabel', 1, 4, 2),
+ '<label>mockLabel' +
+ '<input type=range onchange="g_history.setQueryParameter(\'mockParameter\', this.value)" min=1 max=4 value=2>' +
+ '</label>');
+})
+
+test('ui.html.navbar', 3, function() {
+ var container = document.createElement('div');
+ container.innerHTML = ui.html.navbar();
+ equal(container.querySelectorAll('span').length, 5);
+ equal(container.querySelectorAll('input').length, 1);
+
+ container.innerHTML = ui.html.navbar('<div id="test-div"></div>');
+ ok(container.querySelector('#test-div'));
+})
+
test('chromiumRevisionLinkOneRevision', 1, function() {
- var results = {};
- results[CHROME_REVISIONS_KEY] = [3, 2, 1];
- var html = ui.html.chromiumRevisionLink(results, 1);
+ var testResults = {};
+ testResults[results.CHROME_REVISIONS] = [3, 2, 1];
+ var html = ui.html.chromiumRevisionLink(testResults, 1);
equal(html, '<a href="http://src.chromium.org/viewvc/chrome?view=rev&revision=2">r2</a>');
});
test('chromiumRevisionLinkAtRevision', 1, function() {
- var results = {};
- results[CHROME_REVISIONS_KEY] = [3, 2, 2];
- var html = ui.html.chromiumRevisionLink(results, 1);
+ var testResults = {};
+ testResults[results.CHROME_REVISIONS] = [3, 2, 2];
+ var html = ui.html.chromiumRevisionLink(testResults, 1);
equal(html, 'At <a href="http://src.chromium.org/viewvc/chrome?view=rev&revision=2">r2</a>');
});
test('chromiumRevisionLinkRevisionRange', 1, function() {
- var results = {};
- results[CHROME_REVISIONS_KEY] = [5, 2];
- var html = ui.html.chromiumRevisionLink(results, 0);
+ var testResults = {};
+ testResults[results.CHROME_REVISIONS] = [5, 2];
+ var html = ui.html.chromiumRevisionLink(testResults, 0);
equal(html, '<a href="http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&range=3:5&mode=html">r3 to r5</a>');
});
test('blinkRevisionLinkOneRevision', 1, function() {
- var results = {};
- results[BLINK_REVISIONS_KEY] = [3, 2, 1];
- var html = ui.html.blinkRevisionLink(results, 1);
+ var testResults = {};
+ testResults[results.BLINK_REVISIONS] = [3, 2, 1];
+ var html = ui.html.blinkRevisionLink(testResults, 1);
equal(html, '<a href="http://src.chromium.org/viewvc/blink?view=rev&revision=2">r2</a>');
});
test('blinkRevisionLinkAtRevision', 1, function() {
- var results = {};
- results[BLINK_REVISIONS_KEY] = [3, 2, 2];
- var html = ui.html.blinkRevisionLink(results, 1);
+ var testResults = {};
+ testResults[results.BLINK_REVISIONS] = [3, 2, 2];
+ var html = ui.html.blinkRevisionLink(testResults, 1);
equal(html, 'At <a href="http://src.chromium.org/viewvc/blink?view=rev&revision=2">r2</a>');
});
test('blinkRevisionLinkRevisionRange', 1, function() {
- var results = {};
- results[BLINK_REVISIONS_KEY] = [5, 2];
- var html = ui.html.blinkRevisionLink(results, 0);
+ var testResults = {};
+ testResults[results.BLINK_REVISIONS] = [5, 2];
+ var html = ui.html.blinkRevisionLink(testResults, 0);
equal(html, '<a href="http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog_blink.html?url=/trunk&range=3:5&mode=html">r3 to r5</a>');
});
diff --git a/Tools/TestResultServer/templates/showfilelist.html b/Tools/TestResultServer/templates/showfilelist.html
index d292fe2..f7b233f 100644
--- a/Tools/TestResultServer/templates/showfilelist.html
+++ b/Tools/TestResultServer/templates/showfilelist.html
@@ -37,11 +37,21 @@
</a>
{% endif %}
</td>
- <td><a href="/testfile?builder={{ file.builder }}&name={{ file.name }}" >
+ <td><a href="/testfile?builder={{ file.builder }}&name={{ file.name }}&master={{ file.master }}&testtype={{ file.test_type }}" >
{{ file.name }}
</a>
</td>
- <td>{{ file.date|date:"d-M-Y H:i:s" }}
+ <td>
+ <script>
+ // This date format needs to match the format string used in model/testfile.py:get_files.
+ var beforeQueryParameter = 'before={{ file.date|date:"Y-m-d\TH:i:s" }}Z';
+ var url = location.toString();
+ if (url.indexOf('before') == -1)
+ url += (url.indexOf('?') == -1 ? '?' : '&') + beforeQueryParameter;
+ else
+ url = url.replace(/before=[^&]*/, beforeQueryParameter);
+ document.write('<a href="' + url + '">' + new Date('{{ file.date|date:"c" }}').toLocaleString() + '</a>')
+ </script>
</td>
{% if admin %}
<td><a href="/testfile/delete?key={{ file.key }}&builder={{ builder }}&name={{ name }}" >