1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/ipc/chromium/src/base/tracked.cc Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,94 @@ 1.4 +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1.5 +// Use of this source code is governed by a BSD-style license that can be 1.6 +// found in the LICENSE file. 1.7 + 1.8 +#include "base/tracked.h" 1.9 + 1.10 +#include "base/string_util.h" 1.11 +#include "base/tracked_objects.h" 1.12 + 1.13 +using base::Time; 1.14 + 1.15 +namespace tracked_objects { 1.16 + 1.17 +//------------------------------------------------------------------------------ 1.18 +void Location::Write(bool display_filename, bool display_function_name, 1.19 + std::string* output) const { 1.20 + StringAppendF(output, "%s[%d] ", 1.21 + display_filename ? file_name_ : "line", 1.22 + line_number_); 1.23 + 1.24 + if (display_function_name) { 1.25 + WriteFunctionName(output); 1.26 + output->push_back(' '); 1.27 + } 1.28 +} 1.29 + 1.30 +void Location::WriteFunctionName(std::string* output) const { 1.31 + // Translate "<" to "<" for HTML safety. 1.32 + // TODO(jar): Support ASCII or html for logging in ASCII. 1.33 + for (const char *p = function_name_; *p; p++) { 1.34 + switch (*p) { 1.35 + case '<': 1.36 + output->append("<"); 1.37 + break; 1.38 + 1.39 + case '>': 1.40 + output->append(">"); 1.41 + break; 1.42 + 1.43 + default: 1.44 + output->push_back(*p); 1.45 + break; 1.46 + } 1.47 + } 1.48 +} 1.49 + 1.50 +//------------------------------------------------------------------------------ 1.51 + 1.52 +#ifndef TRACK_ALL_TASK_OBJECTS 1.53 + 1.54 +Tracked::Tracked() {} 1.55 +Tracked::~Tracked() {} 1.56 +void Tracked::SetBirthPlace(const Location& from_here) {} 1.57 +bool Tracked::MissingBirthplace() const { return false; } 1.58 +void Tracked::ResetBirthTime() {} 1.59 + 1.60 +#else 1.61 + 1.62 +Tracked::Tracked() : tracked_births_(NULL), tracked_birth_time_(Time::Now()) { 1.63 + if (!ThreadData::IsActive()) 1.64 + return; 1.65 + SetBirthPlace(Location("NoFunctionName", "NeedToSetBirthPlace", -1)); 1.66 +} 1.67 + 1.68 +Tracked::~Tracked() { 1.69 + if (!ThreadData::IsActive() || !tracked_births_) 1.70 + return; 1.71 + ThreadData::current()->TallyADeath(*tracked_births_, 1.72 + Time::Now() - tracked_birth_time_); 1.73 +} 1.74 + 1.75 +void Tracked::SetBirthPlace(const Location& from_here) { 1.76 + if (!ThreadData::IsActive()) 1.77 + return; 1.78 + if (tracked_births_) 1.79 + tracked_births_->ForgetBirth(); 1.80 + ThreadData* current_thread_data = ThreadData::current(); 1.81 + if (!current_thread_data) 1.82 + return; // Shutdown started, and this thread wasn't registered. 1.83 + tracked_births_ = current_thread_data->FindLifetime(from_here); 1.84 + tracked_births_->RecordBirth(); 1.85 +} 1.86 + 1.87 +void Tracked::ResetBirthTime() { 1.88 + tracked_birth_time_ = Time::Now(); 1.89 +} 1.90 + 1.91 +bool Tracked::MissingBirthplace() const { 1.92 + return -1 == tracked_births_->location().line_number(); 1.93 +} 1.94 + 1.95 +#endif // NDEBUG 1.96 + 1.97 +} // namespace tracked_objects