diff options
Diffstat (limited to 'chromium/v8/src/profile-generator.cc')
-rw-r--r-- | chromium/v8/src/profile-generator.cc | 88 |
1 files changed, 32 insertions, 56 deletions
diff --git a/chromium/v8/src/profile-generator.cc b/chromium/v8/src/profile-generator.cc index acf54da1c7b..5c177923a0f 100644 --- a/chromium/v8/src/profile-generator.cc +++ b/chromium/v8/src/profile-generator.cc @@ -1,41 +1,18 @@ // Copyright 2012 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "v8.h" - -#include "profile-generator-inl.h" - -#include "compiler.h" -#include "debug.h" -#include "sampler.h" -#include "global-handles.h" -#include "scopeinfo.h" -#include "unicode.h" -#include "zone-inl.h" +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/v8.h" + +#include "src/profile-generator-inl.h" + +#include "src/compiler.h" +#include "src/debug.h" +#include "src/sampler.h" +#include "src/global-handles.h" +#include "src/scopeinfo.h" +#include "src/unicode.h" +#include "src/zone-inl.h" namespace v8 { namespace internal { @@ -66,7 +43,7 @@ const char* StringsStorage::GetCopy(const char* src) { HashMap::Entry* entry = GetEntry(src, len); if (entry->value == NULL) { Vector<char> dst = Vector<char>::New(len + 1); - OS::StrNCpy(dst, src, len); + StrNCpy(dst, src, len); dst[len] = '\0'; entry->key = dst.start(); entry->value = entry->key; @@ -99,7 +76,7 @@ const char* StringsStorage::AddOrDisposeString(char* str, int len) { const char* StringsStorage::GetVFormatted(const char* format, va_list args) { Vector<char> str = Vector<char>::New(1024); - int len = OS::VSNPrintF(str, format, args); + int len = VSNPrintF(str, format, args); if (len == -1) { DeleteArray(str.start()); return GetCopy(format); @@ -231,9 +208,9 @@ ProfileNode* ProfileNode::FindOrAddChild(CodeEntry* entry) { void ProfileNode::Print(int indent) { - OS::Print("%5u %*c %s%s %d #%d %s", + OS::Print("%5u %*s %s%s %d #%d %s", self_ticks_, - indent, ' ', + indent, "", entry_->name_prefix(), entry_->name(), entry_->script_id(), @@ -352,23 +329,24 @@ void ProfileTree::TraverseDepthFirst(Callback* callback) { } -CpuProfile::CpuProfile(const char* title, unsigned uid, bool record_samples) +CpuProfile::CpuProfile(const char* title, bool record_samples) : title_(title), - uid_(uid), record_samples_(record_samples), - start_time_(Time::NowFromSystemTime()) { - timer_.Start(); + start_time_(TimeTicks::HighResolutionNow()) { } -void CpuProfile::AddPath(const Vector<CodeEntry*>& path) { +void CpuProfile::AddPath(TimeTicks timestamp, const Vector<CodeEntry*>& path) { ProfileNode* top_frame_node = top_down_.AddPathFromEnd(path); - if (record_samples_) samples_.Add(top_frame_node); + if (record_samples_) { + timestamps_.Add(timestamp); + samples_.Add(top_frame_node); + } } void CpuProfile::CalculateTotalTicksAndSamplingRate() { - end_time_ = start_time_ + timer_.Elapsed(); + end_time_ = TimeTicks::HighResolutionNow(); } @@ -486,9 +464,8 @@ CpuProfilesCollection::~CpuProfilesCollection() { } -bool CpuProfilesCollection::StartProfiling(const char* title, unsigned uid, +bool CpuProfilesCollection::StartProfiling(const char* title, bool record_samples) { - ASSERT(uid > 0); current_profiles_semaphore_.Wait(); if (current_profiles_.length() >= kMaxSimultaneousProfiles) { current_profiles_semaphore_.Signal(); @@ -501,7 +478,7 @@ bool CpuProfilesCollection::StartProfiling(const char* title, unsigned uid, return false; } } - current_profiles_.Add(new CpuProfile(title, uid, record_samples)); + current_profiles_.Add(new CpuProfile(title, record_samples)); current_profiles_semaphore_.Signal(); return true; } @@ -537,9 +514,8 @@ bool CpuProfilesCollection::IsLastProfile(const char* title) { void CpuProfilesCollection::RemoveProfile(CpuProfile* profile) { // Called from VM thread for a completed profile. - unsigned uid = profile->uid(); for (int i = 0; i < finished_profiles_.length(); i++) { - if (uid == finished_profiles_[i]->uid()) { + if (profile == finished_profiles_[i]) { finished_profiles_.Remove(i); return; } @@ -549,13 +525,13 @@ void CpuProfilesCollection::RemoveProfile(CpuProfile* profile) { void CpuProfilesCollection::AddPathToCurrentProfiles( - const Vector<CodeEntry*>& path) { + TimeTicks timestamp, const Vector<CodeEntry*>& path) { // As starting / stopping profiles is rare relatively to this // method, we don't bother minimizing the duration of lock holding, // e.g. copying contents of the list to a local vector. current_profiles_semaphore_.Wait(); for (int i = 0; i < current_profiles_.length(); ++i) { - current_profiles_[i]->AddPath(path); + current_profiles_[i]->AddPath(timestamp, path); } current_profiles_semaphore_.Signal(); } @@ -678,7 +654,7 @@ void ProfileGenerator::RecordTickSample(const TickSample& sample) { } } - profiles_->AddPathToCurrentProfiles(entries); + profiles_->AddPathToCurrentProfiles(sample.timestamp, entries); } |