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

Side by Side Diff: base/tracked_objects.h

Issue 1001833005: Update from https://crrev.com/320343 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Supress Created 5 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
« no previous file with comments | « base/trace_event/trace_event_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 <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <stack> 10 #include <stack>
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 233
234 class BASE_EXPORT Births: public BirthOnThread { 234 class BASE_EXPORT Births: public BirthOnThread {
235 public: 235 public:
236 Births(const Location& location, const ThreadData& current); 236 Births(const Location& location, const ThreadData& current);
237 237
238 int birth_count() const; 238 int birth_count() const;
239 239
240 // When we have a birth we update the count for this birthplace. 240 // When we have a birth we update the count for this birthplace.
241 void RecordBirth(); 241 void RecordBirth();
242 242
243 // When a birthplace is changed (updated), we need to decrement the counter
244 // for the old instance.
245 void ForgetBirth();
246
247 // Hack to quickly reset all counts to zero.
248 void Clear();
249
250 private: 243 private:
251 // The number of births on this thread for our location_. 244 // The number of births on this thread for our location_.
252 int birth_count_; 245 int birth_count_;
253 246
254 DISALLOW_COPY_AND_ASSIGN(Births); 247 DISALLOW_COPY_AND_ASSIGN(Births);
255 }; 248 };
256 249
257 //------------------------------------------------------------------------------ 250 //------------------------------------------------------------------------------
258 // Basic info summarizing multiple destructions of a tracked object with a 251 // Basic info summarizing multiple destructions of a tracked object with a
259 // single birthplace (fixed Location). Used both on specific threads, and also 252 // single birthplace (fixed Location). Used both on specific threads, and also
(...skipping 17 matching lines...) Expand all
277 270
278 // Metrics accessors, used only for serialization and in tests. 271 // Metrics accessors, used only for serialization and in tests.
279 int count() const; 272 int count() const;
280 int32 run_duration_sum() const; 273 int32 run_duration_sum() const;
281 int32 run_duration_max() const; 274 int32 run_duration_max() const;
282 int32 run_duration_sample() const; 275 int32 run_duration_sample() const;
283 int32 queue_duration_sum() const; 276 int32 queue_duration_sum() const;
284 int32 queue_duration_max() const; 277 int32 queue_duration_max() const;
285 int32 queue_duration_sample() const; 278 int32 queue_duration_sample() const;
286 279
287 // Reset the max values to zero.
288 void ResetMax();
289
290 // Reset all tallies to zero. This is used as a hack on realtime data. 280 // Reset all tallies to zero. This is used as a hack on realtime data.
291 void Clear(); 281 void Clear();
292 282
293 private: 283 private:
294 // Members are ordered from most regularly read and updated, to least 284 // Members are ordered from most regularly read and updated, to least
295 // frequently used. This might help a bit with cache lines. 285 // frequently used. This might help a bit with cache lines.
296 // Number of runs seen (divisor for calculating averages). 286 // Number of runs seen (divisor for calculating averages).
297 int count_; 287 int count_;
298 // Basic tallies, used to compute averages. 288 // Basic tallies, used to compute averages.
299 int32 run_duration_sum_; 289 int32 run_duration_sum_;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 // only used by the message loop, which has a well defined thread name. 369 // only used by the message loop, which has a well defined thread name.
380 static void InitializeThreadContext(const std::string& suggested_name); 370 static void InitializeThreadContext(const std::string& suggested_name);
381 371
382 // Using Thread Local Store, find the current instance for collecting data. 372 // Using Thread Local Store, find the current instance for collecting data.
383 // If an instance does not exist, construct one (and remember it for use on 373 // If an instance does not exist, construct one (and remember it for use on
384 // this thread. 374 // this thread.
385 // This may return NULL if the system is disabled for any reason. 375 // This may return NULL if the system is disabled for any reason.
386 static ThreadData* Get(); 376 static ThreadData* Get();
387 377
388 // Fills |process_data| with all the recursive results in our process. 378 // Fills |process_data| with all the recursive results in our process.
389 // During the scavenging, if |reset_max| is true, then the DeathData instances 379 static void Snapshot(ProcessDataSnapshot* process_data);
390 // max-values are reset to zero during this scan.
391 static void Snapshot(bool reset_max, ProcessDataSnapshot* process_data);
392 380
393 // Finds (or creates) a place to count births from the given location in this 381 // Finds (or creates) a place to count births from the given location in this
394 // thread, and increment that tally. 382 // thread, and increment that tally.
395 // TallyABirthIfActive will returns NULL if the birth cannot be tallied. 383 // TallyABirthIfActive will returns NULL if the birth cannot be tallied.
396 static Births* TallyABirthIfActive(const Location& location); 384 static Births* TallyABirthIfActive(const Location& location);
397 385
398 // Records the end of a timed run of an object. The |completed_task| contains 386 // Records the end of a timed run of an object. The |completed_task| contains
399 // a pointer to a Births, the time_posted, and a delayed_start_time if any. 387 // a pointer to a Births, the time_posted, and a delayed_start_time if any.
400 // The |start_of_run| indicates when we started to perform the run of the 388 // The |start_of_run| indicates when we started to perform the run of the
401 // task. The delayed_start_time is non-null for tasks that were posted as 389 // task. The delayed_start_time is non-null for tasks that were posted as
(...skipping 18 matching lines...) Expand all
420 const TaskStopwatch& stopwatch); 408 const TaskStopwatch& stopwatch);
421 409
422 // Record the end of execution in region, generally corresponding to a scope 410 // Record the end of execution in region, generally corresponding to a scope
423 // being exited. 411 // being exited.
424 static void TallyRunInAScopedRegionIfTracking( 412 static void TallyRunInAScopedRegionIfTracking(
425 const Births* birth, 413 const Births* birth,
426 const TaskStopwatch& stopwatch); 414 const TaskStopwatch& stopwatch);
427 415
428 const std::string& thread_name() const { return thread_name_; } 416 const std::string& thread_name() const { return thread_name_; }
429 417
430 // Hack: asynchronously clear all birth counts and death tallies data values
431 // in all ThreadData instances. The numerical (zeroing) part is done without
432 // use of a locks or atomics exchanges, and may (for int64 values) produce
433 // bogus counts VERY rarely.
434 static void ResetAllThreadData();
435
436 // Initializes all statics if needed (this initialization call should be made 418 // Initializes all statics if needed (this initialization call should be made
437 // while we are single threaded). Returns false if unable to initialize. 419 // while we are single threaded). Returns false if unable to initialize.
438 static bool Initialize(); 420 static bool Initialize();
439 421
440 // Sets internal status_. 422 // Sets internal status_.
441 // If |status| is false, then status_ is set to DEACTIVATED. 423 // If |status| is false, then status_ is set to DEACTIVATED.
442 // If |status| is true, then status_ is set to, PROFILING_ACTIVE, or 424 // If |status| is true, then status_ is set to, PROFILING_ACTIVE, or
443 // PROFILING_CHILDREN_ACTIVE. 425 // PROFILING_CHILDREN_ACTIVE.
444 // If tracking is not compiled in, this function will return false. 426 // If tracking is not compiled in, this function will return false.
445 // If parent-child tracking is not compiled in, then an attempt to set the 427 // If parent-child tracking is not compiled in, then an attempt to set the
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 // In this thread's data, record a new birth. 505 // In this thread's data, record a new birth.
524 Births* TallyABirth(const Location& location); 506 Births* TallyABirth(const Location& location);
525 507
526 // Find a place to record a death on this thread. 508 // Find a place to record a death on this thread.
527 void TallyADeath(const Births& birth, 509 void TallyADeath(const Births& birth,
528 int32 queue_duration, 510 int32 queue_duration,
529 const TaskStopwatch& stopwatch); 511 const TaskStopwatch& stopwatch);
530 512
531 // Snapshot (under a lock) the profiled data for the tasks in each ThreadData 513 // Snapshot (under a lock) the profiled data for the tasks in each ThreadData
532 // instance. Also updates the |birth_counts| tally for each task to keep 514 // instance. Also updates the |birth_counts| tally for each task to keep
533 // track of the number of living instances of the task. If |reset_max| is 515 // track of the number of living instances of the task.
534 // true, then the max values in each DeathData instance are reset during the 516 static void SnapshotAllExecutedTasks(ProcessDataSnapshot* process_data,
535 // scan.
536 static void SnapshotAllExecutedTasks(bool reset_max,
537 ProcessDataSnapshot* process_data,
538 BirthCountMap* birth_counts); 517 BirthCountMap* birth_counts);
539 518
540 // Snapshots (under a lock) the profiled data for the tasks for this thread 519 // Snapshots (under a lock) the profiled data for the tasks for this thread
541 // and writes all of the executed tasks' data -- i.e. the data for the tasks 520 // and writes all of the executed tasks' data -- i.e. the data for the tasks
542 // with with entries in the death_map_ -- into |process_data|. Also updates 521 // with with entries in the death_map_ -- into |process_data|. Also updates
543 // the |birth_counts| tally for each task to keep track of the number of 522 // the |birth_counts| tally for each task to keep track of the number of
544 // living instances of the task -- that is, each task maps to the number of 523 // living instances of the task -- that is, each task maps to the number of
545 // births for the task that have not yet been balanced by a death. If 524 // births for the task that have not yet been balanced by a death.
546 // |reset_max| is true, then the max values in each DeathData instance are 525 void SnapshotExecutedTasks(ProcessDataSnapshot* process_data,
547 // reset during the scan.
548 void SnapshotExecutedTasks(bool reset_max,
549 ProcessDataSnapshot* process_data,
550 BirthCountMap* birth_counts); 526 BirthCountMap* birth_counts);
551 527
552 // Using our lock, make a copy of the specified maps. This call may be made 528 // Using our lock, make a copy of the specified maps. This call may be made
553 // on non-local threads, which necessitate the use of the lock to prevent 529 // on non-local threads, which necessitate the use of the lock to prevent
554 // the map(s) from being reallocated while they are copied. If |reset_max| is 530 // the map(s) from being reallocated while they are copied.
555 // true, then, just after we copy the DeathMap, we will set the max values to 531 void SnapshotMaps(BirthMap* birth_map,
556 // zero in the active DeathMap (not the snapshot).
557 void SnapshotMaps(bool reset_max,
558 BirthMap* birth_map,
559 DeathMap* death_map, 532 DeathMap* death_map,
560 ParentChildSet* parent_child_set); 533 ParentChildSet* parent_child_set);
561 534
562 // Using our lock to protect the iteration, Clear all birth and death data.
563 void Reset();
564
565 // This method is called by the TLS system when a thread terminates. 535 // This method is called by the TLS system when a thread terminates.
566 // The argument may be NULL if this thread has never tracked a birth or death. 536 // The argument may be NULL if this thread has never tracked a birth or death.
567 static void OnThreadTermination(void* thread_data); 537 static void OnThreadTermination(void* thread_data);
568 538
569 // This method should be called when a worker thread terminates, so that we 539 // This method should be called when a worker thread terminates, so that we
570 // can save all the thread data into a cache of reusable ThreadData instances. 540 // can save all the thread data into a cache of reusable ThreadData instances.
571 void OnThreadTerminationCleanup(); 541 void OnThreadTerminationCleanup();
572 542
573 // Cleans up data structures, and returns statics to near pristine (mostly 543 // Cleans up data structures, and returns statics to near pristine (mostly
574 // uninitialized) state. If there is any chance that other threads are still 544 // uninitialized) state. If there is any chance that other threads are still
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 ~ProcessDataSnapshot(); 754 ~ProcessDataSnapshot();
785 755
786 std::vector<TaskSnapshot> tasks; 756 std::vector<TaskSnapshot> tasks;
787 std::vector<ParentChildPairSnapshot> descendants; 757 std::vector<ParentChildPairSnapshot> descendants;
788 int process_id; 758 int process_id;
789 }; 759 };
790 760
791 } // namespace tracked_objects 761 } // namespace tracked_objects
792 762
793 #endif // BASE_TRACKED_OBJECTS_H_ 763 #endif // BASE_TRACKED_OBJECTS_H_
OLDNEW
« no previous file with comments | « base/trace_event/trace_event_unittest.cc ('k') | base/tracked_objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698