Author: [email protected]
Date: Thu May 14 03:29:48 2009
New Revision: 1946
Modified:
branches/bleeding_edge/src/codegen.cc
branches/bleeding_edge/src/compiler.cc
branches/bleeding_edge/src/ia32/codegen-ia32.cc
branches/bleeding_edge/src/rewriter.cc
branches/bleeding_edge/src/usage-analyzer.cc
branches/bleeding_edge/src/v8-counters.h
Log:
Add more detailed timers of the various compilation passes. The
aggregate compilation time timer is the same as it was before.
Review URL: http://codereview.chromium.org/115344
Modified: branches/bleeding_edge/src/codegen.cc
==============================================================================
--- branches/bleeding_edge/src/codegen.cc (original)
+++ branches/bleeding_edge/src/codegen.cc Thu May 14 03:29:48 2009
@@ -161,7 +161,9 @@
return Handle<Code>::null();
}
- // Allocate and install the code.
+ // Allocate and install the code. Time the rest of this function as
+ // code creation.
+ HistogramTimerScope timer(&Counters::code_creation);
CodeDesc desc;
cgen.masm()->GetCode(&desc);
ScopeInfo<> sinfo(flit->scope());
Modified: branches/bleeding_edge/src/compiler.cc
==============================================================================
--- branches/bleeding_edge/src/compiler.cc (original)
+++ branches/bleeding_edge/src/compiler.cc Thu May 14 03:29:48 2009
@@ -52,12 +52,15 @@
return Handle<Code>::null();
}
- // Compute top scope and allocate variables. For lazy compilation
- // the top scope only contains the single lazily compiled function,
- // so this doesn't re-allocate variables repeatedly.
- Scope* top = literal->scope();
- while (top->outer_scope() != NULL) top = top->outer_scope();
- top->AllocateVariables(context);
+ {
+ // Compute top scope and allocate variables. For lazy compilation
+ // the top scope only contains the single lazily compiled function,
+ // so this doesn't re-allocate variables repeatedly.
+ HistogramTimerScope timer(&Counters::variable_allocation);
+ Scope* top = literal->scope();
+ while (top->outer_scope() != NULL) top = top->outer_scope();
+ top->AllocateVariables(context);
+ }
#ifdef DEBUG
if (Bootstrapper::IsActive() ?
Modified: branches/bleeding_edge/src/ia32/codegen-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/ia32/codegen-ia32.cc (original)
+++ branches/bleeding_edge/src/ia32/codegen-ia32.cc Thu May 14 03:29:48 2009
@@ -116,6 +116,7 @@
JumpTarget::set_compiling_deferred_code(false);
{
+ HistogramTimerScope codegen_timer(&Counters::code_generation);
CodeGenState state(this);
// Entry:
@@ -318,6 +319,7 @@
if (HasStackOverflow()) {
ClearDeferred();
} else {
+ HistogramTimerScope
deferred_timer(&Counters::deferred_code_generation);
JumpTarget::set_compiling_deferred_code(true);
ProcessDeferred();
JumpTarget::set_compiling_deferred_code(false);
Modified: branches/bleeding_edge/src/rewriter.cc
==============================================================================
--- branches/bleeding_edge/src/rewriter.cc (original)
+++ branches/bleeding_edge/src/rewriter.cc Thu May 14 03:29:48 2009
@@ -803,6 +803,7 @@
bool Rewriter::Process(FunctionLiteral* function) {
+ HistogramTimerScope timer(&Counters::rewriting);
Scope* scope = function->scope();
if (scope->is_function_scope()) return true;
@@ -823,6 +824,7 @@
ZoneList<Statement*>* body = function->body();
if (FLAG_optimize_ast && !body->is_empty()) {
+ HistogramTimerScope timer(&Counters::ast_optimization);
AstOptimizer optimizer(function->name());
optimizer.Optimize(body);
if (optimizer.HasStackOverflow()) {
Modified: branches/bleeding_edge/src/usage-analyzer.cc
==============================================================================
--- branches/bleeding_edge/src/usage-analyzer.cc (original)
+++ branches/bleeding_edge/src/usage-analyzer.cc Thu May 14 03:29:48 2009
@@ -444,6 +444,7 @@
bool AnalyzeVariableUsage(FunctionLiteral* lit) {
if (!FLAG_usage_computation) return true;
+ HistogramTimerScope timer(&Counters::usage_analysis);
return UsageComputer::Traverse(lit);
}
Modified: branches/bleeding_edge/src/v8-counters.h
==============================================================================
--- branches/bleeding_edge/src/v8-counters.h (original)
+++ branches/bleeding_edge/src/v8-counters.h Thu May 14 03:29:48 2009
@@ -32,16 +32,27 @@
namespace v8 { namespace internal {
-#define HISTOGRAM_TIMER_LIST(HT) \
- HT(gc_compactor, V8.GCCompactor) /* GC Compactor time */ \
- HT(gc_scavenger, V8.GCScavenger) /* GC Scavenger time */ \
- HT(gc_context, V8.GCContext) /* GC context cleanup time */ \
- HT(compile, V8.Compile) /* Compile time*/ \
- HT(compile_eval, V8.CompileEval) /* Eval compile time */ \
- HT(compile_lazy, V8.CompileLazy) /* Lazy compile time */ \
- HT(parse, V8.Parse) /* Parse time */ \
- HT(parse_lazy, V8.ParseLazy) /* Lazy parse time */ \
- HT(pre_parse, V8.PreParse) /* Pre-parse time */
+#define HISTOGRAM_TIMER_LIST(HT) \
+ /* Garbage collection timers. */ \
+ HT(gc_compactor, V8.GCCompactor) \
+ HT(gc_scavenger, V8.GCScavenger) \
+ HT(gc_context, V8.GCContext) /* GC context cleanup time */ \
+ /* Parsing timers. */ \
+ HT(parse, V8.Parse) \
+ HT(parse_lazy, V8.ParseLazy) \
+ HT(pre_parse, V8.PreParse) \
+ /* Total compilation times. */ \
+ HT(compile, V8.Compile) \
+ HT(compile_eval, V8.CompileEval) \
+ HT(compile_lazy, V8.CompileLazy) \
+ /* Individual compiler passes. */ \
+ HT(rewriting, V8.Rewriting) \
+ HT(usage_analysis, V8.UsageAnalysis) \
+ HT(variable_allocation, V8.VariableAllocation) \
+ HT(ast_optimization, V8.ASTOptimization) \
+ HT(code_generation, V8.CodeGeneration) \
+ HT(deferred_code_generation, V8.DeferredCodeGeneration) \
+ HT(code_creation, V8.CodeCreation)
// WARNING: STATS_COUNTER_LIST_* is a very large macro that is causing MSVC
// Intellisense to crash. It was broken into two macros (each of length 40
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---