Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ed255ab

Browse filesBrowse files
cdai2rvagg
authored andcommitted
build,src: add Intel Vtune profiling support
This feature supports the Intel Vtune profiling support for JITted JavaScript on IA32 / X64 / X32 platform. The advantage of this profiling is that the user / developer of NodeJS application can get the detailed profiling information for every line of the JavaScript source code. This information will be very useful for the owner to optimize their applications. This feature is a compile-time option. For windows platform, the user needs to pass the following parameter to vcbuild.bat: "enable-vtune" For other OS, the user needs to pass the following parameter to ./configure command: "--enable-vtune-profiling" PR-URL: #3785 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
1 parent 1f0e8dc commit ed255ab
Copy full SHA for ed255ab

File tree

Expand file treeCollapse file tree

4 files changed

+37
-2
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

4 files changed

+37
-2
lines changed
Open diff view settings
Collapse file

‎configure‎

Copy file name to clipboardExpand all lines: configure
+17Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ parser.add_option("--fully-static",
8686
help="Generate an executable without external dynamic libraries. This "
8787
"will not work on OSX when using default compilation environment")
8888

89+
parser.add_option("--enable-vtune-profiling",
90+
action="store_true",
91+
dest="enable_vtune_profiling",
92+
help="Enable profiling support for Intel Vtune profiler to profile"
93+
"JavaScript code executed in nodejs. This feature is only available "
94+
"for ia32, x32 or x64 platform.")
95+
96+
8997
parser.add_option("--link-module",
9098
action="append",
9199
dest="linked_module",
@@ -679,6 +687,15 @@ def configure_node(o):
679687
o['variables']['node_core_target_name'] = 'node_base'
680688
o['variables']['node_target_type'] = 'static_library'
681689

690+
if target_arch in ('x86', 'x64', 'ia32', 'x32'):
691+
o['variables']['node_enable_v8_vtunejit'] = b(options.enable_vtune_profiling)
692+
elif options.enable_vtune_profiling:
693+
raise Exception(
694+
'vtune profiler for JavaScript is only supported on x86, x32 or x64 '
695+
'platform.')
696+
else:
697+
o['variables']['node_enable_v8_vtunejit'] = 'false'
698+
682699
if flavor in ('solaris', 'mac', 'linux', 'freebsd'):
683700
use_dtrace = not options.without_dtrace
684701
# Don't enable by default on linux and freebsd
Collapse file

‎node.gyp‎

Copy file name to clipboardExpand all lines: node.gyp
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
'node_use_openssl%': 'true',
1313
'node_shared_openssl%': 'false',
1414
'node_v8_options%': '',
15+
'node_enable_v8_vtunejit%': 'false',
1516
'node_target_type%': 'executable',
1617
'node_core_target_name%': 'node',
1718
'library_files': [
@@ -221,6 +222,13 @@
221222
'defines': [ 'NODE_HAVE_SMALL_ICU=1' ],
222223
}]],
223224
}],
225+
[ 'node_enable_v8_vtunejit=="true" and (target_arch=="x64" or \
226+
target_arch=="ia32" or target_arch=="x32")', {
227+
'defines': [ 'NODE_ENABLE_VTUNE_PROFILING' ],
228+
'dependencies': [
229+
'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune'
230+
],
231+
}],
224232
[ 'node_use_openssl=="true"', {
225233
'defines': [ 'HAVE_OPENSSL=1' ],
226234
'sources': [
Collapse file

‎src/node.cc‎

Copy file name to clipboardExpand all lines: src/node.cc
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
#include "v8-profiler.h"
4444
#include "zlib.h"
4545

46+
#ifdef NODE_ENABLE_VTUNE_PROFILING
47+
#include "../deps/v8/src/third_party/vtune/v8-vtune.h"
48+
#endif
49+
4650
#include <errno.h>
4751
#include <limits.h> // PATH_MAX
4852
#include <locale.h>
@@ -4025,6 +4029,9 @@ static void StartNodeInstance(void* arg) {
40254029
Isolate::CreateParams params;
40264030
ArrayBufferAllocator* array_buffer_allocator = new ArrayBufferAllocator();
40274031
params.array_buffer_allocator = array_buffer_allocator;
4032+
#ifdef NODE_ENABLE_VTUNE_PROFILING
4033+
params.code_event_handler = vTune::GetVtuneCodeEventHandler();
4034+
#endif
40284035
Isolate* isolate = Isolate::New(params);
40294036
if (track_heap_objects) {
40304037
isolate->GetHeapProfiler()->StartTrackingHeapObjects(true);
Collapse file

‎vcbuild.bat‎

Copy file name to clipboardExpand all lines: vcbuild.bat
+5-2Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ set i18n_arg=
3737
set download_arg=
3838
set release_urls_arg=
3939
set build_release=
40+
set enable_vtune_profiling=
4041

4142
:next-arg
4243
if "%1"=="" goto args-done
@@ -71,6 +72,7 @@ if /i "%1"=="full-icu" set i18n_arg=%1&goto arg-ok
7172
if /i "%1"=="intl-none" set i18n_arg=%1&goto arg-ok
7273
if /i "%1"=="download-all" set download_arg="--download=all"&goto arg-ok
7374
if /i "%1"=="ignore-flaky" set test_args=%test_args% --flaky-tests=dontcare&goto arg-ok
75+
if /i "%1"=="enable-vtune" set enable_vtune_profiling="--enable-vtune-profiling"&goto arg-ok
7476

7577
echo Warning: ignoring invalid command line option `%1`.
7678

@@ -168,7 +170,7 @@ goto run
168170
if defined noprojgen goto msbuild
169171

170172
@rem Generate the VS project.
171-
python configure %download_arg% %i18n_arg% %debug_arg% %snapshot_arg% %noetw_arg% %noperfctr_arg% --dest-cpu=%target_arch% --tag=%TAG%
173+
python configure %download_arg% %i18n_arg% %debug_arg% %snapshot_arg% %noetw_arg% %noperfctr_arg% %enable_vtune_profiling% --dest-cpu=%target_arch% --tag=%TAG%
172174
if errorlevel 1 goto create-msvs-files-failed
173175
if not exist node.sln goto create-msvs-files-failed
174176
echo Project files generated.
@@ -259,13 +261,14 @@ echo Failed to create vc project files.
259261
goto exit
260262

261263
:help
262-
echo vcbuild.bat [debug/release] [msi] [test-all/test-uv/test-internet/test-pummel/test-simple/test-message] [clean] [noprojgen] [small-icu/full-icu/intl-none] [nobuild] [nosign] [x86/x64] [download-all]
264+
echo vcbuild.bat [debug/release] [msi] [test-all/test-uv/test-internet/test-pummel/test-simple/test-message] [clean] [noprojgen] [small-icu/full-icu/intl-none] [nobuild] [nosign] [x86/x64] [download-all] [enable-vtune]
263265
echo Examples:
264266
echo vcbuild.bat : builds release build
265267
echo vcbuild.bat debug : builds debug build
266268
echo vcbuild.bat release msi : builds release build and MSI installer package
267269
echo vcbuild.bat test : builds debug build and runs tests
268270
echo vcbuild.bat build-release : builds the release distribution as used by nodejs.org
271+
echo vcbuild.bat enable-vtune : builds nodejs with Intel Vtune profiling support to profile JavaScript
269272
goto exit
270273

271274
:exit

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.