From 18fba346582c08d81aa96d9508c0e935bad5f36f Mon Sep 17 00:00:00 2001 From: buzbee Date: Wed, 19 Jan 2011 15:31:15 -0800 Subject: Support traceview-style profiling in all builds This change builds on an earlier bccheng change that allowed JIT'd code to avoid reverting to the debug portable interpeter when doing traceview-style method profiling. That CL introduced a new traceview build (libdvm_traceview) because the performance delta was too great to enable the capability for all builds. In this CL, we remove the libdvm_traceview build and provide full-speed method tracing in all builds. This is done by introducing "_PROF" versions of invoke and return templates used by the JIT. Normally, these templates are not used, and performace in unaffected. However, when method profiling is enabled, all existing translation are purged and new translations are created using the _PROF templates. These templates introduce a smallish performance penalty above and beyond the actual tracing cost, but again are only used when tracing has been enabled. Strictly speaking, there is a slight burden that is placed on invokes and returns in the non-tracing case - on the order of an additional 3 or 4 cycles per invoke/return. Those operations are already heavyweight enough that I was unable to measure the added cost in benchmarks. Change-Id: Ic09baf4249f1e716e136a65458f4e06cea35fc18 --- vm/compiler/Compiler.h | 1 + 1 file changed, 1 insertion(+) (limited to 'vm/compiler/Compiler.h') diff --git a/vm/compiler/Compiler.h b/vm/compiler/Compiler.h index cd9d21bb3..d29520d2e 100644 --- a/vm/compiler/Compiler.h +++ b/vm/compiler/Compiler.h @@ -87,6 +87,7 @@ typedef struct JitTranslationInfo { bool discardResult; // Used for debugging divergence and IC patching bool methodCompilationAborted; // Cannot compile the whole method Thread *requestingThread; // For debugging purpose + int cacheVersion; // Used to identify stale trace requests } JitTranslationInfo; typedef enum WorkOrderKind { -- cgit v1.2.3