ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for [Gtk] [EFL] , currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * Source/cmake/OptionsBlackBerry.cmake:
 9 * Source/cmake/OptionsEfl.cmake:
 10 * Source/cmake/WebKitFeatures.cmake:
 11 * Source/cmakeconfig.h.cmake:
 12 * configure.ac:
 13
1142012-07-06 Thiago Marcos P. Santos <thiago.santos@intel.com>
215
316 [EFL][CMake] Move gtest sources to an upper level
122104

configure.ac

@@AC_ARG_ENABLE(web_timing,
957957 [],[enable_web_timing=$enable_unstable_features])
958958AC_MSG_RESULT([$enable_web_timing])
959959
 960# check whether to enable User Timing support
 961AC_MSG_CHECKING([whether to enable User Timing support])
 962AC_ARG_ENABLE(user_timing,
 963 AC_HELP_STRING([--enable-user-timing],
 964 [enable support for User Timing [default=no]]),
 965 [],[enable_user_timing="no"])
 966AC_MSG_RESULT([$enable_user_timing])
 967
960968# check whether to enable Blob support
961969AC_MSG_CHECKING([whether to enable Blob support])
962970AC_ARG_ENABLE(blob,

@@AM_CONDITIONAL([ENABLE_IFRAME_SEAMLESS],
14651473AM_CONDITIONAL([ENABLE_TEXT_AUTOSIZING],[test "$enable_text_autosizing" = "yes"])
14661474AM_CONDITIONAL([ENABLE_CSS_EXCLUSIONS],[test "$enable_css_exclusions" = "yes"])
14671475AM_CONDITIONAL([ENABLE_CSS_REGIONS],[test "$enable_css_regions" = "yes"])
 1476AM_CONDITIONAL([ENABLE_USER_TIMING],[test "$enable_user_timing" = "yes"])
14681477
14691478# Gtk conditionals
14701479AM_CONDITIONAL([ENABLE_INTROSPECTION],[test "$enable_introspection" = "yes"])

@@Features:
15741583 Web Timing support : $enable_web_timing
15751584 Web Workers support : $enable_workers
15761585 XSLT support : $enable_xslt
 1586 User Timing support : $enable_user_timing
15771587
15781588WebKit2 support:
15791589 WebKit2 support : $enable_webkit2
122099

Source/cmakeconfig.h.cmake

7979#cmakedefine01 ENABLE_TOUCH_EVENTS
8080#cmakedefine01 ENABLE_TOUCH_ICON_LOADING
8181#cmakedefine01 ENABLE_UNDO_MANAGER
 82#cmakedefine01 ENABLE_USER_TIMING
8283#cmakedefine01 ENABLE_VIBRATION
8384#cmakedefine01 ENABLE_VIDEO
8485#cmakedefine01 ENABLE_VIDEO_TRACK
122099

Source/JavaScriptCore/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for mac, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * Configurations/FeatureDefines.xcconfig:
 9
1102012-07-08 Ryosuke Niwa <rniwa@webkit.org>
211
312 gcc build fix after r121925.
122104

Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig

@@ENABLE_TEXT_AUTOSIZING = ;
122122ENABLE_TEXT_NOTIFICATIONS_ONLY = ENABLE_TEXT_NOTIFICATIONS_ONLY;
123123ENABLE_TOUCH_ICON_LOADING = ;
124124ENABLE_UNDO_MANAGER = ;
 125ENABLE_USER_TIMING = ;
125126ENABLE_VIDEO = ENABLE_VIDEO;
126127ENABLE_VIDEO_TRACK = $(ENABLE_VIDEO_TRACK_$(REAL_PLATFORM_NAME));
127128ENABLE_VIDEO_TRACK_macosx = ENABLE_VIDEO_TRACK;

@@ENABLE_WEB_TIMING = ;
132133ENABLE_WORKERS = ENABLE_WORKERS;
133134ENABLE_XSLT = ENABLE_XSLT;
134135
135 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
 136FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_USER_TIMING) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
122099

Source/WebCore/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 [User Timing] Implement User Timing interface
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5 This patch implements extensions to 'Performance' interface of User Timing with V8/JSC custom bindings. PerformanceMark interface and PerformanceMeasure interface will be implemented later.
 6 https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html
 7 Reviewed by NOBODY (OOPS!).
 8
 9 Test: fast/webperf/user-timing.html
 10
 11 * CMakeLists.txt:
 12 * Configurations/FeatureDefines.xcconfig:
 13 * GNUmakefile.am:
 14 * GNUmakefile.list.am:
 15 * Target.pri:
 16 * UseJSC.cmake:
 17 * WebCore.gypi:
 18 * WebCore.vcproj/WebCore.vcproj:
 19 * WebCore.xcodeproj/project.pbxproj:
 20 * bindings/js/JSPerformanceCustom.cpp: Added.
 21 (WebCore):
 22 (WebCore::convertMarksToJSArray):
 23 (WebCore::convertMeasuresToJSArray):
 24 (WebCore::convertMarksToJSDict):
 25 (WebCore::convertMeasuresToJSDict):
 26 (WebCore::JSPerformance::getMarks):
 27 (WebCore::JSPerformance::getMeasures):
 28 * bindings/v8/custom/V8PerformanceCustom.cpp:
 29 (WebCore):
 30 (WebCore::convertMarksToV8Array):
 31 (WebCore::convertMeasuresToV8Array):
 32 (WebCore::convertMarksToV8Dict):
 33 (WebCore::convertMeasuresToV8Dict):
 34 (WebCore::V8Performance::memoryAccessorGetter):
 35 (WebCore::V8Performance::getMarksCallback):
 36 (WebCore::V8Performance::getMeasuresCallback):
 37 * page/Performance.cpp:
 38 (WebCore):
 39 (WebCore::Performance::mark):
 40 (WebCore::Performance::getMarksImpl):
 41 (WebCore::Performance::clearMarks):
 42 (WebCore::Performance::measure):
 43 (WebCore::Performance::getMeasuresImpl):
 44 (WebCore::Performance::clearMeasures):
 45 (WebCore::Performance::Now):
 46 * page/Performance.h:
 47 (WebCore):
 48 (Performance):
 49 * page/Performance.idl:
 50 * page/PerformanceUserTiming.cpp: Added.
 51 (WebCore):
 52 (WebCore::UserTiming::UserTiming):
 53 (WebCore::UserTiming::mark):
 54 (WebCore::UserTiming::getMarks):
 55 (WebCore::UserTiming::clearMarks):
 56 (WebCore::UserTiming::lookUpRecentMarks):
 57 (WebCore::UserTiming::measure):
 58 (WebCore::UserTiming::getMeasures):
 59 (WebCore::UserTiming::clearMeasures):
 60 * page/PerformanceUserTiming.h: Added.
 61 (WebCore):
 62 (PerfTimeData):
 63 (UserTiming):
 64 (WebCore::UserTiming::create):
 65
1662012-07-09 Taiju Tsuiki <tzik@chromium.org>
267
368 Web Inspector: Add FileContentView for FileSystemView
122104

Source/WebCore/CMakeLists.txt

@@SET(WebCore_SOURCES
10931093 page/PerformanceNavigation.cpp
10941094 page/PerformanceResourceTiming.cpp
10951095 page/PerformanceTiming.cpp
 1096 page/PerformanceUserTiming.cpp
10961097 page/PrintContext.cpp
10971098 page/Screen.cpp
10981099 page/SecurityOrigin.cpp
122099

Source/WebCore/GNUmakefile.am

@@FEATURE_DEFINES += ENABLE_LINK_PREFETCH=
725725webcore_cppflags += -DENABLE_LINK_PREFETCH=1
726726endif # END ENABLE_LINK_PREFETCH
727727
 728# ---
 729# User Timing support
 730# ---
 731if ENABLE_USER_TIMING
 732FEATURE_DEFINES += ENABLE_USER_TIMING=1
 733webcore_cppflags += -DENABLE_USER_TIMING=1
 734endif # END ENABLE_USER_TIMING
 735
728736DerivedSources/WebCore/CSSPropertyNames.cpp: DerivedSources/WebCore/CSSPropertyNames.h
729737DerivedSources/WebCore/CSSPropertyNames.h: $(WEBCORE_CSS_PROPERTY_NAMES) $(WebCore)/css/makeprop.pl
730738 $(AM_V_GEN)
122099

Source/WebCore/GNUmakefile.list.am

@@webcore_sources += \
14881488 Source/WebCore/bindings/js/JSNodeFilterCustom.cpp \
14891489 Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp \
14901490 Source/WebCore/bindings/js/JSNodeListCustom.cpp \
 1491 Source/WebCore/bindings/js/JSPerformanceCustom.cpp \
14911492 Source/WebCore/bindings/js/JSPluginElementFunctions.cpp \
14921493 Source/WebCore/bindings/js/JSPluginElementFunctions.h \
14931494 Source/WebCore/bindings/js/JSPopStateEventCustom.cpp \

@@webcore_sources += \
30713072 Source/WebCore/page/PerformanceResourceTiming.h \
30723073 Source/WebCore/page/PerformanceTiming.cpp \
30733074 Source/WebCore/page/PerformanceTiming.h \
 3075 Source/WebCore/page/PerformanceUserTiming.cpp \
 3076 Source/WebCore/page/PerformanceUserTiming.h \
30743077 Source/WebCore/page/PointerLock.h \
30753078 Source/WebCore/page/PointerLockController.cpp \
30763079 Source/WebCore/page/PointerLockController.h \
122099

Source/WebCore/Target.pri

@@v8 {
340340 bindings/js/JSNodeIteratorCustom.cpp \
341341 bindings/js/JSNodeListCustom.cpp \
342342 bindings/js/JSNotificationCustom.cpp \
 343 bindings/js/JSPerformanceCustom.cpp \
343344 bindings/js/JSPluginElementFunctions.cpp \
344345 bindings/js/JSPopStateEventCustom.cpp \
345346 bindings/js/JSProcessingInstructionCustom.cpp \

@@SOURCES += \
10521053 page/PerformanceNavigation.cpp \
10531054 page/PerformanceResourceTiming.cpp \
10541055 page/PerformanceTiming.cpp \
 1056 page/PerformanceUserTiming.cpp \
10551057 page/PrintContext.cpp \
10561058 page/Screen.cpp \
10571059 page/scrolling/ScrollingCoordinator.cpp \
122099

Source/WebCore/UseJSC.cmake

@@LIST(APPEND WebCore_SOURCES
123123 bindings/js/JSNodeIteratorCustom.cpp
124124 bindings/js/JSNodeListCustom.cpp
125125 bindings/js/JSNotificationCustom.cpp
 126 bindings/js/JSPerformanceCustom.cpp
126127 bindings/js/JSPluginElementFunctions.cpp
127128 bindings/js/JSPopStateEventCustom.cpp
128129 bindings/js/JSProcessingInstructionCustom.cpp
122099

Source/WebCore/WebCore.gypi

245245 'page/PagePopupClient.h',
246246 'page/PageSerializer.h',
247247 'page/PageVisibilityState.h',
 248 'page/PerformanceUserTiming.h',
248249 'page/PrintContext.h',
249250 'page/SecurityOrigin.h',
250251 'page/SecurityOriginHash.h',

20392040 'bindings/js/JSNodeIteratorCustom.cpp',
20402041 'bindings/js/JSNodeListCustom.cpp',
20412042 'bindings/js/JSNotificationCustom.cpp',
 2043 'bindings/js/JSPerformanceCustom.cpp',
20422044 'bindings/js/JSPluginElementFunctions.cpp',
20432045 'bindings/js/JSPopStateEventCustom.cpp',
20442046 'bindings/js/JSProcessingInstructionCustom.cpp',

30833085 'page/PerformanceResourceTiming.h',
30843086 'page/PerformanceTiming.cpp',
30853087 'page/PerformanceTiming.h',
 3088 'page/PerformanceUserTiming.cpp',
 3089 'page/PerformanceUserTiming.h',
30863090 'page/PointerLock.cpp',
30873091 'page/PointerLock.h',
30883092 'page/PointerLockController.cpp',
122099

Source/WebCore/Configurations/FeatureDefines.xcconfig

@@ENABLE_TEXT_AUTOSIZING = ;
123123ENABLE_TEXT_NOTIFICATIONS_ONLY = ENABLE_TEXT_NOTIFICATIONS_ONLY;
124124ENABLE_TOUCH_ICON_LOADING = ;
125125ENABLE_UNDO_MANAGER = ;
 126ENABLE_USER_TIMING = ;
126127ENABLE_VIDEO = ENABLE_VIDEO;
127128ENABLE_VIDEO_TRACK = $(ENABLE_VIDEO_TRACK_$(REAL_PLATFORM_NAME));
128129ENABLE_VIDEO_TRACK_macosx = ENABLE_VIDEO_TRACK;

@@ENABLE_WEB_TIMING = ;
133134ENABLE_WORKERS = ENABLE_WORKERS;
134135ENABLE_XSLT = ENABLE_XSLT;
135136
136 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
 137FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_USER_TIMING) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
122099

Source/WebCore/WebCore.vcproj/WebCore.vcproj

2693526935 >
2693626936 </File>
2693726937 <File
 26938 RelativePath="..\page\PerformanceUserTiming.cpp"
 26939 >
 26940 </File>
 26941 <File
 26942 RelativePath="..\page\PerformanceUserTiming.h"
 26943 >
 26944 </File>
 26945 <File
2693826946 RelativePath="..\page\PrintContext.cpp"
2693926947 >
2694026948 </File>

6855868566 >
6855968567 <FileConfiguration
6856068568 Name="Debug|Win32"
 68569 ExcludedFromBuild="true"
 68570 >
 68571 <Tool
 68572 Name="VCCLCompilerTool"
 68573 />
 68574 </FileConfiguration>
 68575 <FileConfiguration
 68576 Name="Release|Win32"
 68577 ExcludedFromBuild="true"
 68578 >
 68579 <Tool
 68580 Name="VCCLCompilerTool"
 68581 />
 68582 </FileConfiguration>
 68583 <FileConfiguration
 68584 Name="Debug_Cairo_CFLite|Win32"
 68585 ExcludedFromBuild="true"
 68586 >
 68587 <Tool
 68588 Name="VCCLCompilerTool"
 68589 />
 68590 </FileConfiguration>
 68591 <FileConfiguration
 68592 Name="Release_Cairo_CFLite|Win32"
 68593 ExcludedFromBuild="true"
 68594 >
 68595 <Tool
 68596 Name="VCCLCompilerTool"
 68597 />
 68598 </FileConfiguration>
 68599 <FileConfiguration
 68600 Name="Debug_All|Win32"
 68601 ExcludedFromBuild="true"
 68602 >
 68603 <Tool
 68604 Name="VCCLCompilerTool"
 68605 />
 68606 </FileConfiguration>
 68607 <FileConfiguration
 68608 Name="Production|Win32"
 68609 ExcludedFromBuild="true"
 68610 >
 68611 <Tool
 68612 Name="VCCLCompilerTool"
 68613 />
 68614 </FileConfiguration>
 68615 </File>
 68616 <File
 68617 RelativePath="..\bindings\js\JSPerformanceCustom.cpp"
 68618 >
 68619 <FileConfiguration
 68620 Name="Debug|Win32"
6856168621 ExcludedFromBuild="true"
6856268622 >
6856368623 <Tool
122099

Source/WebCore/WebCore.xcodeproj/project.pbxproj

89228922 6ED878C3147493F4004C3597 /* RenderTableCaption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTableCaption.h; sourceTree = "<group>"; };
89238923 6EE8A77010F803F3005A4A24 /* JSWebGLContextAttributes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLContextAttributes.cpp; sourceTree = "<group>"; };
89248924 6EE8A77110F803F3005A4A24 /* JSWebGLContextAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLContextAttributes.h; sourceTree = "<group>"; };
 8925 701EB2F115AAA03C008DCD2E /* PerformanceUserTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceUserTiming.cpp; sourceTree = "<group>"; };
 8926 701EB2F315AAA0C4008DCD2E /* PerformanceUserTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceUserTiming.h; sourceTree = "<group>"; };
 8927 701EB2F415AAA1CE008DCD2E /* JSPerformanceCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformanceCustom.cpp; sourceTree = "<group>"; };
89258928 710867D51568644B00AA779B /* DOMSVGViewSpecInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGViewSpecInternal.h; sourceTree = "<group>"; };
89268929 7117445614BC34E200EE5FC8 /* SVGTextMetricsBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextMetricsBuilder.cpp; sourceTree = "<group>"; };
89278930 7117445714BC34E200EE5FC8 /* SVGTextMetricsBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextMetricsBuilder.h; sourceTree = "<group>"; };

1570715710 E1271A130EEEC80400F61213 /* WorkerNavigator.cpp */,
1570815711 E1271A0A0EEEC77A00F61213 /* WorkerNavigator.h */,
1570915712 E1271A510EEECD1C00F61213 /* WorkerNavigator.idl */,
 15713 701EB2F115AAA03C008DCD2E /* PerformanceUserTiming.cpp */,
 15714 701EB2F315AAA0C4008DCD2E /* PerformanceUserTiming.h */,
1571015715 );
1571115716 path = page;
1571215717 sourceTree = "<group>";

1998419989 E1A643F10EC0972500779668 /* WorkerScriptController.h */,
1998519990 F34742E61343635000531BC2 /* WorkerScriptDebugServer.cpp */,
1998619991 F34742E71343635000531BC2 /* WorkerScriptDebugServer.h */,
 19992 701EB2F415AAA1CE008DCD2E /* JSPerformanceCustom.cpp */,
1998719993 );
1998819994 path = js;
1998919995 sourceTree = "<group>";
122099

Source/WebCore/bindings/js/JSPerformanceCustom.cpp

 1/*
 2 * Copyright (C) 2012 Intel Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions are
 6 * met:
 7 *
 8 * * Redistributions of source code must retain the above copyright
 9 * notice, this list of conditions and the following disclaimer.
 10 * * Redistributions in binary form must reproduce the above
 11 * copyright notice, this list of conditions and the following disclaimer
 12 * in the documentation and/or other materials provided with the
 13 * distribution.
 14 * * Neither the name of Google Inc. nor the names of its
 15 * contributors may be used to endorse or promote products derived from
 16 * this software without specific prior written permission.
 17 *
 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 29 */
 30
 31#include "config.h"
 32#include "JSPerformance.h"
 33
 34#if ENABLE(WEB_TIMING)
 35
 36#include "Performance.h"
 37#include <runtime/JSArray.h>
 38#include <runtime/JSValue.h>
 39
 40using namespace JSC;
 41
 42namespace WebCore {
 43
 44static JSValue convertMarksToJSArray(Vector<PerfTimeData>* nativeArrayPtr, ExecState* exec)
 45{
 46 JSArray* jsArray = constructEmptyArray(exec);
 47
 48 if (!nativeArrayPtr)
 49 return jsArray;
 50
 51 for (size_t i = 0; i < nativeArrayPtr->size(); ++i)
 52 jsArray->putDirectIndex(exec, i, JSValue(nativeArrayPtr->at(i).start));
 53 return jsArray;
 54}
 55
 56static JSValue convertMeasuresToJSArray(Vector<PerfTimeData>* nativeArrayPtr, ExecState* exec)
 57{
 58 JSArray* jsArray = constructEmptyArray(exec);
 59
 60 if (!nativeArrayPtr)
 61 return jsArray;
 62
 63 for (size_t i = 0; i < nativeArrayPtr->size(); ++i)
 64 jsArray->putDirectIndex(exec, i, JSValue(nativeArrayPtr->at(i).duration));
 65
 66 return jsArray;
 67}
 68
 69static JSValue convertMarksToJSDict(PerfTimeMap* nativeMapPtr, ExecState* exec)
 70{
 71 PerfTimeMap::iterator it;
 72 JSObject* jsDict = constructEmptyObject(exec);
 73 for (it = nativeMapPtr->begin(); it != nativeMapPtr->end(); ++it) {
 74 if (!it->second.size())
 75 continue;
 76
 77 JSArray* marks = constructEmptyArray(exec);
 78 for (size_t j = 0; j < it->second.size(); ++j)
 79 marks->putDirectIndex(exec, j, JSValue(it->second[j].start));
 80
 81 jsDict->putDirect(exec->globalData(), Identifier(exec, reinterpret_cast<const uint16_t*>(it->first.charactersWithNullTermination())), JSValue(marks));
 82 }
 83
 84 return jsDict;
 85}
 86
 87static JSValue convertMeasuresToJSDict(PerfTimeMap* nativeMapPtr, ExecState* exec)
 88{
 89 PerfTimeMap::iterator it;
 90 JSObject* jsDict = constructEmptyObject(exec);
 91 for (it = nativeMapPtr->begin(); it != nativeMapPtr->end(); ++it) {
 92 if (!it->second.size())
 93 continue;
 94
 95 JSArray* measures = constructEmptyArray(exec);
 96 for (size_t j = 0; j < it->second.size(); ++j)
 97 measures->putDirectIndex(exec, j, JSValue(it->second[j].duration));
 98
 99 jsDict->putDirect(exec->globalData(), Identifier(exec, reinterpret_cast<const uint16_t*>(it->first.charactersWithNullTermination())), JSValue(measures));
 100 }
 101
 102 return jsDict;
 103}
 104
 105JSValue JSPerformance::getMarks(ExecState* exec)
 106{
 107 if (exec->argumentCount() <= 0) {
 108 HashMap<String, Vector<PerfTimeData> > *marksMap = 0;
 109 marksMap = impl()->getMarksImpl();
 110 return convertMarksToJSDict(marksMap, exec);
 111 }
 112
 113 Vector<PerfTimeData> *marksArray = 0;
 114 const String& markName(ustringToString(MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined).isEmpty() ? UString() : MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined).toString(exec)->value(exec)));
 115 if (exec->hadException())
 116 return jsUndefined();
 117 marksArray = impl()->getMarksImpl(markName);
 118 JSValue v = convertMarksToJSArray(marksArray, exec);
 119 return v;
 120}
 121
 122JSValue JSPerformance::getMeasures(ExecState* exec)
 123{
 124 if (exec->argumentCount() <= 0) {
 125 HashMap<String, Vector<PerfTimeData> > *measuresMap = 0;
 126 measuresMap = impl()->getMeasuresImpl();
 127 return convertMeasuresToJSDict(measuresMap, exec);
 128 }
 129
 130 Vector<PerfTimeData> *measuresArray = 0;
 131 const String& measureName(ustringToString(MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined).isEmpty() ? UString() : MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined).toString(exec)->value(exec)));
 132 if (exec->hadException())
 133 return jsUndefined();
 134 measuresArray = impl()->getMeasuresImpl(measureName);
 135 return convertMeasuresToJSArray(measuresArray, exec);
 136}
 137
 138} // namespace WebCore
 139
 140#endif // ENABLE(WEB_TIMING)
