Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
dart::ProfileFunction Class Reference

#include <profiler_service.h>

Inheritance diagram for dart::ProfileFunction:
dart::ZoneAllocated

Public Types

enum  Kind {
  kDartFunction , kNativeFunction , kTagFunction , kStubFunction ,
  kUnknownFunction
}
 

Public Member Functions

 ProfileFunction (Kind kind, const char *name, const Function &function, const intptr_t table_index)
 
const char * name () const
 
const char * Name () const
 
const Functionfunction () const
 
const char * ResolvedScriptUrl () const
 
bool is_visible () const
 
intptr_t table_index () const
 
Kind kind () const
 
intptr_t exclusive_ticks () const
 
intptr_t inclusive_ticks () const
 
void IncInclusiveTicks ()
 
void Tick (bool exclusive, intptr_t inclusive_serial, TokenPosition token_position)
 
void PrintToJSONArray (JSONArray *functions, bool print_only_ids=false)
 
bool GetSinglePosition (ProfileFunctionSourcePosition *pfsp)
 
void TickSourcePosition (TokenPosition token_position, bool exclusive)
 
intptr_t NumSourcePositions () const
 
const ProfileFunctionSourcePositionGetSourcePosition (intptr_t i) const
 
- Public Member Functions inherited from dart::ZoneAllocated
 ZoneAllocated ()
 
void * operator new (size_t size)
 
void * operator new (size_t size, Zone *zone)
 
void operator delete (void *pointer)
 

Static Public Member Functions

static const char * KindToCString (Kind kind)
 

Friends

class ProfileCode
 
class ProfileBuilder
 

Detailed Description

Definition at line 136 of file profiler_service.h.

Member Enumeration Documentation

◆ Kind

Enumerator
kDartFunction 
kNativeFunction 
kTagFunction 
kStubFunction 
kUnknownFunction 

Definition at line 138 of file profiler_service.h.

138 {
139 kDartFunction, // Dart function.
140 kNativeFunction, // Synthetic function for Native (C/C++).
141 kTagFunction, // Synthetic function for a VM or User tag.
142 kStubFunction, // Synthetic function for stub code.
143 kUnknownFunction, // A singleton function for unknown objects.
144 };

Constructor & Destructor Documentation

◆ ProfileFunction()

dart::ProfileFunction::ProfileFunction ( Kind  kind,
const char *  name,
const Function function,
const intptr_t  table_index 
)

Definition at line 56 of file profiler_service.cc.

60 : kind_(kind),
61 name_(name),
62 function_(Function::ZoneHandle(function.ptr())),
63 table_index_(table_index),
64 profile_codes_(0),
65 source_position_ticks_(0),
66 exclusive_ticks_(0),
67 inclusive_ticks_(0),
68 inclusive_serial_(-1) {
69 ASSERT((kind_ != kDartFunction) || !function_.IsNull());
70 ASSERT((kind_ != kDartFunction) || (table_index_ >= 0));
71 ASSERT(profile_codes_.length() == 0);
72}
intptr_t length() const
ObjectPtr ptr() const
Definition object.h:332
bool IsNull() const
Definition object.h:363
static Object & ZoneHandle()
Definition object.h:419
const Function * function() const
intptr_t table_index() const
const char * name() const
#define ASSERT(E)

Member Function Documentation

◆ exclusive_ticks()

intptr_t dart::ProfileFunction::exclusive_ticks ( ) const
inline

Definition at line 169 of file profiler_service.h.

169{ return exclusive_ticks_; }

◆ function()

const Function * dart::ProfileFunction::function ( ) const
inline

Definition at line 158 of file profiler_service.h.

158{ return &function_; }

◆ GetSinglePosition()

bool dart::ProfileFunction::GetSinglePosition ( ProfileFunctionSourcePosition pfsp)

Definition at line 230 of file profiler_service.cc.

