230 {
231#if !defined(PRODUCT)
232 if (thread->isolate_group()->debugger()->IsDebugging(thread,
function)) {
233
234
235
237
238
239
240
241
242 if (thread->isolate_group()->optimization_counter_threshold() < 2) {
244 }
245 return false;
246 }
247#endif
248 if (
function.deoptimization_counter() >=
249 FLAG_max_deoptimization_counter_threshold) {
250 if (FLAG_trace_failed_optimization_attempts ||
251 FLAG_stop_on_excessive_deoptimization) {
252 THR_Print(
"Too many deoptimizations: %s\n",
253 function.ToFullyQualifiedCString());
254 if (FLAG_stop_on_excessive_deoptimization) {
255 FATAL(
"Stop on excessive deoptimization");
256 }
257 }
258
259
261 function.SetUsageCounter(INT32_MIN);
262 return false;
263 }
264 if (FLAG_optimization_filter != nullptr) {
265
266
267 char* save_ptr;
269 intptr_t
len = strlen(FLAG_optimization_filter) + 1;
270 char* filter =
new char[
len];
271 strncpy(filter, FLAG_optimization_filter, len);
272 char* token = strtok_r(filter, ",", &save_ptr);
273 bool found = false;
274 while (token != nullptr) {
276 found = true;
277 break;
278 }
279 token = strtok_r(nullptr, ",", &save_ptr);
280 }
281 delete[] filter;
282 if (!found) {
283 function.SetUsageCounter(INT32_MIN);
284 return false;
285 }
286 }
288
289
290 if (FLAG_trace_failed_optimization_attempts) {
292 }
293 function.SetUsageCounter(INT32_MIN);
294 return false;
295 }
296 return true;
297}
Dart_NativeFunction function
const char *const function_name