16ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// Copyright 2010 the V8 project authors. All rights reserved.
26ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// Redistribution and use in source and binary forms, with or without
36ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// modification, are permitted provided that the following conditions are
46ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// met:
56ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//
66ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//     * Redistributions of source code must retain the above copyright
76ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//       notice, this list of conditions and the following disclaimer.
86ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//     * Redistributions in binary form must reproduce the above
96ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//       copyright notice, this list of conditions and the following
106ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//       disclaimer in the documentation and/or other materials provided
116ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//       with the distribution.
126ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//     * Neither the name of Google Inc. nor the names of its
136ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//       contributors may be used to endorse or promote products derived
146ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//       from this software without specific prior written permission.
156ded16be15dd865a9b21ea304d5273c8be299c87Steve Block//
166ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
176ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
186ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
196ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
206ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
216ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
226ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
236ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
246ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
256ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
266ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
276ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
286ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#ifndef V8_PROFILE_GENERATOR_INL_H_
296ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#define V8_PROFILE_GENERATOR_INL_H_
306ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
316ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#include "profile-generator.h"
326ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
336ded16be15dd865a9b21ea304d5273c8be299c87Steve Blocknamespace v8 {
346ded16be15dd865a9b21ea304d5273c8be299c87Steve Blocknamespace internal {
356ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
36791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Blockconst char* StringsStorage::GetFunctionName(String* name) {
37791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block  return GetFunctionName(GetName(name));
38791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block}
39791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block
40791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block
41791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Blockconst char* StringsStorage::GetFunctionName(const char* name) {
42791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block  return strlen(name) > 0 ? name : ProfileGenerator::kAnonymousFunctionName;
43791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block}
44791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block
45791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block
466ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockCodeEntry::CodeEntry(Logger::LogEventsAndTags tag,
476ded16be15dd865a9b21ea304d5273c8be299c87Steve Block                     const char* name_prefix,
486ded16be15dd865a9b21ea304d5273c8be299c87Steve Block                     const char* name,
496ded16be15dd865a9b21ea304d5273c8be299c87Steve Block                     const char* resource_name,
50f7060e27768c550ace7ec48ad8c093466db52dfaLeon Clarke                     int line_number,
51f7060e27768c550ace7ec48ad8c093466db52dfaLeon Clarke                     int security_token_id)
520d5e116f6aee03185f237311a943491bb079a768Kristian Monsen    : tag_(tag),
536ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      name_prefix_(name_prefix),
546ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      name_(name),
556ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      resource_name_(resource_name),
56f7060e27768c550ace7ec48ad8c093466db52dfaLeon Clarke      line_number_(line_number),
57e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch      shared_id_(0),
58f7060e27768c550ace7ec48ad8c093466db52dfaLeon Clarke      security_token_id_(security_token_id) {
596ded16be15dd865a9b21ea304d5273c8be299c87Steve Block}
606ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
616ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
626ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockbool CodeEntry::is_js_function_tag(Logger::LogEventsAndTags tag) {
636ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  return tag == Logger::FUNCTION_TAG
646ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      || tag == Logger::LAZY_COMPILE_TAG
656ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      || tag == Logger::SCRIPT_TAG
666ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      || tag == Logger::NATIVE_FUNCTION_TAG
676ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      || tag == Logger::NATIVE_LAZY_COMPILE_TAG
686ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      || tag == Logger::NATIVE_SCRIPT_TAG;
696ded16be15dd865a9b21ea304d5273c8be299c87Steve Block}
706ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
716ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
726ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockProfileNode::ProfileNode(ProfileTree* tree, CodeEntry* entry)
736ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    : tree_(tree),
746ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      entry_(entry),
756ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      total_ticks_(0),
766ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      self_ticks_(0),
776ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      children_(CodeEntriesMatch) {
786ded16be15dd865a9b21ea304d5273c8be299c87Steve Block}
796ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
806ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
816ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockCodeEntry* ProfileGenerator::EntryForVMState(StateTag tag) {
826ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  switch (tag) {
836ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    case GC:
846ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      return gc_entry_;
856ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    case JS:
866ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    case COMPILER:
876ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    // DOM events handlers are reported as OTHER / EXTERNAL entries.
886ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    // To avoid confusing people, let's put all these entries into
896ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    // one bucket.
906ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    case OTHER:
916ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    case EXTERNAL:
926ded16be15dd865a9b21ea304d5273c8be299c87Steve Block      return program_entry_;
936ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    default: return NULL;
946ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  }
956ded16be15dd865a9b21ea304d5273c8be299c87Steve Block}
966ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
978a31eba00023874d4a1dcdc5f411cc4336776874Shimeng (Simon) Wang
983ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochSnapshotObjectId HeapObjectsMap::GetNthGcSubrootId(int delta) {
993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return kGcRootsFirstSubrootId + delta * kObjectIdStep;
1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochHeapObject* V8HeapExplorer::GetNthGcSubrootObject(int delta) {
1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return reinterpret_cast<HeapObject*>(
1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      reinterpret_cast<char*>(kFirstGcSubrootObject) +
1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      delta * HeapObjectsMap::kObjectIdStep);
1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochint V8HeapExplorer::GetGcSubrootOrder(HeapObject* subroot) {
1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return static_cast<int>(
1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      (reinterpret_cast<char*>(subroot) -
1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch       reinterpret_cast<char*>(kFirstGcSubrootObject)) /
1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      HeapObjectsMap::kObjectIdStep);
115c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch}
116c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch
1176ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} }  // namespace v8::internal
1186ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
1196ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#endif  // V8_PROFILE_GENERATOR_INL_H_
120