diff options
author | Mathieu Chartier <mathieuc@google.com> | 2015-04-03 11:21:55 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2015-04-06 10:44:37 -0700 |
commit | bb87e0f1a52de656bc77cb01cb887e51a0e5198b (patch) | |
tree | 113f014c6e20fab3e936a3ac05f9f738639541f6 /runtime/debugger.h | |
parent | e57fc0f0260fcb1d08cbb720ec95c04c0f394b91 (diff) | |
download | art-bb87e0f1a52de656bc77cb01cb887e51a0e5198b.zip art-bb87e0f1a52de656bc77cb01cb887e51a0e5198b.tar.gz art-bb87e0f1a52de656bc77cb01cb887e51a0e5198b.tar.bz2 |
Refactor and improve GC root handling
Changed GcRoot to use compressed references. Changed root visiting to
use virtual functions instead of function pointers. Changed root visting
interface to be an array of roots instead of a single root at a time.
Added buffered root marking helper to avoid dispatch overhead.
Root marking seems a bit faster on EvaluateAndApplyChanges due to batch
marking. Pause times unaffected.
Mips64 is untested but might work, maybe.
Before:
MarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us
After:
MarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us
Bug: 19264997
Change-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca
Diffstat (limited to 'runtime/debugger.h')
-rw-r--r-- | runtime/debugger.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/runtime/debugger.h b/runtime/debugger.h index 4f4a781..62eda62 100644 --- a/runtime/debugger.h +++ b/runtime/debugger.h @@ -81,7 +81,7 @@ struct DebugInvokeReq { Mutex lock DEFAULT_MUTEX_ACQUIRED_AFTER; ConditionVariable cond GUARDED_BY(lock); - void VisitRoots(RootCallback* callback, void* arg, const RootInfo& root_info) + void VisitRoots(RootVisitor* visitor, const RootInfo& root_info) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); private: @@ -117,7 +117,7 @@ class SingleStepControl { return dex_pcs_; } - void VisitRoots(RootCallback* callback, void* arg, const RootInfo& root_info) + void VisitRoots(RootVisitor* visitor, const RootInfo& root_info) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); void AddDexPc(uint32_t dex_pc); @@ -648,7 +648,7 @@ class Dbg { static void DdmSendChunkV(uint32_t type, const iovec* iov, int iov_count) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); - static void VisitRoots(RootCallback* callback, void* arg) + static void VisitRoots(RootVisitor* visitor) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); /* |