Chromium Code Reviews| Index: src/arguments.h |
| diff --git a/src/arguments.h b/src/arguments.h |
| index 481c1ca5e67bdcabc5e91b5068539e73ddd710a2..85a244ed7d99d3a122fca0d10590e68095b4b7e8 100644 |
| --- a/src/arguments.h |
| +++ b/src/arguments.h |
| @@ -272,14 +272,29 @@ double ClobberDoubleRegisters(double x1, double x2, double x3, double x4); |
| #endif |
| -#define RUNTIME_FUNCTION_RETURNS_TYPE(Type, Name) \ |
| -static INLINE(Type __RT_impl_##Name(Arguments args, Isolate* isolate)); \ |
| -Type Name(int args_length, Object** args_object, Isolate* isolate) { \ |
| - CLOBBER_DOUBLE_REGISTERS(); \ |
| - Arguments args(args_length, args_object); \ |
| - return __RT_impl_##Name(args, isolate); \ |
| -} \ |
| -static Type __RT_impl_##Name(Arguments args, Isolate* isolate) |
| +#define RUNTIME_FUNCTION_RETURNS_TYPE(Type, Name) \ |
| + static INLINE(Type __RT_impl_##Name(Arguments args, Isolate* isolate)); \ |
| + Type Name(int args_length, Object** args_object, Isolate* isolate) { \ |
| + CLOBBER_DOUBLE_REGISTERS(); \ |
| + RuntimeCallStats* stats = isolate->runtime_state()->runtime_call_stats(); \ |
| + stats->Count_##Name++; \ |
| + Arguments args(args_length, args_object); \ |
| + base::ElapsedTimer timer; \ |
| + bool timing = false; \ |
| + if (FLAG_runtime_call_stats && !stats->in_runtime_call) { \ |
| + stats->in_runtime_call = true; \ |
| + timing = true; \ |
| + timer.Start(); \ |
| + } \ |
| + Type value = __RT_impl_##Name(args, isolate); \ |
| + if (FLAG_runtime_call_stats && timing) { \ |
|
Benedikt Meurer
2016/01/22 09:41:56
Checking timing here should be enough.
|
| + stats->in_runtime_call = false; \ |
| + isolate->runtime_state()->runtime_call_stats()->Time_##Name += \ |
| + timer.Elapsed(); \ |
| + } \ |
| + return value; \ |
| + } \ |
| + static Type __RT_impl_##Name(Arguments args, Isolate* isolate) |
| #define RUNTIME_FUNCTION(Name) RUNTIME_FUNCTION_RETURNS_TYPE(Object*, Name) |