230 {
231 if (pfsp == nullptr) {
232 return false;
233 }
234 if (source_position_ticks_.length() != 1) {
235 return false;
236 }
237 *pfsp = source_position_ticks_[0];
238 return true;
239}

◆ GetSourcePosition()

const ProfileFunctionSourcePosition & dart::ProfileFunction::GetSourcePosition ( intptr_t  i) const
inline

Definition at line 191 of file profiler_service.h.

191 {
192 return source_position_ticks_.At(i);
193 }

◆ IncInclusiveTicks()

void dart::ProfileFunction::IncInclusiveTicks ( )
inline

Definition at line 172 of file profiler_service.h.

172{ inclusive_ticks_++; }

◆ inclusive_ticks()

intptr_t dart::ProfileFunction::inclusive_ticks ( ) const
inline

Definition at line 170 of file profiler_service.h.

170{ return inclusive_ticks_; }

◆ is_visible()

bool dart::ProfileFunction::is_visible ( ) const

Definition at line 99 of file profiler_service.cc.

99 {
100 if (function_.IsNull()) {
101 // Some synthetic function.
102 return true;
103 }
104 return FLAG_show_invisible_frames || function_.is_visible();
105}
static bool is_visible(FunctionPtr f)
Definition object.h:4163

◆ kind()

Kind dart::ProfileFunction::kind ( ) const
inline

Definition at line 167 of file profiler_service.h.

167{ return kind_; }

◆ KindToCString()

const char * dart::ProfileFunction::KindToCString ( Kind  kind)
static

Definition at line 162 of file profiler_service.cc.

162 {
163 switch (kind) {
164 case kDartFunction:
165 return "Dart";
166 case kNativeFunction:
167 return "Native";
168 case kTagFunction:
169 return "Tag";
170 case kStubFunction:
171 return "Stub";
172 case kUnknownFunction:
173 return "Collected";
174 default:
176 return "";
177 }
178}
#define UNIMPLEMENTED

◆ name()

const char * dart::ProfileFunction::name ( ) const
inline

Definition at line 151 of file profiler_service.h.

151 {
152 ASSERT(name_ != nullptr);
153 return name_;
154 }

◆ Name()

const char * dart::ProfileFunction::Name ( ) const

Definition at line 74 of file profiler_service.cc.

74 {
75 if (name_ != nullptr) {
76 return name_;
77 }
78 ASSERT(!function_.IsNull());
79 const String& func_name =
81 return func_name.ToCString();
82}
StringPtr QualifiedUserVisibleName() const
Definition object.cc:11081
static Object & Handle()
Definition object.h:407

◆ NumSourcePositions()

intptr_t dart::ProfileFunction::NumSourcePositions ( ) const
inline

Definition at line 187 of file profiler_service.h.

187 {
188 return source_position_ticks_.length();
189 }

◆ PrintToJSONArray()

void dart::ProfileFunction::PrintToJSONArray ( JSONArray functions,
bool  print_only_ids = false 
)

Definition at line 186 of file profiler_service.cc.

187 {
188 if (print_only_ids) {
189 JSONObject obj(functions);
190 if (kind() == kDartFunction) {
191 ASSERT(!function_.IsNull());
192 obj.AddProperty("type", "@Object");
193 function_.AddFunctionServiceId(obj);
194 } else {
195 PrintToJSONObject(&obj);
196 }
197 return;
198 }
199 JSONObject obj(functions);
200 obj.AddProperty("type", "ProfileFunction");
201 obj.AddProperty("kind", KindToCString(kind()));
202 obj.AddProperty("inclusiveTicks", inclusive_ticks());
203 obj.AddProperty("exclusiveTicks", exclusive_ticks());
204 obj.AddProperty("resolvedUrl", ResolvedScriptUrl());
205 if (kind() == kDartFunction) {
206 ASSERT(!function_.IsNull());
207 obj.AddProperty("function", function_);
208 } else {
209 JSONObject func(&obj, "function");
210 PrintToJSONObject(&func);
211 }
212 {
213 JSONArray codes(&obj, "_codes");
214 for (intptr_t i = 0; i < profile_codes_.length(); i++) {
215 intptr_t code_index = profile_codes_[i];
216 codes.AddValue(code_index);
217 }
218 }
219}
void AddFunctionServiceId(const JSONObject &obj) const
intptr_t inclusive_ticks() const
const char * ResolvedScriptUrl() const
intptr_t exclusive_ticks() const
static const char * KindToCString(Kind kind)