0

Source/WebCore/bindings/v8/custom/V8PerformanceCustom.cpp

11/*
22 * Copyright (C) 2010 Google Inc. All rights reserved.
 3 * Copyright (C) 2012 Intel Inc. All rights reserved.
34 *
45 * Redistribution and use in source and binary forms, with or without
56 * modification, are permitted provided that the following conditions are

4142
4243namespace WebCore {
4344
 45static v8::Handle<v8::Value> convertMarksToV8Array(Vector<PerfTimeData>* nativeArrayPtr)
 46{
 47 v8::Local<v8::Array> v8Array = v8::Array::New();
 48 if (!nativeArrayPtr)
 49 return v8Array;
 50
 51 for (size_t i = 0; i < nativeArrayPtr->size(); ++i)
 52 v8Array->Set(i, v8::Number::New(nativeArrayPtr->at(i).start));
 53
 54 return v8Array;
 55}
 56
 57static v8::Handle<v8::Value> convertMeasuresToV8Array(Vector<PerfTimeData>* nativeArrayPtr)
 58{
 59 v8::Local<v8::Array> v8Array = v8::Array::New();
 60 if (!nativeArrayPtr)
 61 return v8Array;
 62
 63 for (size_t i = 0; i < nativeArrayPtr->size(); ++i)
 64 v8Array->Set(i, v8::Number::New(nativeArrayPtr->at(i).duration));
 65
 66 return v8Array;
 67}
 68
 69static v8::Handle<v8::Value> convertMarksToV8Dict(PerfTimeMap* nativeMapPtr)
 70{
 71 PerfTimeMap::iterator it;
 72 v8::Local<v8::Object> v8Dict = v8::Object::New();
 73 for (it = nativeMapPtr->begin(); it != nativeMapPtr->end(); ++it) {
 74 if (!it->second.size())
 75 continue;
 76
 77 v8::Local<v8::Array> measures = v8::Array::New();
 78 for (size_t j = 0; j < it->second.size(); ++j)
 79 measures->Set(v8::Number::New(j), v8::Number::New(it->second[j].start));
 80
 81 v8Dict->Set(v8::String::New(reinterpret_cast<const uint16_t*>(it->first.charactersWithNullTermination())), measures);
 82 }
 83
 84 return v8Dict;
 85}
 86
 87static v8::Handle<v8::Value> convertMeasuresToV8Dict(PerfTimeMap* nativeMapPtr)
 88{
 89 PerfTimeMap::iterator it;
 90 v8::Local<v8::Object> v8Dict = v8::Object::New();
 91
 92 for (it = nativeMapPtr->begin(); it != nativeMapPtr->end(); ++it) {
 93 if (!it->second.size())
 94 continue;
 95
 96 v8::Local<v8::Array> measures = v8::Array::New();
 97 for (size_t j = 0; j < it->second.size(); ++j)
 98 measures->Set(v8::Number::New(j), v8::Number::New(it->second[j].duration));
 99
 100 v8Dict->Set(v8::String::New(reinterpret_cast<const uint16_t*>(it->first.charactersWithNullTermination())), measures);
 101 }
 102
 103 return v8Dict;
 104}
 105
44106v8::Handle<v8::Value> V8Performance::memoryAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
45107{
46108 INC_STATS("DOM.Performance.memoryAccessorGetter");

@@v8::Handle<v8::Value> V8Performance::mem
48110 return toV8(imp->memory(), info.GetIsolate());
49111}
50112
 113v8::Handle<v8::Value> V8Performance::getMarksCallback(const v8::Arguments& args)
 114{
 115 INC_STATS("DOM.Performance.getMarks()");
 116 Performance* imp = V8Performance::toNative(args.Holder());
 117
 118 if (args.Length() <= 0) {
 119 HashMap<String, Vector<PerfTimeData> > *marksMap = 0;
 120 marksMap = imp->getMarksImpl();
 121 return convertMarksToV8Dict(marksMap);
 122 }
 123 Vector<PerfTimeData> *marksArray = 0;
 124 STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, markName, MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined));
 125 marksArray = imp->getMarksImpl(markName);
 126 return convertMarksToV8Array(marksArray);
 127}
 128
 129v8::Handle<v8::Value> V8Performance::getMeasuresCallback(const v8::Arguments& args)
 130{
 131 INC_STATS("DOM.Performance.getMeasures()");
 132 Performance* imp = V8Performance::toNative(args.Holder());
 133
 134 if (args.Length() <= 0) {
 135 HashMap<String, Vector<PerfTimeData> > *measuresMap = 0;
 136 measuresMap = imp->getMeasuresImpl();
 137 return convertMeasuresToV8Dict(measuresMap);
 138 }
 139
 140 Vector<PerfTimeData> *measuresArray = 0;
 141 STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, measureName, MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined));
 142 measuresArray = imp->getMeasuresImpl(measureName);
 143 return convertMeasuresToV8Array(measuresArray);
 144}
 145
51146} // namespace WebCore
52147
53148#endif // ENABLE(WEB_TIMING)
122099

Source/WebCore/page/Performance.cpp

11/*
22 * Copyright (C) 2010 Google Inc. All rights reserved.
 3 * Copyright (C) 2012 Intel Inc. All rights reserved.
34 *
45 * Redistribution and use in source and binary forms, with or without
56 * modification, are permitted provided that the following conditions are

@@EventTargetData* Performance::ensureEven
165166 return &m_eventTargetData;
166167}
167168
 169#if ENABLE(USER_TIMING)
 170void Performance::mark(const String& markName, ExceptionCode& ec)
 171{
 172 ec = 0;
 173 if (!m_userTiming)
 174 m_userTiming = UserTiming::create();
 175 m_userTiming->mark(markName, ec, this);
 176
 177}
 178
 179Vector<PerfTimeData>* Performance::getMarksImpl(const String& markName) const
 180{
 181 if (!m_userTiming)
 182 m_userTiming = UserTiming::create();
 183 return m_userTiming->getMarks(markName);
 184}
 185
 186PerfTimeMap* Performance::getMarksImpl() const
 187{
 188 if (!m_userTiming)
 189 m_userTiming = UserTiming::create();
 190 return m_userTiming->getMarks();
 191}
 192
 193void Performance::clearMarks(const String& markName)
 194{
 195 if (!m_userTiming)
 196 m_userTiming = UserTiming::create();
 197 m_userTiming->clearMarks(markName);
 198}
 199
 200void Performance::measure(const String& measureName, const String& startMark, const String& endMark, ExceptionCode& ec)
 201{
 202 ec = 0;
 203 if (!m_userTiming)
 204 m_userTiming = UserTiming::create();
 205 if (!m_timing)
 206 m_timing = PerformanceTiming::create(m_frame);
 207
 208 m_userTiming->measure(measureName, startMark, endMark, ec, this);
 209 return;
 210}
 211
 212Vector<PerfTimeData>* Performance::getMeasuresImpl(const String& measureName) const
 213{
 214 if (!m_userTiming)
 215 m_userTiming = UserTiming::create();
 216 return m_userTiming->getMeasures(measureName);
 217}
 218
 219PerfTimeMap* Performance::getMeasuresImpl() const
 220{
 221 if (!m_userTiming)
 222 m_userTiming = UserTiming::create();
 223 return m_userTiming->getMeasures();
 224}
 225
 226void Performance::clearMeasures(const String& measureName)
 227{
 228 if (!m_userTiming)
 229 m_userTiming = UserTiming::create();
 230 m_userTiming->clearMeasures(measureName);
 231 return;
 232}
 233
 234double Performance::Now() const
 235{
 236 return webkitNow();
 237}
 238
 239#endif // ENABLE(USER_TIMING)
 240
168241double Performance::webkitNow() const
169242{
170243 return 1000.0 * m_frame->document()->loader()->timing()->convertMonotonicTimeToZeroBasedDocumentTime(monotonicallyIncreasingTime());
122099

Source/WebCore/page/Performance.h

11/*
22 * Copyright (C) 2010 Google Inc. All rights reserved.
 3 * Copyright (C) 2012 Intel Inc. All rights reserved.
34 *
45 * Redistribution and use in source and binary forms, with or without
56 * modification, are permitted provided that the following conditions are

3940#include "PerformanceEntryList.h"
4041#include "PerformanceNavigation.h"
4142#include "PerformanceTiming.h"
 43#include "PerformanceUserTiming.h"
 44#include <wtf/HashMap.h>
4245#include <wtf/PassRefPtr.h>
4346#include <wtf/RefCounted.h>
4447#include <wtf/RefPtr.h>

4649
4750namespace WebCore {
4851
 52typedef int ExceptionCode;
 53struct PerfTimeData;
 54typedef HashMap<String, Vector<PerfTimeData> > PerfTimeMap;
4955class Document;
5056class ResourceRequest;
5157class ResourceResponse;
 58class UserTiming;
5259
5360class Performance : public RefCounted<Performance>, public DOMWindowProperty, public EventTarget {
5461public:

@@public:
8188 using RefCounted<Performance>::ref;
8289 using RefCounted<Performance>::deref;
8390
 91#if ENABLE(USER_TIMING)
 92 double Now() const;
 93
 94 void mark(const String& markName, ExceptionCode&);
 95 Vector<PerfTimeData>* getMarksImpl(const String& markName) const;
 96 PerfTimeMap* getMarksImpl() const;
 97 void clearMarks(const String& markName);
 98
 99 void measure(const String& measureName, const String& startMark, const String& endMark, ExceptionCode&);
 100 Vector<PerfTimeData>* getMeasuresImpl(const String& measureName) const;
 101 PerfTimeMap* getMeasuresImpl() const;
 102 void clearMeasures(const String& measureName);
 103#endif // ENABLE(USER_TIMING)
 104
84105private:
85106 explicit Performance(Frame*);
86107

@@private:
97118#if ENABLE(RESOURCE_TIMING)
98119 Vector<RefPtr<PerformanceEntry> > m_resourceTimingBuffer;
99120#endif
 121
 122#if ENABLE(USER_TIMING)
 123 mutable RefPtr<UserTiming> m_userTiming;
 124#endif // ENABLE(USER_TIMING)
100125};
101126
102127}
122099

Source/WebCore/page/Performance.idl

11/*
22 * Copyright (C) 2010 Google Inc. All rights reserved.
 3 * Copyright (C) 2012 Intel Inc. All rights reserved.
34 *
45 * Redistribution and use in source and binary forms, with or without
56 * modification, are permitted provided that the following conditions are

@@module window {
5455#endif
5556 // See http://www.w3.org/TR/hr-time/ for details.
5657 double webkitNow();
 58
 59 // See https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html
 60#if defined(ENABLE_USER_TIMING) && ENABLE_USER_TIMING
 61 void mark(in DOMString markName)
 62 raises(DOMException);
 63 [Custom] Array getMarks(in [Optional] DOMString markName);
 64 void clearMarks(in [Optional=DefaultIsNullString] DOMString markName);
 65
 66 void measure(in DOMString measureName, in [Optional=DefaultIsNullString] DOMString startMark, in [Optional=DefaultIsNullString] DOMString endMark)
 67 raises(DOMException);
 68 [Custom] Array getMeasures(in [Optional=DefaultIsNullString] DOMString measureName);
 69 void clearMeasures(in [Optional=DefaultIsNullString] DOMString measureName);
 70#endif
5771 };
5872
5973}
122099

Source/WebCore/page/PerformanceUserTiming.cpp

 1/*
 2 * Copyright (C) 2012 Intel Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * 1. Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * 2. Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26
 27#include "config.h"
 28#include "PerformanceUserTiming.h"
 29
 30#if ENABLE(USER_TIMING)
 31
 32#include "Performance.h"
 33#include <wtf/text/CString.h>
 34#include <wtf/text/WTFString.h>
 35
 36namespace WebCore {
 37
 38UserTiming::UserTiming()
 39{
 40 static const struct restrictive_field {
 41 String key;
 42 bool active;
 43 } default_restrictions[] = {
 44 {"navigationStart", true},
 45 {"unloadEventStart", true},
 46 {"unloadEventEnd", true},
 47 {"redirectStart", true},
 48 {"redirectEnd", true},
 49 {"fetchStart", true},
 50 {"domainLookupStart", true},
 51 {"domainLookupEnd", true},
 52 {"connectStart", true},
 53 {"connectEnd", true},
 54 {"secureConnectionStart", true},
 55 {"requestStart", true},
 56 {"responseStart", true},
 57 {"responseEnd", true},
 58 {"domLoading", true},
 59 {"domInteractive", true},
 60 {"domContentLoadedEventStart", true},
 61 {"domContentLoadedEventEnd", true},
 62 {"domComplete", true},
 63 {"loadEventStart", true},
 64 {"loadEventEnd", true}
 65 };
 66
 67 for (const struct restrictive_field* restriction = default_restrictions;
 68 restriction-default_restrictions <
 69 (int)(sizeof(default_restrictions) / sizeof(struct restrictive_field));
 70 ++restriction) {
 71 m_restrictiveKeyMap.add(restriction->key, restriction->active);
 72 }
 73}
 74
 75void UserTiming::mark(const String& markName, ExceptionCode& ec, Performance* performance)
 76{
 77 ec = 0;
 78 if (m_restrictiveKeyMap.contains(markName)
 79 && m_restrictiveKeyMap.get(markName)) {
 80 ec = SYNTAX_ERR;
 81 return;
 82 }
 83 typedef PerfTimeMap::iterator Iterator;
 84 Iterator it = m_marksMap.find(markName);
 85 PerfTimeData ptd;
 86 ptd.start = performance->Now();
 87 ptd.duration = 0;
 88
 89 if (it != m_marksMap.end())
 90 it->second.append(ptd);
 91 else {
 92 Vector<PerfTimeData> v(1);
 93 v[0] = ptd;
 94 m_marksMap.set(markName, v);
 95 }
 96}
 97
 98PerfTimeMap* UserTiming::getMarks()
 99{
 100 return &m_marksMap;
 101}
 102
 103Vector<PerfTimeData>* UserTiming::getMarks(const String& markName)
 104{
 105 typedef PerfTimeMap::iterator Iterator;
 106 Iterator it = m_marksMap.find(markName);
 107 if (it != m_marksMap.end())
 108 return &(it->second);
 109 return 0;
 110}
 111
 112void UserTiming::clearMarks(const String& markName)
 113{
 114 if (markName.isNull()) {
 115 m_marksMap.clear();
 116 return;
 117 }
 118 if (m_marksMap.contains(markName))
 119 m_marksMap.remove(markName);
 120 return;
 121}
 122
 123double UserTiming::lookUpRecentMarks(const String& mark, ExceptionCode& ec, PerformanceTiming* navTiming)
 124{
 125 ec = 0;
 126 double ret = 0.0;
 127 String markName = mark;
 128
 129 if (m_marksMap.contains(markName))
 130 return m_marksMap.get(markName).last().start;
 131
 132 if (m_restrictiveKeyMap.contains(markName)) {
 133 if (!strcmp(markName.ascii().data(), "navigationStart"))
 134 return 0.0;
 135 if (!strcmp(markName.ascii().data(), "unloadEventStart"))
 136 return static_cast<double>(navTiming->unloadEventStart() - navTiming->navigationStart());
 137 if (!strcmp(markName.ascii().data(), "unloadEventEnd"))
 138 return static_cast<double>(navTiming->unloadEventEnd() - navTiming->navigationStart());
 139 if (!strcmp(markName.ascii().data(), "redirectStart"))
 140 return static_cast<double>(navTiming->redirectStart() - navTiming->navigationStart());
 141 if (!strcmp(markName.ascii().data(), "redirectEnd"))
 142 return static_cast<double>(navTiming->redirectEnd() - navTiming->navigationStart());
 143 if (!strcmp(markName.ascii().data(), "fetchStart"))
 144 return static_cast<double>(navTiming->fetchStart() - navTiming->navigationStart());
 145 if (!strcmp(markName.ascii().data(), "domainLookupStart"))
 146 return static_cast<double>(navTiming->domainLookupStart() - navTiming->navigationStart());
 147 if (!strcmp(markName.ascii().data(), "domainLookupEnd"))
 148 return static_cast<double>(navTiming->domainLookupEnd() - navTiming->navigationStart());
 149 if (!strcmp(markName.ascii().data(), "connectStart"))
 150 return static_cast<double>(navTiming->connectStart() - navTiming->navigationStart());
 151 if (!strcmp(markName.ascii().data(), "connectEnd"))
 152 return static_cast<double>(navTiming->connectEnd() - navTiming->navigationStart());
 153 if (!strcmp(markName.ascii().data(), "secureConnectionStart"))
 154 return static_cast<double>(navTiming->secureConnectionStart() - navTiming->navigationStart());
 155 if (!strcmp(markName.ascii().data(), "requestStart"))
 156 return static_cast<double>(navTiming->requestStart() - navTiming->navigationStart());
 157 if (!strcmp(markName.ascii().data(), "responseStart"))
 158 return static_cast<double>(navTiming->responseStart() - navTiming->navigationStart());
 159 if (!strcmp(markName.ascii().data(), "responseEnd"))
 160 return static_cast<double>(navTiming->responseEnd() - navTiming->navigationStart());
 161 if (!strcmp(markName.ascii().data(), "domLoading"))
 162 return static_cast<double>(navTiming->domLoading() - navTiming->navigationStart());
 163 if (!strcmp(markName.ascii().data(), "domInteractive"))
 164 return static_cast<double>(navTiming->domInteractive() - navTiming->navigationStart());
 165 if (!strcmp(markName.ascii().data(), "domContentLoadedEventStart"))
 166 return static_cast<double>(navTiming->domContentLoadedEventStart() - navTiming->navigationStart());
 167 if (!strcmp(markName.ascii().data(), "domContentLoadedEventEnd"))
 168 return static_cast<double>(navTiming->domContentLoadedEventEnd() - navTiming->navigationStart());
 169 if (!strcmp(markName.ascii().data(), "domComplete"))
 170 return static_cast<double>(navTiming->domComplete() - navTiming->navigationStart());
 171 if (!strcmp(markName.ascii().data(), "loadEventStart"))
 172 return static_cast<double>(navTiming->loadEventStart() - navTiming->navigationStart());
 173 if (!strcmp(markName.ascii().data(), "loadEventEnd"))
 174 return static_cast<double>(navTiming->loadEventEnd() - navTiming->navigationStart());
 175 }
 176
 177 // markName not exist
 178 ec = SYNTAX_ERR;
 179 return ret;
 180}
 181
 182void UserTiming::measure(const String& measureName, const String& startMark, const String& endMark, ExceptionCode& ec, Performance* performance)
 183{
 184 double startTime = 0.0;
 185 double endTime = 0.0;
 186 if (startMark.isNull()) {
 187 endTime = performance->Now();
 188 goto measure;
 189 }
 190
 191 if (endMark.isNull()) {
 192 endTime = performance->Now();
 193 startTime = lookUpRecentMarks(startMark, ec, performance->timing());
 194 goto measure;
 195
 196 }
 197
 198 endTime = lookUpRecentMarks(endMark, ec, performance->timing());
 199 if (ec)
 200 return;
 201 startTime = lookUpRecentMarks(startMark, ec, performance->timing());
 202
 203 goto measure;
 204
 205measure:
 206 if (ec)
 207 return;
 208
 209 typedef PerfTimeMap::iterator Iterator;
 210 PerfTimeData ptd;
 211 ptd.start = startTime;
 212 ptd.duration = endTime - startTime;
 213 Iterator it = m_measuresMap.find(measureName);
 214
 215 if (it != m_measuresMap.end())
 216 it->second.append(ptd);
 217 else {
 218 Vector<PerfTimeData> v(1);
 219 v[0] = ptd;
 220 m_measuresMap.set(measureName, v);
 221 }
 222 return;
 223}
 224
 225PerfTimeMap* UserTiming::getMeasures()
 226{
 227 return &m_measuresMap;
 228}
 229
 230Vector<PerfTimeData>* UserTiming::getMeasures(const String& measureName)
 231{
 232 typedef PerfTimeMap::iterator Iterator;
 233 Iterator it = m_measuresMap.find(measureName);
 234 if (it != m_measuresMap.end())
 235 return &(it->second);
 236 return 0;
 237}
 238
 239void UserTiming::clearMeasures(const String& measureName)
 240{
 241 if (measureName.isNull()) {
 242 m_measuresMap.clear();
 243 return;
 244 }
 245 if (m_measuresMap.contains(measureName))
 246 m_measuresMap.remove(measureName);
 247 return;
 248}
 249
 250} // namespace WebCore
 251
 252#endif // ENABLE(USER_TIMING)
0

Source/WebCore/page/PerformanceUserTiming.h

 1/*
 2 * Copyright (C) 2012 Intel Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * 1. Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * 2. Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26#ifndef PerformanceUserTiming_h
 27#define PerformanceUserTiming_h
 28
 29#if ENABLE(USER_TIMING)
 30
 31#include "EventException.h"
 32#include "Performance.h"
 33#include "PerformanceTiming.h"
 34#include "PlatformString.h"
 35#include <wtf/HashMap.h>
 36#include <wtf/PassRefPtr.h>
 37#include <wtf/RefCounted.h>
 38#include <wtf/text/StringHash.h>
 39#include <wtf/text/WTFString.h>
 40
 41namespace WebCore {
 42
 43class Performance;
 44
 45typedef int ExceptionCode;
 46typedef HashMap<String, bool> RestrictiveKeyMap;
 47
 48typedef struct PerfTimeData {
 49 double start;
 50 double duration;
 51} PerfTimeData;
 52
 53typedef HashMap<String, Vector<double> > TimingsMap;
 54typedef HashMap<String, Vector<PerfTimeData> > PerfTimeMap;
 55
 56class UserTiming : public RefCounted<UserTiming> {
 57public:
 58 static PassRefPtr<UserTiming> create() { return adoptRef(new UserTiming()); }
 59 void mark(const String& markName, ExceptionCode&, Performance*);
 60 PerfTimeMap* getMarks();
 61 Vector<PerfTimeData>* getMarks(const String& markName);
 62 void clearMarks(const String& markName);
 63
 64 void measure(const String& measureName, const String& startMark, const String& endMark, ExceptionCode&, Performance*);
 65 PerfTimeMap* getMeasures();
 66 Vector<PerfTimeData>* getMeasures(const String& measureName);
 67 void clearMeasures(const String& measureName);
 68
 69private:
 70 explicit UserTiming();
 71 double lookUpRecentMarks(const String& markName, ExceptionCode&, PerformanceTiming* navTiming);
 72
 73 RestrictiveKeyMap m_restrictiveKeyMap;
 74 PerfTimeMap m_marksMap;
 75 PerfTimeMap m_measuresMap;
 76};
 77
 78}
 79
 80#endif // ENABLE(USER_TIMING)
 81
 82#endif // !defined(PerformanceUserTiming_h)
0

Source/WebKit2/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for webkit2 mac, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * Configurations/FeatureDefines.xcconfig:
 9
1102012-07-09 Dan Bernstein <mitz@apple.com>
211
312 Fix the Mac build when codesign_allocate is not installed at /usr/bin.
122104

Source/WebKit2/Configurations/FeatureDefines.xcconfig

@@ENABLE_TEXT_AUTOSIZING = ;
123123ENABLE_TEXT_NOTIFICATIONS_ONLY = ENABLE_TEXT_NOTIFICATIONS_ONLY;
124124ENABLE_TOUCH_ICON_LOADING = ;
125125ENABLE_UNDO_MANAGER = ;
 126ENABLE_USER_TIMING = ;
126127ENABLE_VIDEO = ENABLE_VIDEO;
127128ENABLE_VIDEO_TRACK = $(ENABLE_VIDEO_TRACK_$(REAL_PLATFORM_NAME));
128129ENABLE_VIDEO_TRACK_macosx = ENABLE_VIDEO_TRACK;

@@ENABLE_WEB_TIMING = ;
133134ENABLE_WORKERS = ENABLE_WORKERS;
134135ENABLE_XSLT = ENABLE_XSLT;
135136
136 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
 137FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_USER_TIMING) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
122099

Source/WebKit/blackberry/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for BlackBerry, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * WebCoreSupport/AboutDataEnableFeatures.in:
 9
1102012-07-07 George Staikos <staikos@webkit.org>
211
312 Detach animation clients properly if we clear the web page pointer.
122104

Source/WebKit/blackberry/WebCoreSupport/AboutDataEnableFeatures.in

@@THREADING_OPENMP
141141THREADING_SCROLLING
142142TOUCH_EVENTS
143143TOUCH_ICON_LOADING
 144USER_TIMING
144145VALUE_PROFILER
145146VERBOSE_VALUE_PROFILE
146147VIBRATION
122099

Source/WebKit/chromium/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for chromium, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * features.gypi:
 9
1102012-07-09 MORITA Hajime <morrita@google.com>
211
312 [Chromium] ContextFeaturesClient::isEnabled is slow
122104

Source/WebKit/chromium/features.gypi

9696 'ENABLE_TOUCH_ADJUSTMENT=1',
9797 'ENABLE_TOUCH_EVENTS=<(enable_touch_events)',
9898 'ENABLE_TOUCH_ICON_LOADING=<(enable_touch_icon_loading)',
 99 'ENABLE_USER_TIMING=<(enable_user_timing)',
99100 'ENABLE_V8_SCRIPT_DEBUG_SERVER=1',
100101 'ENABLE_VIDEO=1',
101102 'ENABLE_VIDEO_TRACK=1',

124125 'use_accelerated_compositing%': 1,
125126 'enable_skia_text%': 1,
126127 'enable_svg%': 1,
 128 'enable_user_timing%': 1,
127129 'enable_touch_events%': 1,
128130 'enable_touch_icon_loading%' : 0,
129131 'enable_mutation_observers%': 1,
122099

Source/WebKit/mac/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for mac, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * Configurations/FeatureDefines.xcconfig:
 9
1102012-07-04 John Mellor <johnme@chromium.org>
211
312 Text Autosizing: Add compile flag and runtime setting
122104

Source/WebKit/mac/Configurations/FeatureDefines.xcconfig

@@ENABLE_TEXT_AUTOSIZING = ;
123123ENABLE_TEXT_NOTIFICATIONS_ONLY = ENABLE_TEXT_NOTIFICATIONS_ONLY;
124124ENABLE_TOUCH_ICON_LOADING = ;
125125ENABLE_UNDO_MANAGER = ;
 126ENABLE_USER_TIMING = ;
126127ENABLE_VIDEO = ENABLE_VIDEO;
127128ENABLE_VIDEO_TRACK = $(ENABLE_VIDEO_TRACK_$(REAL_PLATFORM_NAME));
128129ENABLE_VIDEO_TRACK_macosx = ENABLE_VIDEO_TRACK;

@@ENABLE_WEB_TIMING = ;
133134ENABLE_WORKERS = ENABLE_WORKERS;
134135ENABLE_XSLT = ENABLE_XSLT;
135136
136 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
 137FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS3_FLEXBOX) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_VARIABLES) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_TAG) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_QUOTA) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_USER_TIMING) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XSLT);
122099

Source/cmake/OptionsBlackBerry.cmake

@@WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_
166166WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SMOOTH_SCROLLING ON)
167167WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_STYLE_SCOPED ON)
168168WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS ON)
 169WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_TIMING ON)
169170WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIBRATION ON)
170171WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO ON)
171172WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_TIMING ON)
122099

Source/cmake/OptionsEfl.cmake

@@WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_
9696WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SHADOW_DOM ON)
9797WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SHARED_WORKERS ON)
9898WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS ON)
 99WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_TIMING ON)
99100WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIBRATION ON)
100101WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO ON)
101102WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_TRACK ON)
122099

Source/cmake/WebKitFeatures.cmake

@@MACRO (WEBKIT_OPTION_BEGIN)
9393 WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_EVENTS "Toggle Touch Events support" OFF)
9494 WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_ICON_LOADING "Toggle Touch Icon Loading Support" OFF)
9595 WEBKIT_OPTION_DEFINE(ENABLE_UNDO_MANAGER "Toggle Undo Manager support" OFF)
 96 WEBKIT_OPTION_DEFINE(ENABLE_USER_TIMING "Toggle User Timing support" OFF)
9697 WEBKIT_OPTION_DEFINE(ENABLE_VIBRATION "Toggle Vibration API support" OFF)
9798 WEBKIT_OPTION_DEFINE(ENABLE_VIDEO "Toggle Video support" OFF)
9899 WEBKIT_OPTION_DEFINE(ENABLE_VIDEO_TRACK "Toggle Track support for HTML5 video" OFF)
122099

Tools/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for Gtk and Qt platform, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!)
 7
 8 * Scripts/webkitperl/FeatureList.pm:
 9 * qmake/mkspecs/features/features.pri:
 10
1112012-07-08 Kent Tamura <tkent@chromium.org>
212
313 Unreviewed, rolling out r122076.
122104

Tools/Scripts/webkitperl/FeatureList.pm

@@my @features = (
389389
390390 { option => "xslt", desc => "Toggle XSLT support",
391391 define => "ENABLE_XSLT", default => 1, value => \$xsltSupport },
 392
 393 { option => "user-timing", desc => "Toggle User Timing support",
 394 define => "ENABLE_USER_TIMING", default => (isBlackBerry() || isGtk() || isEfl()), value => \$webTimingSupport },
392395);
393396
394397sub getFeatureOptionList()
122099

Tools/qmake/mkspecs/features/features.pri

@@FEATURE_DEFAULTS = \
9696 ENABLE_TOUCH_EVENTS=1 \
9797 ENABLE_TOUCH_ICON_LOADING=0 \
9898 ENABLE_UNDO_MANAGER=0 \
 99 ENABLE_USER_TIMING=1 \
99100 ENABLE_VIBRATION=0 \
100101 ENABLE_VIDEO=0 \
101102 ENABLE_VIDEO_TRACK=0 \
122099

WebKitLibraries/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 Enable User Timing interface for win platform, currently the extensions of 'Performance' is available.
 4 https://bugs.webkit.org/show_bug.cgi?id=84893
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * win/tools/vsprops/FeatureDefines.vsprops:
 9 * win/tools/vsprops/FeatureDefinesCairo.vsprops:
 10
1112012-07-04 John Mellor <johnme@chromium.org>
212
313 Text Autosizing: Add compile flag and runtime setting
122099

WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops

327327 PerformEnvironmentSet="true"
328328 />
329329 <UserMacro
 330 Name="ENABLE_USER_TIMING"
 331 Value=""
 332 PerformEnvironmentSet="true"
 333 />
 334 <UserMacro
330335 Name="ENABLE_VIDEO"
331336 Value="ENABLE_VIDEO"
332337 PerformEnvironmentSet="true"
122099

WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops

327327 PerformEnvironmentSet="true"
328328 />
329329 <UserMacro
 330 Name="ENABLE_USER_TIMING"
 331 Value=""
 332 PerformEnvironmentSet="true"
 333 />
 334 <UserMacro
330335 Name="ENABLE_VIDEO"
331336 Value=""
332337 PerformEnvironmentSet="true"
122099

LayoutTests/ChangeLog

 12012-07-09 Pan Deng <pan.deng@intel.com>
 2
 3 User Timing Bug Entry, https://bugs.webkit.org/show_bug.cgi?id=84893
 4 This patch contains test cases for User Timing interface, currently cover the extensions of 'Performance' interface.
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * fast/webperf: Added.
 9 * fast/webperf/user-timing-expected.txt: Added.
 10 * fast/webperf/user-timing.html: Added.
 11
1122012-07-09 Zan Dobersek <zandobersek@gmail.com>
213
314 Unreviewed, unskipping CSS Exclusions tests for the Gtk port.
122099

LayoutTests/fast/webperf/user-timing-expected.txt

 1This tests API of W3C UserTiming Spec.
 2
 3On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 4
 5
 6PASS testMarkWOMarkName() == 'TypeError' is true
 7PASS testMark('navigationStart') == 'SYNTAX_ERR' is true
 8PASS testMark('unloadEventStart') == 'SYNTAX_ERR' is true
 9PASS testMark('unloadEventEnd') == 'SYNTAX_ERR' is true
 10PASS testMark('redirectStart') == 'SYNTAX_ERR' is true
 11PASS testMark('redirectEnd') == 'SYNTAX_ERR' is true
 12PASS testMark('fetchStart') == 'SYNTAX_ERR' is true
 13PASS testMark('domainLookupStart') == 'SYNTAX_ERR' is true
 14PASS testMark('domainLookupEnd') == 'SYNTAX_ERR' is true
 15PASS testMark('connectStart') == 'SYNTAX_ERR' is true
 16PASS testMark('connectEnd') == 'SYNTAX_ERR' is true
 17PASS testMark('secureConnectionStart') == 'SYNTAX_ERR' is true
 18PASS testMark('requestStart') == 'SYNTAX_ERR' is true
 19PASS testMark('responseStart') == 'SYNTAX_ERR' is true
 20PASS testMark('responseEnd') == 'SYNTAX_ERR' is true
 21PASS testMark('domLoading') == 'SYNTAX_ERR' is true
 22PASS testMark('domInteractive') == 'SYNTAX_ERR' is true
 23PASS testMark('domContentLoadedEventStart') == 'SYNTAX_ERR' is true
 24PASS testMark('domContentLoadedEventEnd') == 'SYNTAX_ERR' is true
 25PASS testMark('domComplete') == 'SYNTAX_ERR' is true
 26PASS testMark('loadEventStart') == 'SYNTAX_ERR' is true
 27PASS testMark('loadEventEnd') == 'SYNTAX_ERR' is true
 28PASS testMark('') == 'success' is true
 29PASS testMark('abc') == 'success' is true
 30PASS testMark(123) == 'success' is true
 31PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 0 is true
 32PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12 is true
 33PASS Array.isArray(performance.getMarks('')) && performance.getMarks('').length == 1 && performance.getMarks('').every(isFinite) == true is true
 34PASS Array.isArray(performance.getMarks('')) && performance.getMarks('1').length == 1 && performance.getMarks('').every(isFinite) == true is true
 35PASS Array.isArray(performance.getMarks('')) && performance.getMarks('a').length == 1 && performance.getMarks('').every(isFinite) == true is true
 36PASS Array.isArray(performance.getMarks('')) && performance.getMarks('def').length == 1 && performance.getMarks('').every(isFinite) == true is true
 37PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12 is true
 38PASS Array.isArray(performance.getMarks('')) && performance.getMarks('').length == 4 && performance.getMarks('').every(isFinite) == true is true
 39PASS Array.isArray(performance.getMarks('')) && performance.getMarks('1').length == 4 && performance.getMarks('').every(isFinite) == true is true
 40PASS Array.isArray(performance.getMarks('')) && performance.getMarks('a').length == 4 && performance.getMarks('').every(isFinite) == true is true
 41PASS Array.isArray(performance.getMarks('')) && performance.getMarks('def').length == 4 && performance.getMarks('').every(isFinite) == true is true
 42PASS Array.isArray(performance.getMarks('klmn')) && performance.getMarks('klmn').length == 0 is true
 43PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12 is true
 44PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 11 is true
 45PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 8 is true
 46PASS checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 0 is true
 47PASS testMeasureWOMeasureName() == 'TypeError' is true
 48PASS testMeasure('', '', 1) == 'success' is true
 49PASS testMeasure('') == 'success' is true
 50PASS testMeasure('x', 1) == 'success' is true
 51PASS testMeasure('y', 3, 'ghij') == 'success' is true
 52PASS testMeasure('y', 3, 'navigationStart') == 'success' is true
 53PASS testMeasure('y', 3, 'unloadEventStart') == 'success' is true
 54PASS testMeasure('y', 3, 'unloadEventEnd') == 'success' is true
 55PASS testMeasure('y', 3, 'redirectStart') == 'success' is true
 56PASS testMeasure('y', 3, 'redirectEnd') == 'success' is true
 57PASS testMeasure('y', 3, 'fetchStart') == 'success' is true
 58PASS testMeasure('y', 3, 'domainLookupStart') == 'success' is true
 59PASS testMeasure('y', 3, 'domainLookupEnd') == 'success' is true
 60PASS testMeasure('y', 3, 'connectStart') == 'success' is true
 61PASS testMeasure('y', 3, 'connectEnd') == 'success' is true
 62PASS testMeasure('y', 3, 'secureConnectionStart') == 'success' is true
 63PASS testMeasure('y', 3, 'requestStart') == 'success' is true
 64PASS testMeasure('y', 3, 'responseStart') == 'success' is true
 65PASS testMeasure('y', 3, 'responseEnd') == 'success' is true
 66PASS testMeasure('y', 3, 'domLoading') == 'success' is true
 67PASS testMeasure('y', 3, 'domInteractive') == 'success' is true
 68PASS testMeasure('y', 3, 'domContentLoadedEventStart') == 'success' is true
 69PASS testMeasure('y', 3, 'domContentLoadedEventEnd') == 'success' is true
 70PASS testMeasure('y', 3, 'domComplete') == 'success' is true
 71PASS testMeasure('y', 3, 'loadEventStart') == 'success' is true
 72PASS testMeasure('y', 3, 'loadEventEnd') == 'success' is true
 73PASS testMeasure('z', 8) == 'SYNTAX_ERR' is true
 74PASS testMeasure('z', 3, 8) == 'SYNTAX_ERR' is true
 75PASS testMeasure('y', 'domInteractive', 8) == 'SYNTAX_ERR' is true
 76PASS testMeasure('z', 8, 3) == 'SYNTAX_ERR' is true
 77PASS testMeasure('z', 8, 9) == 'SYNTAX_ERR' is true
 78PASS testMeasure('z', undefined, 4) == 'SYNTAX_ERR' is true
 79PASS testMeasure('z', 4, undefined) == 'SYNTAX_ERR' is true
 80PASS testMeasure('z', 3, 'navigationStart') == 'success' is true
 81PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 0 is true
 82PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16 is true
 83PASS performance.getMeasures('nav1')[0] <= performance.getMeasures('nav2')[0] is true
 84PASS performance.getMeasures('onloadEndToNow')[0] <= performance.getMeasures('nav1')[0] is true
 85PASS performance.getMeasures('loadTime')[0] > 0 is true
 86PASS performance.getMeasures('domCompleteToa').length > 0 is true
 87PASS performance.getMeasures('onloadStartToa').length > 0 is true
 88PASS performance.getMeasures('negativeValue')[0] < 0 is true
 89PASS performance.getMeasures('navToLoadStart')[0] > 0 is true
 90PASS performance.getMeasures('navToM')[0] > 0 is true
 91PASS performance.getMeasures('loadStartToM').length > 0 is true
 92PASS performance.getMeasures('navToM') - performance.getMeasures('loadStartToM') == performance.getMeasures('navToLoadStart') is true
 93PASS Array.isArray(performance.getMeasures('')) && performance.getMeasures('').length == 1 && performance.getMeasures('').every(isFinite) == true is true
 94PASS Array.isArray(performance.getMeasures('x')) && performance.getMeasures('x').length == 1 && performance.getMeasures('x').every(isFinite) == true is true
 95PASS Array.isArray(performance.getMeasures('y')) && performance.getMeasures('y').length == 1 && performance.getMeasures('y').every(isFinite) == true is true
 96PASS Array.isArray(performance.getMeasures('zz')) && performance.getMeasures('zz').length == 0 is true
 97PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16 is true
 98PASS Array.isArray(performance.getMeasures('')) && performance.getMeasures('').length == 2 && performance.getMeasures('').every(isFinite) == true is true
 99PASS Array.isArray(performance.getMeasures('xx')) && performance.getMeasures('xx').length == 2 && performance.getMeasures('xx').every(isFinite) == true is true
 100PASS Array.isArray(performance.getMeasures('yy')) && performance.getMeasures('yy').length == 2 && performance.getMeasures('yy').every(isFinite) == true is true
 101PASS Array.isArray(performance.getMeasures('zz')) && performance.getMeasures('zz').length == 0 is true
 102PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16 is true
 103PASS performance.getMeasures('nav1').length == 3 && performance.getMeasures('nav1')[1] <= performance.getMeasures('nav1')[2] is true
 104PASS performance.getMeasures('loadTime').length == 3 && performance.getMeasures('loadTime')[1] == performance.getMeasures('loadTime')[2] is true
 105PASS performance.getMeasures('domCompleteToa').length == 3 && performance.getMeasures('domCompleteToa')[1] <= performance.getMeasures('domCompleteToa')[2] is true
 106PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16 is true
 107PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 12 is true
 108PASS checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 0 is true
 109PASS successfullyParsed is true
 110
 111TEST COMPLETE
 112
0

LayoutTests/fast/webperf/user-timing.html

 1<head>
 2<link rel="stylesheet" href="../js/resources/js-test-style.css">
 3<script src="../js/resources/js-test-pre.js"></script>
 4</head>
 5<body onload=runTest()>
 6<script>
 7 description("This tests API of W3C UserTiming Spec.")
 8
 9 function testMarkWOMarkName(){
 10 try{
 11 performance.mark();
 12 return 'success? should fail!';
 13 }catch(e){
 14 return e.name;
 15 }
 16 }
 17
 18 function testMeasureWOMeasureName(){
 19 try{
 20 performance.measure();
 21 return 'success? should fail';
 22 }catch(e){
 23 return e.name;
 24 }
 25 }
 26
 27 function testMeasure(measureName, startMark, endMark){
 28 if (measureName == undefined)
 29 return 'fail';
 30 try{
 31 if (arguments.length == 1)
 32 performance.measure(measureName);
 33 if (arguments.length == 2)
 34 performance.measure(measureName, startMark);
 35 if (arguments.length == 3)
 36 performance.measure(measureName, startMark, endMark);
 37 return 'success';
 38 }catch(e){
 39 return e.name;
 40 }
 41
 42 }
 43
 44 function testMark(markName){
 45 try{
 46 performance.mark(markName);
 47 return 'success';
 48 }catch(e){
 49 return e.name;
 50 }
 51
 52 }
 53
 54 function prepareMarks(){
 55 performance.mark('');
 56 performance.mark(1);
 57 performance.mark(2);
 58 performance.mark(3);
 59 performance.mark(4);
 60 performance.mark(5);
 61 performance.mark(6);
 62 performance.mark('a');
 63 performance.mark('bc');
 64 performance.mark('def');
 65 performance.mark('ghij');
 66 performance.mark('M');
 67 }
 68
 69 function prepareMeasures(){
 70 testMeasure('', '', 1);
 71 testMeasure('x', '1', 2);
 72 testMeasure('y', 3, '4');
 73 testMeasure('z', 3, 'a');
 74 testMeasure('xx', 'a', 'bc');
 75 testMeasure('yy', 'a', 'ghij');
 76 testMeasure('zz', 'a', 'lmnk'); //this one shall not work
 77 testMeasure('onloadEndToNow', 'loadEventEnd');
 78 testMeasure('nav1');
 79 testMeasure('nav2', 'navigationStart');
 80 testMeasure('loadTime', 'navigationStart', 'loadEventEnd');
 81 testMeasure('domCompleteToa', 'domComplete', 'a');
 82 testMeasure('onloadStartToa', 'loadEventStart', 'a');
 83 testMeasure('negativeValue', 3, 'navigationStart');
 84 testMeasure('navToLoadStart', 'navigationStart', 'loadEventStart');
 85 testMeasure('navToM', 'navigationStart', 'M');
 86 testMeasure('loadStartToM', 'loadEventStart', 'M');
 87 }
 88
 89 function checkDictTypeMarksOrMeasures(obj){
 90 if (typeof obj != 'object')
 91 return false;
 92 for(var key in obj){
 93 //console.log(key);
 94 if (!Array.isArray(obj[key]))
 95 return false;
 96 if(!obj[key].every(isFinite))
 97 return false;
 98 }
 99 return true;
 100
 101 }
 102
 103 function dictTypeMarksOrMeasuresHasItemNum(obj){
 104 var num = 0;
 105 for(var key in obj){
 106 num++;
 107 }
 108 return num;
 109 }
 110 function runTest(){
 111 // mark
 112 shouldBeTrue("testMarkWOMarkName() == 'TypeError'");
 113 shouldBeTrue("testMark('navigationStart') == 'SYNTAX_ERR'");
 114 shouldBeTrue("testMark('unloadEventStart') == 'SYNTAX_ERR'");
 115 shouldBeTrue("testMark('unloadEventEnd') == 'SYNTAX_ERR'");
 116 shouldBeTrue("testMark('redirectStart') == 'SYNTAX_ERR'");
 117 shouldBeTrue("testMark('redirectEnd') == 'SYNTAX_ERR'");
 118 shouldBeTrue("testMark('fetchStart') == 'SYNTAX_ERR'");
 119 shouldBeTrue("testMark('domainLookupStart') == 'SYNTAX_ERR'");
 120 shouldBeTrue("testMark('domainLookupEnd') == 'SYNTAX_ERR'");
 121 shouldBeTrue("testMark('connectStart') == 'SYNTAX_ERR'");
 122 shouldBeTrue("testMark('connectEnd') == 'SYNTAX_ERR'");
 123 shouldBeTrue("testMark('secureConnectionStart') == 'SYNTAX_ERR'");
 124 shouldBeTrue("testMark('requestStart') == 'SYNTAX_ERR'");
 125 shouldBeTrue("testMark('responseStart') == 'SYNTAX_ERR'");
 126 shouldBeTrue("testMark('responseEnd') == 'SYNTAX_ERR'");
 127 shouldBeTrue("testMark('domLoading') == 'SYNTAX_ERR'");
 128 shouldBeTrue("testMark('domInteractive') == 'SYNTAX_ERR'");
 129 shouldBeTrue("testMark('domContentLoadedEventStart') == 'SYNTAX_ERR'");
 130 shouldBeTrue("testMark('domContentLoadedEventEnd') == 'SYNTAX_ERR'");
 131 shouldBeTrue("testMark('domComplete') == 'SYNTAX_ERR'");
 132 shouldBeTrue("testMark('loadEventStart') == 'SYNTAX_ERR'");
 133 shouldBeTrue("testMark('loadEventEnd') == 'SYNTAX_ERR'");
 134 shouldBeTrue("testMark('') == 'success'");
 135 shouldBeTrue("testMark('abc') == 'success'");
 136 shouldBeTrue("testMark(123) == 'success'");
 137 performance.clearMarks();
 138
 139 // getMarks
 140 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 0");
 141 prepareMarks();
 142 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12");
 143
 144 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('').length == 1 && performance.getMarks('').every(isFinite) == true");
 145 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('1').length == 1 && performance.getMarks('').every(isFinite) == true");
 146 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('a').length == 1 && performance.getMarks('').every(isFinite) == true");
 147 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('def').length == 1 && performance.getMarks('').every(isFinite) == true");
 148 prepareMarks();
 149 prepareMarks();
 150 prepareMarks();
 151 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12");
 152 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('').length == 4 && performance.getMarks('').every(isFinite) == true");
 153 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('1').length == 4 && performance.getMarks('').every(isFinite) == true");
 154 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('a').length == 4 && performance.getMarks('').every(isFinite) == true");
 155 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('def').length == 4 && performance.getMarks('').every(isFinite) == true");
 156 shouldBeTrue("Array.isArray(performance.getMarks('klmn')) && performance.getMarks('klmn').length == 0");
 157 performance.clearMarks();
 158
 159 // clearMarks
 160 prepareMarks();
 161 prepareMarks();
 162 prepareMarks();
 163 prepareMarks();
 164 prepareMarks();
 165 prepareMarks();
 166 performance.clearMarks('klmn');
 167 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12");
 168 performance.clearMarks('ghij');
 169 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 11");
 170 performance.clearMarks('');
 171 performance.clearMarks('1');
 172 performance.clearMarks('2');
 173 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 8");
 174 performance.clearMarks();
 175 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 0");
 176
 177 // measure
 178 shouldBeTrue("testMeasureWOMeasureName() == 'TypeError'");
 179 prepareMarks();
 180 shouldBeTrue("testMeasure('', '', 1) == 'success'");
 181 shouldBeTrue("testMeasure('') == 'success'");
 182 shouldBeTrue("testMeasure('x', 1) == 'success'");
 183 shouldBeTrue("testMeasure('y', 3, 'ghij') == 'success'");
 184 shouldBeTrue("testMeasure('y', 3, 'navigationStart') == 'success'");
 185 shouldBeTrue("testMeasure('y', 3, 'unloadEventStart') == 'success'");
 186 shouldBeTrue("testMeasure('y', 3, 'unloadEventEnd') == 'success'");
 187 shouldBeTrue("testMeasure('y', 3, 'redirectStart') == 'success'");
 188 shouldBeTrue("testMeasure('y', 3, 'redirectEnd') == 'success'");
 189 shouldBeTrue("testMeasure('y', 3, 'fetchStart') == 'success'");
 190 shouldBeTrue("testMeasure('y', 3, 'domainLookupStart') == 'success'");
 191 shouldBeTrue("testMeasure('y', 3, 'domainLookupEnd') == 'success'");
 192 shouldBeTrue("testMeasure('y', 3, 'connectStart') == 'success'");
 193 shouldBeTrue("testMeasure('y', 3, 'connectEnd') == 'success'");
 194 shouldBeTrue("testMeasure('y', 3, 'secureConnectionStart') == 'success'");
 195 shouldBeTrue("testMeasure('y', 3, 'requestStart') == 'success'");
 196 shouldBeTrue("testMeasure('y', 3, 'responseStart') == 'success'");
 197 shouldBeTrue("testMeasure('y', 3, 'responseEnd') == 'success'");
 198 shouldBeTrue("testMeasure('y', 3, 'domLoading') == 'success'");
 199 shouldBeTrue("testMeasure('y', 3, 'domInteractive') == 'success'");
 200 shouldBeTrue("testMeasure('y', 3, 'domContentLoadedEventStart') == 'success'");
 201 shouldBeTrue("testMeasure('y', 3, 'domContentLoadedEventEnd') == 'success'");
 202 shouldBeTrue("testMeasure('y', 3, 'domComplete') == 'success'");
 203 shouldBeTrue("testMeasure('y', 3, 'loadEventStart') == 'success'");
 204 shouldBeTrue("testMeasure('y', 3, 'loadEventEnd') == 'success'");
 205 shouldBeTrue("testMeasure('z', 8) == 'SYNTAX_ERR'");
 206 shouldBeTrue("testMeasure('z', 3, 8) == 'SYNTAX_ERR'");
 207 shouldBeTrue("testMeasure('y', 'domInteractive', 8) == 'SYNTAX_ERR'");
 208 shouldBeTrue("testMeasure('z', 8, 3) == 'SYNTAX_ERR'");
 209 shouldBeTrue("testMeasure('z', 8, 9) == 'SYNTAX_ERR'");
 210 shouldBeTrue("testMeasure('z', undefined, 4) == 'SYNTAX_ERR'");
 211 shouldBeTrue("testMeasure('z', 4, undefined) == 'SYNTAX_ERR'");
 212 shouldBeTrue("testMeasure('z', 3, 'navigationStart') == 'success'");
 213 performance.clearMeasures();
 214 performance.clearMarks();
 215
 216 // getMeasures
 217 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 0");
 218 prepareMarks();
 219 prepareMeasures();
 220 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
 221 shouldBeTrue("performance.getMeasures('nav1')[0] <= performance.getMeasures('nav2')[0]");
 222 shouldBeTrue("performance.getMeasures('onloadEndToNow')[0] <= performance.getMeasures('nav1')[0]");
 223 shouldBeTrue("performance.getMeasures('loadTime')[0] > 0");
 224 shouldBeTrue("performance.getMeasures('domCompleteToa').length > 0");
 225 shouldBeTrue("performance.getMeasures('onloadStartToa').length > 0");
 226 shouldBeTrue("performance.getMeasures('negativeValue')[0] < 0");
 227 shouldBeTrue("performance.getMeasures('navToLoadStart')[0] > 0");
 228 shouldBeTrue("performance.getMeasures('navToM')[0] > 0");
 229 shouldBeTrue("performance.getMeasures('loadStartToM').length > 0");
 230 shouldBeTrue("performance.getMeasures('navToM') - performance.getMeasures('loadStartToM') == performance.getMeasures('navToLoadStart')");
 231 shouldBeTrue("Array.isArray(performance.getMeasures('')) && performance.getMeasures('').length == 1 && performance.getMeasures('').every(isFinite) == true");
 232 shouldBeTrue("Array.isArray(performance.getMeasures('x')) && performance.getMeasures('x').length == 1 && performance.getMeasures('x').every(isFinite) == true");
 233 shouldBeTrue("Array.isArray(performance.getMeasures('y')) && performance.getMeasures('y').length == 1 && performance.getMeasures('y').every(isFinite) == true");
 234 shouldBeTrue("Array.isArray(performance.getMeasures('zz')) && performance.getMeasures('zz').length == 0");
 235 prepareMeasures();
 236 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
 237 shouldBeTrue("Array.isArray(performance.getMeasures('')) && performance.getMeasures('').length == 2 && performance.getMeasures('').every(isFinite) == true");
 238 shouldBeTrue("Array.isArray(performance.getMeasures('xx')) && performance.getMeasures('xx').length == 2 && performance.getMeasures('xx').every(isFinite) == true");
 239 shouldBeTrue("Array.isArray(performance.getMeasures('yy')) && performance.getMeasures('yy').length == 2 && performance.getMeasures('yy').every(isFinite) == true");
 240 shouldBeTrue("Array.isArray(performance.getMeasures('zz')) && performance.getMeasures('zz').length == 0");
 241 prepareMarks();
 242 prepareMeasures();
 243 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
 244 shouldBeTrue("performance.getMeasures('nav1').length == 3 && performance.getMeasures('nav1')[1] <= performance.getMeasures('nav1')[2]");
 245 shouldBeTrue("performance.getMeasures('loadTime').length == 3 && performance.getMeasures('loadTime')[1] == performance.getMeasures('loadTime')[2]");
 246 shouldBeTrue("performance.getMeasures('domCompleteToa').length == 3 && performance.getMeasures('domCompleteToa')[1] <= performance.getMeasures('domCompleteToa')[2]");
 247 performance.clearMarks();
 248 performance.clearMeasures();
 249
 250 // clearMeasures
 251 prepareMarks();
 252 prepareMeasures();
 253 prepareMarks();
 254 prepareMeasures();
 255 performance.clearMeasures('nonexist');
 256 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
 257 performance.clearMeasures('');
 258 performance.clearMeasures('x');
 259 performance.clearMeasures('xx');
 260 performance.clearMeasures('nav1');
 261 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 12");
 262 performance.clearMeasures();
 263 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 0");
 264 performance.clearMarks();
 265
 266 var successfullyParsed = true;
 267 wasPostTestScriptParsed = true;
 268
 269 if (window.jsTestIsAsync) {
 270 if (window.layoutTestController)
 271 layoutTestController.waitUntilDone();
 272 if (window.wasFinishJSTestCalled)
 273 finishJSTest();
 274 } else
 275 finishJSTest();
 276 }
 277</script>
 278</body>
0