OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef BASE_TRACKED_OBJECTS_H_ | 5 #ifndef BASE_TRACKED_OBJECTS_H_ |
6 #define BASE_TRACKED_OBJECTS_H_ | 6 #define BASE_TRACKED_OBJECTS_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/lock.h" | 13 #include "base/lock.h" |
14 #include "base/thread_local_storage.h" | |
15 #include "base/tracked.h" | 14 #include "base/tracked.h" |
| 15 #include "base/threading/thread_local_storage.h" |
16 | 16 |
17 // TrackedObjects provides a database of stats about objects (generally Tasks) | 17 // TrackedObjects provides a database of stats about objects (generally Tasks) |
18 // that are tracked. Tracking means their birth, death, duration, birth thread, | 18 // that are tracked. Tracking means their birth, death, duration, birth thread, |
19 // death thread, and birth place are recorded. This data is carefully spread | 19 // death thread, and birth place are recorded. This data is carefully spread |
20 // across a series of objects so that the counts and times can be rapidly | 20 // across a series of objects so that the counts and times can be rapidly |
21 // updated without (usually) having to lock the data, and hence there is usually | 21 // updated without (usually) having to lock the data, and hence there is usually |
22 // very little contention caused by the tracking. The data can be viewed via | 22 // very little contention caused by the tracking. The data can be viewed via |
23 // the about:tasks URL, with a variety of sorting and filtering choices. | 23 // the about:tasks URL, with a variety of sorting and filtering choices. |
24 // | 24 // |
25 // These classes serve as the basis of a profiler of sorts for the Tasks system. | 25 // These classes serve as the basis of a profiler of sorts for the Tasks system. |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
564 class RunTheStatic; | 564 class RunTheStatic; |
565 #endif | 565 #endif |
566 | 566 |
567 // Each registered thread is called to set status_ to SHUTDOWN. | 567 // Each registered thread is called to set status_ to SHUTDOWN. |
568 // This is done redundantly on every registered thread because it is not | 568 // This is done redundantly on every registered thread because it is not |
569 // protected by a mutex. Running on all threads guarantees we get the | 569 // protected by a mutex. Running on all threads guarantees we get the |
570 // notification into the memory cache of all possible threads. | 570 // notification into the memory cache of all possible threads. |
571 static void ShutdownDisablingFurtherTracking(); | 571 static void ShutdownDisablingFurtherTracking(); |
572 | 572 |
573 // We use thread local store to identify which ThreadData to interact with. | 573 // We use thread local store to identify which ThreadData to interact with. |
574 static TLSSlot tls_index_; | 574 static base::ThreadLocalStorage::Slot tls_index_; |
575 | 575 |
576 // Link to the most recently created instance (starts a null terminated list). | 576 // Link to the most recently created instance (starts a null terminated list). |
577 static ThreadData* first_; | 577 static ThreadData* first_; |
578 // Protection for access to first_. | 578 // Protection for access to first_. |
579 static Lock list_lock_; | 579 static Lock list_lock_; |
580 | 580 |
581 // We set status_ to SHUTDOWN when we shut down the tracking service. This | 581 // We set status_ to SHUTDOWN when we shut down the tracking service. This |
582 // setting is redundantly established by all participating threads so that we | 582 // setting is redundantly established by all participating threads so that we |
583 // are *guaranteed* (without locking) that all threads can "see" the status | 583 // are *guaranteed* (without locking) that all threads can "see" the status |
584 // and avoid additional calls into the service. | 584 // and avoid additional calls into the service. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 }; | 660 }; |
661 static State state_; | 661 static State state_; |
662 | 662 |
663 DISALLOW_COPY_AND_ASSIGN(AutoTracking); | 663 DISALLOW_COPY_AND_ASSIGN(AutoTracking); |
664 }; | 664 }; |
665 | 665 |
666 | 666 |
667 } // namespace tracked_objects | 667 } // namespace tracked_objects |
668 | 668 |
669 #endif // BASE_TRACKED_OBJECTS_H_ | 669 #endif // BASE_TRACKED_OBJECTS_H_ |
OLD | NEW |