◆ ResolvedScriptUrl()

const char * dart::ProfileFunction::ResolvedScriptUrl ( ) const

Definition at line 84 of file profiler_service.cc.

84 {
85 if (function_.IsNull()) {
86 return nullptr;
87 }
88 const Script& script = Script::Handle(function_.script());
89 if (script.IsNull()) {
90 return nullptr;
91 }
92 const String& uri = String::Handle(script.resolved_url());
93 if (uri.IsNull()) {
94 return nullptr;
95 }
96 return uri.ToCString();
97}
ScriptPtr script() const
Definition object.cc:10939

◆ table_index()

intptr_t dart::ProfileFunction::table_index ( ) const
inline

Definition at line 165 of file profiler_service.h.

165{ return table_index_; }

◆ Tick()

void dart::ProfileFunction::Tick ( bool  exclusive,
intptr_t  inclusive_serial,
TokenPosition  token_position 
)

Definition at line 107 of file profiler_service.cc.

109 {
110 if (exclusive) {
111 exclusive_ticks_++;
112 TickSourcePosition(token_position, exclusive);
113 }
114 // Fall through and tick inclusive count too.
115 if (inclusive_serial_ == inclusive_serial) {
116 // Already ticked.
117 return;
118 }
119 inclusive_serial_ = inclusive_serial;
120 inclusive_ticks_++;
121 TickSourcePosition(token_position, false);
122}
void TickSourcePosition(TokenPosition token_position, bool exclusive)

◆ TickSourcePosition()

void dart::ProfileFunction::TickSourcePosition ( TokenPosition  token_position,
bool  exclusive 
)

Definition at line 124 of file profiler_service.cc.

125 {
126 intptr_t i = 0;
127 for (; i < source_position_ticks_.length(); i++) {
128 ProfileFunctionSourcePosition& position = source_position_ticks_[i];
129 const intptr_t cmp =
130 TokenPosition::CompareForSorting(position.token_pos(), token_position);
131 if (cmp > 0) {
132 // Found insertion point.
133 break;
134 } else if (cmp == 0) {
135 if (FLAG_trace_profiler_verbose) {
136 OS::PrintErr("Ticking source position %s %s\n",
137 exclusive ? "exclusive" : "inclusive",
138 token_position.ToCString());
139 }
140 // Found existing position, tick it.
141 position.Tick(exclusive);
142 return;
143 }
144 }
145
146 // Add new one, sorted by token position value.
147 ProfileFunctionSourcePosition pfsp(token_position);
148 if (FLAG_trace_profiler_verbose) {
149 OS::PrintErr("Ticking source position %s %s\n",
150 exclusive ? "exclusive" : "inclusive",
151 token_position.ToCString());
152 }
153 pfsp.Tick(exclusive);
154
155 if (i < source_position_ticks_.length()) {
156 source_position_ticks_.InsertAt(i, pfsp);
157 } else {
158 source_position_ticks_.Add(pfsp);
159 }
160}
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
static intptr_t CompareForSorting(const TokenPosition &a, const TokenPosition &b)

Friends And Related Symbol Documentation

◆ ProfileBuilder

friend class ProfileBuilder
friend

Definition at line 212 of file profiler_service.h.

◆ ProfileCode

friend class ProfileCode
friend

Definition at line 211 of file profiler_service.h.


The documentation for this class was generated from the following files: