Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Side by Side Diff: base/debug/trace_event.h

Issue 9522010: Add ASYNC_STEP support to trace_event and change START to ASYNC_BEGIN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: just a merge Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/debug/trace_event_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | base/debug/trace_event_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698