Revision 841b7f53

View differences:

configure
590 590
      o['cflags'] += cflags.split()
591 591

  
592 592

  
593
def configure_winsdk(o):
594
  if not sys.platform.startswith('win32'):
595
    return
596

  
597
  try:
598
    p = subprocess.Popen(['ctrpp.exe'],
599
                         stdin=subprocess.PIPE,
600
                         stdout=subprocess.PIPE,
601
                         stderr=subprocess.PIPE)
602
  except OSError:
603
    return
604

  
605
  o['variables']['node_has_winsdk'] = 'true'
606

  
607

  
593 608
output = {
594 609
  'variables': { 'python': sys.executable },
595 610
  'include_dirs': [],
......
605 620
configure_libuv(output)
606 621
configure_v8(output)
607 622
configure_openssl(output)
623
configure_winsdk(output)
608 624

  
609 625
# variables should be a root level element,
610 626
# move everything else to target_defaults
node.gyp
7 7
    'node_use_dtrace%': 'false',
8 8
    'node_use_etw%': 'false',
9 9
    'node_use_perfctr%': 'false',
10
    'node_has_winsdk%': 'false',
10 11
    'node_shared_v8%': 'false',
11 12
    'node_shared_zlib%': 'false',
12 13
    'node_shared_http_parser%': 'false',
......
72 73

  
73 74
      'include_dirs': [
74 75
        'src',
76
        'src/gen',
75 77
        'deps/uv/src/ares',
76 78
        '<(SHARED_INTERMEDIATE_DIR)' # for node_natives.h
77 79
      ],
......
191 193
            'src/node_win32_etw_provider-inl.h',
192 194
            'src/node_win32_etw_provider.cc',
193 195
            'src/node_dtrace.cc',
194
            '<(SHARED_INTERMEDIATE_DIR)/node_etw_provider.h',
195
            '<(SHARED_INTERMEDIATE_DIR)/node_etw_provider.rc',
196
            'src/gen/node_etw_provider.h',
197
            'src/gen/node_etw_provider.rc',
196 198
          ]
197 199
        } ],
198 200
        [ 'node_use_perfctr=="true"', {
......
203 205
            'src/node_win32_perfctr_provider.cc',
204 206
            'src/node_counters.cc',
205 207
            'src/node_counters.h',
206
            '<(SHARED_INTERMEDIATE_DIR)/node_perfctr_provider.rc',
208
            'src/gen/node_perfctr_provider.rc',
207 209
          ]
208 210
        } ],
209 211
        [ 'node_shared_v8=="false"', {
......
286 288
      'target_name': 'node_etw',
287 289
      'type': 'none',
288 290
      'conditions': [
289
        [ 'node_use_etw=="true"', {
291
        [ 'node_use_etw=="true" and node_has_winsdk=="true"', {
290 292
          'actions': [
291 293
            {
292 294
              'action_name': 'node_etw',
293 295
              'inputs': [ 'src/res/node_etw_provider.man' ],
294 296
              'outputs': [
295
                '<(SHARED_INTERMEDIATE_DIR)/node_etw_provider.rc',
296
                '<(SHARED_INTERMEDIATE_DIR)/node_etw_provider.h',
297
                'src/gen/node_etw_provider.rc',
298
                'src/gen/node_etw_provider.h',
299
                'src/gen/node_etw_providerTEMP.BIN',
297 300
              ],
298
              'action': [ 'mc <@(_inputs) -h <(SHARED_INTERMEDIATE_DIR) -r <(SHARED_INTERMEDIATE_DIR)' ]
301
              'action': [ 'mc <@(_inputs) -h src/gen -r src/gen' ]
299 302
            }
300 303
          ]
301 304
        } ]
......
306 309
      'target_name': 'node_perfctr',
307 310
      'type': 'none',
308 311
      'conditions': [
309
        [ 'node_use_perfctr=="true"', {
312
        [ 'node_use_perfctr=="true" and node_has_winsdk=="true"', {
310 313
          'actions': [
311 314
            {
312 315
              'action_name': 'node_perfctr_man',
313 316
              'inputs': [ 'src/res/node_perfctr_provider.man' ],
314 317
              'outputs': [
315
                '<(SHARED_INTERMEDIATE_DIR)/node_perfctr_provider.h',
316
                '<(SHARED_INTERMEDIATE_DIR)/node_perfctr_provider.rc',
318
                'src/gen/node_perfctr_provider.h',
319
                'src/gen/node_perfctr_provider.rc',
320
                'src/gen/MSG00001.BIN',
317 321
              ],
318 322
              'action': [ 'ctrpp <@(_inputs) '
319
                          '-o <(SHARED_INTERMEDIATE_DIR)/node_perfctr_provider.h '
320
                          '-rc <(SHARED_INTERMEDIATE_DIR)/node_perfctr_provider.rc'
323
                          '-o src/gen/node_perfctr_provider.h '
324
                          '-rc src/gen/node_perfctr_provider.rc'
321 325
              ]
322 326
            },
323 327
          ],
src/gen/node_etw_provider.h
1
//**********************************************************************`
2
//* This is an include file generated by Message Compiler.             *`
3
//*                                                                    *`
4
//* Copyright (c) Microsoft Corporation. All Rights Reserved.          *`
5
//**********************************************************************`
6
#pragma once
7
//+
8
// Provider NodeJS-ETW-provider Event Count 12
9
//+
10
EXTERN_C __declspec(selectany) const GUID NODE_ETW_PROVIDER = {0x77754e9b, 0x264b, 0x4d8d, {0xb9, 0x81, 0xe4, 0x13, 0x5c, 0x1e, 0xcb, 0x0c}};
11

  
12
//
13
// Opcodes
14
//
15
#define NODE_ETW_PROVIDER_OPCODE_NODE_HTTP_SERVER_REQUEST 0xa
16
#define NODE_ETW_PROVIDER_OPCODE_NODE_HTTP_SERVER_RESPONSE 0xb
17
#define NODE_ETW_PROVIDER_OPCODE_NODE_HTTP_CLIENT_REQUEST 0xc
18
#define NODE_ETW_PROVIDER_OPCODE_NODE_HTTP_CLIENT_RESPONSE 0xd
19
#define NODE_ETW_PROVIDER_OPCODE_NODE_NET_SERVER_CONNECTION 0xe
20
#define NODE_ETW_PROVIDER_OPCODE_NODE_NET_STREAM_END 0xf
21
#define NODE_ETW_PROVIDER_OPCODE_NODE_GC_START 0x10
22
#define NODE_ETW_PROVIDER_OPCODE_NODE_GC_DONE 0x11
23
#define NODE_ETW_PROVIDER_OPCODE_NODE_V8SYMBOL_REMOVE 0x15
24
#define NODE_ETW_PROVIDER_OPCODE_NODE_V8SYMBOL_MOVE 0x16
25
#define NODE_ETW_PROVIDER_OPCODE_NODE_V8SYMBOL_RESET 0x17
26
#define JSCRIPT_METHOD_METHODLOAD_OPCODE 0xa
27

  
28
//
29
// Tasks
30
//
31
#define JSCRIPT_METHOD_RUNTIME_TASK 0x1
32

  
33
//
34
// Event Descriptors
35
//
36
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_HTTP_SERVER_REQUEST_EVENT = {0x1, 0x0, 0x0, 0x4, 0xa, 0x0, 0x0};
37
#define NODE_HTTP_SERVER_REQUEST_EVENT_value 0x1
38
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_HTTP_SERVER_RESPONSE_EVENT = {0x2, 0x0, 0x0, 0x4, 0xb, 0x0, 0x0};
39
#define NODE_HTTP_SERVER_RESPONSE_EVENT_value 0x2
40
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_HTTP_CLIENT_REQUEST_EVENT = {0x3, 0x0, 0x0, 0x4, 0xc, 0x0, 0x0};
41
#define NODE_HTTP_CLIENT_REQUEST_EVENT_value 0x3
42
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_HTTP_CLIENT_RESPONSE_EVENT = {0x4, 0x0, 0x0, 0x4, 0xd, 0x0, 0x0};
43
#define NODE_HTTP_CLIENT_RESPONSE_EVENT_value 0x4
44
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_NET_SERVER_CONNECTION_EVENT = {0x5, 0x0, 0x0, 0x4, 0xe, 0x0, 0x0};
45
#define NODE_NET_SERVER_CONNECTION_EVENT_value 0x5
46
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_NET_STREAM_END_EVENT = {0x6, 0x0, 0x0, 0x4, 0xf, 0x0, 0x0};
47
#define NODE_NET_STREAM_END_EVENT_value 0x6
48
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_GC_START_EVENT = {0x7, 0x0, 0x0, 0x4, 0x10, 0x0, 0x0};
49
#define NODE_GC_START_EVENT_value 0x7
50
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_GC_DONE_EVENT = {0x8, 0x0, 0x0, 0x4, 0x11, 0x0, 0x0};
51
#define NODE_GC_DONE_EVENT_value 0x8
52
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR MethodLoad = {0x9, 0x0, 0x0, 0x4, 0xa, 0x1, 0x0};
53
#define MethodLoad_value 0x9
54
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_V8SYMBOL_REMOVE_EVENT = {0x15, 0x0, 0x0, 0x4, 0x15, 0x0, 0x0};
55
#define NODE_V8SYMBOL_REMOVE_EVENT_value 0x15
56
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_V8SYMBOL_MOVE_EVENT = {0x16, 0x0, 0x0, 0x4, 0x16, 0x0, 0x0};
57
#define NODE_V8SYMBOL_MOVE_EVENT_value 0x16
58
EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR NODE_V8SYMBOL_RESET_EVENT = {0x17, 0x0, 0x0, 0x4, 0x17, 0x0, 0x0};
59
#define NODE_V8SYMBOL_RESET_EVENT_value 0x17
src/gen/node_etw_provider.rc
1
LANGUAGE 0x9,0x1
2
1 11 "MSG00001.bin"
3
1 WEVT_TEMPLATE "node_etw_providerTEMP.BIN"
src/gen/node_perfctr_provider.h
1
/* This file was auto-generated from src\res\node_perfctr_provider.man by ctrpp.exe */
2

  
3
#pragma once
4

  
5

  
6
EXTERN_C DECLSPEC_SELECTANY GUID NodeCounterProviderGuid = { 0x1e2e15d7, 0x3760, 0x470e, 0x86, 0x99, 0xb9, 0xdb, 0x52, 0x48, 0xed, 0xd5 };
7

  
8
EXTERN_C DECLSPEC_SELECTANY GUID NodeCounterSetGuid = { 0x3a22a8ec, 0x297c, 0x48ac, 0xab, 0x15, 0x33, 0xec, 0x93, 0x3, 0x3f, 0xd8 };
9

  
10

  
11
EXTERN_C DECLSPEC_SELECTANY HANDLE NodeCounterProvider = NULL;
12

  
13
EXTERN_C DECLSPEC_SELECTANY struct {
14
    PERF_COUNTERSET_INFO CounterSet;
15
    PERF_COUNTER_INFO Counter0;
16
    PERF_COUNTER_INFO Counter1;
17
    PERF_COUNTER_INFO Counter2;
18
    PERF_COUNTER_INFO Counter3;
19
    PERF_COUNTER_INFO Counter4;
20
    PERF_COUNTER_INFO Counter5;
21
    PERF_COUNTER_INFO Counter6;
22
    PERF_COUNTER_INFO Counter7;
23
    PERF_COUNTER_INFO Counter8;
24
    PERF_COUNTER_INFO Counter9;
25
} NodeCounterSetInfo = {
26
    { { 0x3a22a8ec, 0x297c, 0x48ac, 0xab, 0x15, 0x33, 0xec, 0x93, 0x3, 0x3f, 0xd8 }, { 0x1e2e15d7, 0x3760, 0x470e, 0x86, 0x99, 0xb9, 0xdb, 0x52, 0x48, 0xed, 0xd5 }, 10, PERF_COUNTERSET_MULTI_INSTANCES },
27
    { 1, PERF_COUNTER_COUNTER, 0, sizeof(ULONG), PERF_DETAIL_NOVICE, 0, 0 },
28
    { 2, PERF_COUNTER_COUNTER, 0, sizeof(ULONG), PERF_DETAIL_NOVICE, 0, 0 },
29
    { 3, PERF_COUNTER_COUNTER, 0, sizeof(ULONG), PERF_DETAIL_NOVICE, 0, 0 },
30
    { 4, PERF_COUNTER_COUNTER, 0, sizeof(ULONG), PERF_DETAIL_NOVICE, 0, 0 },
31
    { 5, PERF_COUNTER_RAWCOUNT, 0, sizeof(ULONG), PERF_DETAIL_NOVICE, 0, 0 },
32
    { 6, PERF_COUNTER_BULK_COUNT, 0, sizeof(ULONGLONG), PERF_DETAIL_NOVICE, 4294967293, 0 },
33
    { 7, PERF_COUNTER_BULK_COUNT, 0, sizeof(ULONGLONG), PERF_DETAIL_NOVICE, 4294967293, 0 },
34
    { 8, PERF_COUNTER_RAWCOUNT, 0, sizeof(ULONG), PERF_DETAIL_NOVICE, 0, 0 },
35
    { 9, PERF_COUNTER_BULK_COUNT, 0, sizeof(ULONGLONG), PERF_DETAIL_NOVICE, 4294967293, 0 },
36
    { 10, PERF_COUNTER_BULK_COUNT, 0, sizeof(ULONGLONG), PERF_DETAIL_NOVICE, 4294967293, 0 },
37
};
38

  
39
EXTERN_C FORCEINLINE
40
VOID
41
CounterCleanup(
42
    VOID
43
    )
44
{
45
    if (NodeCounterProvider != NULL) {
46
        PerfStopProvider(NodeCounterProvider);
47
        NodeCounterProvider = NULL;
48
    }
49
}
50

  
51
EXTERN_C FORCEINLINE
52
ULONG
53
CounterInitialize(
54
    VOID
55
    )
56
{
57
    ULONG Status;
58
    PERF_PROVIDER_CONTEXT ProviderContext;
59

  
60
    ZeroMemory(&ProviderContext, sizeof(PERF_PROVIDER_CONTEXT));
61
    ProviderContext.ContextSize = sizeof(PERF_PROVIDER_CONTEXT);
62

  
63
    Status = PerfStartProviderEx(&NodeCounterProviderGuid,
64
                                 &ProviderContext,
65
                                 &NodeCounterProvider);
66
    if (Status != ERROR_SUCCESS) {
67
        NodeCounterProvider = NULL;
68
        return Status;
69
    }
70

  
71
    Status = PerfSetCounterSetInfo(NodeCounterProvider,
72
                                   &NodeCounterSetInfo.CounterSet,
73
                                   sizeof NodeCounterSetInfo);
74
    if (Status != ERROR_SUCCESS) {
75
        CounterCleanup();
76
        return Status;
77
    }
78
    return ERROR_SUCCESS;
79
}
src/gen/node_perfctr_provider.rc
1
STRINGTABLE
2
BEGIN
3
    1 "Node.js"
4
    2 "Node.js" // {Locked} means don't localize
5
    3 "Node.js performance counters"
6
    5 "HTTP server requests"
7
    6 "HTTP server requests" // {Locked} means don't localize
8
    7 "Number of HTTP server requests"
9
    9 "HTTP server responses"
10
    10 "HTTP server responses" // {Locked} means don't localize
11
    11 "Number of HTTP server responses"
12
    13 "HTTP client requests"
13
    14 "HTTP client requests" // {Locked} means don't localize
14
    15 "Number of HTTP client requests"
15
    17 "HTTP client responses"
16
    18 "HTTP client responses" // {Locked} means don't localize
17
    19 "Number of HTTP client responses"
18
    21 "Active server connections"
19
    22 "Active server connections" // {Locked} means don't localize
20
    23 "Number of server connections"
21
    25 "Network bytes sent"
22
    26 "Network bytes sent" // {Locked} means don't localize
23
    27 "Number of bytes sent using TCP"
24
    29 "Network bytes received"
25
    30 "Network bytes received" // {Locked} means don't localize
26
    31 "Number of bytes received using TCP"
27
    33 "%Time in GC"
28
    34 "%Time in GC" // {Locked} means don't localize
29
    35 "Percent of time for last GC"
30
    37 "Pipe bytes sent"
31
    38 "Pipe bytes sent" // {Locked} means don't localize
32
    39 "Number of bytes sent using pipe"
33
    41 "Pipe bytes received"
34
    42 "Pipe bytes received" // {Locked} means don't localize
35
    43 "Number of bytes received using pipe"
36
END

Also available in: Unified diff