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

Side by Side Diff: base/tracked_objects.h

Issue 1538743002: Switch to standard integer types in base/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: DEPS roll too Created 4 years, 11 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
« no previous file with comments | « base/tools_sanity_unittest.cc ('k') | base/tracked_objects.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 #ifndef BASE_TRACKED_OBJECTS_H_ 5 #ifndef BASE_TRACKED_OBJECTS_H_
6 #define BASE_TRACKED_OBJECTS_H_ 6 #define BASE_TRACKED_OBJECTS_H_
7 7
8 #include <stdint.h>
9
8 #include <map> 10 #include <map>
9 #include <set> 11 #include <set>
10 #include <stack> 12 #include <stack>
11 #include <string> 13 #include <string>
12 #include <utility> 14 #include <utility>
13 #include <vector> 15 #include <vector>
14 16
15 #include "base/atomicops.h" 17 #include "base/atomicops.h"
16 #include "base/base_export.h" 18 #include "base/base_export.h"
17 #include "base/basictypes.h"
18 #include "base/containers/hash_tables.h" 19 #include "base/containers/hash_tables.h"
19 #include "base/gtest_prod_util.h" 20 #include "base/gtest_prod_util.h"
20 #include "base/lazy_instance.h" 21 #include "base/lazy_instance.h"
21 #include "base/location.h" 22 #include "base/location.h"
23 #include "base/macros.h"
22 #include "base/process/process_handle.h" 24 #include "base/process/process_handle.h"
23 #include "base/profiler/alternate_timer.h" 25 #include "base/profiler/alternate_timer.h"
24 #include "base/profiler/tracked_time.h" 26 #include "base/profiler/tracked_time.h"
25 #include "base/synchronization/lock.h" 27 #include "base/synchronization/lock.h"
26 #include "base/threading/thread_checker.h" 28 #include "base/threading/thread_checker.h"
27 #include "base/threading/thread_local_storage.h" 29 #include "base/threading/thread_local_storage.h"
28 30
29 namespace base { 31 namespace base {
30 struct TrackingInfo; 32 struct TrackingInfo;
31 } 33 }
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 254
253 struct BASE_EXPORT DeathDataSnapshot { 255 struct BASE_EXPORT DeathDataSnapshot {
254 DeathDataSnapshot(); 256 DeathDataSnapshot();
255 257
256 // Constructs the snapshot from individual values. 258 // Constructs the snapshot from individual values.
257 // The alternative would be taking a DeathData parameter, but this would 259 // The alternative would be taking a DeathData parameter, but this would
258 // create a loop since DeathData indirectly refers DeathDataSnapshot. Passing 260 // create a loop since DeathData indirectly refers DeathDataSnapshot. Passing
259 // a wrapper structure as a param or using an empty constructor for 261 // a wrapper structure as a param or using an empty constructor for
260 // snapshotting DeathData would be less efficient. 262 // snapshotting DeathData would be less efficient.
261 DeathDataSnapshot(int count, 263 DeathDataSnapshot(int count,
262 int32 run_duration_sum, 264 int32_t run_duration_sum,
263 int32 run_duration_max, 265 int32_t run_duration_max,
264 int32 run_duration_sample, 266 int32_t run_duration_sample,
265 int32 queue_duration_sum, 267 int32_t queue_duration_sum,
266 int32 queue_duration_max, 268 int32_t queue_duration_max,
267 int32 queue_duration_sample); 269 int32_t queue_duration_sample);
268 ~DeathDataSnapshot(); 270 ~DeathDataSnapshot();
269 271
270 // Calculates and returns the delta between this snapshot and an earlier 272 // Calculates and returns the delta between this snapshot and an earlier
271 // snapshot of the same task |older|. 273 // snapshot of the same task |older|.
272 DeathDataSnapshot Delta(const DeathDataSnapshot& older) const; 274 DeathDataSnapshot Delta(const DeathDataSnapshot& older) const;
273 275
274 int count; 276 int count;
275 int32 run_duration_sum; 277 int32_t run_duration_sum;
276 int32 run_duration_max; 278 int32_t run_duration_max;
277 int32 run_duration_sample; 279 int32_t run_duration_sample;
278 int32 queue_duration_sum; 280 int32_t queue_duration_sum;
279 int32 queue_duration_max; 281 int32_t queue_duration_max;
280 int32 queue_duration_sample; 282 int32_t queue_duration_sample;
281 }; 283 };
282 284
283 //------------------------------------------------------------------------------ 285 //------------------------------------------------------------------------------
284 // A "snapshotted" representation of the DeathData for a particular profiling 286 // A "snapshotted" representation of the DeathData for a particular profiling
285 // phase. Used as an element of the list of phase snapshots owned by DeathData. 287 // phase. Used as an element of the list of phase snapshots owned by DeathData.
286 288
287 struct DeathDataPhaseSnapshot { 289 struct DeathDataPhaseSnapshot {
288 DeathDataPhaseSnapshot(int profiling_phase, 290 DeathDataPhaseSnapshot(int profiling_phase,
289 int count, 291 int count,
290 int32 run_duration_sum, 292 int32_t run_duration_sum,
291 int32 run_duration_max, 293 int32_t run_duration_max,
292 int32 run_duration_sample, 294 int32_t run_duration_sample,
293 int32 queue_duration_sum, 295 int32_t queue_duration_sum,
294 int32 queue_duration_max, 296 int32_t queue_duration_max,
295 int32 queue_duration_sample, 297 int32_t queue_duration_sample,
296 const DeathDataPhaseSnapshot* prev); 298 const DeathDataPhaseSnapshot* prev);
297 299
298 // Profiling phase at which completion this snapshot was taken. 300 // Profiling phase at which completion this snapshot was taken.
299 int profiling_phase; 301 int profiling_phase;
300 302
301 // Death data snapshot. 303 // Death data snapshot.
302 DeathDataSnapshot death_data; 304 DeathDataSnapshot death_data;
303 305
304 // Pointer to a snapshot from the previous phase. 306 // Pointer to a snapshot from the previous phase.
305 const DeathDataPhaseSnapshot* prev; 307 const DeathDataPhaseSnapshot* prev;
(...skipping 12 matching lines...) Expand all
318 // snapshotted. 320 // snapshotted.
319 321
320 class BASE_EXPORT DeathData { 322 class BASE_EXPORT DeathData {
321 public: 323 public:
322 DeathData(); 324 DeathData();
323 DeathData(const DeathData& other); 325 DeathData(const DeathData& other);
324 ~DeathData(); 326 ~DeathData();
325 327
326 // Update stats for a task destruction (death) that had a Run() time of 328 // Update stats for a task destruction (death) that had a Run() time of
327 // |duration|, and has had a queueing delay of |queue_duration|. 329 // |duration|, and has had a queueing delay of |queue_duration|.
328 void RecordDeath(const int32 queue_duration, 330 void RecordDeath(const int32_t queue_duration,
329 const int32 run_duration, 331 const int32_t run_duration,
330 const uint32 random_number); 332 const uint32_t random_number);
331 333
332 // Metrics and past snapshots accessors, used only for serialization and in 334 // Metrics and past snapshots accessors, used only for serialization and in
333 // tests. 335 // tests.
334 int count() const { return count_; } 336 int count() const { return count_; }
335 int32 run_duration_sum() const { return run_duration_sum_; } 337 int32_t run_duration_sum() const { return run_duration_sum_; }
336 int32 run_duration_max() const { return run_duration_max_; } 338 int32_t run_duration_max() const { return run_duration_max_; }
337 int32 run_duration_sample() const { return run_duration_sample_; } 339 int32_t run_duration_sample() const { return run_duration_sample_; }
338 int32 queue_duration_sum() const { return queue_duration_sum_; } 340 int32_t queue_duration_sum() const { return queue_duration_sum_; }
339 int32 queue_duration_max() const { return queue_duration_max_; } 341 int32_t queue_duration_max() const { return queue_duration_max_; }
340 int32 queue_duration_sample() const { return queue_duration_sample_; } 342 int32_t queue_duration_sample() const { return queue_duration_sample_; }
341 const DeathDataPhaseSnapshot* last_phase_snapshot() const { 343 const DeathDataPhaseSnapshot* last_phase_snapshot() const {
342 return last_phase_snapshot_; 344 return last_phase_snapshot_;
343 } 345 }
344 346
345 // Called when the current profiling phase, identified by |profiling_phase|, 347 // Called when the current profiling phase, identified by |profiling_phase|,
346 // ends. 348 // ends.
347 // Must be called only on the snapshot thread. 349 // Must be called only on the snapshot thread.
348 void OnProfilingPhaseCompleted(int profiling_phase); 350 void OnProfilingPhaseCompleted(int profiling_phase);
349 351
350 private: 352 private:
351 // Members are ordered from most regularly read and updated, to least 353 // Members are ordered from most regularly read and updated, to least
352 // frequently used. This might help a bit with cache lines. 354 // frequently used. This might help a bit with cache lines.
353 // Number of runs seen (divisor for calculating averages). 355 // Number of runs seen (divisor for calculating averages).
354 // Can be incremented only on the death thread. 356 // Can be incremented only on the death thread.
355 int count_; 357 int count_;
356 358
357 // Count used in determining probability of selecting exec/queue times from a 359 // Count used in determining probability of selecting exec/queue times from a
358 // recorded death as samples. 360 // recorded death as samples.
359 // Gets incremented only on the death thread, but can be set to 0 by 361 // Gets incremented only on the death thread, but can be set to 0 by
360 // OnProfilingPhaseCompleted() on the snapshot thread. 362 // OnProfilingPhaseCompleted() on the snapshot thread.
361 int sample_probability_count_; 363 int sample_probability_count_;
362 364
363 // Basic tallies, used to compute averages. Can be incremented only on the 365 // Basic tallies, used to compute averages. Can be incremented only on the
364 // death thread. 366 // death thread.
365 int32 run_duration_sum_; 367 int32_t run_duration_sum_;
366 int32 queue_duration_sum_; 368 int32_t queue_duration_sum_;
367 // Max values, used by local visualization routines. These are often read, 369 // Max values, used by local visualization routines. These are often read,
368 // but rarely updated. The max values get assigned only on the death thread, 370 // but rarely updated. The max values get assigned only on the death thread,
369 // but these fields can be set to 0 by OnProfilingPhaseCompleted() on the 371 // but these fields can be set to 0 by OnProfilingPhaseCompleted() on the
370 // snapshot thread. 372 // snapshot thread.
371 int32 run_duration_max_; 373 int32_t run_duration_max_;
372 int32 queue_duration_max_; 374 int32_t queue_duration_max_;
373 // Samples, used by crowd sourcing gatherers. These are almost never read, 375 // Samples, used by crowd sourcing gatherers. These are almost never read,
374 // and rarely updated. They can be modified only on the death thread. 376 // and rarely updated. They can be modified only on the death thread.
375 int32 run_duration_sample_; 377 int32_t run_duration_sample_;
376 int32 queue_duration_sample_; 378 int32_t queue_duration_sample_;
377 379
378 // Snapshot of this death data made at the last profiling phase completion, if 380 // Snapshot of this death data made at the last profiling phase completion, if
379 // any. DeathData owns the whole list starting with this pointer. 381 // any. DeathData owns the whole list starting with this pointer.
380 // Can be accessed only on the snapshot thread. 382 // Can be accessed only on the snapshot thread.
381 const DeathDataPhaseSnapshot* last_phase_snapshot_; 383 const DeathDataPhaseSnapshot* last_phase_snapshot_;
382 384
383 DISALLOW_ASSIGN(DeathData); 385 DISALLOW_ASSIGN(DeathData);
384 }; 386 };
385 387
386 //------------------------------------------------------------------------------ 388 //------------------------------------------------------------------------------
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 570
569 // Iterate through the null terminated list of ThreadData instances. 571 // Iterate through the null terminated list of ThreadData instances.
570 ThreadData* next() const; 572 ThreadData* next() const;
571 573
572 574
573 // In this thread's data, record a new birth. 575 // In this thread's data, record a new birth.
574 Births* TallyABirth(const Location& location); 576 Births* TallyABirth(const Location& location);
575 577
576 // Find a place to record a death on this thread. 578 // Find a place to record a death on this thread.
577 void TallyADeath(const Births& births, 579 void TallyADeath(const Births& births,
578 int32 queue_duration, 580 int32_t queue_duration,
579 const TaskStopwatch& stopwatch); 581 const TaskStopwatch& stopwatch);
580 582
581 // Snapshots (under a lock) the profiled data for the tasks for this thread 583 // Snapshots (under a lock) the profiled data for the tasks for this thread
582 // and writes all of the executed tasks' data -- i.e. the data for all 584 // and writes all of the executed tasks' data -- i.e. the data for all
583 // profiling phases (including the current one: |current_profiling_phase|) for 585 // profiling phases (including the current one: |current_profiling_phase|) for
584 // the tasks with with entries in the death_map_ -- into |phased_snapshots|. 586 // the tasks with with entries in the death_map_ -- into |phased_snapshots|.
585 // Also updates the |birth_counts| tally for each task to keep track of the 587 // Also updates the |birth_counts| tally for each task to keep track of the
586 // number of living instances of the task -- that is, each task maps to the 588 // number of living instances of the task -- that is, each task maps to the
587 // number of births for the task that have not yet been balanced by a death. 589 // number of births for the task that have not yet been balanced by a death.
588 void SnapshotExecutedTasks(int current_profiling_phase, 590 void SnapshotExecutedTasks(int current_profiling_phase,
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 // threads. To support this, we acquire this lock if we are writing from this 703 // threads. To support this, we acquire this lock if we are writing from this
702 // thread, or reading from another thread. For reading from this thread we 704 // thread, or reading from another thread. For reading from this thread we
703 // don't need a lock, as there is no potential for a conflict since the 705 // don't need a lock, as there is no potential for a conflict since the
704 // writing is only done from this thread. 706 // writing is only done from this thread.
705 mutable base::Lock map_lock_; 707 mutable base::Lock map_lock_;
706 708
707 // A random number that we used to select decide which sample to keep as a 709 // A random number that we used to select decide which sample to keep as a
708 // representative sample in each DeathData instance. We can't start off with 710 // representative sample in each DeathData instance. We can't start off with
709 // much randomness (because we can't call RandInt() on all our threads), so 711 // much randomness (because we can't call RandInt() on all our threads), so
710 // we stir in more and more as we go. 712 // we stir in more and more as we go.
711 uint32 random_number_; 713 uint32_t random_number_;
712 714
713 // Record of what the incarnation_counter_ was when this instance was created. 715 // Record of what the incarnation_counter_ was when this instance was created.
714 // If the incarnation_counter_ has changed, then we avoid pushing into the 716 // If the incarnation_counter_ has changed, then we avoid pushing into the
715 // pool (this is only critical in tests which go through multiple 717 // pool (this is only critical in tests which go through multiple
716 // incarnations). 718 // incarnations).
717 int incarnation_count_for_pool_; 719 int incarnation_count_for_pool_;
718 720
719 // Most recently started (i.e. most nested) stopwatch on the current thread, 721 // Most recently started (i.e. most nested) stopwatch on the current thread,
720 // if it exists; NULL otherwise. 722 // if it exists; NULL otherwise.
721 TaskStopwatch* current_stopwatch_; 723 TaskStopwatch* current_stopwatch_;
(...skipping 19 matching lines...) Expand all
741 // Stops stopwatch. 743 // Stops stopwatch.
742 void Stop(); 744 void Stop();
743 745
744 // Returns the start time. 746 // Returns the start time.
745 TrackedTime StartTime() const; 747 TrackedTime StartTime() const;
746 748
747 // Task's duration is calculated as the wallclock duration between starting 749 // Task's duration is calculated as the wallclock duration between starting
748 // and stopping this stopwatch, minus the wallclock durations of any other 750 // and stopping this stopwatch, minus the wallclock durations of any other
749 // instances that are immediately nested in this one, started and stopped on 751 // instances that are immediately nested in this one, started and stopped on
750 // this thread during that period. 752 // this thread during that period.
751 int32 RunDurationMs() const; 753 int32_t RunDurationMs() const;
752 754
753 // Returns tracking info for the current thread. 755 // Returns tracking info for the current thread.
754 ThreadData* GetThreadData() const; 756 ThreadData* GetThreadData() const;
755 757
756 private: 758 private:
757 // Time when the stopwatch was started. 759 // Time when the stopwatch was started.
758 TrackedTime start_time_; 760 TrackedTime start_time_;
759 761
760 // Wallclock duration of the task. 762 // Wallclock duration of the task.
761 int32 wallclock_duration_ms_; 763 int32_t wallclock_duration_ms_;
762 764
763 // Tracking info for the current thread. 765 // Tracking info for the current thread.
764 ThreadData* current_thread_data_; 766 ThreadData* current_thread_data_;
765 767
766 // Sum of wallclock durations of all stopwatches that were directly nested in 768 // Sum of wallclock durations of all stopwatches that were directly nested in
767 // this one. 769 // this one.
768 int32 excluded_duration_ms_; 770 int32_t excluded_duration_ms_;
769 771
770 // Stopwatch which was running on our thread when this stopwatch was started. 772 // Stopwatch which was running on our thread when this stopwatch was started.
771 // That preexisting stopwatch must be adjusted to the exclude the wallclock 773 // That preexisting stopwatch must be adjusted to the exclude the wallclock
772 // duration of this stopwatch. 774 // duration of this stopwatch.
773 TaskStopwatch* parent_; 775 TaskStopwatch* parent_;
774 776
775 #if DCHECK_IS_ON() 777 #if DCHECK_IS_ON()
776 // State of the stopwatch. Stopwatch is first constructed in a created state 778 // State of the stopwatch. Stopwatch is first constructed in a created state
777 // state, then is optionally started/stopped, then destructed. 779 // state, then is optionally started/stopped, then destructed.
778 enum { CREATED, RUNNING, STOPPED } state_; 780 enum { CREATED, RUNNING, STOPPED } state_;
(...skipping 25 matching lines...) Expand all
804 ProcessDataSnapshot(); 806 ProcessDataSnapshot();
805 ~ProcessDataSnapshot(); 807 ~ProcessDataSnapshot();
806 808
807 PhasedProcessDataSnapshotMap phased_snapshots; 809 PhasedProcessDataSnapshotMap phased_snapshots;
808 base::ProcessId process_id; 810 base::ProcessId process_id;
809 }; 811 };
810 812
811 } // namespace tracked_objects 813 } // namespace tracked_objects
812 814
813 #endif // BASE_TRACKED_OBJECTS_H_ 815 #endif // BASE_TRACKED_OBJECTS_H_
OLDNEW
« no previous file with comments | « base/tools_sanity_unittest.cc ('k') | base/tracked_objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698