2318 {
2319 ASSERT(&variants_ == &call_->targets_);
2320
2322 for (intptr_t var_idx = 0; var_idx < variants_.
length(); ++var_idx) {
2324 if (variants_.
length() > FLAG_max_polymorphic_checks) {
2325 non_inlined_variants_->
Add(
info);
2326 continue;
2327 }
2328
2331
2332
2333
2334
2335 const bool try_harder = (var_idx >= variants_.
length() - 2) &&
2336 non_inlined_variants_->
length() == 0;
2337
2338 intptr_t
size =
target.optimized_instruction_count();
2339 bool small = (
size != 0 &&
size < FLAG_inlining_size_threshold);
2340
2341
2342
2343
2344 if (!try_harder &&
count < (total >> 5)) {
2347 non_inlined_variants_->
Add(
info);
2348 continue;
2349 }
2350
2351
2352 if (CheckInlinedDuplicate(
target)) {
2354 "duplicate already inlined"));
2356 continue;
2357 }
2358
2359
2360
2361
2362 if (!try_harder &&
count < (total >> (small ? 4 : 3))) {
2365 non_inlined_variants_->
Add(&variants_[var_idx]);
2366 continue;
2367 }
2368
2369
2370
2371
2372 if (CheckNonInlinedDuplicate(
target)) {
2375 non_inlined_variants_->
Add(&variants_[var_idx]);
2376 continue;
2377 }
2378
2379
2380 if (TryInliningPoly(*
info)) {
2382 inlined_variants_.
Add(&variants_[var_idx]);
2383 } else {
2386 non_inlined_variants_->
Add(&variants_[var_idx]);
2387 }
2388 }
2389
2390
2391 if (inlined_variants_.
is_empty())
return false;
2392
2393
2394
2395 TargetEntryInstr* entry = BuildDecisionGraph();
2397 return true;
2398}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
TargetInfo * TargetAt(int i) const
void Add(CidRange *target)
void ReplaceCall(BlockEntryInstr *callee_entry)
intptr_t total_call_count()
#define TRACE_INLINING(statement)
static void TracePolyInlining(const CallTargets &targets, intptr_t idx, intptr_t total, const char *message)
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size