OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This header is designed to give you trace_event macros without specifying | 5 // This header is designed to give you trace_event macros without specifying |
6 // how the events actually get collected and stored. If you need to expose trace | 6 // how the events actually get collected and stored. If you need to expose trace |
7 // event to some other universe, you can copy-and-paste this file, | 7 // event to some other universe, you can copy-and-paste this file, |
8 // implement the TRACE_EVENT_API macros, and do any other necessary fixup for | 8 // implement the TRACE_EVENT_API macros, and do any other necessary fixup for |
9 // the target platform. The end result is that multiple libraries can funnel | 9 // the target platform. The end result is that multiple libraries can funnel |
10 // events through to a shared trace event collector. | 10 // events through to a shared trace event collector. |
11 | 11 |
12 // Trace events are for tracking application performance and resource usage. | 12 // Trace events are for tracking application performance and resource usage. |
13 // Macros are provided to track: | 13 // Macros are provided to track: |
14 // Begin and end of function calls | 14 // Begin and end of function calls |
15 // Counters | 15 // Counters |
16 // | 16 // |
17 // Events are issued against categories. Whereas LOG's | 17 // Events are issued against categories. Whereas LOG's |
18 // categories are statically defined, TRACE categories are created | 18 // categories are statically defined, TRACE categories are created |
19 // implicitly with a string. For example: | 19 // implicitly with a string. For example: |
20 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") | 20 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") |
21 // | 21 // |
22 // Events can be INSTANT, or can be pairs of BEGIN and END in the same scope: | 22 // Events can be INSTANT, or can be pairs of BEGIN and END in the same scope: |
23 // TRACE_EVENT_BEGIN0("MY_SUBSYSTEM", "SomethingCostly") | 23 // TRACE_EVENT_BEGIN0("MY_SUBSYSTEM", "SomethingCostly") |
24 // doSomethingCostly() | 24 // doSomethingCostly() |
25 // TRACE_EVENT_END0("MY_SUBSYSTEM", "SomethingCostly") | 25 // TRACE_EVENT_END0("MY_SUBSYSTEM", "SomethingCostly") |
26 // Note: our tools can't always determine the correct BEGIN/END pairs unless | 26 // Note: our tools can't always determine the correct BEGIN/END pairs unless |
27 // these are used in the same scope. Use START/FINISH macros if you need them | 27 // these are used in the same scope. Use ASYNC_BEGIN/ASYNC_END macros if you |
28 // to be in separate scopes. | 28 // need them to be in separate scopes. |
29 // | 29 // |
30 // A common use case is to trace entire function scopes. This | 30 // A common use case is to trace entire function scopes. This |
31 // issues a trace BEGIN and END automatically: | 31 // issues a trace BEGIN and END automatically: |
32 // void doSomethingCostly() { | 32 // void doSomethingCostly() { |
33 // TRACE_EVENT0("MY_SUBSYSTEM", "doSomethingCostly"); | 33 // TRACE_EVENT0("MY_SUBSYSTEM", "doSomethingCostly"); |
34 // ... | 34 // ... |
35 // } | 35 // } |
36 // | 36 // |
37 // Additional parameters can be associated with an event: | 37 // Additional parameters can be associated with an event: |
38 // void doSomethingCostly2(int howMuch) { | 38 // void doSomethingCostly2(int howMuch) { |
39 // TRACE_EVENT1("MY_SUBSYSTEM", "doSomethingCostly", | 39 // TRACE_EVENT1("MY_SUBSYSTEM", "doSomethingCostly", |
40 // "howMuch", howMuch); | 40 // "howMuch", howMuch); |
41 // ... | 41 // ... |
42 // } | 42 // } |
43 // | 43 // |
44 // The trace system will automatically add to this information the | 44 // The trace system will automatically add to this information the |
45 // current process id, thread id, and a timestamp in microseconds. | 45 // current process id, thread id, and a timestamp in microseconds. |
46 // | 46 // |
47 // To trace an asynchronous procedure such as an IPC send/receive, use START and | 47 // To trace an asynchronous procedure such as an IPC send/receive, use |
48 // FINISH: | 48 // ASYNC_BEGIN and ASYNC_END: |
49 // [single threaded sender code] | 49 // [single threaded sender code] |
50 // static int send_count = 0; | 50 // static int send_count = 0; |
51 // ++send_count; | 51 // ++send_count; |
52 // TRACE_EVENT_START0("ipc", "message", send_count); | 52 // TRACE_EVENT_ASYNC_BEGIN0("ipc", "message", send_count); |
53 // Send(new MyMessage(send_count)); | 53 // Send(new MyMessage(send_count)); |
54 // [receive code] | 54 // [receive code] |
55 // void OnMyMessage(send_count) { | 55 // void OnMyMessage(send_count) { |
56 // TRACE_EVENT_FINISH0("ipc", "message", send_count); | 56 // TRACE_EVENT_ASYNC_END0("ipc", "message", send_count); |
57 // } | 57 // } |
58 // The third parameter is a unique ID to match START/FINISH pairs. | 58 // The third parameter is a unique ID to match ASYNC_BEGIN/ASYNC_END pairs. |
59 // START and FINISH can occur on any thread of any traced process. Pointers can | 59 // ASYNC_BEGIN and ASYNC_END can occur on any thread of any traced process. |
60 // be used for the ID parameter, and they will be mangled internally so that | 60 // Pointers can be used for the ID parameter, and they will be mangled |
61 // the same pointer on two different processes will not match. For example: | 61 // internally so that the same pointer on two different processes will not |
| 62 // match. For example: |
62 // class MyTracedClass { | 63 // class MyTracedClass { |
63 // public: | 64 // public: |
64 // MyTracedClass() { | 65 // MyTracedClass() { |
65 // TRACE_EVENT_START0("category", "MyTracedClass", this); | 66 // TRACE_EVENT_ASYNC_BEGIN0("category", "MyTracedClass", this); |
66 // } | 67 // } |
67 // ~MyTracedClass() { | 68 // ~MyTracedClass() { |
68 // TRACE_EVENT_FINISH0("category", "MyTracedClass", this); | 69 // TRACE_EVENT_ASYNC_END0("category", "MyTracedClass", this); |
69 // } | 70 // } |
70 // } | 71 // } |
71 // | 72 // |
72 // Trace event also supports counters, which is a way to track a quantity | 73 // Trace event also supports counters, which is a way to track a quantity |
73 // as it varies over time. Counters are created with the following macro: | 74 // as it varies over time. Counters are created with the following macro: |
74 // TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter", g_myCounterValue); | 75 // TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter", g_myCounterValue); |
75 // | 76 // |
76 // Counters are process-specific. The macro itself can be issued from any | 77 // Counters are process-specific. The macro itself can be issued from any |
77 // thread, however. | 78 // thread, however. |
78 // | 79 // |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 value1_name, static_cast<int>(value1_val), \ | 371 value1_name, static_cast<int>(value1_val), \ |
371 value2_name, static_cast<int>(value2_val)) | 372 value2_name, static_cast<int>(value2_val)) |
372 #define TRACE_COPY_COUNTER_ID2(category, name, id, value1_name, value1_val, \ | 373 #define TRACE_COPY_COUNTER_ID2(category, name, id, value1_name, value1_val, \ |
373 value2_name, value2_val) \ | 374 value2_name, value2_val) \ |
374 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \ | 375 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \ |
375 category, name, id, TRACE_EVENT_FLAG_COPY, \ | 376 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
376 value1_name, static_cast<int>(value1_val), \ | 377 value1_name, static_cast<int>(value1_val), \ |
377 value2_name, static_cast<int>(value2_val)) | 378 value2_name, static_cast<int>(value2_val)) |
378 | 379 |
379 | 380 |
380 // Records a single START event called "name" immediately, with 0, 1 or 2 | 381 // Records a single ASYNC_BEGIN event called "name" immediately, with 0, 1 or 2 |
381 // associated arguments. If the category is not enabled, then this | 382 // associated arguments. If the category is not enabled, then this |
382 // does nothing. | 383 // does nothing. |
383 // - category and name strings must have application lifetime (statics or | 384 // - category and name strings must have application lifetime (statics or |
384 // literals). They may not include " chars. | 385 // literals). They may not include " chars. |
385 // - |id| is used to match the START event with the FINISH event. It must either | 386 // - |id| is used to match the ASYNC_BEGIN event with the ASYNC_END event. ASYNC |
386 // be a pointer or an integer value up to 64 bits. If it's a pointer, the bits | 387 // events are considered to match if their category, name and id values all |
387 // will be xored with a hash of the process ID so that the same pointer on | 388 // match. |id| must either be a pointer or an integer value up to 64 bits. If |
388 // two different processes will not collide. | 389 // it's a pointer, the bits will be xored with a hash of the process ID so |
389 #define TRACE_EVENT_START0(category, name, id) \ | 390 // that the same pointer on two different processes will not collide. |
390 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ | 391 #define TRACE_EVENT_ASYNC_BEGIN0(category, name, id) \ |
| 392 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
391 category, name, id, TRACE_EVENT_FLAG_NONE) | 393 category, name, id, TRACE_EVENT_FLAG_NONE) |
392 #define TRACE_EVENT_START1(category, name, id, arg1_name, arg1_val) \ | 394 #define TRACE_EVENT_ASYNC_BEGIN1(category, name, id, arg1_name, arg1_val) \ |
393 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ | 395 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
394 category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) | 396 category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) |
395 #define TRACE_EVENT_START2(category, name, id, arg1_name, arg1_val, \ | 397 #define TRACE_EVENT_ASYNC_BEGIN2(category, name, id, arg1_name, arg1_val, \ |
396 arg2_name, arg2_val) \ | 398 arg2_name, arg2_val) \ |
397 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ | 399 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
398 category, name, id, TRACE_EVENT_FLAG_NONE, \ | 400 category, name, id, TRACE_EVENT_FLAG_NONE, \ |
399 arg1_name, arg1_val, arg2_name, arg2_val) | 401 arg1_name, arg1_val, arg2_name, arg2_val) |
400 #define TRACE_EVENT_COPY_START0(category, name, id) \ | 402 #define TRACE_EVENT_COPY_ASYNC_BEGIN0(category, name, id) \ |
401 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ | 403 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
402 category, name, id, TRACE_EVENT_FLAG_COPY) | 404 category, name, id, TRACE_EVENT_FLAG_COPY) |
403 #define TRACE_EVENT_COPY_START1(category, name, id, arg1_name, arg1_val) \ | 405 #define TRACE_EVENT_COPY_ASYNC_BEGIN1(category, name, id, arg1_name, arg1_val) \ |
404 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ | 406 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
405 category, name, id, TRACE_EVENT_FLAG_COPY, \ | 407 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
406 arg1_name, arg1_val) | 408 arg1_name, arg1_val) |
407 #define TRACE_EVENT_COPY_START2(category, name, id, arg1_name, arg1_val, \ | 409 #define TRACE_EVENT_COPY_ASYNC_BEGIN2(category, name, id, arg1_name, arg1_val, \ |
408 arg2_name, arg2_val) \ | 410 arg2_name, arg2_val) \ |
409 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ | 411 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
410 category, name, id, TRACE_EVENT_FLAG_COPY, \ | 412 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
411 arg1_name, arg1_val, arg2_name, arg2_val) | 413 arg1_name, arg1_val, arg2_name, arg2_val) |
412 | 414 |
413 // Records a single FINISH event for "name" immediately. If the category | 415 // Records a single ASYNC_STEP event for "name" immediately. If the category |
414 // is not enabled, then this does nothing. | 416 // is not enabled, then this does nothing. |
415 #define TRACE_EVENT_FINISH0(category, name, id) \ | 417 #define TRACE_EVENT_ASYNC_STEP0(category, name, id) \ |
416 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ | 418 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \ |
417 category, name, id, TRACE_EVENT_FLAG_NONE) | 419 category, name, id, TRACE_EVENT_FLAG_NONE) |
418 #define TRACE_EVENT_FINISH1(category, name, id, arg1_name, arg1_val) \ | 420 #define TRACE_EVENT_ASYNC_STEP1(category, name, id, arg1_name, arg1_val) \ |
419 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ | 421 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \ |
420 category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) | 422 category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) |
421 #define TRACE_EVENT_FINISH2(category, name, id, arg1_name, arg1_val, \ | 423 #define TRACE_EVENT_ASYNC_STEP2(category, name, id, arg1_name, arg1_val, \ |
422 arg2_name, arg2_val) \ | 424 arg2_name, arg2_val) \ |
423 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ | 425 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \ |
424 category, name, id, TRACE_EVENT_FLAG_NONE, \ | 426 category, name, id, TRACE_EVENT_FLAG_NONE, \ |
425 arg1_name, arg1_val, arg2_name, arg2_val) | 427 arg1_name, arg1_val, arg2_name, arg2_val) |
426 #define TRACE_EVENT_COPY_FINISH0(category, name, id) \ | 428 #define TRACE_EVENT_COPY_ASYNC_STEP0(category, name, id) \ |
427 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ | 429 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \ |
428 category, name, id, TRACE_EVENT_FLAG_COPY) | 430 category, name, id, TRACE_EVENT_FLAG_COPY) |
429 #define TRACE_EVENT_COPY_FINISH1(category, name, id, arg1_name, arg1_val) \ | 431 #define TRACE_EVENT_COPY_ASYNC_STEP1(category, name, id, arg1_name, arg1_val) \ |
430 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ | 432 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \ |
431 category, name, id, TRACE_EVENT_FLAG_COPY, \ | 433 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
432 arg1_name, arg1_val) | 434 arg1_name, arg1_val) |
433 #define TRACE_EVENT_COPY_FINISH2(category, name, id, arg1_name, arg1_val, \ | 435 #define TRACE_EVENT_COPY_ASYNC_STEP2(category, name, id, arg1_name, arg1_val, \ |
434 arg2_name, arg2_val) \ | 436 arg2_name, arg2_val) \ |
435 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ | 437 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \ |
436 category, name, id, TRACE_EVENT_FLAG_COPY, \ | 438 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
437 arg1_name, arg1_val, arg2_name, arg2_val) | 439 arg1_name, arg1_val, arg2_name, arg2_val) |
438 | 440 |
| 441 // Records a single ASYNC_END event for "name" immediately. If the category |
| 442 // is not enabled, then this does nothing. |
| 443 #define TRACE_EVENT_ASYNC_END0(category, name, id) \ |
| 444 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ |
| 445 category, name, id, TRACE_EVENT_FLAG_NONE) |
| 446 #define TRACE_EVENT_ASYNC_END1(category, name, id, arg1_name, arg1_val) \ |
| 447 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ |
| 448 category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) |
| 449 #define TRACE_EVENT_ASYNC_END2(category, name, id, arg1_name, arg1_val, \ |
| 450 arg2_name, arg2_val) \ |
| 451 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ |
| 452 category, name, id, TRACE_EVENT_FLAG_NONE, \ |
| 453 arg1_name, arg1_val, arg2_name, arg2_val) |
| 454 #define TRACE_EVENT_COPY_ASYNC_END0(category, name, id) \ |
| 455 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ |
| 456 category, name, id, TRACE_EVENT_FLAG_COPY) |
| 457 #define TRACE_EVENT_COPY_ASYNC_END1(category, name, id, arg1_name, arg1_val) \ |
| 458 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ |
| 459 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
| 460 arg1_name, arg1_val) |
| 461 #define TRACE_EVENT_COPY_ASYNC_END2(category, name, id, arg1_name, arg1_val, \ |
| 462 arg2_name, arg2_val) \ |
| 463 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \ |
| 464 category, name, id, TRACE_EVENT_FLAG_COPY, \ |
| 465 arg1_name, arg1_val, arg2_name, arg2_val) |
| 466 |
439 | 467 |
440 //////////////////////////////////////////////////////////////////////////////// | 468 //////////////////////////////////////////////////////////////////////////////// |
441 // Implementation specific tracing API definitions. | 469 // Implementation specific tracing API definitions. |
442 | 470 |
443 // Get a pointer to the enabled state of the given trace category. Only | 471 // Get a pointer to the enabled state of the given trace category. Only |
444 // long-lived literal strings should be given as the category name. The returned | 472 // long-lived literal strings should be given as the category name. The returned |
445 // pointer can be held permanently in a local static for example. If the | 473 // pointer can be held permanently in a local static for example. If the |
446 // unsigned char is non-zero, tracing is enabled. If tracing is enabled, | 474 // unsigned char is non-zero, tracing is enabled. If tracing is enabled, |
447 // TRACE_EVENT_API_ADD_TRACE_EVENT can be called. It's OK if tracing is disabled | 475 // TRACE_EVENT_API_ADD_TRACE_EVENT can be called. It's OK if tracing is disabled |
448 // between the load of the tracing state and the call to | 476 // between the load of the tracing state and the call to |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 | 591 |
564 // Notes regarding the following definitions: | 592 // Notes regarding the following definitions: |
565 // New values can be added and propagated to third party libraries, but existing | 593 // New values can be added and propagated to third party libraries, but existing |
566 // definitions must never be changed, because third party libraries may use old | 594 // definitions must never be changed, because third party libraries may use old |
567 // definitions. | 595 // definitions. |
568 | 596 |
569 // Phase indicates the nature of an event entry. E.g. part of a begin/end pair. | 597 // Phase indicates the nature of an event entry. E.g. part of a begin/end pair. |
570 #define TRACE_EVENT_PHASE_BEGIN ('B') | 598 #define TRACE_EVENT_PHASE_BEGIN ('B') |
571 #define TRACE_EVENT_PHASE_END ('E') | 599 #define TRACE_EVENT_PHASE_END ('E') |
572 #define TRACE_EVENT_PHASE_INSTANT ('I') | 600 #define TRACE_EVENT_PHASE_INSTANT ('I') |
573 #define TRACE_EVENT_PHASE_START ('S') | 601 #define TRACE_EVENT_PHASE_ASYNC_BEGIN ('S') |
574 #define TRACE_EVENT_PHASE_FINISH ('F') | 602 #define TRACE_EVENT_PHASE_ASYNC_STEP ('T') |
| 603 #define TRACE_EVENT_PHASE_ASYNC_END ('F') |
575 #define TRACE_EVENT_PHASE_METADATA ('M') | 604 #define TRACE_EVENT_PHASE_METADATA ('M') |
576 #define TRACE_EVENT_PHASE_COUNTER ('C') | 605 #define TRACE_EVENT_PHASE_COUNTER ('C') |
577 | 606 |
578 // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. | 607 // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. |
579 #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned char>(0)) | 608 #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned char>(0)) |
580 #define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1 << 0)) | 609 #define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1 << 0)) |
581 #define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1 << 1)) | 610 #define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1 << 1)) |
582 #define TRACE_EVENT_FLAG_MANGLE_ID (static_cast<unsigned char>(1 << 2)) | 611 #define TRACE_EVENT_FLAG_MANGLE_ID (static_cast<unsigned char>(1 << 2)) |
583 | 612 |
584 // Type values for identifying types in the TraceValue union. | 613 // Type values for identifying types in the TraceValue union. |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 const char* name; | 857 const char* name; |
829 int threshold_begin_id; | 858 int threshold_begin_id; |
830 }; | 859 }; |
831 Data* p_data_; | 860 Data* p_data_; |
832 Data data_; | 861 Data data_; |
833 }; | 862 }; |
834 | 863 |
835 } // namespace trace_event_internal | 864 } // namespace trace_event_internal |
836 | 865 |
837 #endif // BASE_DEBUG_TRACE_EVENT_H_ | 866 #endif // BASE_DEBUG_TRACE_EVENT_H_ |
OLD | NEW |