| 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 |